diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3860f1db9..0e7f4926a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,4 +1,4 @@ -image: elixir:1.9.4 +image: git.pleroma.social:5050/pleroma/pleroma/ci-base variables: &global_variables POSTGRES_DB: pleroma_test @@ -26,12 +26,7 @@ stages: before_script: - echo $MIX_ENV - rm -rf _build/*/lib/pleroma - - apt-get update && apt-get install -y cmake - - mix local.hex --force - - mix local.rebar --force - mix deps.get - - apt-get -qq update - - apt-get install -y libmagic-dev after_script: - rm -rf _build/*/lib/pleroma @@ -39,7 +34,8 @@ after_script: build: stage: build only: - changes: + changes: &build_changes_policy + - ".gitlab-ci.yml" - "**/*.ex" - "**/*.exs" - "mix.lock" @@ -50,6 +46,7 @@ spec-build: stage: test only: changes: + - ".gitlab-ci.yml" - "lib/pleroma/web/api_spec/**/*.ex" - "lib/pleroma/web/api_spec.ex" artifacts: @@ -64,7 +61,7 @@ benchmark: variables: MIX_ENV: benchmark services: - - name: postgres:9.6 + - name: postgres:9.6-alpine alias: postgres command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] script: @@ -75,20 +72,16 @@ benchmark: unit-testing: stage: test only: - changes: - - "**/*.ex" - - "**/*.exs" - - "mix.lock" + changes: *build_changes_policy cache: &testing_cache_policy <<: *global_cache_policy policy: pull services: - - name: postgres:13 + - name: postgres:13-alpine alias: postgres command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] script: - - apt-get update && apt-get install -y libimage-exiftool-perl ffmpeg - mix ecto.create - mix ecto.migrate - mix coveralls --preload-modules @@ -96,17 +89,15 @@ unit-testing: unit-testing-erratic: stage: test retry: 2 + allow_failure: true only: - changes: - - "**/*.ex" - - "**/*.exs" - - "mix.lock" + changes: *build_changes_policy cache: &testing_cache_policy <<: *global_cache_policy policy: pull services: - - name: postgres:13 + - name: postgres:13-alpine alias: postgres command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] script: @@ -133,10 +124,7 @@ unit-testing-erratic: unit-testing-rum: stage: test only: - changes: - - "**/*.ex" - - "**/*.exs" - - "mix.lock" + changes: *build_changes_policy cache: *testing_cache_policy services: - name: minibikini/postgres-with-rum:12 @@ -146,46 +134,42 @@ unit-testing-rum: <<: *global_variables RUM_ENABLED: "true" script: - - apt-get update && apt-get install -y libimage-exiftool-perl ffmpeg - mix ecto.create - mix ecto.migrate - "mix ecto.migrate --migrations-path priv/repo/optional_migrations/rum_indexing/" - mix test --preload-modules lint: - image: elixir:1.12 + image: ¤t_elixir elixir:1.12-alpine stage: test only: - changes: - - "**/*.ex" - - "**/*.exs" - - "mix.lock" + changes: *build_changes_policy cache: *testing_cache_policy + before_script: ¤t_bfr_script + - apk update + - apk add build-base cmake file-dev git openssl + - mix local.hex --force + - mix local.rebar --force + - mix deps.get script: - mix format --check-formatted analysis: stage: test only: - changes: - - "**/*.ex" - - "**/*.exs" - - "mix.lock" + changes: *build_changes_policy cache: *testing_cache_policy script: - mix credo --strict --only=warnings,todo,fixme,consistency,readability cycles: + image: *current_elixir stage: test - image: elixir:1.11 only: - changes: - - "**/*.ex" - - "**/*.exs" - - "mix.lock" + changes: *build_changes_policy cache: {} + before_script: *current_bfr_script script: - - mix deps.get - mix compile - mix xref graph --format cycles --label compile | awk '{print $0} END{exit ($0 != "No cycles found")}' @@ -305,7 +289,7 @@ amd64-musl: cache: *release-cache variables: *release-variables before_script: &before-release-musl - - apk add git gcc g++ musl-dev make cmake file-dev + - apk add git build-base cmake file-dev openssl - echo "import Mix.Config" > config/prod.secret.exs - mix local.hex --force - mix local.rebar --force diff --git a/CHANGELOG.md b/CHANGELOG.md index 4dcebb16c..f2ed9bbad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,21 +12,61 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Changed - Allow users to remove their emails if instance does not need email to register +- Uploadfilter `Pleroma.Upload.Filter.Exiftool` has been renamed to `Pleroma.Upload.Filter.Exiftool.StripLocation` ### Added - `activeMonth` and `activeHalfyear` fields in NodeInfo usage.users object - Experimental support for Finch. Put `config :tesla, :adapter, {Tesla.Adapter.Finch, name: MyFinch}` in your secrets file to use it. Reverse Proxy will still use Hackney. +- `ForceMentionsInPostContent` MRF policy - AdminAPI: allow moderators to manage reports, users, invites, and custom emojis - AdminAPI: restrict moderators to access sensitive data: change user credentials, get password reset token, read private statuses and chats, etc +- PleromaAPI: Add remote follow API endpoint at `POST /api/v1/pleroma/remote_interaction` +- MastoAPI: Add `GET /api/v1/accounts/lookup` +- MastoAPI: Profile Directory support +- MastoAPI: Support v2 Suggestions (handpicked accounts only) +- Ability to log slow Ecto queries by configuring `:pleroma, :telemetry, :slow_queries_logging` +- Added Phoenix LiveDashboard at `/phoenix/live_dashboard` +- Added `/manifest.json` for progressive web apps. +- MastoAPI: Support for `birthday` and `show_birthday` field in `/api/v1/accounts/update_credentials`. +- Configuration: Add `birthday_required` and `birthday_min_age` settings to provide a way to require users to enter their birth date. +- PleromaAPI: Add `GET /api/v1/pleroma/birthdays` API endpoint +- Make backend-rendered pages translatable. This includes emails. Pages returned as a HTTP response are translated using the language specified in the `userLanguage` cookie, or the `Accept-Language` header. Emails are translated using the `language` field when registering. This language can be changed by `PATCH /api/v1/accounts/update_credentials` with the `language` field. +- Uploadfilter `Pleroma.Upload.Filter.Exiftool.ReadDescription` returns description values to the FE so they can pre fill the image description field - Added move account API ### Fixed - Subscription(Bell) Notifications: Don't create from Pipeline Ingested replies - Handle Reject for already-accepted Follows properly - Display OpenGraph data on alternative notice routes. +- Fix replies count for remote replies +- Fixed hashtags disappearing from the end of lines when Markdown is enabled +- ChatAPI: Add link headers +- Limited number of search results to 40 to prevent DoS attacks +- ActivityPub: fixed federation of attachment dimensions +- Fixed benchmarks +- Elixir 1.13 support +- Fixed crash when pinned_objects is nil +- Fixed slow timelines when there are a lot of deactivated users +- Fixed account deletion API ### Removed +## 2.4.3 - 2022-05-06 + +### Security +- Private `/objects/` and `/activities/` leaking if cached by authenticated user +- SweetXML library DTD bomb + +## 2.4.2 - 2022-01-10 + +### Fixed +- Federation issues caused by HTTP pool checkout timeouts +- Compatibility with Elixir 1.13 + +### Upgrade notes + +1. Restart Pleroma + ## 2.4.1 - 2021-08-29 ### Changed @@ -60,6 +100,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Improved Twittercard and OpenGraph meta tag generation including thumbnails and image dimension metadata when available. - AdminAPI: sort users so the newest are at the top. - ActivityPub Client-to-Server(C2S): Limitation on the type of Activity/Object are lifted as they are now passed through ObjectValidators +- MRF (`AntiFollowbotPolicy`): Bot accounts are now also considered followbots. Users can still allow bots to follow them by first following the bot. ### Added diff --git a/COPYING b/COPYING index dd25f1d81..4c2a28aa9 100644 --- a/COPYING +++ b/COPYING @@ -1,11 +1,11 @@ -Unless otherwise stated this repository is copyright © 2017-2021 +Unless otherwise stated this repository is copyright © 2017-2022 Pleroma Authors , and is distributed under The GNU Affero General Public License Version 3, you should have received a copy of the license file as AGPL-3. --- -Files inside docs directory are copyright © 2021 Pleroma Authors +Files inside docs directory are copyright © 2022 Pleroma Authors , and are distributed under the Creative Commons Attribution 4.0 International license, you should have received a copy of the license file as CC-BY-4.0. @@ -30,7 +30,7 @@ priv/static/images/pleroma-fox-tan-shy.png --- -The following files are copyright © 2017-2020 Pleroma Authors +The following files are copyright © 2017-2022 Pleroma Authors , and are distributed under the Creative Commons Attribution-ShareAlike 4.0 International license, you should have received a copy of the license file as CC-BY-SA-4.0. diff --git a/ci/Dockerfile b/ci/Dockerfile new file mode 100644 index 000000000..e6a8b438c --- /dev/null +++ b/ci/Dockerfile @@ -0,0 +1,7 @@ +FROM elixir:1.9.4 + +RUN apt-get update &&\ + apt-get install -y libmagic-dev cmake libimage-exiftool-perl ffmpeg &&\ + mix local.hex --force &&\ + mix local.rebar --force + diff --git a/ci/build_and_push.sh b/ci/build_and_push.sh new file mode 100755 index 000000000..484cc2643 --- /dev/null +++ b/ci/build_and_push.sh @@ -0,0 +1 @@ +docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t git.pleroma.social:5050/pleroma/pleroma/ci-base:latest --push . diff --git a/config/config.exs b/config/config.exs index 2bde5b826..0fc959807 100644 --- a/config/config.exs +++ b/config/config.exs @@ -149,8 +149,6 @@ config :pleroma, Pleroma.Web.Endpoint, ] # Configures Elixir's Logger -config :logger, truncate: 65536 - config :logger, :console, level: :debug, format: "\n$time $metadata[$level] $message\n", @@ -189,6 +187,7 @@ config :pleroma, :instance, email: "example@example.com", notify_email: "noreply@example.com", description: "Pleroma: An efficient and flexible fediverse server", + short_description: "", background_image: "/images/city.jpg", instance_thumbnail: "/instance/thumbnail.jpeg", limit: 5_000, @@ -258,7 +257,11 @@ config :pleroma, :instance, show_reactions: true, password_reset_token_validity: 60 * 60 * 24, profile_directory: true, - privileged_staff: false + privileged_staff: false, + max_endorsed_users: 20, + birthday_required: false, + birthday_min_age: 0, + max_media_attachments: 1_000 config :pleroma, :welcome, direct_message: [ @@ -856,13 +859,6 @@ config :pleroma, ConcurrentLimiter, [ {Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy, [max_running: 5, max_waiting: 5]} ] -config :pleroma, :telemetry, - slow_queries_logging: [ - enabled: false, - min_duration: 500_000, - exclude_sources: [nil, "oban_jobs"] - ] - # Import environment specific config. This must remain at the bottom # of this file so it overrides the configuration defined above. import_config "#{Mix.env()}.exs" diff --git a/config/description.exs b/config/description.exs index ea3f34abe..c6c6b1b5d 100644 --- a/config/description.exs +++ b/config/description.exs @@ -536,6 +536,15 @@ config :pleroma, :config_description, [ "Very cool instance" ] }, + %{ + key: :short_description, + type: :string, + description: + "Shorter version of instance description. It can be seen on `/api/v1/instance`", + suggestions: [ + "Cool instance" + ] + }, %{ key: :limit, type: :integer, @@ -552,6 +561,14 @@ config :pleroma, :config_description, [ 100_000 ] }, + %{ + key: :max_media_attachments, + type: :integer, + description: "Maximum number of post media attachments", + suggestions: [ + 1_000_000 + ] + }, %{ key: :upload_limit, type: :integer, @@ -742,6 +759,16 @@ config :pleroma, :config_description, [ 3 ] }, + %{ + key: :max_endorsed_users, + type: :integer, + description: "The maximum number of recommended accounts. 0 will disable the feature.", + suggestions: [ + 0, + 1, + 3 + ] + }, %{ key: :autofollowed_nicknames, type: {:list, :string}, @@ -947,6 +974,17 @@ config :pleroma, :config_description, [ type: :boolean, description: "Let moderators access sensitive data (e.g. updating user credentials, get password reset token, delete users, index and read private statuses and chats)" + }, + %{ + key: :birthday_required, + type: :boolean, + description: "Require users to enter their birthday." + }, + %{ + key: :birthday_min_age, + type: :integer, + description: + "Minimum required age for users to create account. Only used if birthday is required." } ] }, @@ -1691,6 +1729,11 @@ config :pleroma, :config_description, [ type: :boolean, description: "Sign object fetches with HTTP signatures" }, + %{ + key: :authorized_fetch_mode, + type: :boolean, + description: "Require HTTP signatures for AP fetches" + }, %{ key: :note_replies_output_limit, type: :integer, @@ -2697,7 +2740,7 @@ config :pleroma, :config_description, [ key: :versions, type: {:list, :atom}, description: "List of TLS version to use", - suggestions: [:tlsv1, ":tlsv1.1", ":tlsv1.2"] + suggestions: [:tlsv1, ":tlsv1.1", ":tlsv1.2", ":tlsv1.3"] } ] } diff --git a/docs/administration/CLI_tasks/instance.md b/docs/administration/CLI_tasks/instance.md index 982b22bf3..88509cf5b 100644 --- a/docs/administration/CLI_tasks/instance.md +++ b/docs/administration/CLI_tasks/instance.md @@ -37,7 +37,8 @@ If any of the options are left unspecified, you will be prompted interactively. - `--static-dir ` - the directory custom public files should be read from (custom emojis, frontend bundle overrides, robots.txt, etc.) - `--listen-ip ` - the ip the app should listen to, defaults to 127.0.0.1 - `--listen-port ` - the port the app should listen to, defaults to 4000 -- `--strip-uploads ` - use ExifTool to strip uploads of sensitive location data +- `--strip-uploads-location ` - use ExifTool to strip uploads of sensitive location data +- `--read-uploads-description ` - use ExifTool to read image descriptions from uploads - `--anonymize-uploads ` - randomize uploaded filenames - `--dedupe-uploads ` - store files based on their hash to reduce data storage requirements if duplicates are uploaded with different filenames - `--skip-release-env` - skip generation the release environment file diff --git a/docs/administration/updating.md b/docs/administration/updating.md index ef2c9218c..01d3b9b0e 100644 --- a/docs/administration/updating.md +++ b/docs/administration/updating.md @@ -17,11 +17,11 @@ su pleroma -s $SHELL -lc "./bin/pleroma_ctl migrate" ## For from source installations (using git) 1. Go to the working directory of Pleroma (default is `/opt/pleroma`) -2. Run `git pull`. This pulls the latest changes from upstream. +2. Run `git pull` [^1]. This pulls the latest changes from upstream. 3. Run `mix deps.get` [^1]. This pulls in any new dependencies. 4. Stop the Pleroma service. 5. Run `mix ecto.migrate` [^1] [^2]. This task performs database migrations, if there were any. 6. Start the Pleroma service. -[^1]: Depending on which install guide you followed (for example on Debian/Ubuntu), you want to run `mix` tasks as `pleroma` user by adding `sudo -Hu pleroma` before the command. +[^1]: Depending on which install guide you followed (for example on Debian/Ubuntu), you want to run `git` and `mix` tasks as `pleroma` user by adding `sudo -Hu pleroma` before the command. [^2]: Prefix with `MIX_ENV=prod` to run it using the production config file. diff --git a/docs/clients.md b/docs/clients.md index 5650ea236..31d2d27c3 100644 --- a/docs/clients.md +++ b/docs/clients.md @@ -116,3 +116,9 @@ Feel free to contact us to be added to this list! - Contact: [@r@freesoftwareextremist.com](https://freesoftwareextremist.com/users/r) - Features: Does not requires JavaScript - Features: MastoAPI + +### Glitch-lily +- Source Code: +- Contact: [@tusooa@kazv.moe](https://kazv.moe/users/tusooa) +- Features: MastoAPI +- Based on [glitch-soc](https://github.com/glitch-soc/mastodon) frontend diff --git a/docs/configuration/cheatsheet.md b/docs/configuration/cheatsheet.md index 40e81cffb..6e13b9622 100644 --- a/docs/configuration/cheatsheet.md +++ b/docs/configuration/cheatsheet.md @@ -18,6 +18,7 @@ To add configuration to your config file, you can copy it from the base config. * `email`: Email used to reach an Administrator/Moderator of the instance. * `notify_email`: Email used for notifications. * `description`: The instance’s description, can be seen in nodeinfo and ``/api/v1/instance``. +* `short_description`: Shorter version of instance description, can be seen on ``/api/v1/instance``. * `limit`: Posts character limit (CW/Subject included in the counter). * `description_limit`: The character limit for image descriptions. * `remote_limit`: Hard character limit beyond which remote posts will be dropped. @@ -125,6 +126,9 @@ To add configuration to your config file, you can copy it from the base config. * `Pleroma.Web.ActivityPub.MRF.ActivityExpirationPolicy`: Sets a default expiration on all posts made by users of the local instance. Requires `Pleroma.Workers.PurgeExpiredActivity` to be enabled for processing the scheduled delections. * `Pleroma.Web.ActivityPub.MRF.ForceBotUnlistedPolicy`: Makes all bot posts to disappear from public timelines. * `Pleroma.Web.ActivityPub.MRF.FollowBotPolicy`: Automatically follows newly discovered users from the specified bot account. Local accounts, locked accounts, and users with "#nobot" in their bio are respected and excluded from being followed. + * `Pleroma.Web.ActivityPub.MRF.AntiFollowbotPolicy`: Drops follow requests from followbots. Users can still allow bots to follow them by first following the bot. + * `Pleroma.Web.ActivityPub.MRF.KeywordPolicy`: Rejects or removes from the federated timeline or replaces keywords. (See [`:mrf_keyword`](#mrf_keyword)). + * `Pleroma.Web.ActivityPub.MRF.ForceMentionsInContent`: Forces every mentioned user to be reflected in the post content. * `transparency`: Make the content of your Message Rewrite Facility settings public (via nodeinfo). * `transparency_exclusions`: Exclude specific instance names from MRF transparency. The use of the exclusions feature will be disclosed in nodeinfo as a boolean value. @@ -624,12 +628,18 @@ This filter replaces the filename (not the path) of an upload. For complete obfu No specific configuration. -#### Pleroma.Upload.Filter.Exiftool +#### Pleroma.Upload.Filter.Exiftool.StripLocation This filter only strips the GPS and location metadata with Exiftool leaving color profiles and attributes intact. No specific configuration. +#### Pleroma.Upload.Filter.Exiftool.ReadDescription + +This filter reads the ImageDescription and iptc:Caption-Abstract fields with Exiftool so clients can prefill the media description field. + +No specific configuration. + #### Pleroma.Upload.Filter.Mogrify * `args`: List of actions for the `mogrify` command like `"strip"` or `["strip", "auto-orient", {"implode", "1"}]`. diff --git a/docs/development/API/admin_api.md b/docs/development/API/admin_api.md index f14081893..c46f83839 100644 --- a/docs/development/API/admin_api.md +++ b/docs/development/API/admin_api.md @@ -1636,3 +1636,117 @@ Returns the content of the document "error": "Could not install frontend" } ``` + +## `GET /api/v1/pleroma/admin/announcements` + +### List announcements + +- Params: `offset`, `limit` + +- Response: JSON, list of announcements + +```json +[ + { + "id": "AHDp0GBdRn1EPN5HN2", + "content": "some content", + "starts_at": null, + "ends_at": null, + "all_day": false, + "published_at": "2022-03-09T02:13:05", + "reactions": [], + "statuses": [], + "tags": [], + "emojis": [], + "updated_at": "2022-03-09T02:13:05" + } +] +``` + +Note that this differs from the Mastodon API variant: Mastodon API only returns *active* announcements, while this returns all. + +## `GET /api/v1/pleroma/admin/announcements/:id` + +### Display one announcement + +- Response: JSON, one announcement + +```json +{ + "id": "AHDp0GBdRn1EPN5HN2", + "content": "some content", + "starts_at": null, + "ends_at": null, + "all_day": false, + "published_at": "2022-03-09T02:13:05", + "reactions": [], + "statuses": [], + "tags": [], + "emojis": [], + "updated_at": "2022-03-09T02:13:05" +} +``` + +## `POST /api/v1/pleroma/admin/announcements` + +### Create an announcement + +- Params: + - `content`: string, required, announcement content + - `starts_at`: datetime, optional, default to null, the time when the announcement will become active (displayed to users); if it is null, the announcement will be active immediately + - `ends_at`: datetime, optional, default to null, the time when the announcement will become inactive (no longer displayed to users); if it is null, the announcement will be active until an admin deletes it + - `all_day`: boolean, optional, default to false, tells the client whether to only display dates for `starts_at` and `ends_at` + +- Response: JSON, created announcement + +```json +{ + "id": "AHDp0GBdRn1EPN5HN2", + "content": "some content", + "starts_at": null, + "ends_at": null, + "all_day": false, + "published_at": "2022-03-09T02:13:05", + "reactions": [], + "statuses": [], + "tags": [], + "emojis": [], + "updated_at": "2022-03-09T02:13:05" +} +``` + +## `PATCH /api/v1/pleroma/admin/announcements/:id` + +### Change an announcement + +- Params: same as `POST /api/v1/pleroma/admin/announcements`, except no param is required. + +- Updates the announcement according to params. Missing params are kept as-is. + +- Response: JSON, updated announcement + +```json +{ + "id": "AHDp0GBdRn1EPN5HN2", + "content": "some content", + "starts_at": null, + "ends_at": null, + "all_day": false, + "published_at": "2022-03-09T02:13:05", + "reactions": [], + "statuses": [], + "tags": [], + "emojis": [], + "updated_at": "2022-03-09T02:13:05" +} +``` + +## `DELETE /api/v1/pleroma/admin/announcements/:id` + +### Delete an announcement + +- Response: JSON, empty object + +```json +{} +``` diff --git a/docs/development/API/differences_in_mastoapi_responses.md b/docs/development/API/differences_in_mastoapi_responses.md index 518aca114..73c46fff8 100644 --- a/docs/development/API/differences_in_mastoapi_responses.md +++ b/docs/development/API/differences_in_mastoapi_responses.md @@ -241,6 +241,7 @@ Additional parameters can be added to the JSON body/Form data: - `discoverable` - if true, external services (search bots) etc. are allowed to index / list the account (regardless of this setting, user will still appear in regular search results). - `actor_type` - the type of this account. - `accepts_chat_messages` - if false, this account will reject all chat messages. +- `language` - user's preferred language for receiving emails (digest, confirmation, etc.) All images (avatar, banner and background) can be reset to the default by sending an empty string ("") instead of a file. @@ -292,6 +293,7 @@ Has these additional parameters (which are the same as in Pleroma-API): - `captcha_token`: optional, contains provider-specific captcha token - `captcha_answer_data`: optional, contains provider-specific captcha data - `token`: invite token required when the registrations aren't public. +- `language`: optional, user's preferred language for receiving emails (digest, confirmation, etc.), default to the language set in the `userLanguage` cookies or `Accept-Language` header. ## Instance @@ -377,12 +379,6 @@ Pleroma is generally compatible with the Mastodon 2.7.2 API, but some newer feat - `GET /api/v1/identity_proofs`: Returns an empty array, `[]` -### Endorsements - -*Added in Mastodon 2.5.0* - -- `GET /api/v1/endorsements`: Returns an empty array, `[]` - ### Featured tags *Added in Mastodon 3.0.0* diff --git a/docs/development/API/pleroma_api.md b/docs/development/API/pleroma_api.md index b67c9c4c7..a92c3c291 100644 --- a/docs/development/API/pleroma_api.md +++ b/docs/development/API/pleroma_api.md @@ -37,7 +37,7 @@ The `/api/v1/pleroma/*` path is backwards compatible with `/api/pleroma/*` (`/ap ``` * Note: Same data as Mastodon API’s `/api/v1/custom_emojis` but in a different format -## `/api/v1/pleroma/follow_import` +## `/api/pleroma/follow_import` ### Imports your follows, for example from a Mastodon CSV file. * Method: `POST` * Authentication: required @@ -46,7 +46,7 @@ The `/api/v1/pleroma/*` path is backwards compatible with `/api/pleroma/*` (`/ap * Response: HTTP 200 on success, 500 on error * Note: Users that can't be followed are silently skipped. -## `/api/v1/pleroma/blocks_import` +## `/api/pleroma/blocks_import` ### Imports your blocks. * Method: `POST` * Authentication: required @@ -54,7 +54,7 @@ The `/api/v1/pleroma/*` path is backwards compatible with `/api/pleroma/*` (`/ap * `list`: STRING or FILE containing a whitespace-separated list of accounts to block * Response: HTTP 200 on success, 500 on error -## `/api/v1/pleroma/mutes_import` +## `/api/pleroma/mutes_import` ### Imports your mutes. * Method: `POST` * Authentication: required @@ -70,7 +70,7 @@ The `/api/v1/pleroma/*` path is backwards compatible with `/api/pleroma/*` (`/ap * Response: Provider specific JSON, the only guaranteed parameter is `type` * Example response: `{"type": "kocaptcha", "token": "whatever", "url": "https://captcha.kotobank.ch/endpoint", "seconds_valid": 300}` -## `/api/v1/pleroma/delete_account` +## `/api/pleroma/delete_account` ### Delete an account * Method `POST` * Authentication: required @@ -79,7 +79,7 @@ The `/api/v1/pleroma/*` path is backwards compatible with `/api/pleroma/*` (`/ap * Response: JSON. Returns `{"status": "success"}` if the deletion was successful, `{"error": "[error message]"}` otherwise * Example response: `{"error": "Invalid password."}` -## `/api/v1/pleroma/disable_account` +## `/api/pleroma/disable_account` ### Disable an account * Method `POST` * Authentication: required @@ -88,21 +88,22 @@ The `/api/v1/pleroma/*` path is backwards compatible with `/api/pleroma/*` (`/ap * Response: JSON. Returns `{"status": "success"}` if the account was successfully disabled, `{"error": "[error message]"}` otherwise * Example response: `{"error": "Invalid password."}` -## `/api/v1/pleroma/accounts/mfa` +## `/api/pleroma/accounts/mfa` #### Gets current MFA settings * method: `GET` * Authentication: required * OAuth scope: `read:security` -* Response: JSON. Returns `{"enabled": "false", "totp": false }` +* Response: JSON. Returns `{"settings": {"enabled": "false", "totp": false }}` +* Note: `enabled` is whether multi-factor auth is enabled for the user in general, while `totp` is one type of MFA. -## `/api/v1/pleroma/accounts/mfa/setup/totp` +## `/api/pleroma/accounts/mfa/setup/totp` #### Pre-setup the MFA/TOTP method * method: `GET` * Authentication: required * OAuth scope: `write:security` * Response: JSON. Returns `{"key": [secret_key], "provisioning_uri": "[qr code uri]" }` when successful, otherwise returns HTTP 422 `{"error": "error_msg"}` -## `/api/v1/pleroma/accounts/mfa/confirm/totp` +## `/api/pleroma/accounts/mfa/confirm/totp` #### Confirms & enables MFA/TOTP support for user account. * method: `POST` * Authentication: required @@ -113,7 +114,7 @@ The `/api/v1/pleroma/*` path is backwards compatible with `/api/pleroma/*` (`/ap * Response: JSON. Returns `{}` if the enable was successful, HTTP 422 `{"error": "[error message]"}` otherwise -## `/api/v1/pleroma/accounts/mfa/totp` +## `/api/pleroma/accounts/mfa/totp` #### Disables MFA/TOTP method for user account. * method: `DELETE` * Authentication: required @@ -123,7 +124,7 @@ The `/api/v1/pleroma/*` path is backwards compatible with `/api/pleroma/*` (`/ap * Response: JSON. Returns `{}` if the disable was successful, HTTP 422 `{"error": "[error message]"}` otherwise * Example response: `{"error": "Invalid password."}` -## `/api/v1/pleroma/accounts/mfa/backup_codes` +## `/api/pleroma/accounts/mfa/backup_codes` #### Generstes backup codes MFA for user account. * method: `GET` * Authentication: required @@ -331,7 +332,7 @@ See [Admin-API](admin_api.md) } ``` -## `/api/v1/pleroma/change_email` +## `/api/pleroma/change_email` ### Change account email * Method `POST` * Authentication: required @@ -689,3 +690,38 @@ Emoji reactions work a lot like favourites do. They make it possible to react to "url": "https://example.com/media/backups/archive-foobar-20200910T161803-QUhx6VYDRQ2wfV0SdA2Pfj_2CLM_ATUlw-D5l5TJf4Q.zip" }] ``` + +## `GET /api/oauth_tokens` +### Retrieve a list of active sessions for the user +* Method: `GET` +* Authentication: required +* Params: none +* Response: JSON +* Example response: + +```json +[ + { + "app_name": "Pleroma FE", + "id": 9275, + "valid_until": "2121-11-24T15:51:08.234234" + }, + { + "app_name": "Patron", + "id": 8805, + "valid_until": "2121-10-26T18:09:59.857150" + }, + { + "app_name": "Soapbox FE", + "id": 9727, + "valid_until": "2121-12-25T16:52:39.692877" + } +] +``` + +## `DELETE /api/oauth_tokens/:id` +### Revoke a user session by its ID +* Method: `DELETE` +* Authentication: required +* Params: none +* Response: HTTP 200 on success, 500 on error diff --git a/docs/development/setting_up_a_gitlab_runner.md b/docs/development/setting_up_a_gitlab_runner.md new file mode 100644 index 000000000..88beb82f2 --- /dev/null +++ b/docs/development/setting_up_a_gitlab_runner.md @@ -0,0 +1,9 @@ +# Setting up a Gitlab-runner + +When you push changes, a pipeline will start some automated jobs. These are done with so called [runners](https://docs.gitlab.com/runner/), services that run somewhere on a server and run these automated jobs. These jobs typically run tests and should pass. If not, you probably need to fix something. + +Generally, Pleroma provides a runner, so you don't need to set up your own. However, if for whatever reason you want to set up your own, here's some high level instructions. + +1. We use docker to run the jobs, so you should install that. For Debian, you need to allow non-free packages in the [source list](https://wiki.debian.org/SourcesList). Then you can install docker with `apt install docker-compose`. +2. You can [install](https://docs.gitlab.com/runner/install/index.html) and [configure](https://docs.gitlab.com/runner/register/index.html) a Gitlab-runner. It's probably easiest to install from the packages, but there are other options as well. +3. When registering the runner, you'll need some values. You can find them in the project under your own name. Choose "Settings", "CI/CD", and then expand "Runners". For executor you can choose "docker". For default image, you can use the image used in (although it shouldn't matter much). diff --git a/docs/installation/optional/media_graphics_packages.md b/docs/installation/optional/media_graphics_packages.md index cb3d71188..de402d1c4 100644 --- a/docs/installation/optional/media_graphics_packages.md +++ b/docs/installation/optional/media_graphics_packages.md @@ -1,9 +1,9 @@ # Optional software packages needed for specific functionality For specific Pleroma functionality (which is disabled by default) some or all of the below packages are required: - * `ImageMagic` - * `ffmpeg` - * `exiftool` + * `ImageMagic` + * `ffmpeg` + * `exiftool` Please refer to documentation in `docs/installation` on how to install them on specific OS. @@ -14,19 +14,20 @@ Note: the packages are not required with the current default settings of Pleroma `ImageMagick` is a set of tools to create, edit, compose, or convert bitmap images. It is required for the following Pleroma features: - * `Pleroma.Upload.Filters.Mogrify`, `Pleroma.Upload.Filters.Mogrifun` upload filters (related config: `Plaroma.Upload/filters` in `config/config.exs`) - * Media preview proxy for still images (related config: `media_preview_proxy/enabled` in `config/config.exs`) + * `Pleroma.Upload.Filters.Mogrify`, `Pleroma.Upload.Filters.Mogrifun` upload filters (related config: `Plaroma.Upload/filters` in `config/config.exs`) + * Media preview proxy for still images (related config: `media_preview_proxy/enabled` in `config/config.exs`) ## `ffmpeg` `ffmpeg` is software to record, convert and stream audio and video. It is required for the following Pleroma features: - * Media preview proxy for videos (related config: `media_preview_proxy/enabled` in `config/config.exs`) + * Media preview proxy for videos (related config: `media_preview_proxy/enabled` in `config/config.exs`) ## `exiftool` `exiftool` is media files metadata reader/writer. It is required for the following Pleroma features: - * `Pleroma.Upload.Filters.Exiftool` upload filter (related config: `Plaroma.Upload/filters` in `config/config.exs`) + * `Pleroma.Upload.Filters.Exiftool.StripLocation` upload filter (related config: `Plaroma.Upload/filters` in `config/config.exs`) + * `Pleroma.Upload.Filters.Exiftool.ReadDescription` upload filter (related config: `Plaroma.Upload/filters` in `config/config.exs`) diff --git a/installation/caddyfile-pleroma.example b/installation/caddyfile-pleroma.example index 7985d9c67..cc7dda011 100644 --- a/installation/caddyfile-pleroma.example +++ b/installation/caddyfile-pleroma.example @@ -5,34 +5,13 @@ # 2. Copy this section into your Caddyfile and restart Caddy. example.tld { - log /var/log/caddy/pleroma_access.log - errors /var/log/caddy/pleroma_error.log + log { + output file /var/log/caddy/pleroma.log + } - gzip + encode gzip # this is explicitly IPv4 since Pleroma.Web.Endpoint binds on IPv4 only # and `localhost.` resolves to [::0] on some systems: see issue #930 - proxy / 127.0.0.1:4000 { - websocket - transparent - } - - tls { - # Remove the rest of the lines in here, if you want to support older devices - key_type p256 - ciphers ECDHE-ECDSA-WITH-CHACHA20-POLY1305 ECDHE-RSA-WITH-CHACHA20-POLY1305 ECDHE-ECDSA-AES256-GCM-SHA384 ECDHE-RSA-AES256-GCM-SHA384 ECDHE-ECDSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-GCM-SHA256 - } - - # If you do not want to use the mediaproxy function, remove these lines. - # To use this directive, you need the http.cache plugin for Caddy. - cache { - match_path /media - default_max_age 720m - } - - cache { - match_path /proxy - default_max_age 720m - } - # Stop removing lines here. + reverse_proxy 127.0.0.1:4000 } diff --git a/installation/pleroma.nginx b/installation/pleroma.nginx index 9890cb2b1..273cfb390 100644 --- a/installation/pleroma.nginx +++ b/installation/pleroma.nginx @@ -81,6 +81,19 @@ server { proxy_pass http://phoenix; } + # Uncomment this if you want notice compatibility routes for frontends like Soapbox. + # location ~ ^/@[^/]+/([^/]+)$ { + # proxy_pass http://phoenix/notice/$1; + # } + # + # location ~ ^/@[^/]+/posts/([^/]+)$ { + # proxy_pass http://phoenix/notice/$1; + # } + # + # location ~ ^/[^/]+/status/([^/]+)$ { + # proxy_pass http://phoenix/notice/$1; + # } + location ~ ^/(media|proxy) { proxy_cache pleroma_media_cache; slice 1m; diff --git a/lib/mix/pleroma.ex b/lib/mix/pleroma.ex index 2b6c7d6bb..2976085ba 100644 --- a/lib/mix/pleroma.ex +++ b/lib/mix/pleroma.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Mix.Pleroma do diff --git a/lib/mix/tasks/pleroma/app.ex b/lib/mix/tasks/pleroma/app.ex index 0bf7ffabc..885d071bc 100644 --- a/lib/mix/tasks/pleroma/app.ex +++ b/lib/mix/tasks/pleroma/app.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Mix.Tasks.Pleroma.App do diff --git a/lib/mix/tasks/pleroma/benchmark.ex b/lib/mix/tasks/pleroma/benchmark.ex index fdf99747a..f32492169 100644 --- a/lib/mix/tasks/pleroma/benchmark.ex +++ b/lib/mix/tasks/pleroma/benchmark.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Mix.Tasks.Pleroma.Benchmark do diff --git a/lib/mix/tasks/pleroma/config.ex b/lib/mix/tasks/pleroma/config.ex index 05ff8076f..33d147d36 100644 --- a/lib/mix/tasks/pleroma/config.ex +++ b/lib/mix/tasks/pleroma/config.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Mix.Tasks.Pleroma.Config do diff --git a/lib/mix/tasks/pleroma/count_statuses.ex b/lib/mix/tasks/pleroma/count_statuses.ex index c29ea8567..c5ab8b7ab 100644 --- a/lib/mix/tasks/pleroma/count_statuses.ex +++ b/lib/mix/tasks/pleroma/count_statuses.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Mix.Tasks.Pleroma.CountStatuses do diff --git a/lib/mix/tasks/pleroma/database.ex b/lib/mix/tasks/pleroma/database.ex index a973beaa9..6b8f0ef68 100644 --- a/lib/mix/tasks/pleroma/database.ex +++ b/lib/mix/tasks/pleroma/database.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Mix.Tasks.Pleroma.Database do diff --git a/lib/mix/tasks/pleroma/digest.ex b/lib/mix/tasks/pleroma/digest.ex index f34fc839e..aea9c8ac5 100644 --- a/lib/mix/tasks/pleroma/digest.ex +++ b/lib/mix/tasks/pleroma/digest.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Mix.Tasks.Pleroma.Digest do diff --git a/lib/mix/tasks/pleroma/docs.ex b/lib/mix/tasks/pleroma/docs.ex index 45cca1c74..32c02a512 100644 --- a/lib/mix/tasks/pleroma/docs.ex +++ b/lib/mix/tasks/pleroma/docs.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Mix.Tasks.Pleroma.Docs do diff --git a/lib/mix/tasks/pleroma/ecto.ex b/lib/mix/tasks/pleroma/ecto.ex index 69564c61a..8cf77d11c 100644 --- a/lib/mix/tasks/pleroma/ecto.ex +++ b/lib/mix/tasks/pleroma/ecto.ex @@ -1,6 +1,6 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-onl +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only defmodule Mix.Tasks.Pleroma.Ecto do @doc """ diff --git a/lib/mix/tasks/pleroma/ecto/migrate.ex b/lib/mix/tasks/pleroma/ecto/migrate.ex index 8d9f44e1c..c45c930a3 100644 --- a/lib/mix/tasks/pleroma/ecto/migrate.ex +++ b/lib/mix/tasks/pleroma/ecto/migrate.ex @@ -1,6 +1,6 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-onl +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only defmodule Mix.Tasks.Pleroma.Ecto.Migrate do use Mix.Task diff --git a/lib/mix/tasks/pleroma/ecto/rollback.ex b/lib/mix/tasks/pleroma/ecto/rollback.ex index 025ebaf19..3d78eaec4 100644 --- a/lib/mix/tasks/pleroma/ecto/rollback.ex +++ b/lib/mix/tasks/pleroma/ecto/rollback.ex @@ -1,6 +1,6 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-onl +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only defmodule Mix.Tasks.Pleroma.Ecto.Rollback do use Mix.Task diff --git a/lib/mix/tasks/pleroma/email.ex b/lib/mix/tasks/pleroma/email.ex index 4ce8c9b05..37272c124 100644 --- a/lib/mix/tasks/pleroma/email.ex +++ b/lib/mix/tasks/pleroma/email.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Mix.Tasks.Pleroma.Email do diff --git a/lib/mix/tasks/pleroma/emoji.ex b/lib/mix/tasks/pleroma/emoji.ex index 9ad4a7467..537f0715e 100644 --- a/lib/mix/tasks/pleroma/emoji.ex +++ b/lib/mix/tasks/pleroma/emoji.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Mix.Tasks.Pleroma.Emoji do diff --git a/lib/mix/tasks/pleroma/frontend.ex b/lib/mix/tasks/pleroma/frontend.ex index 8334e0049..3c71801ed 100644 --- a/lib/mix/tasks/pleroma/frontend.ex +++ b/lib/mix/tasks/pleroma/frontend.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Mix.Tasks.Pleroma.Frontend do diff --git a/lib/mix/tasks/pleroma/instance.ex b/lib/mix/tasks/pleroma/instance.ex index d98cb8e37..5c93f19ff 100644 --- a/lib/mix/tasks/pleroma/instance.ex +++ b/lib/mix/tasks/pleroma/instance.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Mix.Tasks.Pleroma.Instance do @@ -34,7 +34,8 @@ defmodule Mix.Tasks.Pleroma.Instance do static_dir: :string, listen_ip: :string, listen_port: :string, - strip_uploads: :string, + strip_uploads_location: :string, + read_uploads_description: :string, anonymize_uploads: :string, dedupe_uploads: :string ], @@ -161,7 +162,7 @@ defmodule Mix.Tasks.Pleroma.Instance do ) |> Path.expand() - {strip_uploads_message, strip_uploads_default} = + {strip_uploads_location_message, strip_uploads_location_default} = if Pleroma.Utils.command_available?("exiftool") do {"Do you want to strip location (GPS) data from uploaded images? This requires exiftool, it was detected as installed. (y/n)", "y"} @@ -170,12 +171,29 @@ defmodule Mix.Tasks.Pleroma.Instance do "n"} end - strip_uploads = + strip_uploads_location = get_option( options, - :strip_uploads, - strip_uploads_message, - strip_uploads_default + :strip_uploads_location, + strip_uploads_location_message, + strip_uploads_location_default + ) === "y" + + {read_uploads_description_message, read_uploads_description_default} = + if Pleroma.Utils.command_available?("exiftool") do + {"Do you want to read data from uploaded files so clients can use it to prefill fields like image description? This requires exiftool, it was detected as installed. (y/n)", + "y"} + else + {"Do you want to read data from uploaded files so clients can use it to prefill fields like image description? This requires exiftool, it was detected as not installed, please install it if you answer yes. (y/n)", + "n"} + end + + read_uploads_description = + get_option( + options, + :read_uploads_description, + read_uploads_description_message, + read_uploads_description_default ) === "y" anonymize_uploads = @@ -229,7 +247,8 @@ defmodule Mix.Tasks.Pleroma.Instance do listen_port: listen_port, upload_filters: upload_filters(%{ - strip: strip_uploads, + strip_location: strip_uploads_location, + read_description: read_uploads_description, anonymize: anonymize_uploads, dedupe: dedupe_uploads }) @@ -297,12 +316,19 @@ defmodule Mix.Tasks.Pleroma.Instance do defp upload_filters(filters) when is_map(filters) do enabled_filters = - if filters.strip do - [Pleroma.Upload.Filter.Exiftool] + if filters.strip_location do + [Pleroma.Upload.Filter.Exiftool.StripLocation] else [] end + enabled_filters = + if filters.read_description do + enabled_filters ++ [Pleroma.Upload.Filter.Exiftool.ReadDescription] + else + enabled_filters + end + enabled_filters = if filters.anonymize do enabled_filters ++ [Pleroma.Upload.Filter.AnonymizeFilename] diff --git a/lib/mix/tasks/pleroma/notification_settings.ex b/lib/mix/tasks/pleroma/notification_settings.ex index e16866b6a..f0a7cc4ca 100644 --- a/lib/mix/tasks/pleroma/notification_settings.ex +++ b/lib/mix/tasks/pleroma/notification_settings.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Mix.Tasks.Pleroma.NotificationSettings do diff --git a/lib/mix/tasks/pleroma/openapi_spec.ex b/lib/mix/tasks/pleroma/openapi_spec.ex index 8f719c58b..884f931f8 100644 --- a/lib/mix/tasks/pleroma/openapi_spec.ex +++ b/lib/mix/tasks/pleroma/openapi_spec.ex @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Mix.Tasks.Pleroma.OpenapiSpec do def run([path]) do # Load Pleroma application to get version info diff --git a/lib/mix/tasks/pleroma/refresh_counter_cache.ex b/lib/mix/tasks/pleroma/refresh_counter_cache.ex index 66eed8657..ad37cd20b 100644 --- a/lib/mix/tasks/pleroma/refresh_counter_cache.ex +++ b/lib/mix/tasks/pleroma/refresh_counter_cache.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Mix.Tasks.Pleroma.RefreshCounterCache do diff --git a/lib/mix/tasks/pleroma/relay.ex b/lib/mix/tasks/pleroma/relay.ex index 01e6b4279..29cc6668c 100644 --- a/lib/mix/tasks/pleroma/relay.ex +++ b/lib/mix/tasks/pleroma/relay.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Mix.Tasks.Pleroma.Relay do diff --git a/lib/mix/tasks/pleroma/robots_txt.ex b/lib/mix/tasks/pleroma/robots_txt.ex index 2ae430761..5124c7c40 100644 --- a/lib/mix/tasks/pleroma/robots_txt.ex +++ b/lib/mix/tasks/pleroma/robots_txt.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Mix.Tasks.Pleroma.RobotsTxt do diff --git a/lib/mix/tasks/pleroma/uploads.ex b/lib/mix/tasks/pleroma/uploads.ex index 333e9aa8e..bf02912fa 100644 --- a/lib/mix/tasks/pleroma/uploads.ex +++ b/lib/mix/tasks/pleroma/uploads.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Mix.Tasks.Pleroma.Uploads do diff --git a/lib/mix/tasks/pleroma/user.ex b/lib/mix/tasks/pleroma/user.ex index e848222b8..96d4eb90b 100644 --- a/lib/mix/tasks/pleroma/user.ex +++ b/lib/mix/tasks/pleroma/user.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Mix.Tasks.Pleroma.User do diff --git a/lib/phoenix/transports/web_socket/raw.ex b/lib/phoenix/transports/web_socket/raw.ex index 8ed64eb16..8cf9c32a2 100644 --- a/lib/phoenix/transports/web_socket/raw.ex +++ b/lib/phoenix/transports/web_socket/raw.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Phoenix.Transports.WebSocket.Raw do diff --git a/lib/pleroma/activity.ex b/lib/pleroma/activity.ex index 4106feef6..12c1a3b2e 100644 --- a/lib/pleroma/activity.ex +++ b/lib/pleroma/activity.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Activity do diff --git a/lib/pleroma/activity/html.ex b/lib/pleroma/activity/html.ex index 0bf393836..071a89c8d 100644 --- a/lib/pleroma/activity/html.ex +++ b/lib/pleroma/activity/html.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Activity.HTML do diff --git a/lib/pleroma/activity/ir/topics.ex b/lib/pleroma/activity/ir/topics.ex index 7a603a615..56c52e9d1 100644 --- a/lib/pleroma/activity/ir/topics.ex +++ b/lib/pleroma/activity/ir/topics.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Activity.Ir.Topics do diff --git a/lib/pleroma/activity/queries.ex b/lib/pleroma/activity/queries.ex index 4632651b0..a898b2ea7 100644 --- a/lib/pleroma/activity/queries.ex +++ b/lib/pleroma/activity/queries.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Activity.Queries do diff --git a/lib/pleroma/activity/search.ex b/lib/pleroma/activity/search.ex index 09671f621..694dc5709 100644 --- a/lib/pleroma/activity/search.ex +++ b/lib/pleroma/activity/search.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Activity.Search do diff --git a/lib/pleroma/announcement.ex b/lib/pleroma/announcement.ex new file mode 100644 index 000000000..d97c5e728 --- /dev/null +++ b/lib/pleroma/announcement.ex @@ -0,0 +1,160 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Announcement do + use Ecto.Schema + + import Ecto.Changeset, only: [cast: 3, validate_required: 2] + import Ecto.Query + + alias Pleroma.AnnouncementReadRelationship + alias Pleroma.Repo + + @type t :: %__MODULE__{} + @primary_key {:id, FlakeId.Ecto.CompatType, autogenerate: true} + + schema "announcements" do + field(:data, :map) + field(:starts_at, :utc_datetime) + field(:ends_at, :utc_datetime) + field(:rendered, :map) + + timestamps(type: :utc_datetime) + end + + def change(struct, params \\ %{}) do + struct + |> cast(validate_params(struct, params), [:data, :starts_at, :ends_at, :rendered]) + |> validate_required([:data]) + end + + defp validate_params(struct, params) do + base_data = + %{ + "content" => "", + "all_day" => false + } + |> Map.merge((struct && struct.data) || %{}) + + merged_data = + Map.merge(base_data, params.data) + |> Map.take(["content", "all_day"]) + + params + |> Map.merge(%{data: merged_data}) + |> add_rendered_properties() + end + + def add_rendered_properties(params) do + {content_html, _, _} = + Pleroma.Web.CommonAPI.Utils.format_input(params.data["content"], "text/plain", + mentions_format: :full + ) + + rendered = %{ + "content" => content_html + } + + params + |> Map.put(:rendered, rendered) + end + + def add(params) do + changeset = change(%__MODULE__{}, params) + + Repo.insert(changeset) + end + + def update(announcement, params) do + changeset = change(announcement, params) + + Repo.update(changeset) + end + + def list_all do + __MODULE__ + |> Repo.all() + end + + def list_paginated(%{limit: limited_number, offset: offset_number}) do + __MODULE__ + |> limit(^limited_number) + |> offset(^offset_number) + |> Repo.all() + end + + def get_by_id(id) do + Repo.get_by(__MODULE__, id: id) + end + + def delete_by_id(id) do + with announcement when not is_nil(announcement) <- get_by_id(id), + {:ok, _} <- Repo.delete(announcement) do + :ok + else + _ -> + :error + end + end + + def read_by?(announcement, user) do + AnnouncementReadRelationship.exists?(user, announcement) + end + + def mark_read_by(announcement, user) do + AnnouncementReadRelationship.mark_read(user, announcement) + end + + def render_json(announcement, opts \\ []) do + extra_params = + case Keyword.fetch(opts, :for) do + {:ok, user} when not is_nil(user) -> + %{read: read_by?(announcement, user)} + + _ -> + %{} + end + + admin_extra_params = + case Keyword.fetch(opts, :admin) do + {:ok, true} -> + %{pleroma: %{raw_content: announcement.data["content"]}} + + _ -> + %{} + end + + base = %{ + id: announcement.id, + content: announcement.rendered["content"], + starts_at: announcement.starts_at, + ends_at: announcement.ends_at, + all_day: announcement.data["all_day"], + published_at: announcement.inserted_at, + updated_at: announcement.updated_at, + mentions: [], + statuses: [], + tags: [], + emojis: [], + reactions: [] + } + + base + |> Map.merge(extra_params) + |> Map.merge(admin_extra_params) + end + + # "visible" means: + # starts_at < time < ends_at + def list_all_visible_when(time) do + __MODULE__ + |> where([a], is_nil(a.starts_at) or a.starts_at < ^time) + |> where([a], is_nil(a.ends_at) or a.ends_at > ^time) + |> Repo.all() + end + + def list_all_visible do + list_all_visible_when(DateTime.now("Etc/UTC") |> elem(1)) + end +end diff --git a/lib/pleroma/announcement_read_relationship.ex b/lib/pleroma/announcement_read_relationship.ex new file mode 100644 index 000000000..9b64404ce --- /dev/null +++ b/lib/pleroma/announcement_read_relationship.ex @@ -0,0 +1,55 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.AnnouncementReadRelationship do + use Ecto.Schema + + import Ecto.Changeset + + alias FlakeId.Ecto.CompatType + alias Pleroma.Announcement + alias Pleroma.Repo + alias Pleroma.User + + @type t :: %__MODULE__{} + + schema "announcement_read_relationships" do + belongs_to(:user, User, type: CompatType) + belongs_to(:announcement, Announcement, type: CompatType) + + timestamps(updated_at: false) + end + + def mark_read(user, announcement) do + %__MODULE__{} + |> cast(%{user_id: user.id, announcement_id: announcement.id}, [:user_id, :announcement_id]) + |> validate_required([:user_id, :announcement_id]) + |> foreign_key_constraint(:user_id) + |> foreign_key_constraint(:announcement_id) + |> unique_constraint([:user_id, :announcement_id]) + |> Repo.insert() + end + + def mark_unread(user, announcement) do + with relationship <- get(user, announcement), + {:exists, true} <- {:exists, not is_nil(relationship)}, + {:ok, _} <- Repo.delete(relationship) do + :ok + else + {:exists, false} -> + :ok + + _ -> + :error + end + end + + def get(user, announcement) do + Repo.get_by(__MODULE__, user_id: user.id, announcement_id: announcement.id) + end + + def exists?(user, announcement) do + not is_nil(get(user, announcement)) + end +end diff --git a/lib/pleroma/application.ex b/lib/pleroma/application.ex index 952579c7f..d808bc732 100644 --- a/lib/pleroma/application.ex +++ b/lib/pleroma/application.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Application do diff --git a/lib/pleroma/application_requirements.ex b/lib/pleroma/application_requirements.ex index a56311a65..44b1c1705 100644 --- a/lib/pleroma/application_requirements.ex +++ b/lib/pleroma/application_requirements.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.ApplicationRequirements do @@ -164,7 +164,8 @@ defmodule Pleroma.ApplicationRequirements do defp check_system_commands!(:ok) do filter_commands_statuses = [ - check_filter(Pleroma.Upload.Filter.Exiftool, "exiftool"), + check_filter(Pleroma.Upload.Filter.Exiftool.StripLocation, "exiftool"), + check_filter(Pleroma.Upload.Filter.Exiftool.ReadDescription, "exiftool"), check_filter(Pleroma.Upload.Filter.Mogrify, "mogrify"), check_filter(Pleroma.Upload.Filter.Mogrifun, "mogrify"), check_filter(Pleroma.Upload.Filter.AnalyzeMetadata, "mogrify"), diff --git a/lib/pleroma/bbs/authenticator.ex b/lib/pleroma/bbs/authenticator.ex index 241fcb53c..0f7543ff5 100644 --- a/lib/pleroma/bbs/authenticator.ex +++ b/lib/pleroma/bbs/authenticator.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.BBS.Authenticator do diff --git a/lib/pleroma/bbs/handler.ex b/lib/pleroma/bbs/handler.ex index a38faa5b8..a3b623bdf 100644 --- a/lib/pleroma/bbs/handler.ex +++ b/lib/pleroma/bbs/handler.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.BBS.Handler do diff --git a/lib/pleroma/bookmark.ex b/lib/pleroma/bookmark.ex index 83cc8e7e1..187749e86 100644 --- a/lib/pleroma/bookmark.ex +++ b/lib/pleroma/bookmark.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Bookmark do diff --git a/lib/pleroma/caching.ex b/lib/pleroma/caching.ex index 02c18564d..eb0588708 100644 --- a/lib/pleroma/caching.ex +++ b/lib/pleroma/caching.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Caching do diff --git a/lib/pleroma/captcha.ex b/lib/pleroma/captcha.ex index bad7b3a66..03910f189 100644 --- a/lib/pleroma/captcha.ex +++ b/lib/pleroma/captcha.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Captcha do diff --git a/lib/pleroma/captcha/kocaptcha.ex b/lib/pleroma/captcha/kocaptcha.ex index eac6dfa36..e786e28b9 100644 --- a/lib/pleroma/captcha/kocaptcha.ex +++ b/lib/pleroma/captcha/kocaptcha.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Captcha.Kocaptcha do diff --git a/lib/pleroma/captcha/native.ex b/lib/pleroma/captcha/native.ex index 2c6f64e66..9ba0f30be 100644 --- a/lib/pleroma/captcha/native.ex +++ b/lib/pleroma/captcha/native.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Captcha.Native do diff --git a/lib/pleroma/captcha/service.ex b/lib/pleroma/captcha/service.ex index a430fafdc..74797605f 100644 --- a/lib/pleroma/captcha/service.ex +++ b/lib/pleroma/captcha/service.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Captcha.Service do diff --git a/lib/pleroma/chat.ex b/lib/pleroma/chat.ex index bacff24b5..fe32ec08c 100644 --- a/lib/pleroma/chat.ex +++ b/lib/pleroma/chat.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Chat do diff --git a/lib/pleroma/chat/message_reference.ex b/lib/pleroma/chat/message_reference.ex index 89537d155..ea65a4a35 100644 --- a/lib/pleroma/chat/message_reference.ex +++ b/lib/pleroma/chat/message_reference.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Chat.MessageReference do diff --git a/lib/pleroma/clippy.ex b/lib/pleroma/clippy.ex index 9c674e075..bcf23ca07 100644 --- a/lib/pleroma/clippy.ex +++ b/lib/pleroma/clippy.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Clippy do diff --git a/lib/pleroma/config.ex b/lib/pleroma/config.ex index 54e332595..cf1453c9b 100644 --- a/lib/pleroma/config.ex +++ b/lib/pleroma/config.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Config do diff --git a/lib/pleroma/config/deprecation_warnings.ex b/lib/pleroma/config/deprecation_warnings.ex index 029ee8b65..599f1d3cf 100644 --- a/lib/pleroma/config/deprecation_warnings.ex +++ b/lib/pleroma/config/deprecation_warnings.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Config.DeprecationWarnings do @@ -20,6 +20,43 @@ defmodule Pleroma.Config.DeprecationWarnings do "\n* `config :pleroma, :instance, mrf_transparency_exclusions` is now `config :pleroma, :mrf, transparency_exclusions`"} ] + def check_exiftool_filter do + filters = Config.get([Pleroma.Upload]) |> Keyword.get(:filters, []) + + if Pleroma.Upload.Filter.Exiftool in filters do + Logger.warn(""" + !!!DEPRECATION WARNING!!! + Your config is using Exiftool as a filter instead of Exiftool.StripLocation. This should work for now, but you are advised to change to the new configuration to prevent possible issues later: + + ``` + config :pleroma, Pleroma.Upload, + filters: [Pleroma.Upload.Filter.Exiftool] + ``` + + Is now + + + ``` + config :pleroma, Pleroma.Upload, + filters: [Pleroma.Upload.Filter.Exiftool.StripLocation] + ``` + """) + + new_config = + filters + |> Enum.map(fn + Pleroma.Upload.Filter.Exiftool -> Pleroma.Upload.Filter.Exiftool.StripLocation + filter -> filter + end) + + Config.put([Pleroma.Upload, :filters], new_config) + + :error + else + :ok + end + end + def check_simple_policy_tuples do has_strings = Config.get([:mrf_simple]) @@ -180,7 +217,8 @@ defmodule Pleroma.Config.DeprecationWarnings do check_old_chat_shoutbox(), check_quarantined_instances_tuples(), check_transparency_exclusions_tuples(), - check_simple_policy_tuples() + check_simple_policy_tuples(), + check_exiftool_filter() ] |> Enum.reduce(:ok, fn :ok, :ok -> :ok diff --git a/lib/pleroma/config/getting.ex b/lib/pleroma/config/getting.ex index 2cc9fe80b..f9b66bba6 100644 --- a/lib/pleroma/config/getting.ex +++ b/lib/pleroma/config/getting.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Config.Getting do diff --git a/lib/pleroma/config/helpers.ex b/lib/pleroma/config/helpers.ex index 9f26c3546..973a75c99 100644 --- a/lib/pleroma/config/helpers.ex +++ b/lib/pleroma/config/helpers.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Config.Helpers do diff --git a/lib/pleroma/config/holder.ex b/lib/pleroma/config/holder.ex index 4d186a854..7822bde89 100644 --- a/lib/pleroma/config/holder.ex +++ b/lib/pleroma/config/holder.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Config.Holder do diff --git a/lib/pleroma/config/loader.ex b/lib/pleroma/config/loader.ex index 2a945999e..015be3d8e 100644 --- a/lib/pleroma/config/loader.ex +++ b/lib/pleroma/config/loader.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Config.Loader do diff --git a/lib/pleroma/config/oban.ex b/lib/pleroma/config/oban.ex index 53ea7d7be..483d2bb79 100644 --- a/lib/pleroma/config/oban.ex +++ b/lib/pleroma/config/oban.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Config.Oban do diff --git a/lib/pleroma/config/release_runtime_provider.ex b/lib/pleroma/config/release_runtime_provider.ex index e5e9d3dcd..91e5f1a54 100644 --- a/lib/pleroma/config/release_runtime_provider.ex +++ b/lib/pleroma/config/release_runtime_provider.ex @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Config.ReleaseRuntimeProvider do @moduledoc """ Imports runtime config and `{env}.exported_from_db.secret.exs` for releases. diff --git a/lib/pleroma/config/transfer_task.ex b/lib/pleroma/config/transfer_task.ex index 5371aae7a..4199630af 100644 --- a/lib/pleroma/config/transfer_task.ex +++ b/lib/pleroma/config/transfer_task.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Config.TransferTask do diff --git a/lib/pleroma/config_db.ex b/lib/pleroma/config_db.ex index cb57673e3..6befbbe19 100644 --- a/lib/pleroma/config_db.ex +++ b/lib/pleroma/config_db.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.ConfigDB do diff --git a/lib/pleroma/constants.ex b/lib/pleroma/constants.ex index bf92f65cb..7b63ab06e 100644 --- a/lib/pleroma/constants.ex +++ b/lib/pleroma/constants.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Constants do @@ -27,4 +27,10 @@ defmodule Pleroma.Constants do do: ~w(index.html robots.txt static static-fe finmoji emoji packs sounds images instance sw.js sw-pleroma.js favicon.png schemas doc embed.js embed.css) ) + + # basic regex, just there to weed out potential mistakes + # https://datatracker.ietf.org/doc/html/rfc2045#section-5.1 + const(mime_regex, + do: ~r/^[^[:cntrl:] ()<>@,;:\\"\/\[\]?=]+\/[^[:cntrl:] ()<>@,;:\\"\/\[\]?=]+(; .*)?$/ + ) end diff --git a/lib/pleroma/conversation.ex b/lib/pleroma/conversation.ex index 828e27450..42028aa51 100644 --- a/lib/pleroma/conversation.ex +++ b/lib/pleroma/conversation.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Conversation do diff --git a/lib/pleroma/conversation/participation.ex b/lib/pleroma/conversation/participation.ex index e0a3af28b..4ed93e5bd 100644 --- a/lib/pleroma/conversation/participation.ex +++ b/lib/pleroma/conversation/participation.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Conversation.Participation do diff --git a/lib/pleroma/conversation/participation/recipient_ship.ex b/lib/pleroma/conversation/participation/recipient_ship.ex index 094c1a176..d9a0fdff8 100644 --- a/lib/pleroma/conversation/participation/recipient_ship.ex +++ b/lib/pleroma/conversation/participation/recipient_ship.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Conversation.Participation.RecipientShip do diff --git a/lib/pleroma/counter_cache.ex b/lib/pleroma/counter_cache.ex index 1e75d19ae..d2b14bd54 100644 --- a/lib/pleroma/counter_cache.ex +++ b/lib/pleroma/counter_cache.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.CounterCache do diff --git a/lib/pleroma/data_migration.ex b/lib/pleroma/data_migration.ex index 1377af16e..59d891d8d 100644 --- a/lib/pleroma/data_migration.ex +++ b/lib/pleroma/data_migration.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.DataMigration do diff --git a/lib/pleroma/delivery.ex b/lib/pleroma/delivery.ex index 511d5cf58..5d1853b76 100644 --- a/lib/pleroma/delivery.ex +++ b/lib/pleroma/delivery.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Delivery do diff --git a/lib/pleroma/docs/generator.ex b/lib/pleroma/docs/generator.ex index e8a68fd41..6508f1947 100644 --- a/lib/pleroma/docs/generator.ex +++ b/lib/pleroma/docs/generator.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Docs.Generator do diff --git a/lib/pleroma/docs/json.ex b/lib/pleroma/docs/json.ex index f22432ea4..05f46f39b 100644 --- a/lib/pleroma/docs/json.ex +++ b/lib/pleroma/docs/json.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Docs.JSON do diff --git a/lib/pleroma/docs/markdown.ex b/lib/pleroma/docs/markdown.ex index 7e54e9d58..949388eb9 100644 --- a/lib/pleroma/docs/markdown.ex +++ b/lib/pleroma/docs/markdown.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Docs.Markdown do diff --git a/lib/pleroma/docs/translator.ex b/lib/pleroma/docs/translator.ex new file mode 100644 index 000000000..13e33c87e --- /dev/null +++ b/lib/pleroma/docs/translator.ex @@ -0,0 +1,10 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Docs.Translator do + require Pleroma.Docs.Translator.Compiler + require Pleroma.Web.Gettext + + @before_compile Pleroma.Docs.Translator.Compiler +end diff --git a/lib/pleroma/docs/translator/compiler.ex b/lib/pleroma/docs/translator/compiler.ex new file mode 100644 index 000000000..5d27d9fa2 --- /dev/null +++ b/lib/pleroma/docs/translator/compiler.ex @@ -0,0 +1,119 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Docs.Translator.Compiler do + @external_resource "config/description.exs" + @raw_config Pleroma.Config.Loader.read("config/description.exs") + @raw_descriptions @raw_config[:pleroma][:config_description] + + defmacro __before_compile__(_env) do + strings = + __MODULE__.descriptions() + |> __MODULE__.extract_strings() + + quote do + def placeholder do + unquote do + Enum.map( + strings, + fn {path, type, string} -> + ctxt = msgctxt_for(path, type) + + quote do + Pleroma.Web.Gettext.dpgettext_noop( + "config_descriptions", + unquote(ctxt), + unquote(string) + ) + end + end + ) + end + end + end + end + + def descriptions do + Pleroma.Web.ActivityPub.MRF.config_descriptions() + |> Enum.reduce(@raw_descriptions, fn description, acc -> [description | acc] end) + |> Pleroma.Docs.Generator.convert_to_strings() + end + + def extract_strings(descriptions) do + descriptions + |> Enum.reduce(%{strings: [], path: []}, &process_item/2) + |> Map.get(:strings) + end + + defp process_item(entity, acc) do + current_level = + acc + |> process_desc(entity) + |> process_label(entity) + + process_children(entity, current_level) + end + + defp process_desc(acc, %{description: desc} = item) do + %{ + strings: [{acc.path ++ [key_for(item)], "description", desc} | acc.strings], + path: acc.path + } + end + + defp process_desc(acc, _) do + acc + end + + defp process_label(acc, %{label: label} = item) do + %{ + strings: [{acc.path ++ [key_for(item)], "label", label} | acc.strings], + path: acc.path + } + end + + defp process_label(acc, _) do + acc + end + + defp process_children(%{children: children} = item, acc) do + current_level = Map.put(acc, :path, acc.path ++ [key_for(item)]) + + children + |> Enum.reduce(current_level, &process_item/2) + |> Map.put(:path, acc.path) + end + + defp process_children(_, acc) do + acc + end + + def msgctxt_for(path, type) do + "config #{type} at #{Enum.join(path, " > ")}" + end + + defp convert_group({_, group}) do + group + end + + defp convert_group(group) do + group + end + + def key_for(%{group: group, key: key}) do + "#{convert_group(group)}-#{key}" + end + + def key_for(%{group: group}) do + convert_group(group) + end + + def key_for(%{key: key}) do + key + end + + def key_for(_) do + nil + end +end diff --git a/lib/pleroma/ecto_enums.ex b/lib/pleroma/ecto_enums.ex index 0e3e1e5de..a4890b489 100644 --- a/lib/pleroma/ecto_enums.ex +++ b/lib/pleroma/ecto_enums.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only import EctoEnum @@ -10,7 +10,8 @@ defenum(Pleroma.UserRelationship.Type, reblog_mute: 3, notification_mute: 4, inverse_subscription: 5, - suggestion_dismiss: 6 + suggestion_dismiss: 6, + endorsement: 7 ) defenum(Pleroma.FollowingRelationship.State, diff --git a/lib/pleroma/ecto_type/activity_pub/object_validators/date_time.ex b/lib/pleroma/ecto_type/activity_pub/object_validators/date_time.ex index 8552ae73d..b0258e86d 100644 --- a/lib/pleroma/ecto_type/activity_pub/object_validators/date_time.ex +++ b/lib/pleroma/ecto_type/activity_pub/object_validators/date_time.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.EctoType.ActivityPub.ObjectValidators.DateTime do diff --git a/lib/pleroma/ecto_type/activity_pub/object_validators/emoji.ex b/lib/pleroma/ecto_type/activity_pub/object_validators/emoji.ex index 96674e21f..e0e4449dc 100644 --- a/lib/pleroma/ecto_type/activity_pub/object_validators/emoji.ex +++ b/lib/pleroma/ecto_type/activity_pub/object_validators/emoji.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.EctoType.ActivityPub.ObjectValidators.Emoji do diff --git a/lib/pleroma/ecto_type/activity_pub/object_validators/mime.ex b/lib/pleroma/ecto_type/activity_pub/object_validators/mime.ex new file mode 100644 index 000000000..31d51577d --- /dev/null +++ b/lib/pleroma/ecto_type/activity_pub/object_validators/mime.ex @@ -0,0 +1,25 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.EctoType.ActivityPub.ObjectValidators.MIME do + use Ecto.Type + + require Pleroma.Constants + + def type, do: :string + + def cast(mime) when is_binary(mime) do + if mime =~ Pleroma.Constants.mime_regex() do + {:ok, mime} + else + {:ok, "application/octet-stream"} + end + end + + def cast(_), do: :error + + def dump(data), do: {:ok, data} + + def load(data), do: {:ok, data} +end diff --git a/lib/pleroma/ecto_type/activity_pub/object_validators/object_id.ex b/lib/pleroma/ecto_type/activity_pub/object_validators/object_id.ex index 45bd6070a..663dc0dee 100644 --- a/lib/pleroma/ecto_type/activity_pub/object_validators/object_id.ex +++ b/lib/pleroma/ecto_type/activity_pub/object_validators/object_id.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.EctoType.ActivityPub.ObjectValidators.ObjectID do diff --git a/lib/pleroma/ecto_type/activity_pub/object_validators/recipients.ex b/lib/pleroma/ecto_type/activity_pub/object_validators/recipients.ex index 06fed8fb3..447d536ed 100644 --- a/lib/pleroma/ecto_type/activity_pub/object_validators/recipients.ex +++ b/lib/pleroma/ecto_type/activity_pub/object_validators/recipients.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.EctoType.ActivityPub.ObjectValidators.Recipients do diff --git a/lib/pleroma/ecto_type/activity_pub/object_validators/safe_text.ex b/lib/pleroma/ecto_type/activity_pub/object_validators/safe_text.ex index d0f5f381f..95bd3ba23 100644 --- a/lib/pleroma/ecto_type/activity_pub/object_validators/safe_text.ex +++ b/lib/pleroma/ecto_type/activity_pub/object_validators/safe_text.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.EctoType.ActivityPub.ObjectValidators.SafeText do diff --git a/lib/pleroma/ecto_type/activity_pub/object_validators/uri.ex b/lib/pleroma/ecto_type/activity_pub/object_validators/uri.ex index f5b68648c..b8e5c9dad 100644 --- a/lib/pleroma/ecto_type/activity_pub/object_validators/uri.ex +++ b/lib/pleroma/ecto_type/activity_pub/object_validators/uri.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.EctoType.ActivityPub.ObjectValidators.Uri do diff --git a/lib/pleroma/ecto_type/config/atom.ex b/lib/pleroma/ecto_type/config/atom.ex index 3bf0bca5b..c44d655e0 100644 --- a/lib/pleroma/ecto_type/config/atom.ex +++ b/lib/pleroma/ecto_type/config/atom.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.EctoType.Config.Atom do diff --git a/lib/pleroma/ecto_type/config/binary_value.ex b/lib/pleroma/ecto_type/config/binary_value.ex index 908220a65..4aad0cfce 100644 --- a/lib/pleroma/ecto_type/config/binary_value.ex +++ b/lib/pleroma/ecto_type/config/binary_value.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.EctoType.Config.BinaryValue do diff --git a/lib/pleroma/emails/admin_email.ex b/lib/pleroma/emails/admin_email.ex index 88bc78aec..372e5529d 100644 --- a/lib/pleroma/emails/admin_email.ex +++ b/lib/pleroma/emails/admin_email.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Emails.AdminEmail do diff --git a/lib/pleroma/emails/mailer.ex b/lib/pleroma/emails/mailer.ex index c68550bee..101442130 100644 --- a/lib/pleroma/emails/mailer.ex +++ b/lib/pleroma/emails/mailer.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Emails.Mailer do diff --git a/lib/pleroma/emails/new_users_digest_email.ex b/lib/pleroma/emails/new_users_digest_email.ex index 3552dedae..a9e57c7d4 100644 --- a/lib/pleroma/emails/new_users_digest_email.ex +++ b/lib/pleroma/emails/new_users_digest_email.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Emails.NewUsersDigestEmail do diff --git a/lib/pleroma/emails/user_email.ex b/lib/pleroma/emails/user_email.ex index e38c681ba..95b963764 100644 --- a/lib/pleroma/emails/user_email.ex +++ b/lib/pleroma/emails/user_email.ex @@ -1,13 +1,16 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Emails.UserEmail do @moduledoc "User emails" + require Pleroma.Web.Gettext + alias Pleroma.Config alias Pleroma.User alias Pleroma.Web.Endpoint + alias Pleroma.Web.Gettext alias Pleroma.Web.Router import Swoosh.Email @@ -27,29 +30,75 @@ defmodule Pleroma.Emails.UserEmail do @spec welcome(User.t(), map()) :: Swoosh.Email.t() def welcome(user, opts \\ %{}) do - new() - |> to(recipient(user)) - |> from(Map.get(opts, :sender, sender())) - |> subject(Map.get(opts, :subject, "Welcome to #{instance_name()}!")) - |> html_body(Map.get(opts, :html, "Welcome to #{instance_name()}!")) - |> text_body(Map.get(opts, :text, "Welcome to #{instance_name()}!")) + Gettext.with_locale_or_default user.language do + new() + |> to(recipient(user)) + |> from(Map.get(opts, :sender, sender())) + |> subject( + Map.get( + opts, + :subject, + Gettext.dpgettext( + "static_pages", + "welcome email subject", + "Welcome to %{instance_name}!", + instance_name: instance_name() + ) + ) + ) + |> html_body( + Map.get( + opts, + :html, + Gettext.dpgettext( + "static_pages", + "welcome email html body", + "Welcome to %{instance_name}!", + instance_name: instance_name() + ) + ) + ) + |> text_body( + Map.get( + opts, + :text, + Gettext.dpgettext( + "static_pages", + "welcome email text body", + "Welcome to %{instance_name}!", + instance_name: instance_name() + ) + ) + ) + end end def password_reset_email(user, token) when is_binary(token) do - password_reset_url = Router.Helpers.reset_password_url(Endpoint, :reset, token) + Gettext.with_locale_or_default user.language do + password_reset_url = Router.Helpers.reset_password_url(Endpoint, :reset, token) - html_body = """ -

Reset your password at #{instance_name()}

-

Someone has requested password change for your account at #{instance_name()}.

-

If it was you, visit the following link to proceed: reset password.

-

If it was someone else, nothing to worry about: your data is secure and your password has not been changed.

- """ + html_body = + Gettext.dpgettext( + "static_pages", + "password reset email body", + """ +

Reset your password at %{instance_name}

+

Someone has requested password change for your account at %{instance_name}.

+

If it was you, visit the following link to proceed: reset password.

+

If it was someone else, nothing to worry about: your data is secure and your password has not been changed.

+ """, + instance_name: instance_name(), + password_reset_url: password_reset_url + ) - new() - |> to(recipient(user)) - |> from(sender()) - |> subject("Password reset") - |> html_body(html_body) + new() + |> to(recipient(user)) + |> from(sender()) + |> subject( + Gettext.dpgettext("static_pages", "password reset email subject", "Password reset") + ) + |> html_body(html_body) + end end def user_invitation_email( @@ -58,73 +107,136 @@ defmodule Pleroma.Emails.UserEmail do to_email, to_name \\ nil ) do - registration_url = - Router.Helpers.redirect_url( - Endpoint, - :registration_page, - user_invite_token.token + Gettext.with_locale_or_default user.language do + registration_url = + Router.Helpers.redirect_url( + Endpoint, + :registration_page, + user_invite_token.token + ) + + html_body = + Gettext.dpgettext( + "static_pages", + "user invitation email body", + """ +

You are invited to %{instance_name}

+

%{inviter_name} invites you to join %{instance_name}, an instance of Pleroma federated social networking platform.

+

Click the following link to register: accept invitation.

+ """, + instance_name: instance_name(), + inviter_name: user.name, + registration_url: registration_url + ) + + new() + |> to(recipient(to_email, to_name)) + |> from(sender()) + |> subject( + Gettext.dpgettext( + "static_pages", + "user invitation email subject", + "Invitation to %{instance_name}", + instance_name: instance_name() + ) ) - - html_body = """ -

You are invited to #{instance_name()}

-

#{user.name} invites you to join #{instance_name()}, an instance of Pleroma federated social networking platform.

-

Click the following link to register: accept invitation.

- """ - - new() - |> to(recipient(to_email, to_name)) - |> from(sender()) - |> subject("Invitation to #{instance_name()}") - |> html_body(html_body) + |> html_body(html_body) + end end def account_confirmation_email(user) do - confirmation_url = - Router.Helpers.confirm_email_url( - Endpoint, - :confirm_email, - user.id, - to_string(user.confirmation_token) + Gettext.with_locale_or_default user.language do + confirmation_url = + Router.Helpers.confirm_email_url( + Endpoint, + :confirm_email, + user.id, + to_string(user.confirmation_token) + ) + + html_body = + Gettext.dpgettext( + "static_pages", + "confirmation email body", + """ +

Thank you for registering on %{instance_name}

+

Email confirmation is required to activate the account.

+

Please click the following link to activate your account.

+ """, + instance_name: instance_name(), + confirmation_url: confirmation_url + ) + + new() + |> to(recipient(user)) + |> from(sender()) + |> subject( + Gettext.dpgettext( + "static_pages", + "confirmation email subject", + "%{instance_name} account confirmation", + instance_name: instance_name() + ) ) - - html_body = """ -

Thank you for registering on #{instance_name()}

-

Email confirmation is required to activate the account.

-

Please click the following link to activate your account.

- """ - - new() - |> to(recipient(user)) - |> from(sender()) - |> subject("#{instance_name()} account confirmation") - |> html_body(html_body) + |> html_body(html_body) + end end def approval_pending_email(user) do - html_body = """ -

Awaiting Approval

-

Your account at #{instance_name()} is being reviewed by staff. You will receive another email once your account is approved.

- """ + Gettext.with_locale_or_default user.language do + html_body = + Gettext.dpgettext( + "static_pages", + "approval pending email body", + """ +

Awaiting Approval

+

Your account at %{instance_name} is being reviewed by staff. You will receive another email once your account is approved.

+ """, + instance_name: instance_name() + ) - new() - |> to(recipient(user)) - |> from(sender()) - |> subject("Your account is awaiting approval") - |> html_body(html_body) + new() + |> to(recipient(user)) + |> from(sender()) + |> subject( + Gettext.dpgettext( + "static_pages", + "approval pending email subject", + "Your account is awaiting approval" + ) + ) + |> html_body(html_body) + end end def successful_registration_email(user) do - html_body = """ -

Hello @#{user.nickname},

-

Your account at #{instance_name()} has been registered successfully.

-

No further action is required to activate your account.

- """ + Gettext.with_locale_or_default user.language do + html_body = + Gettext.dpgettext( + "static_pages", + "successful registration email body", + """ +

Hello @%{nickname},

+

Your account at %{instance_name} has been registered successfully.

+

No further action is required to activate your account.

+ """, + nickname: user.nickname, + instance_name: instance_name() + ) - new() - |> to(recipient(user)) - |> from(sender()) - |> subject("Account registered on #{instance_name()}") - |> html_body(html_body) + new() + |> to(recipient(user)) + |> from(sender()) + |> subject( + Gettext.dpgettext( + "static_pages", + "successful registration email subject", + "Account registered on %{instance_name}", + instance_name: instance_name() + ) + ) + |> html_body(html_body) + end end @doc """ @@ -134,69 +246,78 @@ defmodule Pleroma.Emails.UserEmail do """ @spec digest_email(User.t()) :: Swoosh.Email.t() | nil def digest_email(user) do - notifications = Pleroma.Notification.for_user_since(user, user.last_digest_emailed_at) + Gettext.with_locale_or_default user.language do + notifications = Pleroma.Notification.for_user_since(user, user.last_digest_emailed_at) - mentions = - notifications - |> Enum.filter(&(&1.activity.data["type"] == "Create")) - |> Enum.map(fn notification -> - object = Pleroma.Object.normalize(notification.activity, fetch: false) + mentions = + notifications + |> Enum.filter(&(&1.activity.data["type"] == "Create")) + |> Enum.map(fn notification -> + object = Pleroma.Object.normalize(notification.activity, fetch: false) - if not is_nil(object) do - object = update_in(object.data["content"], &format_links/1) + if not is_nil(object) do + object = update_in(object.data["content"], &format_links/1) - %{ - data: notification, - object: object, - from: User.get_by_ap_id(notification.activity.actor) - } - end - end) - |> Enum.filter(& &1) + %{ + data: notification, + object: object, + from: User.get_by_ap_id(notification.activity.actor) + } + end + end) + |> Enum.filter(& &1) - followers = - notifications - |> Enum.filter(&(&1.activity.data["type"] == "Follow")) - |> Enum.map(fn notification -> - from = User.get_by_ap_id(notification.activity.actor) + followers = + notifications + |> Enum.filter(&(&1.activity.data["type"] == "Follow")) + |> Enum.map(fn notification -> + from = User.get_by_ap_id(notification.activity.actor) - if not is_nil(from) do - %{ - data: notification, - object: Pleroma.Object.normalize(notification.activity, fetch: false), - from: User.get_by_ap_id(notification.activity.actor) - } - end - end) - |> Enum.filter(& &1) + if not is_nil(from) do + %{ + data: notification, + object: Pleroma.Object.normalize(notification.activity, fetch: false), + from: User.get_by_ap_id(notification.activity.actor) + } + end + end) + |> Enum.filter(& &1) - unless Enum.empty?(mentions) do - styling = Config.get([__MODULE__, :styling]) - logo = Config.get([__MODULE__, :logo]) + unless Enum.empty?(mentions) do + styling = Config.get([__MODULE__, :styling]) + logo = Config.get([__MODULE__, :logo]) - html_data = %{ - instance: instance_name(), - user: user, - mentions: mentions, - followers: followers, - unsubscribe_link: unsubscribe_url(user, "digest"), - styling: styling - } + html_data = %{ + instance: instance_name(), + user: user, + mentions: mentions, + followers: followers, + unsubscribe_link: unsubscribe_url(user, "digest"), + styling: styling + } - logo_path = - if is_nil(logo) do - Path.join(:code.priv_dir(:pleroma), "static/static/logo.svg") - else - Path.join(Config.get([:instance, :static_dir]), logo) - end + logo_path = + if is_nil(logo) do + Path.join(:code.priv_dir(:pleroma), "static/static/logo.svg") + else + Path.join(Config.get([:instance, :static_dir]), logo) + end - new() - |> to(recipient(user)) - |> from(sender()) - |> subject("Your digest from #{instance_name()}") - |> put_layout(false) - |> render_body("digest.html", html_data) - |> attachment(Swoosh.Attachment.new(logo_path, filename: "logo.svg", type: :inline)) + new() + |> to(recipient(user)) + |> from(sender()) + |> subject( + Gettext.dpgettext( + "static_pages", + "digest email subject", + "Your digest from %{instance_name}", + instance_name: instance_name() + ) + ) + |> put_layout(false) + |> render_body("digest.html", html_data) + |> attachment(Swoosh.Attachment.new(logo_path, filename: "logo.svg", type: :inline)) + end end end @@ -226,27 +347,47 @@ defmodule Pleroma.Emails.UserEmail do def backup_is_ready_email(backup, admin_user_id \\ nil) do %{user: user} = Pleroma.Repo.preload(backup, :user) - download_url = Pleroma.Web.PleromaAPI.BackupView.download_url(backup) - html_body = - if is_nil(admin_user_id) do - """ -

You requested a full backup of your Pleroma account. It's ready for download:

-

#{download_url}

- """ - else - admin = Pleroma.Repo.get(User, admin_user_id) + Gettext.with_locale_or_default user.language do + download_url = Pleroma.Web.PleromaAPI.BackupView.download_url(backup) - """ -

Admin @#{admin.nickname} requested a full backup of your Pleroma account. It's ready for download:

-

#{download_url}

- """ - end + html_body = + if is_nil(admin_user_id) do + Gettext.dpgettext( + "static_pages", + "account archive email body - self-requested", + """ +

You requested a full backup of your Pleroma account. It's ready for download:

+

%{download_url}

+ """, + download_url: download_url + ) + else + admin = Pleroma.Repo.get(User, admin_user_id) - new() - |> to(recipient(user)) - |> from(sender()) - |> subject("Your account archive is ready") - |> html_body(html_body) + Gettext.dpgettext( + "static_pages", + "account archive email body - admin requested", + """ +

Admin @%{admin_nickname} requested a full backup of your Pleroma account. It's ready for download:

+

%{download_url}

+ """, + admin_nickname: admin.nickname, + download_url: download_url + ) + end + + new() + |> to(recipient(user)) + |> from(sender()) + |> subject( + Gettext.dpgettext( + "static_pages", + "account archive email subject", + "Your account archive is ready" + ) + ) + |> html_body(html_body) + end end end diff --git a/lib/pleroma/emoji-test.txt b/lib/pleroma/emoji-test.txt index d3c6d12bd..dd5493366 100644 --- a/lib/pleroma/emoji-test.txt +++ b/lib/pleroma/emoji-test.txt @@ -1,11 +1,11 @@ # emoji-test.txt -# Date: 2020-09-12, 22:19:50 GMT -# © 2020 Unicode®, Inc. +# Date: 2021-08-26, 17:22:23 GMT +# © 2021 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see http://www.unicode.org/terms_of_use.html # # Emoji Keyboard/Display Test Data for UTS #51 -# Version: 13.1 +# Version: 14.0 # # For documentation and usage, see http://www.unicode.org/reports/tr51 # @@ -43,6 +43,7 @@ 1F602 ; fully-qualified # 😂 E0.6 face with tears of joy 1F642 ; fully-qualified # 🙂 E1.0 slightly smiling face 1F643 ; fully-qualified # 🙃 E1.0 upside-down face +1FAE0 ; fully-qualified # 🫠 E14.0 melting face 1F609 ; fully-qualified # 😉 E0.6 winking face 1F60A ; fully-qualified # 😊 E0.6 smiling face with smiling eyes 1F607 ; fully-qualified # 😇 E1.0 smiling face with halo @@ -68,10 +69,13 @@ 1F911 ; fully-qualified # 🤑 E1.0 money-mouth face # subgroup: face-hand -1F917 ; fully-qualified # 🤗 E1.0 hugging face +1F917 ; fully-qualified # 🤗 E1.0 smiling face with open hands 1F92D ; fully-qualified # 🤭 E5.0 face with hand over mouth +1FAE2 ; fully-qualified # 🫢 E14.0 face with open eyes and hand over mouth +1FAE3 ; fully-qualified # 🫣 E14.0 face with peeking eye 1F92B ; fully-qualified # 🤫 E5.0 shushing face 1F914 ; fully-qualified # 🤔 E1.0 thinking face +1FAE1 ; fully-qualified # 🫡 E14.0 saluting face # subgroup: face-neutral-skeptical 1F910 ; fully-qualified # 🤐 E1.0 zipper-mouth face @@ -79,6 +83,7 @@ 1F610 ; fully-qualified # 😐 E0.7 neutral face 1F611 ; fully-qualified # 😑 E1.0 expressionless face 1F636 ; fully-qualified # 😶 E1.0 face without mouth +1FAE5 ; fully-qualified # 🫥 E14.0 dotted line face 1F636 200D 1F32B FE0F ; fully-qualified # 😶‍🌫️ E13.1 face in clouds 1F636 200D 1F32B ; minimally-qualified # 😶‍🌫 E13.1 face in clouds 1F60F ; fully-qualified # 😏 E0.6 smirking face @@ -105,7 +110,7 @@ 1F975 ; fully-qualified # 🥵 E11.0 hot face 1F976 ; fully-qualified # 🥶 E11.0 cold face 1F974 ; fully-qualified # 🥴 E11.0 woozy face -1F635 ; fully-qualified # 😵 E0.6 knocked-out face +1F635 ; fully-qualified # 😵 E0.6 face with crossed-out eyes 1F635 200D 1F4AB ; fully-qualified # 😵‍💫 E13.1 face with spiral eyes 1F92F ; fully-qualified # 🤯 E5.0 exploding head @@ -121,6 +126,7 @@ # subgroup: face-concerned 1F615 ; fully-qualified # 😕 E1.0 confused face +1FAE4 ; fully-qualified # 🫤 E14.0 face with diagonal mouth 1F61F ; fully-qualified # 😟 E1.0 worried face 1F641 ; fully-qualified # 🙁 E1.0 slightly frowning face 2639 FE0F ; fully-qualified # ☹️ E0.7 frowning face @@ -130,6 +136,7 @@ 1F632 ; fully-qualified # 😲 E0.6 astonished face 1F633 ; fully-qualified # 😳 E0.6 flushed face 1F97A ; fully-qualified # 🥺 E11.0 pleading face +1F979 ; fully-qualified # 🥹 E14.0 face holding back tears 1F626 ; fully-qualified # 😦 E1.0 frowning face with open mouth 1F627 ; fully-qualified # 😧 E1.0 anguished face 1F628 ; fully-qualified # 😨 E0.6 fearful face @@ -232,8 +239,8 @@ 1F4AD ; fully-qualified # 💭 E1.0 thought balloon 1F4A4 ; fully-qualified # 💤 E0.6 zzz -# Smileys & Emotion subtotal: 170 -# Smileys & Emotion subtotal: 170 w/o modifiers +# Smileys & Emotion subtotal: 177 +# Smileys & Emotion subtotal: 177 w/o modifiers # group: People & Body @@ -269,6 +276,30 @@ 1F596 1F3FD ; fully-qualified # 🖖🏽 E1.0 vulcan salute: medium skin tone 1F596 1F3FE ; fully-qualified # 🖖🏾 E1.0 vulcan salute: medium-dark skin tone 1F596 1F3FF ; fully-qualified # 🖖🏿 E1.0 vulcan salute: dark skin tone +1FAF1 ; fully-qualified # 🫱 E14.0 rightwards hand +1FAF1 1F3FB ; fully-qualified # 🫱🏻 E14.0 rightwards hand: light skin tone +1FAF1 1F3FC ; fully-qualified # 🫱🏼 E14.0 rightwards hand: medium-light skin tone +1FAF1 1F3FD ; fully-qualified # 🫱🏽 E14.0 rightwards hand: medium skin tone +1FAF1 1F3FE ; fully-qualified # 🫱🏾 E14.0 rightwards hand: medium-dark skin tone +1FAF1 1F3FF ; fully-qualified # 🫱🏿 E14.0 rightwards hand: dark skin tone +1FAF2 ; fully-qualified # 🫲 E14.0 leftwards hand +1FAF2 1F3FB ; fully-qualified # 🫲🏻 E14.0 leftwards hand: light skin tone +1FAF2 1F3FC ; fully-qualified # 🫲🏼 E14.0 leftwards hand: medium-light skin tone +1FAF2 1F3FD ; fully-qualified # 🫲🏽 E14.0 leftwards hand: medium skin tone +1FAF2 1F3FE ; fully-qualified # 🫲🏾 E14.0 leftwards hand: medium-dark skin tone +1FAF2 1F3FF ; fully-qualified # 🫲🏿 E14.0 leftwards hand: dark skin tone +1FAF3 ; fully-qualified # 🫳 E14.0 palm down hand +1FAF3 1F3FB ; fully-qualified # 🫳🏻 E14.0 palm down hand: light skin tone +1FAF3 1F3FC ; fully-qualified # 🫳🏼 E14.0 palm down hand: medium-light skin tone +1FAF3 1F3FD ; fully-qualified # 🫳🏽 E14.0 palm down hand: medium skin tone +1FAF3 1F3FE ; fully-qualified # 🫳🏾 E14.0 palm down hand: medium-dark skin tone +1FAF3 1F3FF ; fully-qualified # 🫳🏿 E14.0 palm down hand: dark skin tone +1FAF4 ; fully-qualified # 🫴 E14.0 palm up hand +1FAF4 1F3FB ; fully-qualified # 🫴🏻 E14.0 palm up hand: light skin tone +1FAF4 1F3FC ; fully-qualified # 🫴🏼 E14.0 palm up hand: medium-light skin tone +1FAF4 1F3FD ; fully-qualified # 🫴🏽 E14.0 palm up hand: medium skin tone +1FAF4 1F3FE ; fully-qualified # 🫴🏾 E14.0 palm up hand: medium-dark skin tone +1FAF4 1F3FF ; fully-qualified # 🫴🏿 E14.0 palm up hand: dark skin tone # subgroup: hand-fingers-partial 1F44C ; fully-qualified # 👌 E0.6 OK hand @@ -302,6 +333,12 @@ 1F91E 1F3FD ; fully-qualified # 🤞🏽 E3.0 crossed fingers: medium skin tone 1F91E 1F3FE ; fully-qualified # 🤞🏾 E3.0 crossed fingers: medium-dark skin tone 1F91E 1F3FF ; fully-qualified # 🤞🏿 E3.0 crossed fingers: dark skin tone +1FAF0 ; fully-qualified # 🫰 E14.0 hand with index finger and thumb crossed +1FAF0 1F3FB ; fully-qualified # 🫰🏻 E14.0 hand with index finger and thumb crossed: light skin tone +1FAF0 1F3FC ; fully-qualified # 🫰🏼 E14.0 hand with index finger and thumb crossed: medium-light skin tone +1FAF0 1F3FD ; fully-qualified # 🫰🏽 E14.0 hand with index finger and thumb crossed: medium skin tone +1FAF0 1F3FE ; fully-qualified # 🫰🏾 E14.0 hand with index finger and thumb crossed: medium-dark skin tone +1FAF0 1F3FF ; fully-qualified # 🫰🏿 E14.0 hand with index finger and thumb crossed: dark skin tone 1F91F ; fully-qualified # 🤟 E5.0 love-you gesture 1F91F 1F3FB ; fully-qualified # 🤟🏻 E5.0 love-you gesture: light skin tone 1F91F 1F3FC ; fully-qualified # 🤟🏼 E5.0 love-you gesture: medium-light skin tone @@ -359,6 +396,12 @@ 261D 1F3FD ; fully-qualified # ☝🏽 E1.0 index pointing up: medium skin tone 261D 1F3FE ; fully-qualified # ☝🏾 E1.0 index pointing up: medium-dark skin tone 261D 1F3FF ; fully-qualified # ☝🏿 E1.0 index pointing up: dark skin tone +1FAF5 ; fully-qualified # 🫵 E14.0 index pointing at the viewer +1FAF5 1F3FB ; fully-qualified # 🫵🏻 E14.0 index pointing at the viewer: light skin tone +1FAF5 1F3FC ; fully-qualified # 🫵🏼 E14.0 index pointing at the viewer: medium-light skin tone +1FAF5 1F3FD ; fully-qualified # 🫵🏽 E14.0 index pointing at the viewer: medium skin tone +1FAF5 1F3FE ; fully-qualified # 🫵🏾 E14.0 index pointing at the viewer: medium-dark skin tone +1FAF5 1F3FF ; fully-qualified # 🫵🏿 E14.0 index pointing at the viewer: dark skin tone # subgroup: hand-fingers-closed 1F44D ; fully-qualified # 👍 E0.6 thumbs up @@ -411,6 +454,12 @@ 1F64C 1F3FD ; fully-qualified # 🙌🏽 E1.0 raising hands: medium skin tone 1F64C 1F3FE ; fully-qualified # 🙌🏾 E1.0 raising hands: medium-dark skin tone 1F64C 1F3FF ; fully-qualified # 🙌🏿 E1.0 raising hands: dark skin tone +1FAF6 ; fully-qualified # 🫶 E14.0 heart hands +1FAF6 1F3FB ; fully-qualified # 🫶🏻 E14.0 heart hands: light skin tone +1FAF6 1F3FC ; fully-qualified # 🫶🏼 E14.0 heart hands: medium-light skin tone +1FAF6 1F3FD ; fully-qualified # 🫶🏽 E14.0 heart hands: medium skin tone +1FAF6 1F3FE ; fully-qualified # 🫶🏾 E14.0 heart hands: medium-dark skin tone +1FAF6 1F3FF ; fully-qualified # 🫶🏿 E14.0 heart hands: dark skin tone 1F450 ; fully-qualified # 👐 E0.6 open hands 1F450 1F3FB ; fully-qualified # 👐🏻 E1.0 open hands: light skin tone 1F450 1F3FC ; fully-qualified # 👐🏼 E1.0 open hands: medium-light skin tone @@ -424,6 +473,31 @@ 1F932 1F3FE ; fully-qualified # 🤲🏾 E5.0 palms up together: medium-dark skin tone 1F932 1F3FF ; fully-qualified # 🤲🏿 E5.0 palms up together: dark skin tone 1F91D ; fully-qualified # 🤝 E3.0 handshake +1F91D 1F3FB ; fully-qualified # 🤝🏻 E3.0 handshake: light skin tone +1F91D 1F3FC ; fully-qualified # 🤝🏼 E3.0 handshake: medium-light skin tone +1F91D 1F3FD ; fully-qualified # 🤝🏽 E3.0 handshake: medium skin tone +1F91D 1F3FE ; fully-qualified # 🤝🏾 E3.0 handshake: medium-dark skin tone +1F91D 1F3FF ; fully-qualified # 🤝🏿 E3.0 handshake: dark skin tone +1FAF1 1F3FB 200D 1FAF2 1F3FC ; fully-qualified # 🫱🏻‍🫲🏼 E14.0 handshake: light skin tone, medium-light skin tone +1FAF1 1F3FB 200D 1FAF2 1F3FD ; fully-qualified # 🫱🏻‍🫲🏽 E14.0 handshake: light skin tone, medium skin tone +1FAF1 1F3FB 200D 1FAF2 1F3FE ; fully-qualified # 🫱🏻‍🫲🏾 E14.0 handshake: light skin tone, medium-dark skin tone +1FAF1 1F3FB 200D 1FAF2 1F3FF ; fully-qualified # 🫱🏻‍🫲🏿 E14.0 handshake: light skin tone, dark skin tone +1FAF1 1F3FC 200D 1FAF2 1F3FB ; fully-qualified # 🫱🏼‍🫲🏻 E14.0 handshake: medium-light skin tone, light skin tone +1FAF1 1F3FC 200D 1FAF2 1F3FD ; fully-qualified # 🫱🏼‍🫲🏽 E14.0 handshake: medium-light skin tone, medium skin tone +1FAF1 1F3FC 200D 1FAF2 1F3FE ; fully-qualified # 🫱🏼‍🫲🏾 E14.0 handshake: medium-light skin tone, medium-dark skin tone +1FAF1 1F3FC 200D 1FAF2 1F3FF ; fully-qualified # 🫱🏼‍🫲🏿 E14.0 handshake: medium-light skin tone, dark skin tone +1FAF1 1F3FD 200D 1FAF2 1F3FB ; fully-qualified # 🫱🏽‍🫲🏻 E14.0 handshake: medium skin tone, light skin tone +1FAF1 1F3FD 200D 1FAF2 1F3FC ; fully-qualified # 🫱🏽‍🫲🏼 E14.0 handshake: medium skin tone, medium-light skin tone +1FAF1 1F3FD 200D 1FAF2 1F3FE ; fully-qualified # 🫱🏽‍🫲🏾 E14.0 handshake: medium skin tone, medium-dark skin tone +1FAF1 1F3FD 200D 1FAF2 1F3FF ; fully-qualified # 🫱🏽‍🫲🏿 E14.0 handshake: medium skin tone, dark skin tone +1FAF1 1F3FE 200D 1FAF2 1F3FB ; fully-qualified # 🫱🏾‍🫲🏻 E14.0 handshake: medium-dark skin tone, light skin tone +1FAF1 1F3FE 200D 1FAF2 1F3FC ; fully-qualified # 🫱🏾‍🫲🏼 E14.0 handshake: medium-dark skin tone, medium-light skin tone +1FAF1 1F3FE 200D 1FAF2 1F3FD ; fully-qualified # 🫱🏾‍🫲🏽 E14.0 handshake: medium-dark skin tone, medium skin tone +1FAF1 1F3FE 200D 1FAF2 1F3FF ; fully-qualified # 🫱🏾‍🫲🏿 E14.0 handshake: medium-dark skin tone, dark skin tone +1FAF1 1F3FF 200D 1FAF2 1F3FB ; fully-qualified # 🫱🏿‍🫲🏻 E14.0 handshake: dark skin tone, light skin tone +1FAF1 1F3FF 200D 1FAF2 1F3FC ; fully-qualified # 🫱🏿‍🫲🏼 E14.0 handshake: dark skin tone, medium-light skin tone +1FAF1 1F3FF 200D 1FAF2 1F3FD ; fully-qualified # 🫱🏿‍🫲🏽 E14.0 handshake: dark skin tone, medium skin tone +1FAF1 1F3FF 200D 1FAF2 1F3FE ; fully-qualified # 🫱🏿‍🫲🏾 E14.0 handshake: dark skin tone, medium-dark skin tone 1F64F ; fully-qualified # 🙏 E0.6 folded hands 1F64F 1F3FB ; fully-qualified # 🙏🏻 E1.0 folded hands: light skin tone 1F64F 1F3FC ; fully-qualified # 🙏🏼 E1.0 folded hands: medium-light skin tone @@ -501,6 +575,7 @@ 1F441 ; unqualified # 👁 E0.7 eye 1F445 ; fully-qualified # 👅 E0.6 tongue 1F444 ; fully-qualified # 👄 E0.6 mouth +1FAE6 ; fully-qualified # 🫦 E14.0 biting lip # subgroup: person 1F476 ; fully-qualified # 👶 E0.6 baby @@ -1472,6 +1547,12 @@ 1F477 1F3FE 200D 2640 ; minimally-qualified # 👷🏾‍♀ E4.0 woman construction worker: medium-dark skin tone 1F477 1F3FF 200D 2640 FE0F ; fully-qualified # 👷🏿‍♀️ E4.0 woman construction worker: dark skin tone 1F477 1F3FF 200D 2640 ; minimally-qualified # 👷🏿‍♀ E4.0 woman construction worker: dark skin tone +1FAC5 ; fully-qualified # 🫅 E14.0 person with crown +1FAC5 1F3FB ; fully-qualified # 🫅🏻 E14.0 person with crown: light skin tone +1FAC5 1F3FC ; fully-qualified # 🫅🏼 E14.0 person with crown: medium-light skin tone +1FAC5 1F3FD ; fully-qualified # 🫅🏽 E14.0 person with crown: medium skin tone +1FAC5 1F3FE ; fully-qualified # 🫅🏾 E14.0 person with crown: medium-dark skin tone +1FAC5 1F3FF ; fully-qualified # 🫅🏿 E14.0 person with crown: dark skin tone 1F934 ; fully-qualified # 🤴 E3.0 prince 1F934 1F3FB ; fully-qualified # 🤴🏻 E3.0 prince: light skin tone 1F934 1F3FC ; fully-qualified # 🤴🏼 E3.0 prince: medium-light skin tone @@ -1592,6 +1673,18 @@ 1F930 1F3FD ; fully-qualified # 🤰🏽 E3.0 pregnant woman: medium skin tone 1F930 1F3FE ; fully-qualified # 🤰🏾 E3.0 pregnant woman: medium-dark skin tone 1F930 1F3FF ; fully-qualified # 🤰🏿 E3.0 pregnant woman: dark skin tone +1FAC3 ; fully-qualified # 🫃 E14.0 pregnant man +1FAC3 1F3FB ; fully-qualified # 🫃🏻 E14.0 pregnant man: light skin tone +1FAC3 1F3FC ; fully-qualified # 🫃🏼 E14.0 pregnant man: medium-light skin tone +1FAC3 1F3FD ; fully-qualified # 🫃🏽 E14.0 pregnant man: medium skin tone +1FAC3 1F3FE ; fully-qualified # 🫃🏾 E14.0 pregnant man: medium-dark skin tone +1FAC3 1F3FF ; fully-qualified # 🫃🏿 E14.0 pregnant man: dark skin tone +1FAC4 ; fully-qualified # 🫄 E14.0 pregnant person +1FAC4 1F3FB ; fully-qualified # 🫄🏻 E14.0 pregnant person: light skin tone +1FAC4 1F3FC ; fully-qualified # 🫄🏼 E14.0 pregnant person: medium-light skin tone +1FAC4 1F3FD ; fully-qualified # 🫄🏽 E14.0 pregnant person: medium skin tone +1FAC4 1F3FE ; fully-qualified # 🫄🏾 E14.0 pregnant person: medium-dark skin tone +1FAC4 1F3FF ; fully-qualified # 🫄🏿 E14.0 pregnant person: dark skin tone 1F931 ; fully-qualified # 🤱 E5.0 breast-feeding 1F931 1F3FB ; fully-qualified # 🤱🏻 E5.0 breast-feeding: light skin tone 1F931 1F3FC ; fully-qualified # 🤱🏼 E5.0 breast-feeding: medium-light skin tone @@ -1862,6 +1955,7 @@ 1F9DF 200D 2642 ; minimally-qualified # 🧟‍♂ E5.0 man zombie 1F9DF 200D 2640 FE0F ; fully-qualified # 🧟‍♀️ E5.0 woman zombie 1F9DF 200D 2640 ; minimally-qualified # 🧟‍♀ E5.0 woman zombie +1F9CC ; fully-qualified # 🧌 E14.0 troll # subgroup: person-activity 1F486 ; fully-qualified # 💆 E0.6 person getting massage @@ -3168,8 +3262,8 @@ 1FAC2 ; fully-qualified # 🫂 E13.0 people hugging 1F463 ; fully-qualified # 👣 E0.6 footprints -# People & Body subtotal: 2899 -# People & Body subtotal: 494 w/o modifiers +# People & Body subtotal: 2986 +# People & Body subtotal: 506 w/o modifiers # group: Component @@ -3304,6 +3398,7 @@ 1F988 ; fully-qualified # 🦈 E3.0 shark 1F419 ; fully-qualified # 🐙 E0.6 octopus 1F41A ; fully-qualified # 🐚 E0.6 spiral shell +1FAB8 ; fully-qualified # 🪸 E14.0 coral # subgroup: animal-bug 1F40C ; fully-qualified # 🐌 E0.6 snail @@ -3329,6 +3424,7 @@ 1F490 ; fully-qualified # 💐 E0.6 bouquet 1F338 ; fully-qualified # 🌸 E0.6 cherry blossom 1F4AE ; fully-qualified # 💮 E0.6 white flower +1FAB7 ; fully-qualified # 🪷 E14.0 lotus 1F3F5 FE0F ; fully-qualified # 🏵️ E0.7 rosette 1F3F5 ; unqualified # 🏵 E0.7 rosette 1F339 ; fully-qualified # 🌹 E0.6 rose @@ -3353,9 +3449,11 @@ 1F341 ; fully-qualified # 🍁 E0.6 maple leaf 1F342 ; fully-qualified # 🍂 E0.6 fallen leaf 1F343 ; fully-qualified # 🍃 E0.6 leaf fluttering in wind +1FAB9 ; fully-qualified # 🪹 E14.0 empty nest +1FABA ; fully-qualified # 🪺 E14.0 nest with eggs -# Animals & Nature subtotal: 147 -# Animals & Nature subtotal: 147 w/o modifiers +# Animals & Nature subtotal: 151 +# Animals & Nature subtotal: 151 w/o modifiers # group: Food & Drink @@ -3396,6 +3494,7 @@ 1F9C5 ; fully-qualified # 🧅 E12.0 onion 1F344 ; fully-qualified # 🍄 E0.6 mushroom 1F95C ; fully-qualified # 🥜 E3.0 peanuts +1FAD8 ; fully-qualified # 🫘 E14.0 beans 1F330 ; fully-qualified # 🌰 E0.6 chestnut # subgroup: food-prepared @@ -3491,6 +3590,7 @@ 1F37B ; fully-qualified # 🍻 E0.6 clinking beer mugs 1F942 ; fully-qualified # 🥂 E3.0 clinking glasses 1F943 ; fully-qualified # 🥃 E3.0 tumbler glass +1FAD7 ; fully-qualified # 🫗 E14.0 pouring liquid 1F964 ; fully-qualified # 🥤 E5.0 cup with straw 1F9CB ; fully-qualified # 🧋 E13.0 bubble tea 1F9C3 ; fully-qualified # 🧃 E12.0 beverage box @@ -3504,10 +3604,11 @@ 1F374 ; fully-qualified # 🍴 E0.6 fork and knife 1F944 ; fully-qualified # 🥄 E3.0 spoon 1F52A ; fully-qualified # 🔪 E0.6 kitchen knife +1FAD9 ; fully-qualified # 🫙 E14.0 jar 1F3FA ; fully-qualified # 🏺 E1.0 amphora -# Food & Drink subtotal: 131 -# Food & Drink subtotal: 131 w/o modifiers +# Food & Drink subtotal: 134 +# Food & Drink subtotal: 134 w/o modifiers # group: Travel & Places @@ -3597,6 +3698,7 @@ 2668 FE0F ; fully-qualified # ♨️ E0.6 hot springs 2668 ; unqualified # ♨ E0.6 hot springs 1F3A0 ; fully-qualified # 🎠 E0.6 carousel horse +1F6DD ; fully-qualified # 🛝 E14.0 playground slide 1F3A1 ; fully-qualified # 🎡 E0.6 ferris wheel 1F3A2 ; fully-qualified # 🎢 E0.6 roller coaster 1F488 ; fully-qualified # 💈 E0.6 barber pole @@ -3652,6 +3754,7 @@ 1F6E2 FE0F ; fully-qualified # 🛢️ E0.7 oil drum 1F6E2 ; unqualified # 🛢 E0.7 oil drum 26FD ; fully-qualified # ⛽ E0.6 fuel pump +1F6DE ; fully-qualified # 🛞 E14.0 wheel 1F6A8 ; fully-qualified # 🚨 E0.6 police car light 1F6A5 ; fully-qualified # 🚥 E0.6 horizontal traffic light 1F6A6 ; fully-qualified # 🚦 E1.0 vertical traffic light @@ -3660,6 +3763,7 @@ # subgroup: transport-water 2693 ; fully-qualified # ⚓ E0.6 anchor +1F6DF ; fully-qualified # 🛟 E14.0 ring buoy 26F5 ; fully-qualified # ⛵ E0.6 sailboat 1F6F6 ; fully-qualified # 🛶 E3.0 canoe 1F6A4 ; fully-qualified # 🚤 E0.6 speedboat @@ -3797,8 +3901,8 @@ 1F4A7 ; fully-qualified # 💧 E0.6 droplet 1F30A ; fully-qualified # 🌊 E0.6 water wave -# Travel & Places subtotal: 264 -# Travel & Places subtotal: 264 w/o modifiers +# Travel & Places subtotal: 267 +# Travel & Places subtotal: 267 w/o modifiers # group: Activities @@ -3874,6 +3978,7 @@ 1F52E ; fully-qualified # 🔮 E0.6 crystal ball 1FA84 ; fully-qualified # 🪄 E13.0 magic wand 1F9FF ; fully-qualified # 🧿 E11.0 nazar amulet +1FAAC ; fully-qualified # 🪬 E14.0 hamsa 1F3AE ; fully-qualified # 🎮 E0.6 video game 1F579 FE0F ; fully-qualified # 🕹️ E0.7 joystick 1F579 ; unqualified # 🕹 E0.7 joystick @@ -3882,6 +3987,7 @@ 1F9E9 ; fully-qualified # 🧩 E11.0 puzzle piece 1F9F8 ; fully-qualified # 🧸 E11.0 teddy bear 1FA85 ; fully-qualified # 🪅 E13.0 piñata +1FAA9 ; fully-qualified # 🪩 E14.0 mirror ball 1FA86 ; fully-qualified # 🪆 E13.0 nesting dolls 2660 FE0F ; fully-qualified # ♠️ E0.6 spade suit 2660 ; unqualified # ♠ E0.6 spade suit @@ -3907,8 +4013,8 @@ 1F9F6 ; fully-qualified # 🧶 E11.0 yarn 1FAA2 ; fully-qualified # 🪢 E13.0 knot -# Activities subtotal: 95 -# Activities subtotal: 95 w/o modifiers +# Activities subtotal: 97 +# Activities subtotal: 97 w/o modifiers # group: Objects @@ -4009,6 +4115,7 @@ # subgroup: computer 1F50B ; fully-qualified # 🔋 E0.6 battery +1FAAB ; fully-qualified # 🪫 E14.0 low battery 1F50C ; fully-qualified # 🔌 E0.6 electric plug 1F4BB ; fully-qualified # 💻 E0.6 laptop 1F5A5 FE0F ; fully-qualified # 🖥️ E0.7 desktop computer @@ -4207,7 +4314,9 @@ 1FA78 ; fully-qualified # 🩸 E12.0 drop of blood 1F48A ; fully-qualified # 💊 E0.6 pill 1FA79 ; fully-qualified # 🩹 E12.0 adhesive bandage +1FA7C ; fully-qualified # 🩼 E14.0 crutch 1FA7A ; fully-qualified # 🩺 E12.0 stethoscope +1FA7B ; fully-qualified # 🩻 E14.0 x-ray # subgroup: household 1F6AA ; fully-qualified # 🚪 E0.6 door @@ -4232,6 +4341,7 @@ 1F9FB ; fully-qualified # 🧻 E11.0 roll of paper 1FAA3 ; fully-qualified # 🪣 E13.0 bucket 1F9FC ; fully-qualified # 🧼 E11.0 soap +1FAE7 ; fully-qualified # 🫧 E14.0 bubbles 1FAA5 ; fully-qualified # 🪥 E13.0 toothbrush 1F9FD ; fully-qualified # 🧽 E11.0 sponge 1F9EF ; fully-qualified # 🧯 E11.0 fire extinguisher @@ -4246,9 +4356,10 @@ 26B1 ; unqualified # ⚱ E1.0 funeral urn 1F5FF ; fully-qualified # 🗿 E0.6 moai 1FAA7 ; fully-qualified # 🪧 E13.0 placard +1FAAA ; fully-qualified # 🪪 E14.0 identification card -# Objects subtotal: 299 -# Objects subtotal: 299 w/o modifiers +# Objects subtotal: 304 +# Objects subtotal: 304 w/o modifiers # group: Symbols @@ -4409,6 +4520,7 @@ 2795 ; fully-qualified # ➕ E0.6 plus 2796 ; fully-qualified # ➖ E0.6 minus 2797 ; fully-qualified # ➗ E0.6 divide +1F7F0 ; fully-qualified # 🟰 E14.0 heavy equals sign 267E FE0F ; fully-qualified # ♾️ E11.0 infinity 267E ; unqualified # ♾ E11.0 infinity @@ -4581,8 +4693,8 @@ 1F533 ; fully-qualified # 🔳 E0.6 white square button 1F532 ; fully-qualified # 🔲 E0.6 black square button -# Symbols subtotal: 301 -# Symbols subtotal: 301 w/o modifiers +# Symbols subtotal: 302 +# Symbols subtotal: 302 w/o modifiers # group: Flags @@ -4871,7 +4983,7 @@ # Flags subtotal: 275 w/o modifiers # Status Counts -# fully-qualified : 3512 +# fully-qualified : 3624 # minimally-qualified : 817 # unqualified : 252 # component : 9 diff --git a/lib/pleroma/emoji.ex b/lib/pleroma/emoji.ex index f077fe5b4..dd65d56ae 100644 --- a/lib/pleroma/emoji.ex +++ b/lib/pleroma/emoji.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Emoji do @@ -9,6 +9,7 @@ defmodule Pleroma.Emoji do """ use GenServer + alias Pleroma.Emoji.Combinations alias Pleroma.Emoji.Loader require Logger @@ -137,4 +138,17 @@ defmodule Pleroma.Emoji do end def is_unicode_emoji?(_), do: false + + emoji_qualification_map = + emojis + |> Enum.filter(&String.contains?(&1, "\uFE0F")) + |> Combinations.variate_emoji_qualification() + + for {qualified, unqualified_list} <- emoji_qualification_map do + for unqualified <- unqualified_list do + def fully_qualify_emoji(unquote(unqualified)), do: unquote(qualified) + end + end + + def fully_qualify_emoji(emoji), do: emoji end diff --git a/lib/pleroma/emoji/combinations.ex b/lib/pleroma/emoji/combinations.ex new file mode 100644 index 000000000..981c73596 --- /dev/null +++ b/lib/pleroma/emoji/combinations.ex @@ -0,0 +1,45 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Emoji.Combinations do + # FE0F is the emoji variation sequence. It is used for fully-qualifying + # emoji, and that includes emoji combinations. + # This code generates combinations per emoji: for each FE0F, all possible + # combinations of the character being removed or staying will be generated. + # This is made as an attempt to find all partially-qualified and unqualified + # versions of a fully-qualified emoji. + # I have found *no cases* for which this would be a problem, after browsing + # the entire emoji list in emoji-test.txt. This is safe, and, sadly, most + # likely sane too. + + defp qualification_combinations(codepoints) do + qualification_combinations([[]], codepoints) + end + + defp qualification_combinations(acc, []), do: acc + + defp qualification_combinations(acc, ["\uFE0F" | tail]) do + acc + |> Enum.flat_map(fn x -> [x, x ++ ["\uFE0F"]] end) + |> qualification_combinations(tail) + end + + defp qualification_combinations(acc, [codepoint | tail]) do + acc + |> Enum.map(&Kernel.++(&1, [codepoint])) + |> qualification_combinations(tail) + end + + def variate_emoji_qualification(emoji) when is_binary(emoji) do + emoji + |> String.codepoints() + |> qualification_combinations() + |> Enum.map(&List.to_string/1) + end + + def variate_emoji_qualification(emoji) when is_list(emoji) do + emoji + |> Enum.map(fn emoji -> {emoji, variate_emoji_qualification(emoji)} end) + end +end diff --git a/lib/pleroma/emoji/formatter.ex b/lib/pleroma/emoji/formatter.ex index 191451952..87fd35f13 100644 --- a/lib/pleroma/emoji/formatter.ex +++ b/lib/pleroma/emoji/formatter.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Emoji.Formatter do diff --git a/lib/pleroma/emoji/loader.ex b/lib/pleroma/emoji/loader.ex index abc95d902..97d4b8f70 100644 --- a/lib/pleroma/emoji/loader.ex +++ b/lib/pleroma/emoji/loader.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Emoji.Loader do diff --git a/lib/pleroma/emoji/pack.ex b/lib/pleroma/emoji/pack.ex index 09bfcc868..a361ea200 100644 --- a/lib/pleroma/emoji/pack.ex +++ b/lib/pleroma/emoji/pack.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Emoji.Pack do diff --git a/lib/pleroma/filter.ex b/lib/pleroma/filter.ex index 82b9caf9b..db88bc021 100644 --- a/lib/pleroma/filter.ex +++ b/lib/pleroma/filter.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Filter do diff --git a/lib/pleroma/following_relationship.ex b/lib/pleroma/following_relationship.ex index b101b9ee7..15664c876 100644 --- a/lib/pleroma/following_relationship.ex +++ b/lib/pleroma/following_relationship.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.FollowingRelationship do diff --git a/lib/pleroma/formatter.ex b/lib/pleroma/formatter.ex index ae37946ab..a46c3e381 100644 --- a/lib/pleroma/formatter.ex +++ b/lib/pleroma/formatter.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Formatter do @@ -34,32 +34,34 @@ defmodule Pleroma.Formatter do def mention_handler("@" <> nickname, buffer, opts, acc) do case User.get_cached_by_nickname(nickname) do - %User{id: id} = user -> - user_url = user.uri || user.ap_id - nickname_text = get_nickname_text(nickname, opts) - - link = - Phoenix.HTML.Tag.content_tag( - :span, - Phoenix.HTML.Tag.content_tag( - :a, - ["@", Phoenix.HTML.Tag.content_tag(:span, nickname_text)], - "data-user": id, - class: "u-url mention", - href: user_url, - rel: "ugc" - ), - class: "h-card" - ) - |> Phoenix.HTML.safe_to_string() - - {link, %{acc | mentions: MapSet.put(acc.mentions, {"@" <> nickname, user})}} + %User{} = user -> + {mention_from_user(user, opts), + %{acc | mentions: MapSet.put(acc.mentions, {"@" <> nickname, user})}} _ -> {buffer, acc} end end + def mention_from_user(%User{id: id} = user, opts \\ %{mentions_format: :full}) do + user_url = user.uri || user.ap_id + nickname_text = get_nickname_text(user.nickname, opts) + + Phoenix.HTML.Tag.content_tag( + :span, + Phoenix.HTML.Tag.content_tag( + :a, + ["@", Phoenix.HTML.Tag.content_tag(:span, nickname_text)], + "data-user": id, + class: "u-url mention", + href: user_url, + rel: "ugc" + ), + class: "h-card" + ) + |> Phoenix.HTML.safe_to_string() + end + def hashtag_handler("#" <> tag = tag_text, _buffer, _opts, acc) do tag = String.downcase(tag) url = "#{Pleroma.Web.Endpoint.url()}/tag/#{tag}" diff --git a/lib/pleroma/frontend.ex b/lib/pleroma/frontend.ex index 34b7befb8..ec72fb6a4 100644 --- a/lib/pleroma/frontend.ex +++ b/lib/pleroma/frontend.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Frontend do diff --git a/lib/pleroma/gopher/server.ex b/lib/pleroma/gopher/server.ex index 1b85c49f5..0fde0adcf 100644 --- a/lib/pleroma/gopher/server.ex +++ b/lib/pleroma/gopher/server.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Gopher.Server do diff --git a/lib/pleroma/gun.ex b/lib/pleroma/gun.ex index bef1c9872..c2d6b4bf2 100644 --- a/lib/pleroma/gun.ex +++ b/lib/pleroma/gun.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Gun do diff --git a/lib/pleroma/gun/api.ex b/lib/pleroma/gun/api.ex index 24d542781..ff2100623 100644 --- a/lib/pleroma/gun/api.ex +++ b/lib/pleroma/gun/api.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Gun.API do diff --git a/lib/pleroma/gun/conn.ex b/lib/pleroma/gun/conn.ex index a1210eabf..7c5785def 100644 --- a/lib/pleroma/gun/conn.ex +++ b/lib/pleroma/gun/conn.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Gun.Conn do diff --git a/lib/pleroma/gun/connection_pool.ex b/lib/pleroma/gun/connection_pool.ex index f9fd77ade..2e851de19 100644 --- a/lib/pleroma/gun/connection_pool.ex +++ b/lib/pleroma/gun/connection_pool.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Gun.ConnectionPool do diff --git a/lib/pleroma/gun/connection_pool/reclaimer.ex b/lib/pleroma/gun/connection_pool/reclaimer.ex index 4c643d7cb..efd5c9fb8 100644 --- a/lib/pleroma/gun/connection_pool/reclaimer.ex +++ b/lib/pleroma/gun/connection_pool/reclaimer.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Gun.ConnectionPool.Reclaimer do diff --git a/lib/pleroma/gun/connection_pool/worker.ex b/lib/pleroma/gun/connection_pool/worker.ex index a3fa75386..38527ec1d 100644 --- a/lib/pleroma/gun/connection_pool/worker.ex +++ b/lib/pleroma/gun/connection_pool/worker.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Gun.ConnectionPool.Worker do diff --git a/lib/pleroma/gun/connection_pool/worker_supervisor.ex b/lib/pleroma/gun/connection_pool/worker_supervisor.ex index 016b675f4..d26a70be3 100644 --- a/lib/pleroma/gun/connection_pool/worker_supervisor.ex +++ b/lib/pleroma/gun/connection_pool/worker_supervisor.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Gun.ConnectionPool.WorkerSupervisor do diff --git a/lib/pleroma/hashtag.ex b/lib/pleroma/hashtag.ex index 53e2e9c89..a43d88220 100644 --- a/lib/pleroma/hashtag.ex +++ b/lib/pleroma/hashtag.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Hashtag do diff --git a/lib/pleroma/healthcheck.ex b/lib/pleroma/healthcheck.ex index c905bba3f..8e9ab8225 100644 --- a/lib/pleroma/healthcheck.ex +++ b/lib/pleroma/healthcheck.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Healthcheck do diff --git a/lib/pleroma/helpers/auth_helper.ex b/lib/pleroma/helpers/auth_helper.ex index 13e4c8158..61599e71c 100644 --- a/lib/pleroma/helpers/auth_helper.ex +++ b/lib/pleroma/helpers/auth_helper.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Helpers.AuthHelper do diff --git a/lib/pleroma/helpers/inet_helper.ex b/lib/pleroma/helpers/inet_helper.ex index 5acdfaed0..704d37f8a 100644 --- a/lib/pleroma/helpers/inet_helper.ex +++ b/lib/pleroma/helpers/inet_helper.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Helpers.InetHelper do diff --git a/lib/pleroma/helpers/media_helper.ex b/lib/pleroma/helpers/media_helper.ex index 738adfcaa..24c845fcd 100644 --- a/lib/pleroma/helpers/media_helper.ex +++ b/lib/pleroma/helpers/media_helper.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Helpers.MediaHelper do diff --git a/lib/pleroma/helpers/qt_fast_start.ex b/lib/pleroma/helpers/qt_fast_start.ex index c4d11b9dd..5711c7162 100644 --- a/lib/pleroma/helpers/qt_fast_start.ex +++ b/lib/pleroma/helpers/qt_fast_start.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Helpers.QtFastStart do diff --git a/lib/pleroma/helpers/uri_helper.ex b/lib/pleroma/helpers/uri_helper.ex index 8f6a664ad..c8d10d307 100644 --- a/lib/pleroma/helpers/uri_helper.ex +++ b/lib/pleroma/helpers/uri_helper.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Helpers.UriHelper do diff --git a/lib/pleroma/html.ex b/lib/pleroma/html.ex index bee66169d..5bf735c4f 100644 --- a/lib/pleroma/html.ex +++ b/lib/pleroma/html.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.HTML do diff --git a/lib/pleroma/http.ex b/lib/pleroma/http.ex index 07b3ab0ae..2e82ceff2 100644 --- a/lib/pleroma/http.ex +++ b/lib/pleroma/http.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.HTTP do diff --git a/lib/pleroma/http/adapter_helper.ex b/lib/pleroma/http/adapter_helper.ex index c667afd25..252a6aba5 100644 --- a/lib/pleroma/http/adapter_helper.ex +++ b/lib/pleroma/http/adapter_helper.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.HTTP.AdapterHelper do diff --git a/lib/pleroma/http/adapter_helper/default.ex b/lib/pleroma/http/adapter_helper/default.ex index a1614b9c5..9c9414738 100644 --- a/lib/pleroma/http/adapter_helper/default.ex +++ b/lib/pleroma/http/adapter_helper/default.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.HTTP.AdapterHelper.Default do diff --git a/lib/pleroma/http/adapter_helper/gun.ex b/lib/pleroma/http/adapter_helper/gun.ex index 251539f34..74ab9851e 100644 --- a/lib/pleroma/http/adapter_helper/gun.ex +++ b/lib/pleroma/http/adapter_helper/gun.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.HTTP.AdapterHelper.Gun do diff --git a/lib/pleroma/http/adapter_helper/hackney.ex b/lib/pleroma/http/adapter_helper/hackney.ex index fe3f91a72..f3be1f3d0 100644 --- a/lib/pleroma/http/adapter_helper/hackney.ex +++ b/lib/pleroma/http/adapter_helper/hackney.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.HTTP.AdapterHelper.Hackney do @@ -24,10 +24,6 @@ defmodule Pleroma.HTTP.AdapterHelper.Hackney do |> Pleroma.HTTP.AdapterHelper.maybe_add_proxy(proxy) end - defp add_scheme_opts(opts, %URI{scheme: "https"}) do - Keyword.put(opts, :ssl_options, versions: [:"tlsv1.2", :"tlsv1.1", :tlsv1]) - end - defp add_scheme_opts(opts, _), do: opts defp maybe_add_with_body(opts) do diff --git a/lib/pleroma/http/ex_aws.ex b/lib/pleroma/http/ex_aws.ex index 283590b18..469c13819 100644 --- a/lib/pleroma/http/ex_aws.ex +++ b/lib/pleroma/http/ex_aws.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.HTTP.ExAws do diff --git a/lib/pleroma/http/request.ex b/lib/pleroma/http/request.ex index d906024de..01045f8c9 100644 --- a/lib/pleroma/http/request.ex +++ b/lib/pleroma/http/request.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.HTTP.Request do diff --git a/lib/pleroma/http/request_builder.ex b/lib/pleroma/http/request_builder.ex index 631c927af..f16fb3b35 100644 --- a/lib/pleroma/http/request_builder.ex +++ b/lib/pleroma/http/request_builder.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.HTTP.RequestBuilder do diff --git a/lib/pleroma/http/tzdata.ex b/lib/pleroma/http/tzdata.ex index 77e1b537e..5d2529c08 100644 --- a/lib/pleroma/http/tzdata.ex +++ b/lib/pleroma/http/tzdata.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.HTTP.Tzdata do diff --git a/lib/pleroma/http/web_push.ex b/lib/pleroma/http/web_push.ex index 16bbe6e8c..ca399b6c8 100644 --- a/lib/pleroma/http/web_push.ex +++ b/lib/pleroma/http/web_push.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.HTTP.WebPush do diff --git a/lib/pleroma/instances.ex b/lib/pleroma/instances.ex index 6b57e56da..782948f83 100644 --- a/lib/pleroma/instances.ex +++ b/lib/pleroma/instances.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Instances do diff --git a/lib/pleroma/instances/instance.ex b/lib/pleroma/instances/instance.ex index 2f338b3e2..a5529ad44 100644 --- a/lib/pleroma/instances/instance.ex +++ b/lib/pleroma/instances/instance.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Instances.Instance do diff --git a/lib/pleroma/job_queue_monitor.ex b/lib/pleroma/job_queue_monitor.ex index b5f124923..6233cdcf5 100644 --- a/lib/pleroma/job_queue_monitor.ex +++ b/lib/pleroma/job_queue_monitor.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.JobQueueMonitor do diff --git a/lib/pleroma/jwt.ex b/lib/pleroma/jwt.ex index c75c44bd1..7ec6245d3 100644 --- a/lib/pleroma/jwt.ex +++ b/lib/pleroma/jwt.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.JWT do diff --git a/lib/pleroma/keys.ex b/lib/pleroma/keys.ex index 413861b15..496d20a71 100644 --- a/lib/pleroma/keys.ex +++ b/lib/pleroma/keys.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Keys do diff --git a/lib/pleroma/list.ex b/lib/pleroma/list.ex index fe5721c34..b446b91a0 100644 --- a/lib/pleroma/list.ex +++ b/lib/pleroma/list.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.List do diff --git a/lib/pleroma/logging.ex b/lib/pleroma/logging.ex index 11e1c3bed..ac09c0415 100644 --- a/lib/pleroma/logging.ex +++ b/lib/pleroma/logging.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Logging do diff --git a/lib/pleroma/maintenance.ex b/lib/pleroma/maintenance.ex index 41c799712..eb5a6ef42 100644 --- a/lib/pleroma/maintenance.ex +++ b/lib/pleroma/maintenance.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Maintenance do diff --git a/lib/pleroma/maps.ex b/lib/pleroma/maps.ex index b08b83305..6d586e53e 100644 --- a/lib/pleroma/maps.ex +++ b/lib/pleroma/maps.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Maps do diff --git a/lib/pleroma/marker.ex b/lib/pleroma/marker.ex index 9909de161..68b054e4d 100644 --- a/lib/pleroma/marker.ex +++ b/lib/pleroma/marker.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Marker do diff --git a/lib/pleroma/mfa.ex b/lib/pleroma/mfa.ex index 02dce7d49..01b730c76 100644 --- a/lib/pleroma/mfa.ex +++ b/lib/pleroma/mfa.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.MFA do diff --git a/lib/pleroma/mfa/backup_codes.ex b/lib/pleroma/mfa/backup_codes.ex index a7a1fba2e..2f6962c1f 100644 --- a/lib/pleroma/mfa/backup_codes.ex +++ b/lib/pleroma/mfa/backup_codes.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.MFA.BackupCodes do diff --git a/lib/pleroma/mfa/changeset.ex b/lib/pleroma/mfa/changeset.ex index 2d46cdf73..3ec3cfe91 100644 --- a/lib/pleroma/mfa/changeset.ex +++ b/lib/pleroma/mfa/changeset.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.MFA.Changeset do diff --git a/lib/pleroma/mfa/settings.ex b/lib/pleroma/mfa/settings.ex index 94fbff635..2c7f13e3f 100644 --- a/lib/pleroma/mfa/settings.ex +++ b/lib/pleroma/mfa/settings.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.MFA.Settings do diff --git a/lib/pleroma/mfa/token.ex b/lib/pleroma/mfa/token.ex index 76573182a..57bc11ed5 100644 --- a/lib/pleroma/mfa/token.ex +++ b/lib/pleroma/mfa/token.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.MFA.Token do diff --git a/lib/pleroma/mfa/totp.ex b/lib/pleroma/mfa/totp.ex index f33e3a379..429c4b700 100644 --- a/lib/pleroma/mfa/totp.ex +++ b/lib/pleroma/mfa/totp.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.MFA.TOTP do diff --git a/lib/pleroma/migration_helper/notification_backfill.ex b/lib/pleroma/migration_helper/notification_backfill.ex index 62b710f82..9f4976d9c 100644 --- a/lib/pleroma/migration_helper/notification_backfill.ex +++ b/lib/pleroma/migration_helper/notification_backfill.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.MigrationHelper.NotificationBackfill do diff --git a/lib/pleroma/migrators/hashtags_table_migrator.ex b/lib/pleroma/migrators/hashtags_table_migrator.ex index b84058e11..fa1190b7d 100644 --- a/lib/pleroma/migrators/hashtags_table_migrator.ex +++ b/lib/pleroma/migrators/hashtags_table_migrator.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Migrators.HashtagsTableMigrator do diff --git a/lib/pleroma/migrators/support/base_migrator.ex b/lib/pleroma/migrators/support/base_migrator.ex index 1f8a5402b..3bcd59fd0 100644 --- a/lib/pleroma/migrators/support/base_migrator.ex +++ b/lib/pleroma/migrators/support/base_migrator.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Migrators.Support.BaseMigrator do diff --git a/lib/pleroma/migrators/support/base_migrator_state.ex b/lib/pleroma/migrators/support/base_migrator_state.ex index b698587f2..3d7769fc6 100644 --- a/lib/pleroma/migrators/support/base_migrator_state.ex +++ b/lib/pleroma/migrators/support/base_migrator_state.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Migrators.Support.BaseMigratorState do diff --git a/lib/pleroma/moderation_log.ex b/lib/pleroma/moderation_log.ex index adb51d33a..7203423e2 100644 --- a/lib/pleroma/moderation_log.ex +++ b/lib/pleroma/moderation_log.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.ModerationLog do diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex index 9e0ce0329..52fd2656b 100644 --- a/lib/pleroma/notification.ex +++ b/lib/pleroma/notification.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Notification do @@ -341,6 +341,14 @@ defmodule Pleroma.Notification do |> Repo.delete_all() end + def destroy_multiple_from_types(%{id: user_id}, types) do + from(n in Notification, + where: n.user_id == ^user_id, + where: n.type in ^types + ) + |> Repo.delete_all() + end + def dismiss(%Pleroma.Activity{} = activity) do Notification |> where([n], n.activity_id == ^activity.id) diff --git a/lib/pleroma/object.ex b/lib/pleroma/object.ex index c3ea1b98b..fe264b5e0 100644 --- a/lib/pleroma/object.ex +++ b/lib/pleroma/object.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Object do diff --git a/lib/pleroma/object/containment.ex b/lib/pleroma/object/containment.ex index 040537acf..f6106cb3f 100644 --- a/lib/pleroma/object/containment.ex +++ b/lib/pleroma/object/containment.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Object.Containment do diff --git a/lib/pleroma/object/fetcher.ex b/lib/pleroma/object/fetcher.ex index 4ca67f0fd..deb3dc711 100644 --- a/lib/pleroma/object/fetcher.ex +++ b/lib/pleroma/object/fetcher.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Object.Fetcher do diff --git a/lib/pleroma/object_tombstone.ex b/lib/pleroma/object_tombstone.ex index a42d2d9a0..8bdc8f661 100644 --- a/lib/pleroma/object_tombstone.ex +++ b/lib/pleroma/object_tombstone.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.ObjectTombstone do diff --git a/lib/pleroma/otp_version.ex b/lib/pleroma/otp_version.ex index a5ac1b072..80b15275a 100644 --- a/lib/pleroma/otp_version.ex +++ b/lib/pleroma/otp_version.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.OTPVersion do diff --git a/lib/pleroma/pagination.ex b/lib/pleroma/pagination.ex index 33e45a0eb..f12ca2819 100644 --- a/lib/pleroma/pagination.ex +++ b/lib/pleroma/pagination.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Pagination do diff --git a/lib/pleroma/password/pbkdf2.ex b/lib/pleroma/password/pbkdf2.ex index 2fd5f4491..92e9e1952 100644 --- a/lib/pleroma/password/pbkdf2.ex +++ b/lib/pleroma/password/pbkdf2.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Password.Pbkdf2 do diff --git a/lib/pleroma/password_reset_token.ex b/lib/pleroma/password_reset_token.ex index edc8ed6a0..42a789ea2 100644 --- a/lib/pleroma/password_reset_token.ex +++ b/lib/pleroma/password_reset_token.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.PasswordResetToken do diff --git a/lib/pleroma/registration.ex b/lib/pleroma/registration.ex index 7b49618e1..b043c37ac 100644 --- a/lib/pleroma/registration.ex +++ b/lib/pleroma/registration.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Registration do diff --git a/lib/pleroma/release_tasks.ex b/lib/pleroma/release_tasks.ex index 1e06aafe4..f9e8d1948 100644 --- a/lib/pleroma/release_tasks.ex +++ b/lib/pleroma/release_tasks.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.ReleaseTasks do diff --git a/lib/pleroma/repo.ex b/lib/pleroma/repo.ex index 61b64ed3e..515b0c1ff 100644 --- a/lib/pleroma/repo.ex +++ b/lib/pleroma/repo.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Repo do diff --git a/lib/pleroma/report_note.ex b/lib/pleroma/report_note.ex index f8bab1548..f2ad76fa8 100644 --- a/lib/pleroma/report_note.ex +++ b/lib/pleroma/report_note.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.ReportNote do diff --git a/lib/pleroma/reverse_proxy.ex b/lib/pleroma/reverse_proxy.ex index ec69a1779..2248c2713 100644 --- a/lib/pleroma/reverse_proxy.ex +++ b/lib/pleroma/reverse_proxy.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.ReverseProxy do diff --git a/lib/pleroma/reverse_proxy/client.ex b/lib/pleroma/reverse_proxy/client.ex index 75243d2dc..91f6e5a95 100644 --- a/lib/pleroma/reverse_proxy/client.ex +++ b/lib/pleroma/reverse_proxy/client.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.ReverseProxy.Client do diff --git a/lib/pleroma/reverse_proxy/client/hackney.ex b/lib/pleroma/reverse_proxy/client/hackney.ex index dba946308..d3e986912 100644 --- a/lib/pleroma/reverse_proxy/client/hackney.ex +++ b/lib/pleroma/reverse_proxy/client/hackney.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.ReverseProxy.Client.Hackney do @@ -7,7 +7,6 @@ defmodule Pleroma.ReverseProxy.Client.Hackney do @impl true def request(method, url, headers, body, opts \\ []) do - opts = Keyword.put(opts, :ssl_options, versions: [:"tlsv1.2", :"tlsv1.1", :tlsv1]) :hackney.request(method, url, headers, body, opts) end diff --git a/lib/pleroma/reverse_proxy/client/tesla.ex b/lib/pleroma/reverse_proxy/client/tesla.ex index 36a0a2060..4596d7a7f 100644 --- a/lib/pleroma/reverse_proxy/client/tesla.ex +++ b/lib/pleroma/reverse_proxy/client/tesla.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.ReverseProxy.Client.Tesla do diff --git a/lib/pleroma/reverse_proxy/client/wrapper.ex b/lib/pleroma/reverse_proxy/client/wrapper.ex index ce144559f..1ce476927 100644 --- a/lib/pleroma/reverse_proxy/client/wrapper.ex +++ b/lib/pleroma/reverse_proxy/client/wrapper.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.ReverseProxy.Client.Wrapper do diff --git a/lib/pleroma/scheduled_activity.ex b/lib/pleroma/scheduled_activity.ex index 2b156341f..a7be58512 100644 --- a/lib/pleroma/scheduled_activity.ex +++ b/lib/pleroma/scheduled_activity.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.ScheduledActivity do diff --git a/lib/pleroma/signature.ex b/lib/pleroma/signature.ex index 43ab569a4..dbe6fd209 100644 --- a/lib/pleroma/signature.ex +++ b/lib/pleroma/signature.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Signature do diff --git a/lib/pleroma/stats.ex b/lib/pleroma/stats.ex index 3e3f24c2c..47b30b951 100644 --- a/lib/pleroma/stats.ex +++ b/lib/pleroma/stats.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Stats do diff --git a/lib/pleroma/telemetry/logger.ex b/lib/pleroma/telemetry/logger.ex index 35e245237..384c70fbc 100644 --- a/lib/pleroma/telemetry/logger.ex +++ b/lib/pleroma/telemetry/logger.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Telemetry.Logger do @@ -12,16 +12,10 @@ defmodule Pleroma.Telemetry.Logger do [:pleroma, :connection_pool, :reclaim, :stop], [:pleroma, :connection_pool, :provision_failure], [:pleroma, :connection_pool, :client, :dead], - [:pleroma, :connection_pool, :client, :add], - [:pleroma, :repo, :query] + [:pleroma, :connection_pool, :client, :add] ] def attach do - :telemetry.attach_many( - "pleroma-logger", - @events, - &Pleroma.Telemetry.Logger.handle_event/4, - [] - ) + :telemetry.attach_many("pleroma-logger", @events, &handle_event/4, []) end # Passing anonymous functions instead of strings to logger is intentional, @@ -93,64 +87,4 @@ defmodule Pleroma.Telemetry.Logger do end def handle_event([:pleroma, :connection_pool, :client, :add], _, _, _), do: :ok - - def handle_event( - [:pleroma, :repo, :query] = _name, - %{query_time: query_time} = measurements, - %{source: source} = metadata, - config - ) do - logging_config = Pleroma.Config.get([:telemetry, :slow_queries_logging], []) - - if logging_config[:enabled] && - logging_config[:min_duration] && - query_time > logging_config[:min_duration] and - (is_nil(logging_config[:exclude_sources]) or - source not in logging_config[:exclude_sources]) do - log_slow_query(measurements, metadata, config) - else - :ok - end - end - - defp log_slow_query( - %{query_time: query_time} = _measurements, - %{source: _source, query: query, params: query_params, repo: repo} = _metadata, - _config - ) do - sql_explain = - with {:ok, %{rows: explain_result_rows}} <- - repo.query("EXPLAIN " <> query, query_params, log: false) do - Enum.map_join(explain_result_rows, "\n", & &1) - end - - {:current_stacktrace, stacktrace} = Process.info(self(), :current_stacktrace) - - pleroma_stacktrace = - Enum.filter(stacktrace, fn - {__MODULE__, _, _, _} -> - false - - {mod, _, _, _} -> - mod - |> to_string() - |> String.starts_with?("Elixir.Pleroma.") - end) - - Logger.warn(fn -> - """ - Slow query! - - Total time: #{round(query_time / 1_000)} ms - - #{query} - - #{inspect(query_params, limit: :infinity)} - - #{sql_explain} - - #{Exception.format_stacktrace(pleroma_stacktrace)} - """ - end) - end end diff --git a/lib/pleroma/tesla/middleware/connection_pool.ex b/lib/pleroma/tesla/middleware/connection_pool.ex index 906706d39..de74270f8 100644 --- a/lib/pleroma/tesla/middleware/connection_pool.ex +++ b/lib/pleroma/tesla/middleware/connection_pool.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Tesla.Middleware.ConnectionPool do diff --git a/lib/pleroma/tests/auth_test_controller.ex b/lib/pleroma/tests/auth_test_controller.ex index 76514948b..d244badf4 100644 --- a/lib/pleroma/tests/auth_test_controller.ex +++ b/lib/pleroma/tests/auth_test_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only # A test controller reachable only in :test env. diff --git a/lib/pleroma/thread_mute.ex b/lib/pleroma/thread_mute.ex index 5d06cf030..8ea4181bd 100644 --- a/lib/pleroma/thread_mute.ex +++ b/lib/pleroma/thread_mute.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.ThreadMute do diff --git a/lib/pleroma/upload.ex b/lib/pleroma/upload.ex index 17822dc5e..db2909276 100644 --- a/lib/pleroma/upload.ex +++ b/lib/pleroma/upload.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Upload do @@ -60,12 +60,23 @@ defmodule Pleroma.Upload do width: integer(), height: integer(), blurhash: String.t(), + description: String.t(), path: String.t() } - defstruct [:id, :name, :tempfile, :content_type, :width, :height, :blurhash, :path] + defstruct [ + :id, + :name, + :tempfile, + :content_type, + :width, + :height, + :blurhash, + :description, + :path + ] - defp get_description(opts, upload) do - case {opts[:description], Pleroma.Config.get([Pleroma.Upload, :default_description])} do + defp get_description(upload) do + case {upload.description, Pleroma.Config.get([Pleroma.Upload, :default_description])} do {description, _} when is_binary(description) -> description {_, :filename} -> upload.name {_, str} when is_binary(str) -> str @@ -81,7 +92,7 @@ defmodule Pleroma.Upload do with {:ok, upload} <- prepare_upload(upload, opts), upload = %__MODULE__{upload | path: upload.path || "#{upload.id}/#{upload.name}"}, {:ok, upload} <- Pleroma.Upload.Filter.filter(opts.filters, upload), - description = get_description(opts, upload), + description = get_description(upload), {_, true} <- {:description_limit, String.length(description) <= Pleroma.Config.get([:instance, :description_limit])}, @@ -152,7 +163,8 @@ defmodule Pleroma.Upload do id: UUID.generate(), name: file.filename, tempfile: file.path, - content_type: file.content_type + content_type: file.content_type, + description: opts.description }} end end @@ -172,7 +184,8 @@ defmodule Pleroma.Upload do id: UUID.generate(), name: hash <> "." <> ext, tempfile: tmp_path, - content_type: content_type + content_type: content_type, + description: opts.description }} end end diff --git a/lib/pleroma/upload/filter.ex b/lib/pleroma/upload/filter.ex index e5db2fb20..717f06621 100644 --- a/lib/pleroma/upload/filter.ex +++ b/lib/pleroma/upload/filter.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Upload.Filter do diff --git a/lib/pleroma/upload/filter/analyze_metadata.ex b/lib/pleroma/upload/filter/analyze_metadata.ex index c89c30fc1..9a76a998b 100644 --- a/lib/pleroma/upload/filter/analyze_metadata.ex +++ b/lib/pleroma/upload/filter/analyze_metadata.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Upload.Filter.AnalyzeMetadata do diff --git a/lib/pleroma/upload/filter/anonymize_filename.ex b/lib/pleroma/upload/filter/anonymize_filename.ex index 7e62b3d13..234ccb6bb 100644 --- a/lib/pleroma/upload/filter/anonymize_filename.ex +++ b/lib/pleroma/upload/filter/anonymize_filename.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Upload.Filter.AnonymizeFilename do diff --git a/lib/pleroma/upload/filter/dedupe.ex b/lib/pleroma/upload/filter/dedupe.ex index 2bf581b05..ef793d390 100644 --- a/lib/pleroma/upload/filter/dedupe.ex +++ b/lib/pleroma/upload/filter/dedupe.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Upload.Filter.Dedupe do diff --git a/lib/pleroma/upload/filter/exiftool/read_description.ex b/lib/pleroma/upload/filter/exiftool/read_description.ex new file mode 100644 index 000000000..03d698a81 --- /dev/null +++ b/lib/pleroma/upload/filter/exiftool/read_description.ex @@ -0,0 +1,49 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2021 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Upload.Filter.Exiftool.ReadDescription do + @moduledoc """ + Gets a valid description from the related EXIF tags and provides them in the response if no description is provided yet. + It will first check ImageDescription, when that doesn't probide a valid description, it will check iptc:Caption-Abstract. + A valid description means the fields are filled in and not too long (see `:instance, :description_limit`). + """ + @behaviour Pleroma.Upload.Filter + + @spec filter(Pleroma.Upload.t()) :: {:ok, any()} | {:error, String.t()} + + def filter(%Pleroma.Upload{description: description}) + when is_binary(description), + do: {:ok, :noop} + + def filter(%Pleroma.Upload{tempfile: file} = upload), + do: {:ok, :filtered, upload |> Map.put(:description, read_description_from_exif_data(file))} + + def filter(_, _), do: {:ok, :noop} + + defp read_description_from_exif_data(file) do + nil + |> read_when_empty(file, "-ImageDescription") + |> read_when_empty(file, "-iptc:Caption-Abstract") + end + + defp read_when_empty(current_description, _, _) when is_binary(current_description), + do: current_description + + defp read_when_empty(_, file, tag) do + try do + {tag_content, 0} = + System.cmd("exiftool", ["-b", "-s3", tag, file], stderr_to_stdout: true, parallelism: true) + + tag_content = String.trim(tag_content) + + if tag_content != "" and + String.length(tag_content) <= + Pleroma.Config.get([:instance, :description_limit]), + do: tag_content, + else: nil + rescue + _ in ErlangError -> nil + end + end +end diff --git a/lib/pleroma/upload/filter/exiftool.ex b/lib/pleroma/upload/filter/exiftool/strip_location.ex similarity index 88% rename from lib/pleroma/upload/filter/exiftool.ex rename to lib/pleroma/upload/filter/exiftool/strip_location.ex index a2bfbbf61..6100527d3 100644 --- a/lib/pleroma/upload/filter/exiftool.ex +++ b/lib/pleroma/upload/filter/exiftool/strip_location.ex @@ -1,8 +1,8 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only -defmodule Pleroma.Upload.Filter.Exiftool do +defmodule Pleroma.Upload.Filter.Exiftool.StripLocation do @moduledoc """ Strips GPS related EXIF tags and overwrites the file in place. Also strips or replaces filesystem metadata e.g., timestamps. diff --git a/lib/pleroma/upload/filter/mogrifun.ex b/lib/pleroma/upload/filter/mogrifun.ex index 01126aaeb..a0f247b70 100644 --- a/lib/pleroma/upload/filter/mogrifun.ex +++ b/lib/pleroma/upload/filter/mogrifun.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Upload.Filter.Mogrifun do diff --git a/lib/pleroma/upload/filter/mogrify.ex b/lib/pleroma/upload/filter/mogrify.ex index f27aefc22..06efbf321 100644 --- a/lib/pleroma/upload/filter/mogrify.ex +++ b/lib/pleroma/upload/filter/mogrify.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Upload.Filter.Mogrify do diff --git a/lib/pleroma/uploaders/local.ex b/lib/pleroma/uploaders/local.ex index 0e1ba4b90..e4a309cea 100644 --- a/lib/pleroma/uploaders/local.ex +++ b/lib/pleroma/uploaders/local.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Uploaders.Local do diff --git a/lib/pleroma/uploaders/s3.ex b/lib/pleroma/uploaders/s3.ex index d85c8cb2f..19287c532 100644 --- a/lib/pleroma/uploaders/s3.ex +++ b/lib/pleroma/uploaders/s3.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Uploaders.S3 do diff --git a/lib/pleroma/uploaders/uploader.ex b/lib/pleroma/uploaders/uploader.ex index deba548b7..77f6f02dd 100644 --- a/lib/pleroma/uploaders/uploader.ex +++ b/lib/pleroma/uploaders/uploader.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Uploaders.Uploader do diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 3c0de4f24..eeea240fb 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.User do @@ -78,6 +78,10 @@ defmodule Pleroma.User do inverse_subscription: [ subscribee_subscriptions: :subscriber_users, subscriber_subscriptions: :subscribee_users + ], + endorsement: [ + endorser_endorsements: :endorsed_users, + endorsee_endorsements: :endorser_users ] ] @@ -150,6 +154,9 @@ defmodule Pleroma.User do field(:pinned_objects, :map, default: %{}) field(:is_suggested, :boolean, default: false) field(:last_status_at, :naive_datetime) + field(:birthday, :date) + field(:show_birthday, :boolean, default: false) + field(:language, :string) embeds_one( :notification_settings, @@ -170,25 +177,25 @@ defmodule Pleroma.User do {incoming_relation, incoming_relation_source} ]} <- @user_relationships_config do # Definitions of `has_many` relations: :blocker_blocks, :muter_mutes, :reblog_muter_mutes, - # :notification_muter_mutes, :subscribee_subscriptions + # :notification_muter_mutes, :subscribee_subscriptions, :endorser_endorsements has_many(outgoing_relation, UserRelationship, foreign_key: :source_id, where: [relationship_type: relationship_type] ) # Definitions of `has_many` relations: :blockee_blocks, :mutee_mutes, :reblog_mutee_mutes, - # :notification_mutee_mutes, :subscriber_subscriptions + # :notification_mutee_mutes, :subscriber_subscriptions, :endorsee_endorsements has_many(incoming_relation, UserRelationship, foreign_key: :target_id, where: [relationship_type: relationship_type] ) # Definitions of `has_many` relations: :blocked_users, :muted_users, :reblog_muted_users, - # :notification_muted_users, :subscriber_users + # :notification_muted_users, :subscriber_users, :endorsed_users has_many(outgoing_relation_target, through: [outgoing_relation, :target]) # Definitions of `has_many` relations: :blocker_users, :muter_users, :reblog_muter_users, - # :notification_muter_users, :subscribee_users + # :notification_muter_users, :subscribee_users, :endorser_users has_many(incoming_relation_source, through: [incoming_relation, :source]) end @@ -216,7 +223,7 @@ defmodule Pleroma.User do @user_relationships_config do # `def blocked_users_relation/2`, `def muted_users_relation/2`, # `def reblog_muted_users_relation/2`, `def notification_muted_users/2`, - # `def subscriber_users/2` + # `def subscriber_users/2`, `def endorsed_users_relation/2` def unquote(:"#{outgoing_relation_target}_relation")(user, restrict_deactivated? \\ false) do target_users_query = assoc(user, unquote(outgoing_relation_target)) @@ -229,7 +236,7 @@ defmodule Pleroma.User do end # `def blocked_users/2`, `def muted_users/2`, `def reblog_muted_users/2`, - # `def notification_muted_users/2`, `def subscriber_users/2` + # `def notification_muted_users/2`, `def subscriber_users/2`, `def endorsed_users/2` def unquote(outgoing_relation_target)(user, restrict_deactivated? \\ false) do __MODULE__ |> apply(unquote(:"#{outgoing_relation_target}_relation"), [ @@ -240,7 +247,8 @@ defmodule Pleroma.User do end # `def blocked_users_ap_ids/2`, `def muted_users_ap_ids/2`, `def reblog_muted_users_ap_ids/2`, - # `def notification_muted_users_ap_ids/2`, `def subscriber_users_ap_ids/2` + # `def notification_muted_users_ap_ids/2`, `def subscriber_users_ap_ids/2`, + # `def endorsed_users_ap_ids/2` def unquote(:"#{outgoing_relation_target}_ap_ids")(user, restrict_deactivated? \\ false) do __MODULE__ |> apply(unquote(:"#{outgoing_relation_target}_relation"), [ @@ -465,7 +473,9 @@ defmodule Pleroma.User do :actor_type, :also_known_as, :accepts_chat_messages, - :pinned_objects + :pinned_objects, + :birthday, + :show_birthday ] ) |> cast(params, [:name], empty_values: []) @@ -526,9 +536,12 @@ defmodule Pleroma.User do :is_discoverable, :actor_type, :accepts_chat_messages, - :disclose_client + :disclose_client, + :birthday, + :show_birthday ] ) + |> validate_min_age() |> unique_constraint(:nickname) |> validate_format(:nickname, local_nickname_regex()) |> validate_length(:bio, max: bio_limit) @@ -693,7 +706,7 @@ defmodule Pleroma.User do ]) |> validate_required([:name, :nickname]) |> unique_constraint(:nickname) - |> validate_exclusion(:nickname, Config.get([User, :restricted_nicknames])) + |> validate_not_restricted_nickname(:nickname) |> validate_format(:nickname, local_nickname_regex()) |> put_ap_id() |> unique_constraint(:ap_id) @@ -733,34 +746,59 @@ defmodule Pleroma.User do :password_confirmation, :emoji, :accepts_chat_messages, - :registration_reason + :registration_reason, + :birthday, + :language ]) |> validate_required([:name, :nickname, :password, :password_confirmation]) |> validate_confirmation(:password) |> unique_constraint(:email) |> validate_format(:email, @email_regex) - |> validate_change(:email, fn :email, email -> - valid? = - Config.get([User, :email_blacklist]) - |> Enum.all?(fn blacklisted_domain -> - !String.ends_with?(email, ["@" <> blacklisted_domain, "." <> blacklisted_domain]) - end) - - if valid?, do: [], else: [email: "Invalid email"] - end) + |> validate_email_not_in_blacklisted_domain(:email) |> unique_constraint(:nickname) - |> validate_exclusion(:nickname, Config.get([User, :restricted_nicknames])) + |> validate_not_restricted_nickname(:nickname) |> validate_format(:nickname, local_nickname_regex()) |> validate_length(:bio, max: bio_limit) |> validate_length(:name, min: 1, max: name_limit) |> validate_length(:registration_reason, max: reason_limit) |> maybe_validate_required_email(opts[:external]) + |> maybe_validate_required_birthday + |> validate_min_age() |> put_password_hash |> put_ap_id() |> unique_constraint(:ap_id) |> put_following_and_follower_and_featured_address() end + def validate_not_restricted_nickname(changeset, field) do + validate_change(changeset, field, fn _, value -> + valid? = + Config.get([User, :restricted_nicknames]) + |> Enum.all?(fn restricted_nickname -> + String.downcase(value) != String.downcase(restricted_nickname) + end) + + if valid?, do: [], else: [nickname: "Invalid nickname"] + end) + end + + def validate_email_not_in_blacklisted_domain(changeset, field) do + validate_change(changeset, field, fn _, value -> + valid? = + Config.get([User, :email_blacklist]) + |> Enum.all?(fn blacklisted_domain -> + blacklisted_domain_downcase = String.downcase(blacklisted_domain) + + !String.ends_with?(String.downcase(value), [ + "@" <> blacklisted_domain_downcase, + "." <> blacklisted_domain_downcase + ]) + end) + + if valid?, do: [], else: [email: "Invalid email"] + end) + end + def maybe_validate_required_email(changeset, true), do: changeset def maybe_validate_required_email(changeset, _) do @@ -771,6 +809,26 @@ defmodule Pleroma.User do end end + defp maybe_validate_required_birthday(changeset) do + if Config.get([:instance, :birthday_required]) do + validate_required(changeset, [:birthday]) + else + changeset + end + end + + defp validate_min_age(changeset) do + changeset + |> validate_change(:birthday, fn :birthday, birthday -> + valid? = + Date.utc_today() + |> Date.diff(birthday) >= + Config.get([:instance, :birthday_min_age]) + + if valid?, do: [], else: [birthday: "Invalid age"] + end) + end + defp put_ap_id(changeset) do ap_id = ap_id(%User{nickname: get_field(changeset, :nickname)}) put_change(changeset, :ap_id, ap_id) @@ -1050,6 +1108,10 @@ defmodule Pleroma.User do Repo.get_by(User, ap_id: ap_id) end + def get_by_uri(uri) do + Repo.get_by(User, uri: uri) + end + def get_all_by_ap_id(ap_ids) do from(u in __MODULE__, where: u.ap_id in ^ap_ids @@ -1088,10 +1150,24 @@ defmodule Pleroma.User do |> update_and_set_cache() end - def update_and_set_cache(changeset) do + def update_and_set_cache(%{data: %Pleroma.User{} = user} = changeset) do + was_superuser_before_update = User.superuser?(user) + with {:ok, user} <- Repo.update(changeset, stale_error_field: :id) do set_cache(user) end + |> maybe_remove_report_notifications(was_superuser_before_update) + end + + defp maybe_remove_report_notifications({:ok, %Pleroma.User{} = user} = result, true) do + if not User.superuser?(user), + do: user |> Notification.destroy_multiple_from_types(["pleroma:report"]) + + result + end + + defp maybe_remove_report_notifications(result, _) do + result end def get_user_friends_ap_ids(user) do @@ -1404,17 +1480,30 @@ defmodule Pleroma.User do {:ok, list(UserRelationship.t())} | {:error, String.t()} def mute(%User{} = muter, %User{} = mutee, params \\ %{}) do notifications? = Map.get(params, :notifications, true) - expires_in = Map.get(params, :expires_in, 0) + duration = Map.get(params, :duration, 0) - with {:ok, user_mute} <- UserRelationship.create_mute(muter, mutee), + expires_at = + if duration > 0 do + DateTime.utc_now() + |> DateTime.add(duration) + else + nil + end + + with {:ok, user_mute} <- UserRelationship.create_mute(muter, mutee, expires_at), {:ok, user_notification_mute} <- - (notifications? && UserRelationship.create_notification_mute(muter, mutee)) || + (notifications? && + UserRelationship.create_notification_mute( + muter, + mutee, + expires_at + )) || {:ok, nil} do - if expires_in > 0 do + if duration > 0 do Pleroma.Workers.MuteExpireWorker.enqueue( "unmute_user", %{"muter_id" => muter.id, "mutee_id" => mutee.id}, - schedule_in: expires_in + scheduled_at: expires_at ) end @@ -1516,6 +1605,40 @@ defmodule Pleroma.User do unblock(blocker, get_cached_by_ap_id(ap_id)) end + def endorse(%User{} = endorser, %User{} = target) do + with max_endorsed_users <- Pleroma.Config.get([:instance, :max_endorsed_users], 0), + endorsed_users <- + User.endorsed_users_relation(endorser) + |> Repo.aggregate(:count, :id) do + cond do + endorsed_users >= max_endorsed_users -> + {:error, "You have already pinned the maximum number of users"} + + not following?(endorser, target) -> + {:error, "Could not endorse: You are not following #{target.nickname}"} + + true -> + UserRelationship.create_endorsement(endorser, target) + end + end + end + + def endorse(%User{} = endorser, %{ap_id: ap_id}) do + with %User{} = endorsed <- get_cached_by_ap_id(ap_id) do + endorse(endorser, endorsed) + end + end + + def unendorse(%User{} = unendorser, %User{} = target) do + UserRelationship.delete_endorsement(unendorser, target) + end + + def unendorse(%User{} = unendorser, %{ap_id: ap_id}) do + with %User{} = user <- get_cached_by_ap_id(ap_id) do + unendorse(unendorser, user) + end + end + def mutes?(nil, _), do: false def mutes?(%User{} = user, %User{} = target), do: mutes_user?(user, target) @@ -1561,6 +1684,10 @@ defmodule Pleroma.User do end end + def endorses?(%User{} = user, %User{} = target) do + UserRelationship.endorsement_exists?(user, target) + end + @doc """ Returns map of outgoing (blocked, muted etc.) relationships' user AP IDs by relation type. E.g. `outgoing_relationships_ap_ids(user, [:block])` -> `%{block: ["https://some.site/users/userapid"]}` @@ -2232,6 +2359,7 @@ defmodule Pleroma.User do def get_ap_ids_by_nicknames(nicknames) do from(u in User, where: u.nickname in ^nicknames, + order_by: fragment("array_position(?, ?)", ^nicknames, u.nickname), select: u.ap_id ) |> Repo.all() @@ -2544,4 +2672,13 @@ defmodule Pleroma.User do _ -> {:error, user} end end + + def get_friends_birthdays_query(%User{} = user, day, month) do + User.Query.build(%{ + friends: user, + deactivated: false, + birthday_day: day, + birthday_month: month + }) + end end diff --git a/lib/pleroma/user/backup.ex b/lib/pleroma/user/backup.ex index cba94248f..9cb329663 100644 --- a/lib/pleroma/user/backup.ex +++ b/lib/pleroma/user/backup.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.User.Backup do diff --git a/lib/pleroma/user/import.ex b/lib/pleroma/user/import.ex index 60cd18041..4baa7e3a4 100644 --- a/lib/pleroma/user/import.ex +++ b/lib/pleroma/user/import.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.User.Import do diff --git a/lib/pleroma/user/notification_setting.ex b/lib/pleroma/user/notification_setting.ex index a7cd61499..3fb845d71 100644 --- a/lib/pleroma/user/notification_setting.ex +++ b/lib/pleroma/user/notification_setting.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.User.NotificationSetting do diff --git a/lib/pleroma/user/query.ex b/lib/pleroma/user/query.ex index bf78cb32d..20bc1ea61 100644 --- a/lib/pleroma/user/query.ex +++ b/lib/pleroma/user/query.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.User.Query do @@ -59,7 +59,9 @@ defmodule Pleroma.User.Query do order_by: term(), select: term(), limit: pos_integer(), - actor_types: [String.t()] + actor_types: [String.t()], + birthday_day: pos_integer(), + birthday_month: pos_integer() } | map() @@ -230,6 +232,20 @@ defmodule Pleroma.User.Query do |> where([u], not like(u.nickname, "internal.%")) end + defp compose_query({:birthday_day, day}, query) do + query + |> where([u], u.show_birthday == true) + |> where([u], not is_nil(u.birthday)) + |> where([u], fragment("date_part('day', ?)", u.birthday) == ^day) + end + + defp compose_query({:birthday_month, month}, query) do + query + |> where([u], u.show_birthday == true) + |> where([u], not is_nil(u.birthday)) + |> where([u], fragment("date_part('month', ?)", u.birthday) == ^month) + end + defp compose_query(_unsupported_param, query), do: query defp location_query(query, local) do diff --git a/lib/pleroma/user/search.ex b/lib/pleroma/user/search.ex index a4f6abca2..cd6f69f56 100644 --- a/lib/pleroma/user/search.ex +++ b/lib/pleroma/user/search.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.User.Search do diff --git a/lib/pleroma/user/welcome_chat_message.ex b/lib/pleroma/user/welcome_chat_message.ex index 0d6690e34..31e0bfaf6 100644 --- a/lib/pleroma/user/welcome_chat_message.ex +++ b/lib/pleroma/user/welcome_chat_message.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.User.WelcomeChatMessage do diff --git a/lib/pleroma/user/welcome_email.ex b/lib/pleroma/user/welcome_email.ex index 295c1acc7..970975a49 100644 --- a/lib/pleroma/user/welcome_email.ex +++ b/lib/pleroma/user/welcome_email.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.User.WelcomeEmail do diff --git a/lib/pleroma/user/welcome_message.ex b/lib/pleroma/user/welcome_message.ex index 2cff05549..6010e808c 100644 --- a/lib/pleroma/user/welcome_message.ex +++ b/lib/pleroma/user/welcome_message.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.User.WelcomeMessage do diff --git a/lib/pleroma/user_invite_token.ex b/lib/pleroma/user_invite_token.ex index 4cff1c515..b242a8848 100644 --- a/lib/pleroma/user_invite_token.ex +++ b/lib/pleroma/user_invite_token.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.UserInviteToken do diff --git a/lib/pleroma/user_note.ex b/lib/pleroma/user_note.ex index 5e82d359f..d4b8256b0 100644 --- a/lib/pleroma/user_note.ex +++ b/lib/pleroma/user_note.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.UserNote do diff --git a/lib/pleroma/user_relationship.ex b/lib/pleroma/user_relationship.ex index a467e9b65..5b3e593d3 100644 --- a/lib/pleroma/user_relationship.ex +++ b/lib/pleroma/user_relationship.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.UserRelationship do @@ -18,25 +18,35 @@ defmodule Pleroma.UserRelationship do belongs_to(:source, User, type: FlakeId.Ecto.CompatType) belongs_to(:target, User, type: FlakeId.Ecto.CompatType) field(:relationship_type, Pleroma.UserRelationship.Type) + field(:expires_at, :utc_datetime) timestamps(updated_at: false) end for relationship_type <- Keyword.keys(Pleroma.UserRelationship.Type.__enum_map__()) do - # `def create_block/2`, `def create_mute/2`, `def create_reblog_mute/2`, - # `def create_notification_mute/2`, `def create_inverse_subscription/2` - def unquote(:"create_#{relationship_type}")(source, target), - do: create(unquote(relationship_type), source, target) + # `def create_block/3`, `def create_mute/3`, `def create_reblog_mute/3`, + # `def create_notification_mute/3`, `def create_inverse_subscription/3`, + # `def endorsement/3` + def unquote(:"create_#{relationship_type}")(source, target, expires_at \\ nil), + do: create(unquote(relationship_type), source, target, expires_at) # `def delete_block/2`, `def delete_mute/2`, `def delete_reblog_mute/2`, - # `def delete_notification_mute/2`, `def delete_inverse_subscription/2` + # `def delete_notification_mute/2`, `def delete_inverse_subscription/2`, + # `def delete_endorsement/2` def unquote(:"delete_#{relationship_type}")(source, target), do: delete(unquote(relationship_type), source, target) # `def block_exists?/2`, `def mute_exists?/2`, `def reblog_mute_exists?/2`, - # `def notification_mute_exists?/2`, `def inverse_subscription_exists?/2` + # `def notification_mute_exists?/2`, `def inverse_subscription_exists?/2`, + # `def inverse_endorsement_exists?/2` def unquote(:"#{relationship_type}_exists?")(source, target), do: exists?(unquote(relationship_type), source, target) + + # `def get_block_expire_date/2`, `def get_mute_expire_date/2`, + # `def get_reblog_mute_expire_date/2`, `def get_notification_mute_exists?/2`, + # `def get_inverse_subscription_expire_date/2`, `def get_inverse_endorsement_expire_date/2` + def unquote(:"get_#{relationship_type}_expire_date")(source, target), + do: get_expire_date(unquote(relationship_type), source, target) end def user_relationship_types, do: Keyword.keys(user_relationship_mappings()) @@ -45,7 +55,7 @@ defmodule Pleroma.UserRelationship do def changeset(%UserRelationship{} = user_relationship, params \\ %{}) do user_relationship - |> cast(params, [:relationship_type, :source_id, :target_id]) + |> cast(params, [:relationship_type, :source_id, :target_id, :expires_at]) |> validate_required([:relationship_type, :source_id, :target_id]) |> unique_constraint(:relationship_type, name: :user_relationships_source_id_relationship_type_target_id_index @@ -59,12 +69,26 @@ defmodule Pleroma.UserRelationship do |> Repo.exists?() end - def create(relationship_type, %User{} = source, %User{} = target) do + def get_expire_date(relationship_type, %User{} = source, %User{} = target) do + %UserRelationship{expires_at: expires_at} = + UserRelationship + |> where( + relationship_type: ^relationship_type, + source_id: ^source.id, + target_id: ^target.id + ) + |> Repo.one!() + + expires_at + end + + def create(relationship_type, %User{} = source, %User{} = target, expires_at \\ nil) do %UserRelationship{} |> changeset(%{ relationship_type: relationship_type, source_id: source.id, - target_id: target.id + target_id: target.id, + expires_at: expires_at }) |> Repo.insert( on_conflict: {:replace_all_except, [:id]}, diff --git a/lib/pleroma/utils.ex b/lib/pleroma/utils.ex index a446d3ae6..73001c987 100644 --- a/lib/pleroma/utils.ex +++ b/lib/pleroma/utils.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Utils do diff --git a/lib/pleroma/web.ex b/lib/pleroma/web.ex index 5761e3b38..aee41b0fe 100644 --- a/lib/pleroma/web.ex +++ b/lib/pleroma/web.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web do diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index 01dedd248..909f22394 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.ActivityPub do @@ -1502,6 +1502,18 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do nil end + birthday = + if is_binary(data["vcard:bday"]) do + case Date.from_iso8601(data["vcard:bday"]) do + {:ok, date} -> date + {:error, _} -> nil + end + else + nil + end + + show_birthday = !!birthday + user_data = %{ ap_id: data["id"], uri: get_actor_url(data["url"]), @@ -1524,7 +1536,9 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do inbox: data["inbox"], shared_inbox: shared_inbox, accepts_chat_messages: accepts_chat_messages, - pinned_objects: pinned_objects + pinned_objects: pinned_objects, + birthday: birthday, + show_birthday: show_birthday } # nickname can be nil because of virtual actors @@ -1665,7 +1679,10 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do "orderedItems" => objects }) when type in ["OrderedCollection", "Collection"] do - Map.new(objects, fn %{"id" => object_ap_id} -> {object_ap_id, NaiveDateTime.utc_now()} end) + Map.new(objects, fn + %{"id" => object_ap_id} -> {object_ap_id, NaiveDateTime.utc_now()} + object_ap_id when is_binary(object_ap_id) -> {object_ap_id, NaiveDateTime.utc_now()} + end) end def fetch_and_prepare_featured_from_ap_id(nil) do diff --git a/lib/pleroma/web/activity_pub/activity_pub/persisting.ex b/lib/pleroma/web/activity_pub/activity_pub/persisting.ex index f39cd000a..3dbfdee28 100644 --- a/lib/pleroma/web/activity_pub/activity_pub/persisting.ex +++ b/lib/pleroma/web/activity_pub/activity_pub/persisting.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.ActivityPub.Persisting do diff --git a/lib/pleroma/web/activity_pub/activity_pub/streaming.ex b/lib/pleroma/web/activity_pub/activity_pub/streaming.ex index 33c7bf2bc..d7358171d 100644 --- a/lib/pleroma/web/activity_pub/activity_pub/streaming.ex +++ b/lib/pleroma/web/activity_pub/activity_pub/streaming.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.ActivityPub.Streaming do diff --git a/lib/pleroma/web/activity_pub/activity_pub_controller.ex b/lib/pleroma/web/activity_pub/activity_pub_controller.ex index 4a19938f6..b8f63d69d 100644 --- a/lib/pleroma/web/activity_pub/activity_pub_controller.ex +++ b/lib/pleroma/web/activity_pub/activity_pub_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.ActivityPubController do @@ -84,6 +84,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubController do user <- Map.get(assigns, :user, nil), {_, true} <- {:visible?, Visibility.visible_for_user?(object, user)} do conn + |> maybe_skip_cache(user) |> assign(:tracking_fun_data, object.id) |> set_cache_ttl_for(object) |> put_resp_content_type("application/activity+json") @@ -112,6 +113,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubController do user <- Map.get(assigns, :user, nil), {_, true} <- {:visible?, Visibility.visible_for_user?(activity, user)} do conn + |> maybe_skip_cache(user) |> maybe_set_tracking_data(activity) |> set_cache_ttl_for(activity) |> put_resp_content_type("application/activity+json") @@ -151,6 +153,15 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubController do assign(conn, :cache_ttl, ttl) end + def maybe_skip_cache(conn, user) do + if user do + conn + |> assign(:skip_cache, true) + else + conn + end + end + # GET /relay/following def relay_following(conn, _params) do with %{halted: false} = conn <- FederatingPlug.call(conn, []) do diff --git a/lib/pleroma/web/activity_pub/builder.ex b/lib/pleroma/web/activity_pub/builder.ex index 647ccf432..5b25138a4 100644 --- a/lib/pleroma/web/activity_pub/builder.ex +++ b/lib/pleroma/web/activity_pub/builder.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.Builder do diff --git a/lib/pleroma/web/activity_pub/internal_fetch_actor.ex b/lib/pleroma/web/activity_pub/internal_fetch_actor.ex index ca76071e5..083723894 100644 --- a/lib/pleroma/web/activity_pub/internal_fetch_actor.ex +++ b/lib/pleroma/web/activity_pub/internal_fetch_actor.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.InternalFetchActor do diff --git a/lib/pleroma/web/activity_pub/mrf.ex b/lib/pleroma/web/activity_pub/mrf.ex index bd6f6777f..323ecdbf1 100644 --- a/lib/pleroma/web/activity_pub/mrf.ex +++ b/lib/pleroma/web/activity_pub/mrf.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.MRF do diff --git a/lib/pleroma/web/activity_pub/mrf/activity_expiration_policy.ex b/lib/pleroma/web/activity_pub/mrf/activity_expiration_policy.ex index e78254280..88f6ca028 100644 --- a/lib/pleroma/web/activity_pub/mrf/activity_expiration_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/activity_expiration_policy.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.MRF.ActivityExpirationPolicy do diff --git a/lib/pleroma/web/activity_pub/mrf/anti_followbot_policy.ex b/lib/pleroma/web/activity_pub/mrf/anti_followbot_policy.ex index 851e95d22..97d75ecf2 100644 --- a/lib/pleroma/web/activity_pub/mrf/anti_followbot_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/anti_followbot_policy.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.MRF.AntiFollowbotPolicy do @@ -24,7 +24,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.AntiFollowbotPolicy do defp score_displayname("fedibot"), do: 1.0 defp score_displayname(_), do: 0.0 - defp determine_if_followbot(%User{nickname: nickname, name: displayname}) do + defp determine_if_followbot(%User{nickname: nickname, name: displayname, actor_type: actor_type}) do # nickname will be a binary string except when following a relay nick_score = if is_binary(nickname) do @@ -45,19 +45,32 @@ defmodule Pleroma.Web.ActivityPub.MRF.AntiFollowbotPolicy do 0.0 end - nick_score + name_score + # actor_type "Service" is a Bot account + actor_type_score = + if actor_type == "Service" do + 1.0 + else + 0.0 + end + + nick_score + name_score + actor_type_score end defp determine_if_followbot(_), do: 0.0 + defp bot_allowed?(%{"object" => target}, bot_actor) do + %User{} = user = normalize_by_ap_id(target) + + User.following?(user, bot_actor) + end + @impl true def filter(%{"type" => "Follow", "actor" => actor_id} = message) do %User{} = actor = normalize_by_ap_id(actor_id) score = determine_if_followbot(actor) - # TODO: scan biography data for keywords and score it somehow. - if score < 0.8 do + if score < 0.8 || bot_allowed?(message, actor) do {:ok, message} else {:reject, "[AntiFollowbotPolicy] Scored #{actor_id} as #{score}"} diff --git a/lib/pleroma/web/activity_pub/mrf/anti_link_spam_policy.ex b/lib/pleroma/web/activity_pub/mrf/anti_link_spam_policy.ex index cdf17fd28..f0504ead4 100644 --- a/lib/pleroma/web/activity_pub/mrf/anti_link_spam_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/anti_link_spam_policy.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.MRF.AntiLinkSpamPolicy do diff --git a/lib/pleroma/web/activity_pub/mrf/drop_policy.ex b/lib/pleroma/web/activity_pub/mrf/drop_policy.ex index b3ff86eed..ad0936839 100644 --- a/lib/pleroma/web/activity_pub/mrf/drop_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/drop_policy.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.MRF.DropPolicy do diff --git a/lib/pleroma/web/activity_pub/mrf/ensure_re_prepended.ex b/lib/pleroma/web/activity_pub/mrf/ensure_re_prepended.ex index fad8d873b..51596c09f 100644 --- a/lib/pleroma/web/activity_pub/mrf/ensure_re_prepended.ex +++ b/lib/pleroma/web/activity_pub/mrf/ensure_re_prepended.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.MRF.EnsureRePrepended do diff --git a/lib/pleroma/web/activity_pub/mrf/follow_bot_policy.ex b/lib/pleroma/web/activity_pub/mrf/follow_bot_policy.ex index 7cf7de068..5b6adbb4b 100644 --- a/lib/pleroma/web/activity_pub/mrf/follow_bot_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/follow_bot_policy.ex @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Web.ActivityPub.MRF.FollowBotPolicy do @behaviour Pleroma.Web.ActivityPub.MRF.Policy alias Pleroma.Config diff --git a/lib/pleroma/web/activity_pub/mrf/force_bot_unlisted_policy.ex b/lib/pleroma/web/activity_pub/mrf/force_bot_unlisted_policy.ex index 11871375e..8cec8eabe 100644 --- a/lib/pleroma/web/activity_pub/mrf/force_bot_unlisted_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/force_bot_unlisted_policy.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.MRF.ForceBotUnlistedPolicy do @@ -10,7 +10,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.ForceBotUnlistedPolicy do require Pleroma.Constants defp check_by_actor_type(user), do: user.actor_type in ["Application", "Service"] - defp check_by_nickname(user), do: Regex.match?(~r/bot@|ebooks@/i, user.nickname) + defp check_by_nickname(user), do: Regex.match?(~r/.bot@|ebooks@/i, user.nickname) defp check_if_bot(user), do: check_by_actor_type(user) or check_by_nickname(user) diff --git a/lib/pleroma/web/activity_pub/mrf/force_mentions_in_content.ex b/lib/pleroma/web/activity_pub/mrf/force_mentions_in_content.ex new file mode 100644 index 000000000..255910b2f --- /dev/null +++ b/lib/pleroma/web/activity_pub/mrf/force_mentions_in_content.ex @@ -0,0 +1,132 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ActivityPub.MRF.ForceMentionsInContent do + require Pleroma.Constants + + alias Pleroma.Formatter + alias Pleroma.Object + alias Pleroma.User + + @behaviour Pleroma.Web.ActivityPub.MRF.Policy + + defp do_extract({:a, attrs, _}, acc) do + if Enum.find(attrs, fn {name, value} -> + name == "class" && value in ["mention", "u-url mention", "mention u-url"] + end) do + href = Enum.find(attrs, fn {name, _} -> name == "href" end) |> elem(1) + acc ++ [href] + else + acc + end + end + + defp do_extract({_, _, children}, acc) do + do_extract(children, acc) + end + + defp do_extract(nodes, acc) when is_list(nodes) do + Enum.reduce(nodes, acc, fn node, acc -> do_extract(node, acc) end) + end + + defp do_extract(_, acc), do: acc + + defp extract_mention_uris_from_content(content) do + {:ok, tree} = :fast_html.decode(content, format: [:html_atoms]) + do_extract(tree, []) + end + + defp get_replied_to_user(%{"inReplyTo" => in_reply_to}) do + case Object.normalize(in_reply_to, fetch: false) do + %Object{data: %{"actor" => actor}} -> User.get_cached_by_ap_id(actor) + _ -> nil + end + end + + defp get_replied_to_user(_object), do: nil + + # Ensure the replied-to user is sorted to the left + defp sort_replied_user([%User{id: user_id} | _] = users, %User{id: user_id}), do: users + + defp sort_replied_user(users, %User{id: user_id} = user) do + if Enum.find(users, fn u -> u.id == user_id end) do + users = Enum.reject(users, fn u -> u.id == user_id end) + [user | users] + else + users + end + end + + defp sort_replied_user(users, _), do: users + + # Drop constants and the actor's own AP ID + defp clean_recipients(recipients, object) do + Enum.reject(recipients, fn ap_id -> + ap_id in [ + object["object"]["actor"], + Pleroma.Constants.as_public(), + Pleroma.Web.ActivityPub.Utils.as_local_public() + ] + end) + end + + @impl true + def filter( + %{ + "type" => "Create", + "object" => %{"type" => "Note", "to" => to, "inReplyTo" => in_reply_to} + } = object + ) + when is_list(to) and is_binary(in_reply_to) do + # image-only posts from pleroma apparently reach this MRF without the content field + content = object["object"]["content"] || "" + + # Get the replied-to user for sorting + replied_to_user = get_replied_to_user(object["object"]) + + mention_users = + to + |> clean_recipients(object) + |> Enum.map(&User.get_cached_by_ap_id/1) + |> Enum.reject(&is_nil/1) + |> sort_replied_user(replied_to_user) + + explicitly_mentioned_uris = extract_mention_uris_from_content(content) + + added_mentions = + Enum.reduce(mention_users, "", fn %User{ap_id: uri} = user, acc -> + unless uri in explicitly_mentioned_uris do + acc <> Formatter.mention_from_user(user, %{mentions_format: :compact}) <> " " + else + acc + end + end) + + recipients_inline = + if added_mentions != "", + do: "#{added_mentions}", + else: "" + + content = + cond do + # For Markdown posts, insert the mentions inside the first

tag + recipients_inline != "" && String.starts_with?(content, "

") -> + "

" <> recipients_inline <> String.trim_leading(content, "

") + + recipients_inline != "" -> + recipients_inline <> content + + true -> + content + end + + {:ok, put_in(object["object"]["content"], content)} + end + + @impl true + def filter(object), do: {:ok, object} + + @impl true + def describe, do: {:ok, %{}} +end diff --git a/lib/pleroma/web/activity_pub/mrf/hashtag_policy.ex b/lib/pleroma/web/activity_pub/mrf/hashtag_policy.ex index b7db4fa3d..2142b7add 100644 --- a/lib/pleroma/web/activity_pub/mrf/hashtag_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/hashtag_policy.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.MRF.HashtagPolicy do diff --git a/lib/pleroma/web/activity_pub/mrf/hellthread_policy.ex b/lib/pleroma/web/activity_pub/mrf/hellthread_policy.ex index 504bd4d57..80e235d6e 100644 --- a/lib/pleroma/web/activity_pub/mrf/hellthread_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/hellthread_policy.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.MRF.HellthreadPolicy do diff --git a/lib/pleroma/web/activity_pub/mrf/keyword_policy.ex b/lib/pleroma/web/activity_pub/mrf/keyword_policy.ex index 1383fa757..00b64744f 100644 --- a/lib/pleroma/web/activity_pub/mrf/keyword_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/keyword_policy.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.MRF.KeywordPolicy do diff --git a/lib/pleroma/web/activity_pub/mrf/media_proxy_warming_policy.ex b/lib/pleroma/web/activity_pub/mrf/media_proxy_warming_policy.ex index 25289d3a4..0eac8f021 100644 --- a/lib/pleroma/web/activity_pub/mrf/media_proxy_warming_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/media_proxy_warming_policy.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy do diff --git a/lib/pleroma/web/activity_pub/mrf/mention_policy.ex b/lib/pleroma/web/activity_pub/mrf/mention_policy.ex index 05b28e4f5..8aa4f347f 100644 --- a/lib/pleroma/web/activity_pub/mrf/mention_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/mention_policy.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.MRF.MentionPolicy do diff --git a/lib/pleroma/web/activity_pub/mrf/no_empty_policy.ex b/lib/pleroma/web/activity_pub/mrf/no_empty_policy.ex index 80bef591e..4dc96e068 100644 --- a/lib/pleroma/web/activity_pub/mrf/no_empty_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/no_empty_policy.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.MRF.NoEmptyPolicy do diff --git a/lib/pleroma/web/activity_pub/mrf/no_op_policy.ex b/lib/pleroma/web/activity_pub/mrf/no_op_policy.ex index 25031946c..8840c4fac 100644 --- a/lib/pleroma/web/activity_pub/mrf/no_op_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/no_op_policy.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.MRF.NoOpPolicy do diff --git a/lib/pleroma/web/activity_pub/mrf/no_placeholder_text_policy.ex b/lib/pleroma/web/activity_pub/mrf/no_placeholder_text_policy.ex index 90272766c..aab647d8e 100644 --- a/lib/pleroma/web/activity_pub/mrf/no_placeholder_text_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/no_placeholder_text_policy.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.MRF.NoPlaceholderTextPolicy do diff --git a/lib/pleroma/web/activity_pub/mrf/normalize_markup.ex b/lib/pleroma/web/activity_pub/mrf/normalize_markup.ex index 0d7146738..dc2c19d49 100644 --- a/lib/pleroma/web/activity_pub/mrf/normalize_markup.ex +++ b/lib/pleroma/web/activity_pub/mrf/normalize_markup.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.MRF.NormalizeMarkup do diff --git a/lib/pleroma/web/activity_pub/mrf/object_age_policy.ex b/lib/pleroma/web/activity_pub/mrf/object_age_policy.ex index 02c9b18ed..0e9d25a0a 100644 --- a/lib/pleroma/web/activity_pub/mrf/object_age_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/object_age_policy.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.MRF.ObjectAgePolicy do diff --git a/lib/pleroma/web/activity_pub/mrf/pipeline_filtering.ex b/lib/pleroma/web/activity_pub/mrf/pipeline_filtering.ex index be95e38ec..b2477fed4 100644 --- a/lib/pleroma/web/activity_pub/mrf/pipeline_filtering.ex +++ b/lib/pleroma/web/activity_pub/mrf/pipeline_filtering.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.MRF.PipelineFiltering do diff --git a/lib/pleroma/web/activity_pub/mrf/policy.ex b/lib/pleroma/web/activity_pub/mrf/policy.ex index a4a960c01..0ac250c3d 100644 --- a/lib/pleroma/web/activity_pub/mrf/policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/policy.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.MRF.Policy do diff --git a/lib/pleroma/web/activity_pub/mrf/reject_non_public.ex b/lib/pleroma/web/activity_pub/mrf/reject_non_public.ex index dbb7ca0df..9d4a7a405 100644 --- a/lib/pleroma/web/activity_pub/mrf/reject_non_public.ex +++ b/lib/pleroma/web/activity_pub/mrf/reject_non_public.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.MRF.RejectNonPublic do diff --git a/lib/pleroma/web/activity_pub/mrf/simple_policy.ex b/lib/pleroma/web/activity_pub/mrf/simple_policy.ex index c631cc85f..c0c7f3806 100644 --- a/lib/pleroma/web/activity_pub/mrf/simple_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/simple_policy.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicy do diff --git a/lib/pleroma/web/activity_pub/mrf/steal_emoji_policy.ex b/lib/pleroma/web/activity_pub/mrf/steal_emoji_policy.ex index 0dd415732..f66c379b5 100644 --- a/lib/pleroma/web/activity_pub/mrf/steal_emoji_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/steal_emoji_policy.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.MRF.StealEmojiPolicy do @@ -12,6 +12,14 @@ defmodule Pleroma.Web.ActivityPub.MRF.StealEmojiPolicy do defp accept_host?(host), do: host in Config.get([:mrf_steal_emoji, :hosts], []) + defp shortcode_matches?(shortcode, pattern) when is_binary(pattern) do + shortcode == pattern + end + + defp shortcode_matches?(shortcode, pattern) do + String.match?(shortcode, pattern) + end + defp steal_emoji({shortcode, url}, emoji_dir_path) do url = Pleroma.Web.MediaProxy.url(url) @@ -72,7 +80,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.StealEmojiPolicy do reject_emoji? = [:mrf_steal_emoji, :rejected_shortcodes] |> Config.get([]) - |> Enum.find(false, fn regex -> String.match?(shortcode, regex) end) + |> Enum.find(false, fn pattern -> shortcode_matches?(shortcode, pattern) end) !reject_emoji? end) @@ -122,8 +130,12 @@ defmodule Pleroma.Web.ActivityPub.MRF.StealEmojiPolicy do %{ key: :rejected_shortcodes, type: {:list, :string}, - description: "Regex-list of shortcodes to reject", - suggestions: [""] + description: """ + A list of patterns or matches to reject shortcodes with. + + Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`. + """, + suggestions: ["foo", ~r/foo/] }, %{ key: :size_limit, diff --git a/lib/pleroma/web/activity_pub/mrf/subchain_policy.ex b/lib/pleroma/web/activity_pub/mrf/subchain_policy.ex index 11a36aca1..fdb9e5176 100644 --- a/lib/pleroma/web/activity_pub/mrf/subchain_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/subchain_policy.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.MRF.SubchainPolicy do diff --git a/lib/pleroma/web/activity_pub/mrf/tag_policy.ex b/lib/pleroma/web/activity_pub/mrf/tag_policy.ex index 56ae654f2..10072b693 100644 --- a/lib/pleroma/web/activity_pub/mrf/tag_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/tag_policy.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.MRF.TagPolicy do diff --git a/lib/pleroma/web/activity_pub/mrf/user_allow_list_policy.ex b/lib/pleroma/web/activity_pub/mrf/user_allow_list_policy.ex index 52fb02a84..e14047d4e 100644 --- a/lib/pleroma/web/activity_pub/mrf/user_allow_list_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/user_allow_list_policy.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.MRF.UserAllowListPolicy do diff --git a/lib/pleroma/web/activity_pub/mrf/vocabulary_policy.ex b/lib/pleroma/web/activity_pub/mrf/vocabulary_policy.ex index 602e10b44..d9deff35f 100644 --- a/lib/pleroma/web/activity_pub/mrf/vocabulary_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/vocabulary_policy.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.MRF.VocabularyPolicy do diff --git a/lib/pleroma/web/activity_pub/object_validator.ex b/lib/pleroma/web/activity_pub/object_validator.ex index 187cd0cfd..f3e31c931 100644 --- a/lib/pleroma/web/activity_pub/object_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validator.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.ObjectValidator do diff --git a/lib/pleroma/web/activity_pub/object_validator/validating.ex b/lib/pleroma/web/activity_pub/object_validator/validating.ex index 28e8d2498..b695946b4 100644 --- a/lib/pleroma/web/activity_pub/object_validator/validating.ex +++ b/lib/pleroma/web/activity_pub/object_validator/validating.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.ObjectValidator.Validating do diff --git a/lib/pleroma/web/activity_pub/object_validators/accept_reject_validator.ex b/lib/pleroma/web/activity_pub/object_validators/accept_reject_validator.ex index 7c3c8d0fa..d611da051 100644 --- a/lib/pleroma/web/activity_pub/object_validators/accept_reject_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/accept_reject_validator.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.ObjectValidators.AcceptRejectValidator do diff --git a/lib/pleroma/web/activity_pub/object_validators/add_remove_validator.ex b/lib/pleroma/web/activity_pub/object_validators/add_remove_validator.ex index fc482c9c0..5202db7f1 100644 --- a/lib/pleroma/web/activity_pub/object_validators/add_remove_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/add_remove_validator.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.ObjectValidators.AddRemoveValidator do diff --git a/lib/pleroma/web/activity_pub/object_validators/announce_validator.ex b/lib/pleroma/web/activity_pub/object_validators/announce_validator.ex index a7f2f6673..c2c7ba1a8 100644 --- a/lib/pleroma/web/activity_pub/object_validators/announce_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/announce_validator.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.ObjectValidators.AnnounceValidator do diff --git a/lib/pleroma/web/activity_pub/object_validators/answer_validator.ex b/lib/pleroma/web/activity_pub/object_validators/answer_validator.ex index 4325e44f7..2d9b8ba02 100644 --- a/lib/pleroma/web/activity_pub/object_validators/answer_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/answer_validator.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.ObjectValidators.AnswerValidator do diff --git a/lib/pleroma/web/activity_pub/object_validators/article_note_page_validator.ex b/lib/pleroma/web/activity_pub/object_validators/article_note_page_validator.ex index 0aa249c4c..57c8d1dc0 100644 --- a/lib/pleroma/web/activity_pub/object_validators/article_note_page_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/article_note_page_validator.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.ObjectValidators.ArticleNotePageValidator do @@ -65,6 +65,11 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.ArticleNotePageValidator do defp fix_replies(data), do: data + def fix_attachments(%{"attachment" => attachment} = data) when is_map(attachment), + do: Map.put(data, "attachment", [attachment]) + + def fix_attachments(data), do: data + defp fix(data) do data |> CommonFixes.fix_actor() @@ -72,6 +77,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.ArticleNotePageValidator do |> fix_url() |> fix_tag() |> fix_replies() + |> fix_attachments() |> Transmogrifier.fix_emoji() |> Transmogrifier.fix_content_map() end diff --git a/lib/pleroma/web/activity_pub/object_validators/attachment_validator.ex b/lib/pleroma/web/activity_pub/object_validators/attachment_validator.ex index 59fef42d6..cf6e407e0 100644 --- a/lib/pleroma/web/activity_pub/object_validators/attachment_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/attachment_validator.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.ObjectValidators.AttachmentValidator do @@ -12,14 +12,14 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.AttachmentValidator do @primary_key false embedded_schema do field(:type, :string) - field(:mediaType, :string, default: "application/octet-stream") + field(:mediaType, ObjectValidators.MIME, default: "application/octet-stream") field(:name, :string) field(:blurhash, :string) embeds_many :url, UrlObjectValidator, primary_key: false do field(:type, :string) field(:href, ObjectValidators.Uri) - field(:mediaType, :string, default: "application/octet-stream") + field(:mediaType, ObjectValidators.MIME, default: "application/octet-stream") field(:width, :integer) field(:height, :integer) end @@ -59,13 +59,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.AttachmentValidator do end def fix_media_type(data) do - data = Map.put_new(data, "mediaType", data["mimeType"]) - - if is_bitstring(data["mediaType"]) && MIME.extensions(data["mediaType"]) != [] do - data - else - Map.put(data, "mediaType", "application/octet-stream") - end + Map.put_new(data, "mediaType", data["mimeType"] || "application/octet-stream") end defp handle_href(href, mediaType, data) do diff --git a/lib/pleroma/web/activity_pub/object_validators/audio_video_validator.ex b/lib/pleroma/web/activity_pub/object_validators/audio_video_validator.ex index 331ec9050..432bd9039 100644 --- a/lib/pleroma/web/activity_pub/object_validators/audio_video_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/audio_video_validator.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.ObjectValidators.AudioVideoValidator do diff --git a/lib/pleroma/web/activity_pub/object_validators/block_validator.ex b/lib/pleroma/web/activity_pub/object_validators/block_validator.ex index 400e5e278..0de87a27e 100644 --- a/lib/pleroma/web/activity_pub/object_validators/block_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/block_validator.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.ObjectValidators.BlockValidator do diff --git a/lib/pleroma/web/activity_pub/object_validators/chat_message_validator.ex b/lib/pleroma/web/activity_pub/object_validators/chat_message_validator.ex index b153156b0..efae48cae 100644 --- a/lib/pleroma/web/activity_pub/object_validators/chat_message_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/chat_message_validator.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.ObjectValidators.ChatMessageValidator do diff --git a/lib/pleroma/web/activity_pub/object_validators/common_fields.ex b/lib/pleroma/web/activity_pub/object_validators/common_fields.ex index 872f80ec3..8e768ffbf 100644 --- a/lib/pleroma/web/activity_pub/object_validators/common_fields.ex +++ b/lib/pleroma/web/activity_pub/object_validators/common_fields.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.ObjectValidators.CommonFields do diff --git a/lib/pleroma/web/activity_pub/object_validators/common_fixes.ex b/lib/pleroma/web/activity_pub/object_validators/common_fixes.ex index 9631013a7..4f8c083eb 100644 --- a/lib/pleroma/web/activity_pub/object_validators/common_fixes.ex +++ b/lib/pleroma/web/activity_pub/object_validators/common_fixes.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.ObjectValidators.CommonFixes do diff --git a/lib/pleroma/web/activity_pub/object_validators/common_validations.ex b/lib/pleroma/web/activity_pub/object_validators/common_validations.ex index be5074348..704b3abc9 100644 --- a/lib/pleroma/web/activity_pub/object_validators/common_validations.ex +++ b/lib/pleroma/web/activity_pub/object_validators/common_validations.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.ObjectValidators.CommonValidations do diff --git a/lib/pleroma/web/activity_pub/object_validators/create_chat_message_validator.ex b/lib/pleroma/web/activity_pub/object_validators/create_chat_message_validator.ex index 6551f64ca..b299647a1 100644 --- a/lib/pleroma/web/activity_pub/object_validators/create_chat_message_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/create_chat_message_validator.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only # NOTES diff --git a/lib/pleroma/web/activity_pub/object_validators/create_generic_validator.ex b/lib/pleroma/web/activity_pub/object_validators/create_generic_validator.ex index 803b5d5a1..c9a621cb1 100644 --- a/lib/pleroma/web/activity_pub/object_validators/create_generic_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/create_generic_validator.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only # Code based on CreateChatMessageValidator diff --git a/lib/pleroma/web/activity_pub/object_validators/delete_validator.ex b/lib/pleroma/web/activity_pub/object_validators/delete_validator.ex index f0c99356e..035fd5bc9 100644 --- a/lib/pleroma/web/activity_pub/object_validators/delete_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/delete_validator.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.ObjectValidators.DeleteValidator do diff --git a/lib/pleroma/web/activity_pub/object_validators/emoji_react_validator.ex b/lib/pleroma/web/activity_pub/object_validators/emoji_react_validator.ex index 9eaaf8319..0858281e5 100644 --- a/lib/pleroma/web/activity_pub/object_validators/emoji_react_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/emoji_react_validator.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.ObjectValidators.EmojiReactValidator do @@ -49,6 +49,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.EmojiReactValidator do defp fix(data) do data = data + |> fix_emoji_qualification() |> CommonFixes.fix_actor() |> CommonFixes.fix_activity_addressing() @@ -61,6 +62,23 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.EmojiReactValidator do end end + defp fix_emoji_qualification(%{"content" => emoji} = data) do + new_emoji = Pleroma.Emoji.fully_qualify_emoji(emoji) + + cond do + Pleroma.Emoji.is_unicode_emoji?(emoji) -> + data + + Pleroma.Emoji.is_unicode_emoji?(new_emoji) -> + data |> Map.put("content", new_emoji) + + true -> + data + end + end + + defp fix_emoji_qualification(data), do: data + defp validate_emoji(cng) do content = get_field(cng, :content) diff --git a/lib/pleroma/web/activity_pub/object_validators/event_validator.ex b/lib/pleroma/web/activity_pub/object_validators/event_validator.ex index 34a3031c3..0e99f2037 100644 --- a/lib/pleroma/web/activity_pub/object_validators/event_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/event_validator.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.ObjectValidators.EventValidator do diff --git a/lib/pleroma/web/activity_pub/object_validators/follow_validator.ex b/lib/pleroma/web/activity_pub/object_validators/follow_validator.ex index c061ebba9..b3ca5b691 100644 --- a/lib/pleroma/web/activity_pub/object_validators/follow_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/follow_validator.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.ObjectValidators.FollowValidator do diff --git a/lib/pleroma/web/activity_pub/object_validators/like_validator.ex b/lib/pleroma/web/activity_pub/object_validators/like_validator.ex index 35e000d72..bdc4d7181 100644 --- a/lib/pleroma/web/activity_pub/object_validators/like_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/like_validator.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.ObjectValidators.LikeValidator do diff --git a/lib/pleroma/web/activity_pub/object_validators/question_options_validator.ex b/lib/pleroma/web/activity_pub/object_validators/question_options_validator.ex index ddcd1be7c..541945fa4 100644 --- a/lib/pleroma/web/activity_pub/object_validators/question_options_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/question_options_validator.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.ObjectValidators.QuestionOptionsValidator do diff --git a/lib/pleroma/web/activity_pub/object_validators/question_validator.ex b/lib/pleroma/web/activity_pub/object_validators/question_validator.ex index bdddfdaeb..9412be4bc 100644 --- a/lib/pleroma/web/activity_pub/object_validators/question_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/question_validator.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.ObjectValidators.QuestionValidator do diff --git a/lib/pleroma/web/activity_pub/object_validators/tag_validator.ex b/lib/pleroma/web/activity_pub/object_validators/tag_validator.ex index 751021585..9f15f1981 100644 --- a/lib/pleroma/web/activity_pub/object_validators/tag_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/tag_validator.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.ObjectValidators.TagValidator do diff --git a/lib/pleroma/web/activity_pub/object_validators/undo_validator.ex b/lib/pleroma/web/activity_pub/object_validators/undo_validator.ex index 703643e3f..f03051491 100644 --- a/lib/pleroma/web/activity_pub/object_validators/undo_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/undo_validator.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.ObjectValidators.UndoValidator do diff --git a/lib/pleroma/web/activity_pub/object_validators/update_validator.ex b/lib/pleroma/web/activity_pub/object_validators/update_validator.ex index a1fae47f5..a5def312e 100644 --- a/lib/pleroma/web/activity_pub/object_validators/update_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/update_validator.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.ObjectValidators.UpdateValidator do diff --git a/lib/pleroma/web/activity_pub/pipeline.ex b/lib/pleroma/web/activity_pub/pipeline.ex index 0d6e8aad2..ca8653ab1 100644 --- a/lib/pleroma/web/activity_pub/pipeline.ex +++ b/lib/pleroma/web/activity_pub/pipeline.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.Pipeline do diff --git a/lib/pleroma/web/activity_pub/publisher.ex b/lib/pleroma/web/activity_pub/publisher.ex index ed99079e2..6c1ba76a3 100644 --- a/lib/pleroma/web/activity_pub/publisher.ex +++ b/lib/pleroma/web/activity_pub/publisher.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.Publisher do diff --git a/lib/pleroma/web/activity_pub/relay.ex b/lib/pleroma/web/activity_pub/relay.ex index 6d60a074f..2010351d1 100644 --- a/lib/pleroma/web/activity_pub/relay.ex +++ b/lib/pleroma/web/activity_pub/relay.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.Relay do diff --git a/lib/pleroma/web/activity_pub/side_effects.ex b/lib/pleroma/web/activity_pub/side_effects.ex index 39d37fbcb..b997c15db 100644 --- a/lib/pleroma/web/activity_pub/side_effects.ex +++ b/lib/pleroma/web/activity_pub/side_effects.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.SideEffects do diff --git a/lib/pleroma/web/activity_pub/side_effects/handling.ex b/lib/pleroma/web/activity_pub/side_effects/handling.ex index a82305155..eb012f576 100644 --- a/lib/pleroma/web/activity_pub/side_effects/handling.ex +++ b/lib/pleroma/web/activity_pub/side_effects/handling.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.SideEffects.Handling do diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index 142af1a13..d6622df86 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.Transmogrifier do @@ -203,13 +203,13 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do media_type = cond do - is_map(url) && MIME.extensions(url["mediaType"]) != [] -> + is_map(url) && url =~ Pleroma.Constants.mime_regex() -> url["mediaType"] - is_bitstring(data["mediaType"]) && MIME.extensions(data["mediaType"]) != [] -> + is_bitstring(data["mediaType"]) && data["mediaType"] =~ Pleroma.Constants.mime_regex() -> data["mediaType"] - is_bitstring(data["mimeType"]) && MIME.extensions(data["mimeType"]) != [] -> + is_bitstring(data["mimeType"]) && data["mimeType"] =~ Pleroma.Constants.mime_regex() -> data["mimeType"] true -> diff --git a/lib/pleroma/web/activity_pub/utils.ex b/lib/pleroma/web/activity_pub/utils.ex index c1f6b2b49..9cde7805c 100644 --- a/lib/pleroma/web/activity_pub/utils.ex +++ b/lib/pleroma/web/activity_pub/utils.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.Utils do diff --git a/lib/pleroma/web/activity_pub/views/object_view.ex b/lib/pleroma/web/activity_pub/views/object_view.ex index 8a3e4d77b..f848aba3a 100644 --- a/lib/pleroma/web/activity_pub/views/object_view.ex +++ b/lib/pleroma/web/activity_pub/views/object_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.ObjectView do diff --git a/lib/pleroma/web/activity_pub/views/user_view.ex b/lib/pleroma/web/activity_pub/views/user_view.ex index 344da19d3..52f6bb56d 100644 --- a/lib/pleroma/web/activity_pub/views/user_view.ex +++ b/lib/pleroma/web/activity_pub/views/user_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.UserView do @@ -92,6 +92,11 @@ defmodule Pleroma.Web.ActivityPub.UserView do %{} end + birthday = + if user.show_birthday && user.birthday, + do: Date.to_iso8601(user.birthday), + else: nil + %{ "id" => user.ap_id, "type" => user.actor_type, @@ -116,7 +121,8 @@ defmodule Pleroma.Web.ActivityPub.UserView do # Note: key name is indeed "discoverable" (not an error) "discoverable" => user.is_discoverable, "capabilities" => capabilities, - "alsoKnownAs" => user.also_known_as + "alsoKnownAs" => user.also_known_as, + "vcard:bday" => birthday } |> Map.merge(maybe_make_image(&User.avatar_url/2, "icon", user)) |> Map.merge(maybe_make_image(&User.banner_url/2, "image", user)) diff --git a/lib/pleroma/web/activity_pub/visibility.ex b/lib/pleroma/web/activity_pub/visibility.ex index 986fa3a08..465f8a9b7 100644 --- a/lib/pleroma/web/activity_pub/visibility.ex +++ b/lib/pleroma/web/activity_pub/visibility.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.Visibility do diff --git a/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex b/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex index 50aa294f0..1894000ff 100644 --- a/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex +++ b/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.AdminAPI.AdminAPIController do diff --git a/lib/pleroma/web/admin_api/controllers/announcement_controller.ex b/lib/pleroma/web/admin_api/controllers/announcement_controller.ex new file mode 100644 index 000000000..6ad5fc12c --- /dev/null +++ b/lib/pleroma/web/admin_api/controllers/announcement_controller.ex @@ -0,0 +1,83 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.AdminAPI.AnnouncementController do + use Pleroma.Web, :controller + + alias Pleroma.Announcement + alias Pleroma.Web.ControllerHelper + alias Pleroma.Web.Plugs.OAuthScopesPlug + + plug(Pleroma.Web.ApiSpec.CastAndValidate) + plug(OAuthScopesPlug, %{scopes: ["admin:write"]} when action in [:create, :delete, :change]) + plug(OAuthScopesPlug, %{scopes: ["admin:read"]} when action in [:index, :show]) + action_fallback(Pleroma.Web.AdminAPI.FallbackController) + + defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.Admin.AnnouncementOperation + + defp default_limit, do: 20 + + def index(conn, params) do + limit = Map.get(params, :limit, default_limit()) + offset = Map.get(params, :offset, 0) + + announcements = Announcement.list_paginated(%{limit: limit, offset: offset}) + + render(conn, "index.json", announcements: announcements) + end + + def show(conn, %{id: id} = _params) do + announcement = Announcement.get_by_id(id) + + if is_nil(announcement) do + {:error, :not_found} + else + render(conn, "show.json", announcement: announcement) + end + end + + def create(%{body_params: params} = conn, _params) do + with {:ok, announcement} <- Announcement.add(change_params(params)) do + render(conn, "show.json", announcement: announcement) + else + _ -> + {:error, 400} + end + end + + def change_params(orig_params) do + data = + %{} + |> Pleroma.Maps.put_if_present("content", orig_params, &Map.fetch(&1, :content)) + |> Pleroma.Maps.put_if_present("all_day", orig_params, &Map.fetch(&1, :all_day)) + + orig_params + |> Map.merge(%{data: data}) + end + + def change(%{body_params: params} = conn, %{id: id} = _params) do + with announcement <- Announcement.get_by_id(id), + {:exists, true} <- {:exists, not is_nil(announcement)}, + {:ok, announcement} <- Announcement.update(announcement, change_params(params)) do + render(conn, "show.json", announcement: announcement) + else + {:exists, false} -> + {:error, :not_found} + + _ -> + {:error, 400} + end + end + + def delete(conn, %{id: id} = _params) do + case Announcement.delete_by_id(id) do + :ok -> + conn + |> ControllerHelper.json_response(:ok, %{}) + + _ -> + {:error, :not_found} + end + end +end diff --git a/lib/pleroma/web/admin_api/controllers/chat_controller.ex b/lib/pleroma/web/admin_api/controllers/chat_controller.ex index ff20c8604..c3e9e12ce 100644 --- a/lib/pleroma/web/admin_api/controllers/chat_controller.ex +++ b/lib/pleroma/web/admin_api/controllers/chat_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.AdminAPI.ChatController do diff --git a/lib/pleroma/web/admin_api/controllers/config_controller.ex b/lib/pleroma/web/admin_api/controllers/config_controller.ex index a718d7b8d..a03318c0e 100644 --- a/lib/pleroma/web/admin_api/controllers/config_controller.ex +++ b/lib/pleroma/web/admin_api/controllers/config_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.AdminAPI.ConfigController do @@ -22,10 +22,58 @@ defmodule Pleroma.Web.AdminAPI.ConfigController do defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.Admin.ConfigOperation + defp translate_descriptions(descriptions, path \\ []) do + Enum.map(descriptions, fn desc -> translate_item(desc, path) end) + end + + defp translate_string(str, path, type) do + Gettext.dpgettext( + Pleroma.Web.Gettext, + "config_descriptions", + Pleroma.Docs.Translator.Compiler.msgctxt_for(path, type), + str + ) + end + + defp maybe_put_translated(item, key, path) do + if item[key] do + Map.put( + item, + key, + translate_string( + item[key], + path ++ [Pleroma.Docs.Translator.Compiler.key_for(item)], + to_string(key) + ) + ) + else + item + end + end + + defp translate_item(item, path) do + item + |> maybe_put_translated(:label, path) + |> maybe_put_translated(:description, path) + |> translate_children(path) + end + + defp translate_children(%{children: children} = item, path) when is_list(children) do + item + |> Map.put( + :children, + translate_descriptions(children, path ++ [Pleroma.Docs.Translator.Compiler.key_for(item)]) + ) + end + + defp translate_children(item, _path) do + item + end + def descriptions(conn, _params) do descriptions = Enum.filter(Pleroma.Docs.JSON.compiled_descriptions(), &whitelisted_config?/1) - json(conn, descriptions) + json(conn, translate_descriptions(descriptions)) end def show(conn, %{only_db: true}) do diff --git a/lib/pleroma/web/admin_api/controllers/fallback_controller.ex b/lib/pleroma/web/admin_api/controllers/fallback_controller.ex index 45d8815b5..e72f45c21 100644 --- a/lib/pleroma/web/admin_api/controllers/fallback_controller.ex +++ b/lib/pleroma/web/admin_api/controllers/fallback_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.AdminAPI.FallbackController do diff --git a/lib/pleroma/web/admin_api/controllers/frontend_controller.ex b/lib/pleroma/web/admin_api/controllers/frontend_controller.ex index 442e6a5a0..b4dbb82fe 100644 --- a/lib/pleroma/web/admin_api/controllers/frontend_controller.ex +++ b/lib/pleroma/web/admin_api/controllers/frontend_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.AdminAPI.FrontendController do diff --git a/lib/pleroma/web/admin_api/controllers/instance_controller.ex b/lib/pleroma/web/admin_api/controllers/instance_controller.ex index 00857983f..117a72280 100644 --- a/lib/pleroma/web/admin_api/controllers/instance_controller.ex +++ b/lib/pleroma/web/admin_api/controllers/instance_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.AdminAPI.InstanceController do diff --git a/lib/pleroma/web/admin_api/controllers/instance_document_controller.ex b/lib/pleroma/web/admin_api/controllers/instance_document_controller.ex index a55857a0e..990a94313 100644 --- a/lib/pleroma/web/admin_api/controllers/instance_document_controller.ex +++ b/lib/pleroma/web/admin_api/controllers/instance_document_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.AdminAPI.InstanceDocumentController do diff --git a/lib/pleroma/web/admin_api/controllers/invite_controller.ex b/lib/pleroma/web/admin_api/controllers/invite_controller.ex index 727ebd846..c5d759bb5 100644 --- a/lib/pleroma/web/admin_api/controllers/invite_controller.ex +++ b/lib/pleroma/web/admin_api/controllers/invite_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.AdminAPI.InviteController do diff --git a/lib/pleroma/web/admin_api/controllers/media_proxy_cache_controller.ex b/lib/pleroma/web/admin_api/controllers/media_proxy_cache_controller.ex index a6d7aaf54..4d53f5451 100644 --- a/lib/pleroma/web/admin_api/controllers/media_proxy_cache_controller.ex +++ b/lib/pleroma/web/admin_api/controllers/media_proxy_cache_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.AdminAPI.MediaProxyCacheController do diff --git a/lib/pleroma/web/admin_api/controllers/o_auth_app_controller.ex b/lib/pleroma/web/admin_api/controllers/o_auth_app_controller.ex index 51b17d392..879e8b2b4 100644 --- a/lib/pleroma/web/admin_api/controllers/o_auth_app_controller.ex +++ b/lib/pleroma/web/admin_api/controllers/o_auth_app_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.AdminAPI.OAuthAppController do diff --git a/lib/pleroma/web/admin_api/controllers/relay_controller.ex b/lib/pleroma/web/admin_api/controllers/relay_controller.ex index c6bd43fea..2e83fe139 100644 --- a/lib/pleroma/web/admin_api/controllers/relay_controller.ex +++ b/lib/pleroma/web/admin_api/controllers/relay_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.AdminAPI.RelayController do diff --git a/lib/pleroma/web/admin_api/controllers/report_controller.ex b/lib/pleroma/web/admin_api/controllers/report_controller.ex index d4a4935ee..15cbbcc3e 100644 --- a/lib/pleroma/web/admin_api/controllers/report_controller.ex +++ b/lib/pleroma/web/admin_api/controllers/report_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.AdminAPI.ReportController do diff --git a/lib/pleroma/web/admin_api/controllers/status_controller.ex b/lib/pleroma/web/admin_api/controllers/status_controller.ex index 7058def82..c9a4bfde9 100644 --- a/lib/pleroma/web/admin_api/controllers/status_controller.ex +++ b/lib/pleroma/web/admin_api/controllers/status_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.AdminAPI.StatusController do diff --git a/lib/pleroma/web/admin_api/controllers/user_controller.ex b/lib/pleroma/web/admin_api/controllers/user_controller.ex index 50208a8b7..7b4ee46a4 100644 --- a/lib/pleroma/web/admin_api/controllers/user_controller.ex +++ b/lib/pleroma/web/admin_api/controllers/user_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.AdminAPI.UserController do diff --git a/lib/pleroma/web/admin_api/report.ex b/lib/pleroma/web/admin_api/report.ex index 345bc1e87..8d1abfa56 100644 --- a/lib/pleroma/web/admin_api/report.ex +++ b/lib/pleroma/web/admin_api/report.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.AdminAPI.Report do diff --git a/lib/pleroma/web/admin_api/search.ex b/lib/pleroma/web/admin_api/search.ex index da38fab56..f5195acde 100644 --- a/lib/pleroma/web/admin_api/search.ex +++ b/lib/pleroma/web/admin_api/search.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.AdminAPI.Search do diff --git a/lib/pleroma/web/admin_api/views/account_view.ex b/lib/pleroma/web/admin_api/views/account_view.ex index 2f1f7e627..280152241 100644 --- a/lib/pleroma/web/admin_api/views/account_view.ex +++ b/lib/pleroma/web/admin_api/views/account_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.AdminAPI.AccountView do diff --git a/lib/pleroma/web/admin_api/views/announcement_view.ex b/lib/pleroma/web/admin_api/views/announcement_view.ex new file mode 100644 index 000000000..a35bd60cf --- /dev/null +++ b/lib/pleroma/web/admin_api/views/announcement_view.ex @@ -0,0 +1,15 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.AdminAPI.AnnouncementView do + use Pleroma.Web, :view + + def render("index.json", %{announcements: announcements}) do + render_many(announcements, __MODULE__, "show.json") + end + + def render("show.json", %{announcement: announcement}) do + Pleroma.Announcement.render_json(announcement, admin: true) + end +end diff --git a/lib/pleroma/web/admin_api/views/chat_view.ex b/lib/pleroma/web/admin_api/views/chat_view.ex index 2a2015ad1..d58bf8eda 100644 --- a/lib/pleroma/web/admin_api/views/chat_view.ex +++ b/lib/pleroma/web/admin_api/views/chat_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.AdminAPI.ChatView do diff --git a/lib/pleroma/web/admin_api/views/config_view.ex b/lib/pleroma/web/admin_api/views/config_view.ex index d29b4963d..f582ad42e 100644 --- a/lib/pleroma/web/admin_api/views/config_view.ex +++ b/lib/pleroma/web/admin_api/views/config_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.AdminAPI.ConfigView do diff --git a/lib/pleroma/web/admin_api/views/frontend_view.ex b/lib/pleroma/web/admin_api/views/frontend_view.ex index a3933a57d..0ca3d67cb 100644 --- a/lib/pleroma/web/admin_api/views/frontend_view.ex +++ b/lib/pleroma/web/admin_api/views/frontend_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.AdminAPI.FrontendView do diff --git a/lib/pleroma/web/admin_api/views/invite_view.ex b/lib/pleroma/web/admin_api/views/invite_view.ex index c7e307bda..76cee3bc5 100644 --- a/lib/pleroma/web/admin_api/views/invite_view.ex +++ b/lib/pleroma/web/admin_api/views/invite_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.AdminAPI.InviteView do diff --git a/lib/pleroma/web/admin_api/views/media_proxy_cache_view.ex b/lib/pleroma/web/admin_api/views/media_proxy_cache_view.ex index 1ec123048..b46f54efe 100644 --- a/lib/pleroma/web/admin_api/views/media_proxy_cache_view.ex +++ b/lib/pleroma/web/admin_api/views/media_proxy_cache_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.AdminAPI.MediaProxyCacheView do diff --git a/lib/pleroma/web/admin_api/views/moderation_log_view.ex b/lib/pleroma/web/admin_api/views/moderation_log_view.ex index b3a9efff3..1f25f194f 100644 --- a/lib/pleroma/web/admin_api/views/moderation_log_view.ex +++ b/lib/pleroma/web/admin_api/views/moderation_log_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.AdminAPI.ModerationLogView do diff --git a/lib/pleroma/web/admin_api/views/o_auth_app_view.ex b/lib/pleroma/web/admin_api/views/o_auth_app_view.ex index af046f343..d1aef0e10 100644 --- a/lib/pleroma/web/admin_api/views/o_auth_app_view.ex +++ b/lib/pleroma/web/admin_api/views/o_auth_app_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.AdminAPI.OAuthAppView do diff --git a/lib/pleroma/web/admin_api/views/report_view.ex b/lib/pleroma/web/admin_api/views/report_view.ex index 1c67b2458..b761dbb22 100644 --- a/lib/pleroma/web/admin_api/views/report_view.ex +++ b/lib/pleroma/web/admin_api/views/report_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.AdminAPI.ReportView do diff --git a/lib/pleroma/web/admin_api/views/status_view.ex b/lib/pleroma/web/admin_api/views/status_view.ex index 48d639b41..03b5c440a 100644 --- a/lib/pleroma/web/admin_api/views/status_view.ex +++ b/lib/pleroma/web/admin_api/views/status_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.AdminAPI.StatusView do diff --git a/lib/pleroma/web/admin_api/views/user_view.ex b/lib/pleroma/web/admin_api/views/user_view.ex index e91265ffe..f198921ae 100644 --- a/lib/pleroma/web/admin_api/views/user_view.ex +++ b/lib/pleroma/web/admin_api/views/user_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.AdminAPI.UserView do diff --git a/lib/pleroma/web/api_spec.ex b/lib/pleroma/web/api_spec.ex index 528cd9cf4..cae4241ff 100644 --- a/lib/pleroma/web/api_spec.ex +++ b/lib/pleroma/web/api_spec.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec do diff --git a/lib/pleroma/web/api_spec/cast_and_validate.ex b/lib/pleroma/web/api_spec/cast_and_validate.ex index d23a7dcb6..add59eb88 100644 --- a/lib/pleroma/web/api_spec/cast_and_validate.ex +++ b/lib/pleroma/web/api_spec/cast_and_validate.ex @@ -1,6 +1,6 @@ # Pleroma: A lightweight social networking server # Copyright © 2019-2020 Moxley Stratton, Mike Buhot , MPL-2.0 -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.CastAndValidate do diff --git a/lib/pleroma/web/api_spec/helpers.ex b/lib/pleroma/web/api_spec/helpers.ex index 6f67339e6..f20a9163d 100644 --- a/lib/pleroma/web/api_spec/helpers.ex +++ b/lib/pleroma/web/api_spec/helpers.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.Helpers do diff --git a/lib/pleroma/web/api_spec/operations/account_operation.ex b/lib/pleroma/web/api_spec/operations/account_operation.ex index 8cd2e824d..97616f5e7 100644 --- a/lib/pleroma/web/api_spec/operations/account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/account_operation.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.AccountOperation do @@ -278,11 +278,17 @@ defmodule Pleroma.Web.ApiSpec.AccountOperation do %Schema{allOf: [BooleanLike], default: true}, "Mute notifications in addition to statuses? Defaults to `true`." ), + Operation.parameter( + :duration, + :query, + %Schema{type: :integer}, + "Expire the mute in `duration` seconds. Default 0 for infinity" + ), Operation.parameter( :expires_in, :query, %Schema{type: :integer, default: 0}, - "Expire the mute in `expires_in` seconds. Default 0 for infinity" + "Deprecated, use `duration` instead" ) ], responses: %{ @@ -334,6 +340,42 @@ defmodule Pleroma.Web.ApiSpec.AccountOperation do } end + def endorse_operation do + %Operation{ + tags: ["Account actions"], + summary: "Endorse", + operationId: "AccountController.endorse", + security: [%{"oAuth" => ["follow", "write:accounts"]}], + description: "Addds the given account to endorsed accounts list.", + parameters: [%Reference{"$ref": "#/components/parameters/accountIdOrNickname"}], + responses: %{ + 200 => Operation.response("Relationship", "application/json", AccountRelationship), + 400 => + Operation.response("Bad Request", "application/json", %Schema{ + allOf: [ApiError], + title: "Unprocessable Entity", + example: %{ + "error" => "You have already pinned the maximum number of users" + } + }) + } + } + end + + def unendorse_operation do + %Operation{ + tags: ["Account actions"], + summary: "Unendorse", + operationId: "AccountController.unendorse", + security: [%{"oAuth" => ["follow", "write:accounts"]}], + description: "Removes the given account from endorsed accounts list.", + parameters: [%Reference{"$ref": "#/components/parameters/accountIdOrNickname"}], + responses: %{ + 200 => Operation.response("Relationship", "application/json", AccountRelationship) + } + } + end + def note_operation do %Operation{ tags: ["Account actions"], @@ -400,15 +442,35 @@ defmodule Pleroma.Web.ApiSpec.AccountOperation do } end + def lookup_operation do + %Operation{ + tags: ["Account lookup"], + summary: "Find a user by nickname", + operationId: "AccountController.lookup", + parameters: [ + Operation.parameter( + :acct, + :query, + :string, + "User nickname" + ) + ], + responses: %{ + 200 => Operation.response("Account", "application/json", Account), + 404 => Operation.response("Error", "application/json", ApiError) + } + } + end + def endorsements_operation do %Operation{ tags: ["Retrieve account information"], summary: "Endorsements", operationId: "AccountController.endorsements", - description: "Not implemented", + description: "Returns endorsed accounts", security: [%{"oAuth" => ["read:accounts"]}], responses: %{ - 200 => empty_array_response() + 200 => Operation.response("Array of Accounts", "application/json", array_of_accounts()) } } end @@ -487,6 +549,25 @@ defmodule Pleroma.Web.ApiSpec.AccountOperation do type: :string, nullable: true, description: "Invite token required when the registrations aren't public" + }, + birthday: %Schema{ + nullable: true, + description: "User's birthday", + anyOf: [ + %Schema{ + type: :string, + format: :date + }, + %Schema{ + type: :string, + maxLength: 0 + } + ] + }, + language: %Schema{ + type: :string, + nullable: true, + description: "User's preferred language for emails" } }, example: %{ @@ -664,7 +745,26 @@ defmodule Pleroma.Web.ApiSpec.AccountOperation do description: "Discovery (listing, indexing) of this account by external services (search bots etc.) is allowed." }, - actor_type: ActorType + actor_type: ActorType, + birthday: %Schema{ + nullable: true, + description: "User's birthday", + anyOf: [ + %Schema{ + type: :string, + format: :date + }, + %Schema{ + type: :string, + maxLength: 0 + } + ] + }, + show_birthday: %Schema{ + allOf: [BooleanLike], + nullable: true, + description: "User's birthday will be visible" + } }, example: %{ bot: false, @@ -684,7 +784,9 @@ defmodule Pleroma.Web.ApiSpec.AccountOperation do allow_following_move: false, also_known_as: ["https://foo.bar/users/foo"], discoverable: false, - actor_type: "Person" + actor_type: "Person", + show_birthday: false, + birthday: "2001-02-12" } } end @@ -781,10 +883,15 @@ defmodule Pleroma.Web.ApiSpec.AccountOperation do description: "Mute notifications in addition to statuses? Defaults to true.", default: true }, + duration: %Schema{ + type: :integer, + nullable: true, + description: "Expire the mute in `expires_in` seconds. Default 0 for infinity" + }, expires_in: %Schema{ type: :integer, nullable: true, - description: "Expire the mute in `expires_in` seconds. Default 0 for infinity", + description: "Deprecated, use `duration` instead", default: 0 } }, diff --git a/lib/pleroma/web/api_spec/operations/admin/announcement_operation.ex b/lib/pleroma/web/api_spec/operations/admin/announcement_operation.ex new file mode 100644 index 000000000..58a039e72 --- /dev/null +++ b/lib/pleroma/web/api_spec/operations/admin/announcement_operation.ex @@ -0,0 +1,165 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Admin.AnnouncementOperation do + alias OpenApiSpex.Operation + alias OpenApiSpex.Schema + alias Pleroma.Web.ApiSpec.Schemas.Announcement + alias Pleroma.Web.ApiSpec.Schemas.ApiError + + import Pleroma.Web.ApiSpec.Helpers + + def open_api_operation(action) do + operation = String.to_existing_atom("#{action}_operation") + apply(__MODULE__, operation, []) + end + + def index_operation do + %Operation{ + tags: ["Announcement managment"], + summary: "Retrieve a list of announcements", + operationId: "AdminAPI.AnnouncementController.index", + security: [%{"oAuth" => ["admin:read"]}], + parameters: [ + Operation.parameter( + :limit, + :query, + %Schema{type: :integer, minimum: 1}, + "the maximum number of announcements to return" + ), + Operation.parameter( + :offset, + :query, + %Schema{type: :integer, minimum: 0}, + "the offset of the first announcement to return" + ) + | admin_api_params() + ], + responses: %{ + 200 => Operation.response("Response", "application/json", list_of_announcements()), + 400 => Operation.response("Forbidden", "application/json", ApiError), + 403 => Operation.response("Forbidden", "application/json", ApiError) + } + } + end + + def show_operation do + %Operation{ + tags: ["Announcement managment"], + summary: "Display one announcement", + operationId: "AdminAPI.AnnouncementController.show", + security: [%{"oAuth" => ["admin:read"]}], + parameters: [ + Operation.parameter( + :id, + :path, + :string, + "announcement id" + ) + | admin_api_params() + ], + responses: %{ + 200 => Operation.response("Response", "application/json", Announcement), + 403 => Operation.response("Forbidden", "application/json", ApiError), + 404 => Operation.response("Not Found", "application/json", ApiError) + } + } + end + + def delete_operation do + %Operation{ + tags: ["Announcement managment"], + summary: "Delete one announcement", + operationId: "AdminAPI.AnnouncementController.delete", + security: [%{"oAuth" => ["admin:write"]}], + parameters: [ + Operation.parameter( + :id, + :path, + :string, + "announcement id" + ) + | admin_api_params() + ], + responses: %{ + 200 => Operation.response("Response", "application/json", %Schema{type: :object}), + 403 => Operation.response("Forbidden", "application/json", ApiError), + 404 => Operation.response("Not Found", "application/json", ApiError) + } + } + end + + def create_operation do + %Operation{ + tags: ["Announcement managment"], + summary: "Create one announcement", + operationId: "AdminAPI.AnnouncementController.create", + security: [%{"oAuth" => ["admin:write"]}], + requestBody: request_body("Parameters", create_request(), required: true), + responses: %{ + 200 => Operation.response("Response", "application/json", Announcement), + 400 => Operation.response("Bad Request", "application/json", ApiError), + 403 => Operation.response("Forbidden", "application/json", ApiError) + } + } + end + + def change_operation do + %Operation{ + tags: ["Announcement managment"], + summary: "Change one announcement", + operationId: "AdminAPI.AnnouncementController.change", + security: [%{"oAuth" => ["admin:write"]}], + parameters: [ + Operation.parameter( + :id, + :path, + :string, + "announcement id" + ) + | admin_api_params() + ], + requestBody: request_body("Parameters", change_request(), required: true), + responses: %{ + 200 => Operation.response("Response", "application/json", Announcement), + 400 => Operation.response("Bad Request", "application/json", ApiError), + 403 => Operation.response("Forbidden", "application/json", ApiError), + 404 => Operation.response("Not Found", "application/json", ApiError) + } + } + end + + defp create_or_change_props do + %{ + content: %Schema{type: :string}, + starts_at: %Schema{type: :string, format: "date-time", nullable: true}, + ends_at: %Schema{type: :string, format: "date-time", nullable: true}, + all_day: %Schema{type: :boolean} + } + end + + def create_request do + %Schema{ + title: "AnnouncementCreateRequest", + type: :object, + required: [:content], + properties: create_or_change_props() + } + end + + def change_request do + %Schema{ + title: "AnnouncementChangeRequest", + type: :object, + properties: create_or_change_props() + } + end + + def list_of_announcements do + %Schema{ + type: :array, + items: Announcement + } + end +end diff --git a/lib/pleroma/web/api_spec/operations/admin/chat_operation.ex b/lib/pleroma/web/api_spec/operations/admin/chat_operation.ex index 57906445e..2a274e080 100644 --- a/lib/pleroma/web/api_spec/operations/admin/chat_operation.ex +++ b/lib/pleroma/web/api_spec/operations/admin/chat_operation.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.Admin.ChatOperation do diff --git a/lib/pleroma/web/api_spec/operations/admin/config_operation.ex b/lib/pleroma/web/api_spec/operations/admin/config_operation.ex index 30c3433b7..487dd5cda 100644 --- a/lib/pleroma/web/api_spec/operations/admin/config_operation.ex +++ b/lib/pleroma/web/api_spec/operations/admin/config_operation.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.Admin.ConfigOperation do diff --git a/lib/pleroma/web/api_spec/operations/admin/frontend_operation.ex b/lib/pleroma/web/api_spec/operations/admin/frontend_operation.ex index 566f1eeb1..4bfe5ac5a 100644 --- a/lib/pleroma/web/api_spec/operations/admin/frontend_operation.ex +++ b/lib/pleroma/web/api_spec/operations/admin/frontend_operation.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.Admin.FrontendOperation do diff --git a/lib/pleroma/web/api_spec/operations/admin/instance_document_operation.ex b/lib/pleroma/web/api_spec/operations/admin/instance_document_operation.ex index 79ceae970..fc0de499b 100644 --- a/lib/pleroma/web/api_spec/operations/admin/instance_document_operation.ex +++ b/lib/pleroma/web/api_spec/operations/admin/instance_document_operation.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.Admin.InstanceDocumentOperation do diff --git a/lib/pleroma/web/api_spec/operations/admin/invite_operation.ex b/lib/pleroma/web/api_spec/operations/admin/invite_operation.ex index 704f082ba..e4a9ffaeb 100644 --- a/lib/pleroma/web/api_spec/operations/admin/invite_operation.ex +++ b/lib/pleroma/web/api_spec/operations/admin/invite_operation.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.Admin.InviteOperation do diff --git a/lib/pleroma/web/api_spec/operations/admin/media_proxy_cache_operation.ex b/lib/pleroma/web/api_spec/operations/admin/media_proxy_cache_operation.ex index 8f85ebf2d..0b1eb3946 100644 --- a/lib/pleroma/web/api_spec/operations/admin/media_proxy_cache_operation.ex +++ b/lib/pleroma/web/api_spec/operations/admin/media_proxy_cache_operation.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.Admin.MediaProxyCacheOperation do diff --git a/lib/pleroma/web/api_spec/operations/admin/o_auth_app_operation.ex b/lib/pleroma/web/api_spec/operations/admin/o_auth_app_operation.ex index 35b029b19..1a05aff6a 100644 --- a/lib/pleroma/web/api_spec/operations/admin/o_auth_app_operation.ex +++ b/lib/pleroma/web/api_spec/operations/admin/o_auth_app_operation.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.Admin.OAuthAppOperation do diff --git a/lib/pleroma/web/api_spec/operations/admin/relay_operation.ex b/lib/pleroma/web/api_spec/operations/admin/relay_operation.ex index c55c84fee..8b241bd49 100644 --- a/lib/pleroma/web/api_spec/operations/admin/relay_operation.ex +++ b/lib/pleroma/web/api_spec/operations/admin/relay_operation.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.Admin.RelayOperation do diff --git a/lib/pleroma/web/api_spec/operations/admin/report_operation.ex b/lib/pleroma/web/api_spec/operations/admin/report_operation.ex index 8d7577505..312e091a5 100644 --- a/lib/pleroma/web/api_spec/operations/admin/report_operation.ex +++ b/lib/pleroma/web/api_spec/operations/admin/report_operation.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.Admin.ReportOperation do diff --git a/lib/pleroma/web/api_spec/operations/admin/status_operation.ex b/lib/pleroma/web/api_spec/operations/admin/status_operation.ex index d25ab5247..229912dd7 100644 --- a/lib/pleroma/web/api_spec/operations/admin/status_operation.ex +++ b/lib/pleroma/web/api_spec/operations/admin/status_operation.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.Admin.StatusOperation do diff --git a/lib/pleroma/web/api_spec/operations/admin/user_operation.ex b/lib/pleroma/web/api_spec/operations/admin/user_operation.ex index 57fb1ad65..a5179ac39 100644 --- a/lib/pleroma/web/api_spec/operations/admin/user_operation.ex +++ b/lib/pleroma/web/api_spec/operations/admin/user_operation.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.Admin.UserOperation do diff --git a/lib/pleroma/web/api_spec/operations/announcement_operation.ex b/lib/pleroma/web/api_spec/operations/announcement_operation.ex new file mode 100644 index 000000000..71be0002a --- /dev/null +++ b/lib/pleroma/web/api_spec/operations/announcement_operation.ex @@ -0,0 +1,57 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.AnnouncementOperation do + alias OpenApiSpex.Operation + alias OpenApiSpex.Schema + alias Pleroma.Web.ApiSpec.Schemas.Announcement + alias Pleroma.Web.ApiSpec.Schemas.ApiError + + def open_api_operation(action) do + operation = String.to_existing_atom("#{action}_operation") + apply(__MODULE__, operation, []) + end + + def index_operation do + %Operation{ + tags: ["Announcement"], + summary: "Retrieve a list of announcements", + operationId: "MastodonAPI.AnnouncementController.index", + security: [%{"oAuth" => []}], + responses: %{ + 200 => Operation.response("Response", "application/json", list_of_announcements()), + 403 => Operation.response("Forbidden", "application/json", ApiError) + } + } + end + + def mark_read_operation do + %Operation{ + tags: ["Announcement"], + summary: "Mark one announcement as read", + operationId: "MastodonAPI.AnnouncementController.mark_read", + security: [%{"oAuth" => ["write:accounts"]}], + parameters: [ + Operation.parameter( + :id, + :path, + :string, + "announcement id" + ) + ], + responses: %{ + 200 => Operation.response("Response", "application/json", %Schema{type: :object}), + 403 => Operation.response("Forbidden", "application/json", ApiError), + 404 => Operation.response("Not Found", "application/json", ApiError) + } + } + end + + def list_of_announcements do + %Schema{ + type: :array, + items: Announcement + } + end +end diff --git a/lib/pleroma/web/api_spec/operations/app_operation.ex b/lib/pleroma/web/api_spec/operations/app_operation.ex index dfb1c7170..dfa2237c0 100644 --- a/lib/pleroma/web/api_spec/operations/app_operation.ex +++ b/lib/pleroma/web/api_spec/operations/app_operation.ex @@ -1,11 +1,12 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.AppOperation do alias OpenApiSpex.Operation alias OpenApiSpex.Schema alias Pleroma.Web.ApiSpec.Helpers + alias Pleroma.Web.ApiSpec.Schemas.App @spec open_api_operation(atom) :: Operation.t() def open_api_operation(action) do @@ -22,7 +23,7 @@ defmodule Pleroma.Web.ApiSpec.AppOperation do operationId: "AppController.create", requestBody: Helpers.request_body("Parameters", create_request(), required: true), responses: %{ - 200 => Operation.response("App", "application/json", create_response()), + 200 => Operation.response("App", "application/json", App), 422 => Operation.response( "Unprocessable Entity", @@ -119,30 +120,4 @@ defmodule Pleroma.Web.ApiSpec.AppOperation do } } end - - defp create_response do - %Schema{ - title: "AppCreateResponse", - description: "Response schema for an app", - type: :object, - properties: %{ - id: %Schema{type: :string}, - name: %Schema{type: :string}, - client_id: %Schema{type: :string}, - client_secret: %Schema{type: :string}, - redirect_uri: %Schema{type: :string}, - vapid_key: %Schema{type: :string}, - website: %Schema{type: :string, nullable: true} - }, - example: %{ - "id" => "123", - "name" => "My App", - "client_id" => "TWhM-tNSuncnqN7DBJmoyeLnk6K3iJJ71KKXxgL1hPM", - "client_secret" => "ZEaFUFmF0umgBX1qKJDjaU99Q31lDkOU8NutzTOoliw", - "vapid_key" => - "BCk-QqERU0q-CfYZjcuB6lnyyOYfJ2AifKqfeGIm7Z-HiTU5T9eTG5GxVA0_OH5mMlI4UkkDTpaZwozy0TzdZ2M=", - "website" => "https://myapp.com/" - } - } - end end diff --git a/lib/pleroma/web/api_spec/operations/chat_operation.ex b/lib/pleroma/web/api_spec/operations/chat_operation.ex index 23cb66392..cf6a055fc 100644 --- a/lib/pleroma/web/api_spec/operations/chat_operation.ex +++ b/lib/pleroma/web/api_spec/operations/chat_operation.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.ChatOperation do diff --git a/lib/pleroma/web/api_spec/operations/conversation_operation.ex b/lib/pleroma/web/api_spec/operations/conversation_operation.ex index 17ed1af5e..82ccf41f9 100644 --- a/lib/pleroma/web/api_spec/operations/conversation_operation.ex +++ b/lib/pleroma/web/api_spec/operations/conversation_operation.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.ConversationOperation do diff --git a/lib/pleroma/web/api_spec/operations/custom_emoji_operation.ex b/lib/pleroma/web/api_spec/operations/custom_emoji_operation.ex index 98da1a6de..77823f13e 100644 --- a/lib/pleroma/web/api_spec/operations/custom_emoji_operation.ex +++ b/lib/pleroma/web/api_spec/operations/custom_emoji_operation.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.CustomEmojiOperation do diff --git a/lib/pleroma/web/api_spec/operations/directory_operation.ex b/lib/pleroma/web/api_spec/operations/directory_operation.ex index 9be965feb..55752fa62 100644 --- a/lib/pleroma/web/api_spec/operations/directory_operation.ex +++ b/lib/pleroma/web/api_spec/operations/directory_operation.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.DirectoryOperation do diff --git a/lib/pleroma/web/api_spec/operations/domain_block_operation.ex b/lib/pleroma/web/api_spec/operations/domain_block_operation.ex index f124e7fe5..2340fd914 100644 --- a/lib/pleroma/web/api_spec/operations/domain_block_operation.ex +++ b/lib/pleroma/web/api_spec/operations/domain_block_operation.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.DomainBlockOperation do diff --git a/lib/pleroma/web/api_spec/operations/emoji_reaction_operation.ex b/lib/pleroma/web/api_spec/operations/emoji_reaction_operation.ex index a7b306a30..74341d64f 100644 --- a/lib/pleroma/web/api_spec/operations/emoji_reaction_operation.ex +++ b/lib/pleroma/web/api_spec/operations/emoji_reaction_operation.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.EmojiReactionOperation do diff --git a/lib/pleroma/web/api_spec/operations/filter_operation.ex b/lib/pleroma/web/api_spec/operations/filter_operation.ex index 5102921bc..a1700b7c9 100644 --- a/lib/pleroma/web/api_spec/operations/filter_operation.ex +++ b/lib/pleroma/web/api_spec/operations/filter_operation.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.FilterOperation do diff --git a/lib/pleroma/web/api_spec/operations/follow_request_operation.ex b/lib/pleroma/web/api_spec/operations/follow_request_operation.ex index 784019699..72dc8b5fa 100644 --- a/lib/pleroma/web/api_spec/operations/follow_request_operation.ex +++ b/lib/pleroma/web/api_spec/operations/follow_request_operation.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.FollowRequestOperation do diff --git a/lib/pleroma/web/api_spec/operations/instance_operation.ex b/lib/pleroma/web/api_spec/operations/instance_operation.ex index 9384acc32..3c4b504fe 100644 --- a/lib/pleroma/web/api_spec/operations/instance_operation.ex +++ b/lib/pleroma/web/api_spec/operations/instance_operation.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.InstanceOperation do diff --git a/lib/pleroma/web/api_spec/operations/list_operation.ex b/lib/pleroma/web/api_spec/operations/list_operation.ex index 8a6e92b99..7d876ae2d 100644 --- a/lib/pleroma/web/api_spec/operations/list_operation.ex +++ b/lib/pleroma/web/api_spec/operations/list_operation.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.ListOperation do diff --git a/lib/pleroma/web/api_spec/operations/marker_operation.ex b/lib/pleroma/web/api_spec/operations/marker_operation.ex index c5ff5984b..4dfdeb448 100644 --- a/lib/pleroma/web/api_spec/operations/marker_operation.ex +++ b/lib/pleroma/web/api_spec/operations/marker_operation.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.MarkerOperation do diff --git a/lib/pleroma/web/api_spec/operations/media_operation.ex b/lib/pleroma/web/api_spec/operations/media_operation.ex index 451b6510f..e6df21246 100644 --- a/lib/pleroma/web/api_spec/operations/media_operation.ex +++ b/lib/pleroma/web/api_spec/operations/media_operation.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.MediaOperation do diff --git a/lib/pleroma/web/api_spec/operations/notification_operation.ex b/lib/pleroma/web/api_spec/operations/notification_operation.ex index e4ce42f1c..56aa129d2 100644 --- a/lib/pleroma/web/api_spec/operations/notification_operation.ex +++ b/lib/pleroma/web/api_spec/operations/notification_operation.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.NotificationOperation do @@ -51,6 +51,12 @@ defmodule Pleroma.Web.ApiSpec.NotificationOperation do :include_types, :query, %Schema{type: :array, items: notification_type()}, + "Deprecated, use `types` instead" + ), + Operation.parameter( + :types, + :query, + %Schema{type: :array, items: notification_type()}, "Include the notifications for activities with the given types" ), Operation.parameter( diff --git a/lib/pleroma/web/api_spec/operations/pleroma_account_operation.ex b/lib/pleroma/web/api_spec/operations/pleroma_account_operation.ex index ad49f6426..5375c5b15 100644 --- a/lib/pleroma/web/api_spec/operations/pleroma_account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/pleroma_account_operation.ex @@ -1,9 +1,11 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.PleromaAccountOperation do alias OpenApiSpex.Operation + alias OpenApiSpex.Schema + alias Pleroma.Web.ApiSpec.AccountOperation alias Pleroma.Web.ApiSpec.Schemas.AccountRelationship alias Pleroma.Web.ApiSpec.Schemas.ApiError alias Pleroma.Web.ApiSpec.Schemas.FlakeID @@ -62,6 +64,25 @@ defmodule Pleroma.Web.ApiSpec.PleromaAccountOperation do } end + def endorsements_operation do + %Operation{ + tags: ["Retrieve account information"], + summary: "Endorsements", + description: "Returns endorsed accounts", + operationId: "PleromaAPI.AccountController.endorsements", + parameters: [with_relationships_param(), id_param()], + responses: %{ + 200 => + Operation.response( + "Array of Accounts", + "application/json", + AccountOperation.array_of_accounts() + ), + 404 => Operation.response("Not Found", "application/json", ApiError) + } + } + end + def subscribe_operation do %Operation{ tags: ["Account actions"], @@ -92,6 +113,34 @@ defmodule Pleroma.Web.ApiSpec.PleromaAccountOperation do } end + def birthdays_operation do + %Operation{ + tags: ["Retrieve account information"], + summary: "Birthday reminders", + description: "Birthday reminders about users you follow.", + operationId: "PleromaAPI.AccountController.birthdays", + parameters: [ + Operation.parameter( + :day, + :query, + %Schema{type: :integer}, + "Day of users' birthdays" + ), + Operation.parameter( + :month, + :query, + %Schema{type: :integer}, + "Month of users' birthdays" + ) + ], + security: [%{"oAuth" => ["read:accounts"]}], + responses: %{ + 200 => + Operation.response("Accounts", "application/json", AccountOperation.array_of_accounts()) + } + } + end + defp id_param do Operation.parameter(:id, :path, FlakeID, "Account ID", example: "9umDrYheeY451cQnEe", diff --git a/lib/pleroma/web/api_spec/operations/pleroma_app_operation.ex b/lib/pleroma/web/api_spec/operations/pleroma_app_operation.ex new file mode 100644 index 000000000..9f8df6c5c --- /dev/null +++ b/lib/pleroma/web/api_spec/operations/pleroma_app_operation.ex @@ -0,0 +1,31 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.PleromaAppOperation do + alias OpenApiSpex.Operation + alias OpenApiSpex.Schema + alias Pleroma.Web.ApiSpec.Schemas.App + + def open_api_operation(action) do + operation = String.to_existing_atom("#{action}_operation") + apply(__MODULE__, operation, []) + end + + @spec index_operation() :: Operation.t() + def index_operation do + %Operation{ + tags: ["Applications"], + summary: "List applications", + description: "List the OAuth applications for the current user", + operationId: "AppController.index", + responses: %{ + 200 => Operation.response("Array of App", "application/json", array_of_apps()) + } + } + end + + defp array_of_apps do + %Schema{type: :array, items: App, example: [App.schema().example]} + end +end diff --git a/lib/pleroma/web/api_spec/operations/pleroma_backup_operation.ex b/lib/pleroma/web/api_spec/operations/pleroma_backup_operation.ex index c78e9780f..82ec1e7bb 100644 --- a/lib/pleroma/web/api_spec/operations/pleroma_backup_operation.ex +++ b/lib/pleroma/web/api_spec/operations/pleroma_backup_operation.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.PleromaBackupOperation do diff --git a/lib/pleroma/web/api_spec/operations/pleroma_conversation_operation.ex b/lib/pleroma/web/api_spec/operations/pleroma_conversation_operation.ex index 12fb8ed36..89f0e13e1 100644 --- a/lib/pleroma/web/api_spec/operations/pleroma_conversation_operation.ex +++ b/lib/pleroma/web/api_spec/operations/pleroma_conversation_operation.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.PleromaConversationOperation do diff --git a/lib/pleroma/web/api_spec/operations/pleroma_emoji_file_operation.ex b/lib/pleroma/web/api_spec/operations/pleroma_emoji_file_operation.ex index 8c76096b5..d09c1c10e 100644 --- a/lib/pleroma/web/api_spec/operations/pleroma_emoji_file_operation.ex +++ b/lib/pleroma/web/api_spec/operations/pleroma_emoji_file_operation.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.PleromaEmojiFileOperation do diff --git a/lib/pleroma/web/api_spec/operations/pleroma_emoji_pack_operation.ex b/lib/pleroma/web/api_spec/operations/pleroma_emoji_pack_operation.ex index 49247d9b6..6add3ff33 100644 --- a/lib/pleroma/web/api_spec/operations/pleroma_emoji_pack_operation.ex +++ b/lib/pleroma/web/api_spec/operations/pleroma_emoji_pack_operation.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.PleromaEmojiPackOperation do diff --git a/lib/pleroma/web/api_spec/operations/pleroma_instances_operation.ex b/lib/pleroma/web/api_spec/operations/pleroma_instances_operation.ex index 612113147..82db4e1a8 100644 --- a/lib/pleroma/web/api_spec/operations/pleroma_instances_operation.ex +++ b/lib/pleroma/web/api_spec/operations/pleroma_instances_operation.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.PleromaInstancesOperation do diff --git a/lib/pleroma/web/api_spec/operations/pleroma_mascot_operation.ex b/lib/pleroma/web/api_spec/operations/pleroma_mascot_operation.ex index 6191cb97d..775e27219 100644 --- a/lib/pleroma/web/api_spec/operations/pleroma_mascot_operation.ex +++ b/lib/pleroma/web/api_spec/operations/pleroma_mascot_operation.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.PleromaMascotOperation do diff --git a/lib/pleroma/web/api_spec/operations/pleroma_notification_operation.ex b/lib/pleroma/web/api_spec/operations/pleroma_notification_operation.ex index 1dda39240..a994345db 100644 --- a/lib/pleroma/web/api_spec/operations/pleroma_notification_operation.ex +++ b/lib/pleroma/web/api_spec/operations/pleroma_notification_operation.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.PleromaNotificationOperation do diff --git a/lib/pleroma/web/api_spec/operations/pleroma_report_operation.ex b/lib/pleroma/web/api_spec/operations/pleroma_report_operation.ex index ee8870dc2..9bc1877b1 100644 --- a/lib/pleroma/web/api_spec/operations/pleroma_report_operation.ex +++ b/lib/pleroma/web/api_spec/operations/pleroma_report_operation.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.PleromaReportOperation do diff --git a/lib/pleroma/web/api_spec/operations/pleroma_scrobble_operation.ex b/lib/pleroma/web/api_spec/operations/pleroma_scrobble_operation.ex index 6a909fc85..b6273bfcf 100644 --- a/lib/pleroma/web/api_spec/operations/pleroma_scrobble_operation.ex +++ b/lib/pleroma/web/api_spec/operations/pleroma_scrobble_operation.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.PleromaScrobbleOperation do diff --git a/lib/pleroma/web/api_spec/operations/poll_operation.ex b/lib/pleroma/web/api_spec/operations/poll_operation.ex index 0d1c8d099..efd784f03 100644 --- a/lib/pleroma/web/api_spec/operations/poll_operation.ex +++ b/lib/pleroma/web/api_spec/operations/poll_operation.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.PollOperation do diff --git a/lib/pleroma/web/api_spec/operations/report_operation.ex b/lib/pleroma/web/api_spec/operations/report_operation.ex index b744efa60..c74ac7d5f 100644 --- a/lib/pleroma/web/api_spec/operations/report_operation.ex +++ b/lib/pleroma/web/api_spec/operations/report_operation.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.ReportOperation do diff --git a/lib/pleroma/web/api_spec/operations/scheduled_activity_operation.ex b/lib/pleroma/web/api_spec/operations/scheduled_activity_operation.ex index b9c5b35c1..802d3b6dd 100644 --- a/lib/pleroma/web/api_spec/operations/scheduled_activity_operation.ex +++ b/lib/pleroma/web/api_spec/operations/scheduled_activity_operation.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.ScheduledActivityOperation do diff --git a/lib/pleroma/web/api_spec/operations/search_operation.ex b/lib/pleroma/web/api_spec/operations/search_operation.ex index ff4fd0027..1a7e49be4 100644 --- a/lib/pleroma/web/api_spec/operations/search_operation.ex +++ b/lib/pleroma/web/api_spec/operations/search_operation.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.SearchOperation do diff --git a/lib/pleroma/web/api_spec/operations/status_operation.ex b/lib/pleroma/web/api_spec/operations/status_operation.ex index 802fbef3e..639f24d49 100644 --- a/lib/pleroma/web/api_spec/operations/status_operation.ex +++ b/lib/pleroma/web/api_spec/operations/status_operation.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.StatusOperation do diff --git a/lib/pleroma/web/api_spec/operations/subscription_operation.ex b/lib/pleroma/web/api_spec/operations/subscription_operation.ex index 60a7fb3b0..c53ec2956 100644 --- a/lib/pleroma/web/api_spec/operations/subscription_operation.ex +++ b/lib/pleroma/web/api_spec/operations/subscription_operation.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.SubscriptionOperation do diff --git a/lib/pleroma/web/api_spec/operations/timeline_operation.ex b/lib/pleroma/web/api_spec/operations/timeline_operation.ex index 24d792916..fbe3f763a 100644 --- a/lib/pleroma/web/api_spec/operations/timeline_operation.ex +++ b/lib/pleroma/web/api_spec/operations/timeline_operation.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.TimelineOperation do diff --git a/lib/pleroma/web/api_spec/operations/twitter_util_operation.ex b/lib/pleroma/web/api_spec/operations/twitter_util_operation.ex index 4a2a246f5..1cc90990f 100644 --- a/lib/pleroma/web/api_spec/operations/twitter_util_operation.ex +++ b/lib/pleroma/web/api_spec/operations/twitter_util_operation.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.TwitterUtilOperation do diff --git a/lib/pleroma/web/api_spec/operations/user_import_operation.ex b/lib/pleroma/web/api_spec/operations/user_import_operation.ex index 8df19f1fc..e99e6e648 100644 --- a/lib/pleroma/web/api_spec/operations/user_import_operation.ex +++ b/lib/pleroma/web/api_spec/operations/user_import_operation.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.UserImportOperation do diff --git a/lib/pleroma/web/api_spec/render_error.ex b/lib/pleroma/web/api_spec/render_error.ex index e501a6be4..3539af6e4 100644 --- a/lib/pleroma/web/api_spec/render_error.ex +++ b/lib/pleroma/web/api_spec/render_error.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.RenderError do diff --git a/lib/pleroma/web/api_spec/schemas/account.ex b/lib/pleroma/web/api_spec/schemas/account.ex index 548e70544..8aeb821a8 100644 --- a/lib/pleroma/web/api_spec/schemas/account.ex +++ b/lib/pleroma/web/api_spec/schemas/account.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.Schemas.Account do @@ -33,6 +33,7 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Account do header: %Schema{type: :string, format: :uri}, id: FlakeID, locked: %Schema{type: :boolean}, + mute_expires_at: %Schema{type: :string, format: "date-time", nullable: true}, note: %Schema{type: :string, format: :html}, statuses_count: %Schema{type: :integer}, url: %Schema{type: :string, format: :uri}, @@ -47,12 +48,14 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Account do description: "whether the user allows automatically follow moved following accounts" }, background_image: %Schema{type: :string, nullable: true, format: :uri}, + birthday: %Schema{type: :string, nullable: true, format: :date}, chat_token: %Schema{type: :string}, is_confirmed: %Schema{ type: :boolean, description: "whether the user account is waiting on email confirmation to be activated" }, + show_birthday: %Schema{type: :boolean, nullable: true}, hide_favorites: %Schema{type: :boolean}, hide_followers_count: %Schema{ type: :boolean, @@ -202,7 +205,8 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Account do }, "settings_store" => %{ "pleroma-fe" => %{} - } + }, + "birthday" => "2001-02-12" }, "source" => %{ "fields" => [], diff --git a/lib/pleroma/web/api_spec/schemas/account_field.ex b/lib/pleroma/web/api_spec/schemas/account_field.ex index 7c4f94001..93ba1b5a5 100644 --- a/lib/pleroma/web/api_spec/schemas/account_field.ex +++ b/lib/pleroma/web/api_spec/schemas/account_field.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.Schemas.AccountField do diff --git a/lib/pleroma/web/api_spec/schemas/account_relationship.ex b/lib/pleroma/web/api_spec/schemas/account_relationship.ex index 5d9e3b56e..68219a099 100644 --- a/lib/pleroma/web/api_spec/schemas/account_relationship.ex +++ b/lib/pleroma/web/api_spec/schemas/account_relationship.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.Schemas.AccountRelationship do diff --git a/lib/pleroma/web/api_spec/schemas/actor_type.ex b/lib/pleroma/web/api_spec/schemas/actor_type.ex index 1336640a1..13b6b476b 100644 --- a/lib/pleroma/web/api_spec/schemas/actor_type.ex +++ b/lib/pleroma/web/api_spec/schemas/actor_type.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.Schemas.ActorType do diff --git a/lib/pleroma/web/api_spec/schemas/announcement.ex b/lib/pleroma/web/api_spec/schemas/announcement.ex new file mode 100644 index 000000000..67d129ef6 --- /dev/null +++ b/lib/pleroma/web/api_spec/schemas/announcement.ex @@ -0,0 +1,45 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Schemas.Announcement do + alias OpenApiSpex.Schema + alias Pleroma.Web.ApiSpec.Schemas.FlakeID + + require OpenApiSpex + + OpenApiSpex.schema(%{ + title: "Announcement", + description: "Response schema for an announcement", + type: :object, + properties: %{ + id: FlakeID, + content: %Schema{type: :string}, + starts_at: %Schema{ + type: :string, + format: "date-time", + nullable: true + }, + ends_at: %Schema{ + type: :string, + format: "date-time", + nullable: true + }, + all_day: %Schema{type: :boolean}, + published_at: %Schema{type: :string, format: "date-time"}, + updated_at: %Schema{type: :string, format: "date-time"}, + read: %Schema{type: :boolean}, + mentions: %Schema{type: :array}, + statuses: %Schema{type: :array}, + tags: %Schema{type: :array}, + emojis: %Schema{type: :array}, + reactions: %Schema{type: :array}, + pleroma: %Schema{ + type: :object, + properties: %{ + raw_content: %Schema{type: :string} + } + } + } + }) +end diff --git a/lib/pleroma/web/api_spec/schemas/api_error.ex b/lib/pleroma/web/api_spec/schemas/api_error.ex index 0d6d0b75c..58a710761 100644 --- a/lib/pleroma/web/api_spec/schemas/api_error.ex +++ b/lib/pleroma/web/api_spec/schemas/api_error.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.Schemas.ApiError do diff --git a/lib/pleroma/web/api_spec/schemas/app.ex b/lib/pleroma/web/api_spec/schemas/app.ex new file mode 100644 index 000000000..742413b33 --- /dev/null +++ b/lib/pleroma/web/api_spec/schemas/app.ex @@ -0,0 +1,33 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Schemas.App do + alias OpenApiSpex.Schema + + require OpenApiSpex + + OpenApiSpex.schema(%{ + title: "App", + description: "Response schema for an app", + type: :object, + properties: %{ + id: %Schema{type: :string}, + name: %Schema{type: :string}, + client_id: %Schema{type: :string}, + client_secret: %Schema{type: :string}, + redirect_uri: %Schema{type: :string}, + vapid_key: %Schema{type: :string}, + website: %Schema{type: :string, nullable: true} + }, + example: %{ + "id" => "123", + "name" => "My App", + "client_id" => "TWhM-tNSuncnqN7DBJmoyeLnk6K3iJJ71KKXxgL1hPM", + "client_secret" => "ZEaFUFmF0umgBX1qKJDjaU99Q31lDkOU8NutzTOoliw", + "vapid_key" => + "BCk-QqERU0q-CfYZjcuB6lnyyOYfJ2AifKqfeGIm7Z-HiTU5T9eTG5GxVA0_OH5mMlI4UkkDTpaZwozy0TzdZ2M=", + "website" => "https://myapp.com/" + } + }) +end diff --git a/lib/pleroma/web/api_spec/schemas/attachment.ex b/lib/pleroma/web/api_spec/schemas/attachment.ex index ca3659c93..48634a14f 100644 --- a/lib/pleroma/web/api_spec/schemas/attachment.ex +++ b/lib/pleroma/web/api_spec/schemas/attachment.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.Schemas.Attachment do diff --git a/lib/pleroma/web/api_spec/schemas/boolean_like.ex b/lib/pleroma/web/api_spec/schemas/boolean_like.ex index 94c5020ca..14f728eef 100644 --- a/lib/pleroma/web/api_spec/schemas/boolean_like.ex +++ b/lib/pleroma/web/api_spec/schemas/boolean_like.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.Schemas.BooleanLike do diff --git a/lib/pleroma/web/api_spec/schemas/chat.ex b/lib/pleroma/web/api_spec/schemas/chat.ex index 4afed910d..a07d12865 100644 --- a/lib/pleroma/web/api_spec/schemas/chat.ex +++ b/lib/pleroma/web/api_spec/schemas/chat.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.Schemas.Chat do diff --git a/lib/pleroma/web/api_spec/schemas/chat_message.ex b/lib/pleroma/web/api_spec/schemas/chat_message.ex index 348fe95f8..57f7890e5 100644 --- a/lib/pleroma/web/api_spec/schemas/chat_message.ex +++ b/lib/pleroma/web/api_spec/schemas/chat_message.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.Schemas.ChatMessage do diff --git a/lib/pleroma/web/api_spec/schemas/conversation.ex b/lib/pleroma/web/api_spec/schemas/conversation.ex index 7c609965f..f00a9733f 100644 --- a/lib/pleroma/web/api_spec/schemas/conversation.ex +++ b/lib/pleroma/web/api_spec/schemas/conversation.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.Schemas.Conversation do diff --git a/lib/pleroma/web/api_spec/schemas/emoji.ex b/lib/pleroma/web/api_spec/schemas/emoji.ex index ceb3c7186..936bbe1da 100644 --- a/lib/pleroma/web/api_spec/schemas/emoji.ex +++ b/lib/pleroma/web/api_spec/schemas/emoji.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.Schemas.Emoji do diff --git a/lib/pleroma/web/api_spec/schemas/flake_id.ex b/lib/pleroma/web/api_spec/schemas/flake_id.ex index 45314d53a..4c3ec01e7 100644 --- a/lib/pleroma/web/api_spec/schemas/flake_id.ex +++ b/lib/pleroma/web/api_spec/schemas/flake_id.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.Schemas.FlakeID do diff --git a/lib/pleroma/web/api_spec/schemas/list.ex b/lib/pleroma/web/api_spec/schemas/list.ex index 90f5ec987..e57de7917 100644 --- a/lib/pleroma/web/api_spec/schemas/list.ex +++ b/lib/pleroma/web/api_spec/schemas/list.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.Schemas.List do diff --git a/lib/pleroma/web/api_spec/schemas/poll.ex b/lib/pleroma/web/api_spec/schemas/poll.ex index 943ad8bd4..91570582b 100644 --- a/lib/pleroma/web/api_spec/schemas/poll.ex +++ b/lib/pleroma/web/api_spec/schemas/poll.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.Schemas.Poll do diff --git a/lib/pleroma/web/api_spec/schemas/push_subscription.ex b/lib/pleroma/web/api_spec/schemas/push_subscription.ex index 20fe9f304..a5466630b 100644 --- a/lib/pleroma/web/api_spec/schemas/push_subscription.ex +++ b/lib/pleroma/web/api_spec/schemas/push_subscription.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.Schemas.PushSubscription do diff --git a/lib/pleroma/web/api_spec/schemas/scheduled_status.ex b/lib/pleroma/web/api_spec/schemas/scheduled_status.ex index 607586e32..a1acda1e8 100644 --- a/lib/pleroma/web/api_spec/schemas/scheduled_status.ex +++ b/lib/pleroma/web/api_spec/schemas/scheduled_status.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.Schemas.ScheduledStatus do diff --git a/lib/pleroma/web/api_spec/schemas/status.ex b/lib/pleroma/web/api_spec/schemas/status.ex index 3caab0f00..6e6e30315 100644 --- a/lib/pleroma/web/api_spec/schemas/status.ex +++ b/lib/pleroma/web/api_spec/schemas/status.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.Schemas.Status do diff --git a/lib/pleroma/web/api_spec/schemas/tag.ex b/lib/pleroma/web/api_spec/schemas/tag.ex index 657b675e5..66bf0ca71 100644 --- a/lib/pleroma/web/api_spec/schemas/tag.ex +++ b/lib/pleroma/web/api_spec/schemas/tag.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.Schemas.Tag do diff --git a/lib/pleroma/web/api_spec/schemas/visibility_scope.ex b/lib/pleroma/web/api_spec/schemas/visibility_scope.ex index 25a08a0b2..ecd247ba4 100644 --- a/lib/pleroma/web/api_spec/schemas/visibility_scope.ex +++ b/lib/pleroma/web/api_spec/schemas/visibility_scope.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ApiSpec.Schemas.VisibilityScope do diff --git a/lib/pleroma/web/auth/authenticator.ex b/lib/pleroma/web/auth/authenticator.ex index 3fe9718c4..a0bd154db 100644 --- a/lib/pleroma/web/auth/authenticator.ex +++ b/lib/pleroma/web/auth/authenticator.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Auth.Authenticator do diff --git a/lib/pleroma/web/auth/helpers.ex b/lib/pleroma/web/auth/helpers.ex index c566de8d4..02e1f39ab 100644 --- a/lib/pleroma/web/auth/helpers.ex +++ b/lib/pleroma/web/auth/helpers.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Auth.Helpers do diff --git a/lib/pleroma/web/auth/ldap_authenticator.ex b/lib/pleroma/web/auth/ldap_authenticator.ex index f77e8d203..e8cd4491c 100644 --- a/lib/pleroma/web/auth/ldap_authenticator.ex +++ b/lib/pleroma/web/auth/ldap_authenticator.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Auth.LDAPAuthenticator do diff --git a/lib/pleroma/web/auth/pleroma_authenticator.ex b/lib/pleroma/web/auth/pleroma_authenticator.ex index 68472e75f..09a58eb66 100644 --- a/lib/pleroma/web/auth/pleroma_authenticator.ex +++ b/lib/pleroma/web/auth/pleroma_authenticator.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Auth.PleromaAuthenticator do diff --git a/lib/pleroma/web/auth/totp_authenticator.ex b/lib/pleroma/web/auth/totp_authenticator.ex index 5947cd8c9..4be3641fd 100644 --- a/lib/pleroma/web/auth/totp_authenticator.ex +++ b/lib/pleroma/web/auth/totp_authenticator.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Auth.TOTPAuthenticator do diff --git a/lib/pleroma/web/auth/wrapper_authenticator.ex b/lib/pleroma/web/auth/wrapper_authenticator.ex index c67082f7b..a077cfa41 100644 --- a/lib/pleroma/web/auth/wrapper_authenticator.ex +++ b/lib/pleroma/web/auth/wrapper_authenticator.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Auth.WrapperAuthenticator do diff --git a/lib/pleroma/web/channels/user_socket.ex b/lib/pleroma/web/channels/user_socket.ex index 043206835..0f61b80c3 100644 --- a/lib/pleroma/web/channels/user_socket.ex +++ b/lib/pleroma/web/channels/user_socket.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.UserSocket do diff --git a/lib/pleroma/web/common_api.ex b/lib/pleroma/web/common_api.ex index 6f685cb7b..1b95ee89c 100644 --- a/lib/pleroma/web/common_api.ex +++ b/lib/pleroma/web/common_api.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.CommonAPI do @@ -117,7 +117,8 @@ defmodule Pleroma.Web.CommonAPI do def unfollow(follower, unfollowed) do with {:ok, follower, _follow_activity} <- User.unfollow(follower, unfollowed), {:ok, _activity} <- ActivityPub.unfollow(follower, unfollowed), - {:ok, _subscription} <- User.unsubscribe(follower, unfollowed) do + {:ok, _subscription} <- User.unsubscribe(follower, unfollowed), + {:ok, _endorsement} <- User.unendorse(follower, unfollowed) do {:ok, follower} end end diff --git a/lib/pleroma/web/common_api/activity_draft.ex b/lib/pleroma/web/common_api/activity_draft.ex index b4e3e37ae..7c21c8c3a 100644 --- a/lib/pleroma/web/common_api/activity_draft.ex +++ b/lib/pleroma/web/common_api/activity_draft.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.CommonAPI.ActivityDraft do @@ -112,7 +112,12 @@ defmodule Pleroma.Web.CommonAPI.ActivityDraft do defp attachments(%{params: params} = draft) do attachments = Utils.attachments_from_ids(params) - %__MODULE__{draft | attachments: attachments} + draft = %__MODULE__{draft | attachments: attachments} + + case Utils.validate_attachments_count(attachments) do + :ok -> draft + {:error, message} -> add_error(draft, message) + end end defp in_reply_to(%{params: %{in_reply_to_status_id: ""}} = draft), do: draft diff --git a/lib/pleroma/web/common_api/utils.ex b/lib/pleroma/web/common_api/utils.ex index b6feaf32a..ce850b038 100644 --- a/lib/pleroma/web/common_api/utils.ex +++ b/lib/pleroma/web/common_api/utils.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.CommonAPI.Utils do @@ -492,4 +492,19 @@ defmodule Pleroma.Web.CommonAPI.Utils do {:error, dgettext("errors", "The status is over the character limit")} end end + + def validate_attachments_count([] = _attachments) do + :ok + end + + def validate_attachments_count(attachments) do + limit = Config.get([:instance, :max_media_attachments]) + count = length(attachments) + + if count <= limit do + :ok + else + {:error, dgettext("errors", "Too many attachments")} + end + end end diff --git a/lib/pleroma/web/controller_helper.ex b/lib/pleroma/web/controller_helper.ex index 7b84b43e4..0c7fc17f4 100644 --- a/lib/pleroma/web/controller_helper.ex +++ b/lib/pleroma/web/controller_helper.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ControllerHelper do diff --git a/lib/pleroma/web/embed_controller.ex b/lib/pleroma/web/embed_controller.ex index c7912bb1f..8b9f0a051 100644 --- a/lib/pleroma/web/embed_controller.ex +++ b/lib/pleroma/web/embed_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.EmbedController do diff --git a/lib/pleroma/web/endpoint.ex b/lib/pleroma/web/endpoint.ex index 75484fac5..d8d40cceb 100644 --- a/lib/pleroma/web/endpoint.ex +++ b/lib/pleroma/web/endpoint.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Endpoint do diff --git a/lib/pleroma/web/fallback/legacy_pleroma_api_rerouter_plug.ex b/lib/pleroma/web/fallback/legacy_pleroma_api_rerouter_plug.ex index f86d6b52b..6176f3d90 100644 --- a/lib/pleroma/web/fallback/legacy_pleroma_api_rerouter_plug.ex +++ b/lib/pleroma/web/fallback/legacy_pleroma_api_rerouter_plug.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Fallback.LegacyPleromaApiRerouterPlug do diff --git a/lib/pleroma/web/fallback/redirect_controller.ex b/lib/pleroma/web/fallback/redirect_controller.ex index 5fca290e5..1a86f7a53 100644 --- a/lib/pleroma/web/fallback/redirect_controller.ex +++ b/lib/pleroma/web/fallback/redirect_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Fallback.RedirectController do diff --git a/lib/pleroma/web/federator.ex b/lib/pleroma/web/federator.ex index 69cfc2d52..e7feefc07 100644 --- a/lib/pleroma/web/federator.ex +++ b/lib/pleroma/web/federator.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Federator do diff --git a/lib/pleroma/web/federator/publisher.ex b/lib/pleroma/web/federator/publisher.ex index b7ee56803..a45796e9d 100644 --- a/lib/pleroma/web/federator/publisher.ex +++ b/lib/pleroma/web/federator/publisher.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Federator.Publisher do diff --git a/lib/pleroma/web/federator/publishing.ex b/lib/pleroma/web/federator/publishing.ex index fe7805be9..3a242b8dc 100644 --- a/lib/pleroma/web/federator/publishing.ex +++ b/lib/pleroma/web/federator/publishing.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Federator.Publishing do diff --git a/lib/pleroma/web/feed/feed_view.ex b/lib/pleroma/web/feed/feed_view.ex index c0fb35e01..35a5f9482 100644 --- a/lib/pleroma/web/feed/feed_view.ex +++ b/lib/pleroma/web/feed/feed_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Feed.FeedView do @@ -9,6 +9,7 @@ defmodule Pleroma.Web.Feed.FeedView do alias Pleroma.Formatter alias Pleroma.Object alias Pleroma.User + alias Pleroma.Web.Gettext alias Pleroma.Web.MediaProxy require Pleroma.Constants diff --git a/lib/pleroma/web/feed/tag_controller.ex b/lib/pleroma/web/feed/tag_controller.ex index ef9293a55..e60767327 100644 --- a/lib/pleroma/web/feed/tag_controller.ex +++ b/lib/pleroma/web/feed/tag_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Feed.TagController do diff --git a/lib/pleroma/web/feed/user_controller.ex b/lib/pleroma/web/feed/user_controller.ex index 739b1f026..6657c2b3e 100644 --- a/lib/pleroma/web/feed/user_controller.ex +++ b/lib/pleroma/web/feed/user_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Feed.UserController do diff --git a/lib/pleroma/web/gettext.ex b/lib/pleroma/web/gettext.ex index c0ca4d0e9..5ef49d841 100644 --- a/lib/pleroma/web/gettext.ex +++ b/lib/pleroma/web/gettext.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Gettext do @@ -25,4 +25,196 @@ defmodule Pleroma.Web.Gettext do See the [Gettext Docs](https://hexdocs.pm/gettext) for detailed usage. """ use Gettext, otp_app: :pleroma + + def language_tag do + # Naive implementation: HTML lang attribute uses BCP 47, which + # uses - as a separator. + # https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/lang + + Gettext.get_locale() + |> String.replace("_", "-", global: true) + end + + def normalize_locale(locale) do + if is_binary(locale) do + String.replace(locale, "-", "_", global: true) + else + nil + end + end + + def supports_locale?(locale) do + Pleroma.Web.Gettext + |> Gettext.known_locales() + |> Enum.member?(locale) + end + + def variant?(locale), do: String.contains?(locale, "_") + + def language_for_variant(locale) do + Enum.at(String.split(locale, "_"), 0) + end + + def ensure_fallbacks(locales) do + locales + |> Enum.flat_map(fn locale -> + others = + other_supported_variants_of_locale(locale) + |> Enum.filter(fn l -> not Enum.member?(locales, l) end) + + [locale] ++ others + end) + end + + def other_supported_variants_of_locale(locale) do + cond do + supports_locale?(locale) -> + [] + + variant?(locale) -> + lang = language_for_variant(locale) + if supports_locale?(lang), do: [lang], else: [] + + true -> + Gettext.known_locales(Pleroma.Web.Gettext) + |> Enum.filter(fn l -> String.starts_with?(l, locale <> "_") end) + end + end + + def get_locales do + Process.get({Pleroma.Web.Gettext, :locales}, []) + end + + def is_locale_list(locales) do + Enum.all?(locales, &is_binary/1) + end + + def put_locales(locales) do + if is_locale_list(locales) do + Process.put({Pleroma.Web.Gettext, :locales}, Enum.uniq(locales)) + Gettext.put_locale(Enum.at(locales, 0, Gettext.get_locale())) + :ok + else + {:error, :not_locale_list} + end + end + + def locale_or_default(locale) do + if supports_locale?(locale) do + locale + else + Gettext.get_locale() + end + end + + def with_locales_func(locales, fun) do + prev_locales = Process.get({Pleroma.Web.Gettext, :locales}) + put_locales(locales) + + try do + fun.() + after + if prev_locales do + put_locales(prev_locales) + else + Process.delete({Pleroma.Web.Gettext, :locales}) + Process.delete(Gettext) + end + end + end + + defmacro with_locales(locales, do: fun) do + quote do + Pleroma.Web.Gettext.with_locales_func(unquote(locales), fn -> + unquote(fun) + end) + end + end + + def to_locale_list(locale) when is_binary(locale) do + locale + |> String.split(",") + |> Enum.filter(&supports_locale?/1) + end + + def to_locale_list(_), do: [] + + defmacro with_locale_or_default(locale, do: fun) do + quote do + Pleroma.Web.Gettext.with_locales_func( + Pleroma.Web.Gettext.to_locale_list(unquote(locale)) + |> Enum.concat(Pleroma.Web.Gettext.get_locales()), + fn -> + unquote(fun) + end + ) + end + end + + defp next_locale(locale, list) do + index = Enum.find_index(list, fn item -> item == locale end) + + if not is_nil(index) do + Enum.at(list, index + 1) + else + nil + end + end + + # We do not yet have a proper English translation. The "English" + # version is currently but the fallback msgid. However, this + # will not work if the user puts English as the first language, + # and at the same time specifies other languages, as gettext will + # think the English translation is missing, and call + # handle_missing_translation functions. This may result in + # text in other languages being shown even if English is preferred + # by the user. + # + # To prevent this, we do not allow fallbacking when the current + # locale missing a translation is English. + defp should_fallback?(locale) do + locale != "en" + end + + def handle_missing_translation(locale, domain, msgctxt, msgid, bindings) do + next = next_locale(locale, get_locales()) + + if is_nil(next) or not should_fallback?(locale) do + super(locale, domain, msgctxt, msgid, bindings) + else + {:ok, + Gettext.with_locale(next, fn -> + Gettext.dpgettext(Pleroma.Web.Gettext, domain, msgctxt, msgid, bindings) + end)} + end + end + + def handle_missing_plural_translation( + locale, + domain, + msgctxt, + msgid, + msgid_plural, + n, + bindings + ) do + next = next_locale(locale, get_locales()) + + if is_nil(next) or not should_fallback?(locale) do + super(locale, domain, msgctxt, msgid, msgid_plural, n, bindings) + else + {:ok, + Gettext.with_locale(next, fn -> + Gettext.dpngettext( + Pleroma.Web.Gettext, + domain, + msgctxt, + msgid, + msgid_plural, + n, + bindings + ) + end)} + end + end end diff --git a/lib/pleroma/web/instance_document.ex b/lib/pleroma/web/instance_document.ex index a33bf605b..9da3c5008 100644 --- a/lib/pleroma/web/instance_document.ex +++ b/lib/pleroma/web/instance_document.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.InstanceDocument do diff --git a/lib/pleroma/web/mailer/subscription_controller.ex b/lib/pleroma/web/mailer/subscription_controller.ex index f89abe46a..f2fc8fbc8 100644 --- a/lib/pleroma/web/mailer/subscription_controller.ex +++ b/lib/pleroma/web/mailer/subscription_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Mailer.SubscriptionController do diff --git a/lib/pleroma/web/manifest_controller.ex b/lib/pleroma/web/manifest_controller.ex index 52589540b..3b02e4bc0 100644 --- a/lib/pleroma/web/manifest_controller.ex +++ b/lib/pleroma/web/manifest_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ManifestController do diff --git a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex index 5dfbecf5a..bf931dc6b 100644 --- a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.AccountController do @@ -32,7 +32,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do plug(Pleroma.Web.ApiSpec.CastAndValidate) - plug(:skip_auth when action == :create) + plug(:skip_auth when action in [:create, :lookup]) plug(:skip_public_check when action in [:show, :statuses]) @@ -57,7 +57,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do plug( OAuthScopesPlug, %{scopes: ["write:accounts"]} - when action in [:update_credentials, :note] + when action in [:update_credentials, :note, :endorse, :unendorse] ) plug(OAuthScopesPlug, %{scopes: ["read:lists"]} when action == :lists) @@ -84,7 +84,9 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do plug(OAuthScopesPlug, %{scopes: ["follow", "write:mutes"]} when action in [:mute, :unmute]) @relationship_actions [:follow, :unfollow] - @needs_account ~W(followers following lists follow unfollow mute unmute block unblock note)a + @needs_account ~W( + followers following lists follow unfollow mute unmute block unblock note endorse unendorse + )a plug( RateLimiter, @@ -189,7 +191,8 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do :skip_thread_containment, :allow_following_move, :also_known_as, - :accepts_chat_messages + :accepts_chat_messages, + :show_birthday ] |> Enum.reduce(%{}, fn key, acc -> Maps.put_if_present(acc, key, params[key], &{:ok, Params.truthy_param?(&1)}) @@ -217,6 +220,8 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do |> Maps.put_if_present(:is_locked, params[:locked]) # Note: param name is indeed :discoverable (not an error) |> Maps.put_if_present(:is_discoverable, params[:discoverable]) + |> Maps.put_if_present(:birthday, params[:birthday]) + |> Maps.put_if_present(:language, Pleroma.Web.Gettext.normalize_locale(params[:language])) # What happens here: # @@ -406,6 +411,10 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do @doc "POST /api/v1/accounts/:id/mute" def mute(%{assigns: %{user: muter, account: muted}, body_params: params} = conn, _params) do + params = + params + |> Map.put_new(:duration, Map.get(params, :expires_in, 0)) + with {:ok, _user_relationships} <- User.mute(muter, muted, params) do render(conn, "relationship.json", user: muter, target: muted) else @@ -450,6 +459,24 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do end end + @doc "POST /api/v1/accounts/:id/pin" + def endorse(%{assigns: %{user: endorser, account: endorsed}} = conn, _params) do + with {:ok, _user_relationships} <- User.endorse(endorser, endorsed) do + render(conn, "relationship.json", user: endorser, target: endorsed) + else + {:error, message} -> json_response(conn, :bad_request, %{error: message}) + end + end + + @doc "POST /api/v1/accounts/:id/unpin" + def unendorse(%{assigns: %{user: endorser, account: endorsed}} = conn, _params) do + with {:ok, _user_relationships} <- User.unendorse(endorser, endorsed) do + render(conn, "relationship.json", user: endorser, target: endorsed) + else + {:error, message} -> json_response(conn, :forbidden, %{error: message}) + end + end + @doc "POST /api/v1/follows" def follow_by_uri(%{body_params: %{uri: uri}} = conn, _) do case User.get_cached_by_nickname(uri) do @@ -468,7 +495,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do users = user |> User.muted_users_relation(_restrict_deactivated = true) - |> Pleroma.Pagination.fetch_paginated(Map.put(params, :skip_order, true)) + |> Pleroma.Pagination.fetch_paginated(params) conn |> add_link_headers(users) @@ -476,7 +503,8 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do users: users, for: user, as: :user, - embed_relationships: embed_relationships?(params) + embed_relationships: embed_relationships?(params), + mutes: true ) end @@ -485,15 +513,40 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do users = user |> User.blocked_users_relation(_restrict_deactivated = true) - |> Pleroma.Pagination.fetch_paginated(Map.put(params, :skip_order, true)) + |> Pleroma.Pagination.fetch_paginated(params) conn |> add_link_headers(users) |> render("index.json", users: users, for: user, as: :user) end + @doc "GET /api/v1/accounts/lookup" + def lookup(conn, %{acct: nickname} = _params) do + with %User{} = user <- User.get_by_nickname(nickname) do + render(conn, "show.json", + user: user, + skip_visibility_check: true + ) + else + error -> user_visibility_error(conn, error) + end + end + @doc "GET /api/v1/endorsements" - def endorsements(conn, params), do: MastodonAPIController.empty_array(conn, params) + def endorsements(%{assigns: %{user: user}} = conn, params) do + users = + user + |> User.endorsed_users_relation(_restrict_deactivated = true) + |> Pleroma.Repo.all() + + conn + |> render("index.json", + users: users, + for: user, + as: :user, + embed_relationships: embed_relationships?(params) + ) + end @doc "GET /api/v1/identity_proofs" def identity_proofs(conn, params), do: MastodonAPIController.empty_array(conn, params) diff --git a/lib/pleroma/web/mastodon_api/controllers/announcement_controller.ex b/lib/pleroma/web/mastodon_api/controllers/announcement_controller.ex new file mode 100644 index 000000000..080af96d5 --- /dev/null +++ b/lib/pleroma/web/mastodon_api/controllers/announcement_controller.ex @@ -0,0 +1,60 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.MastodonAPI.AnnouncementController do + use Pleroma.Web, :controller + + import Pleroma.Web.ControllerHelper, + only: [ + json_response: 3 + ] + + alias Pleroma.Announcement + alias Pleroma.Web.Plugs.OAuthScopesPlug + + plug(Pleroma.Web.ApiSpec.CastAndValidate) + + # Mastodon docs say this only requires a user token, no scopes needed + # As the op `|` requires at least one scope to be present, we use `&` here. + plug( + OAuthScopesPlug, + %{scopes: [], op: :&} + when action in [:index] + ) + + # Same as in MastodonAPI specs + plug( + OAuthScopesPlug, + %{scopes: ["write:accounts"]} + when action in [:mark_read] + ) + + action_fallback(Pleroma.Web.MastodonAPI.FallbackController) + + defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.AnnouncementOperation + + @doc "GET /api/v1/announcements" + def index(%{assigns: %{user: user}} = conn, _params) do + render(conn, "index.json", announcements: all_visible(), user: user) + end + + def index(conn, _params) do + render(conn, "index.json", announcements: all_visible(), user: nil) + end + + defp all_visible do + Announcement.list_all_visible() + end + + @doc "POST /api/v1/announcements/:id/dismiss" + def mark_read(%{assigns: %{user: user}} = conn, %{id: id} = _params) do + with announcement when not is_nil(announcement) <- Announcement.get_by_id(id), + {:ok, _} <- Announcement.mark_read_by(announcement, user) do + json_response(conn, :ok, %{}) + else + _ -> + {:error, :not_found} + end + end +end diff --git a/lib/pleroma/web/mastodon_api/controllers/app_controller.ex b/lib/pleroma/web/mastodon_api/controllers/app_controller.ex index 93e63ba03..844673ae0 100644 --- a/lib/pleroma/web/mastodon_api/controllers/app_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/app_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.AppController do @@ -10,7 +10,9 @@ defmodule Pleroma.Web.MastodonAPI.AppController do use Pleroma.Web, :controller + alias Pleroma.Maps alias Pleroma.Repo + alias Pleroma.User alias Pleroma.Web.OAuth.App alias Pleroma.Web.OAuth.Scopes alias Pleroma.Web.OAuth.Token @@ -26,11 +28,13 @@ defmodule Pleroma.Web.MastodonAPI.AppController do @doc "POST /api/v1/apps" def create(%{body_params: params} = conn, _params) do scopes = Scopes.fetch_scopes(params, ["read"]) + user_id = get_user_id(conn) app_attrs = params |> Map.take([:client_name, :redirect_uris, :website]) |> Map.put(:scopes, scopes) + |> Maps.put_if_present(:user_id, user_id) with cs <- App.register_changeset(%App{}, app_attrs), {:ok, app} <- Repo.insert(cs) do @@ -38,6 +42,9 @@ defmodule Pleroma.Web.MastodonAPI.AppController do end end + defp get_user_id(%{assigns: %{user: %User{id: user_id}}}), do: user_id + defp get_user_id(_conn), do: nil + @doc """ GET /api/v1/apps/verify_credentials Gets compact non-secret representation of the app. Supports app tokens and user tokens. diff --git a/lib/pleroma/web/mastodon_api/controllers/auth_controller.ex b/lib/pleroma/web/mastodon_api/controllers/auth_controller.ex index 08943f6f1..fbb54a171 100644 --- a/lib/pleroma/web/mastodon_api/controllers/auth_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/auth_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.AuthController do diff --git a/lib/pleroma/web/mastodon_api/controllers/conversation_controller.ex b/lib/pleroma/web/mastodon_api/controllers/conversation_controller.ex index f2a0949e8..9cc6225c6 100644 --- a/lib/pleroma/web/mastodon_api/controllers/conversation_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/conversation_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.ConversationController do diff --git a/lib/pleroma/web/mastodon_api/controllers/custom_emoji_controller.ex b/lib/pleroma/web/mastodon_api/controllers/custom_emoji_controller.ex index 31b647755..8b27b0b02 100644 --- a/lib/pleroma/web/mastodon_api/controllers/custom_emoji_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/custom_emoji_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.CustomEmojiController do diff --git a/lib/pleroma/web/mastodon_api/controllers/directory_controller.ex b/lib/pleroma/web/mastodon_api/controllers/directory_controller.ex index 45ef227fb..253f06cfb 100644 --- a/lib/pleroma/web/mastodon_api/controllers/directory_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/directory_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.DirectoryController do diff --git a/lib/pleroma/web/mastodon_api/controllers/domain_block_controller.ex b/lib/pleroma/web/mastodon_api/controllers/domain_block_controller.ex index 30300307d..b2e347ed9 100644 --- a/lib/pleroma/web/mastodon_api/controllers/domain_block_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/domain_block_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.DomainBlockController do diff --git a/lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex b/lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex index 84621500e..1c650eb21 100644 --- a/lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.FallbackController do diff --git a/lib/pleroma/web/mastodon_api/controllers/filter_controller.ex b/lib/pleroma/web/mastodon_api/controllers/filter_controller.ex index 9b1ae809d..0959b4bcc 100644 --- a/lib/pleroma/web/mastodon_api/controllers/filter_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/filter_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.FilterController do diff --git a/lib/pleroma/web/mastodon_api/controllers/follow_request_controller.ex b/lib/pleroma/web/mastodon_api/controllers/follow_request_controller.ex index d915298f1..ba6d074cc 100644 --- a/lib/pleroma/web/mastodon_api/controllers/follow_request_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/follow_request_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.FollowRequestController do diff --git a/lib/pleroma/web/mastodon_api/controllers/instance_controller.ex b/lib/pleroma/web/mastodon_api/controllers/instance_controller.ex index 5376e4594..6410e872c 100644 --- a/lib/pleroma/web/mastodon_api/controllers/instance_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/instance_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.InstanceController do diff --git a/lib/pleroma/web/mastodon_api/controllers/list_controller.ex b/lib/pleroma/web/mastodon_api/controllers/list_controller.ex index b7b41f449..2117aae3a 100644 --- a/lib/pleroma/web/mastodon_api/controllers/list_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/list_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.ListController do diff --git a/lib/pleroma/web/mastodon_api/controllers/marker_controller.ex b/lib/pleroma/web/mastodon_api/controllers/marker_controller.ex index c745f3493..4ad30f330 100644 --- a/lib/pleroma/web/mastodon_api/controllers/marker_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/marker_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.MarkerController do diff --git a/lib/pleroma/web/mastodon_api/controllers/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/controllers/mastodon_api_controller.ex index a0f79f377..0aa7b379f 100644 --- a/lib/pleroma/web/mastodon_api/controllers/mastodon_api_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/mastodon_api_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do diff --git a/lib/pleroma/web/mastodon_api/controllers/media_controller.ex b/lib/pleroma/web/mastodon_api/controllers/media_controller.ex index 5918b288d..7d9a63cf4 100644 --- a/lib/pleroma/web/mastodon_api/controllers/media_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/media_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.MediaController do diff --git a/lib/pleroma/web/mastodon_api/controllers/notification_controller.ex b/lib/pleroma/web/mastodon_api/controllers/notification_controller.ex index 002d6b2ce..740cf58e7 100644 --- a/lib/pleroma/web/mastodon_api/controllers/notification_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/notification_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.NotificationController do @@ -55,7 +55,7 @@ defmodule Pleroma.Web.MastodonAPI.NotificationController do def index(%{assigns: %{user: user}} = conn, params) do params = Map.new(params, fn {k, v} -> {to_string(k), v} end) - |> Map.put_new("include_types", @default_notification_types) + |> Map.put_new("types", Map.get(params, :include_types, @default_notification_types)) notifications = MastodonAPI.get_notifications(user, params) diff --git a/lib/pleroma/web/mastodon_api/controllers/poll_controller.ex b/lib/pleroma/web/mastodon_api/controllers/poll_controller.ex index f44ff997d..002c210d2 100644 --- a/lib/pleroma/web/mastodon_api/controllers/poll_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/poll_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.PollController do diff --git a/lib/pleroma/web/mastodon_api/controllers/report_controller.ex b/lib/pleroma/web/mastodon_api/controllers/report_controller.ex index 03d9a4f4f..3db80d728 100644 --- a/lib/pleroma/web/mastodon_api/controllers/report_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/report_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.ReportController do diff --git a/lib/pleroma/web/mastodon_api/controllers/scheduled_activity_controller.ex b/lib/pleroma/web/mastodon_api/controllers/scheduled_activity_controller.ex index 3b7a0c788..0392fcef1 100644 --- a/lib/pleroma/web/mastodon_api/controllers/scheduled_activity_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/scheduled_activity_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.ScheduledActivityController do diff --git a/lib/pleroma/web/mastodon_api/controllers/search_controller.ex b/lib/pleroma/web/mastodon_api/controllers/search_controller.ex index 1459fc492..5e6e04734 100644 --- a/lib/pleroma/web/mastodon_api/controllers/search_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/search_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.SearchController do diff --git a/lib/pleroma/web/mastodon_api/controllers/status_controller.ex b/lib/pleroma/web/mastodon_api/controllers/status_controller.ex index 2eff4d9d0..42a95bdc5 100644 --- a/lib/pleroma/web/mastodon_api/controllers/status_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/status_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.StatusController do diff --git a/lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex b/lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex index fcb3d4829..9cc0071f6 100644 --- a/lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.SubscriptionController do diff --git a/lib/pleroma/web/mastodon_api/controllers/suggestion_controller.ex b/lib/pleroma/web/mastodon_api/controllers/suggestion_controller.ex index e913fcf4b..69ae70ad4 100644 --- a/lib/pleroma/web/mastodon_api/controllers/suggestion_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/suggestion_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.SuggestionController do diff --git a/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex b/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex index 10c279893..ba7239476 100644 --- a/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.TimelineController do diff --git a/lib/pleroma/web/mastodon_api/mastodon_api.ex b/lib/pleroma/web/mastodon_api/mastodon_api.ex index 23846b36a..b4d092eed 100644 --- a/lib/pleroma/web/mastodon_api/mastodon_api.ex +++ b/lib/pleroma/web/mastodon_api/mastodon_api.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.MastodonAPI do @@ -65,7 +65,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPI do user |> Notification.for_user_query(options) - |> restrict(:include_types, options) + |> restrict(:types, options) |> restrict(:exclude_types, options) |> restrict(:account_ap_id, options) |> Pagination.fetch_paginated(params) @@ -80,7 +80,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPI do defp cast_params(params) do param_types = %{ exclude_types: {:array, :string}, - include_types: {:array, :string}, + types: {:array, :string}, exclude_visibilities: {:array, :string}, reblogs: :boolean, with_muted: :boolean, @@ -92,7 +92,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPI do changeset.changes end - defp restrict(query, :include_types, %{include_types: mastodon_types = [_ | _]}) do + defp restrict(query, :types, %{types: mastodon_types = [_ | _]}) do where(query, [n], n.type in ^mastodon_types) end diff --git a/lib/pleroma/web/mastodon_api/views/account_view.ex b/lib/pleroma/web/mastodon_api/views/account_view.ex index 4b15b1635..2260bf5da 100644 --- a/lib/pleroma/web/mastodon_api/views/account_view.ex +++ b/lib/pleroma/web/mastodon_api/views/account_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.AccountView do @@ -160,11 +160,18 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do target, &User.muting_reblogs?(&1, &2) ), - endorsed: false, note: UserNote.show( reading_user, target + ), + endorsed: + UserRelationship.exists?( + user_relationships, + :endorsement, + target, + reading_user, + &User.endorses?(&2, &1) ) } end @@ -304,6 +311,8 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do |> maybe_put_unread_conversation_count(user, opts[:for]) |> maybe_put_unread_notification_count(user, opts[:for]) |> maybe_put_email_address(user, opts[:for]) + |> maybe_put_mute_expires_at(user, opts[:for], opts) + |> maybe_show_birthday(user, opts[:for]) end defp username_from_nickname(string) when is_binary(string) do @@ -337,6 +346,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do |> Kernel.put_in([:source, :privacy], user.default_scope) |> Kernel.put_in([:source, :pleroma, :show_role], user.show_role) |> Kernel.put_in([:source, :pleroma, :no_rich_text], user.no_rich_text) + |> Kernel.put_in([:source, :pleroma, :show_birthday], user.show_birthday) end defp maybe_put_settings(data, _, _, _), do: data @@ -425,6 +435,30 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do defp maybe_put_email_address(data, _, _), do: data + defp maybe_put_mute_expires_at(data, %User{} = user, target, %{mutes: true}) do + Map.put( + data, + :mute_expires_at, + UserRelationship.get_mute_expire_date(target, user) + ) + end + + defp maybe_put_mute_expires_at(data, _, _, _), do: data + + defp maybe_show_birthday(data, %User{id: user_id} = user, %User{id: user_id}) do + data + |> Kernel.put_in([:pleroma, :birthday], user.birthday) + end + + defp maybe_show_birthday(data, %User{show_birthday: true} = user, _) do + data + |> Kernel.put_in([:pleroma, :birthday], user.birthday) + end + + defp maybe_show_birthday(data, _, _) do + data + end + defp image_url(%{"url" => [%{"href" => href} | _]}), do: href defp image_url(_), do: nil end diff --git a/lib/pleroma/web/mastodon_api/views/announcement_view.ex b/lib/pleroma/web/mastodon_api/views/announcement_view.ex new file mode 100644 index 000000000..93fdfb1f1 --- /dev/null +++ b/lib/pleroma/web/mastodon_api/views/announcement_view.ex @@ -0,0 +1,15 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.MastodonAPI.AnnouncementView do + use Pleroma.Web, :view + + def render("index.json", %{announcements: announcements, user: user}) do + render_many(announcements, __MODULE__, "show.json", user: user) + end + + def render("show.json", %{announcement: announcement, user: user}) do + Pleroma.Announcement.render_json(announcement, for: user) + end +end diff --git a/lib/pleroma/web/mastodon_api/views/app_view.ex b/lib/pleroma/web/mastodon_api/views/app_view.ex index c406b5a27..92cccd452 100644 --- a/lib/pleroma/web/mastodon_api/views/app_view.ex +++ b/lib/pleroma/web/mastodon_api/views/app_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.AppView do diff --git a/lib/pleroma/web/mastodon_api/views/conversation_view.ex b/lib/pleroma/web/mastodon_api/views/conversation_view.ex index 46b63b54b..f6577cd2f 100644 --- a/lib/pleroma/web/mastodon_api/views/conversation_view.ex +++ b/lib/pleroma/web/mastodon_api/views/conversation_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.ConversationView do diff --git a/lib/pleroma/web/mastodon_api/views/custom_emoji_view.ex b/lib/pleroma/web/mastodon_api/views/custom_emoji_view.ex index 7d2d605e9..cd59ab946 100644 --- a/lib/pleroma/web/mastodon_api/views/custom_emoji_view.ex +++ b/lib/pleroma/web/mastodon_api/views/custom_emoji_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.CustomEmojiView do diff --git a/lib/pleroma/web/mastodon_api/views/filter_view.ex b/lib/pleroma/web/mastodon_api/views/filter_view.ex index 8e8798c1e..0c9706166 100644 --- a/lib/pleroma/web/mastodon_api/views/filter_view.ex +++ b/lib/pleroma/web/mastodon_api/views/filter_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.FilterView do diff --git a/lib/pleroma/web/mastodon_api/views/follow_request_view.ex b/lib/pleroma/web/mastodon_api/views/follow_request_view.ex index 4c7d9fc65..5e50bc2b6 100644 --- a/lib/pleroma/web/mastodon_api/views/follow_request_view.ex +++ b/lib/pleroma/web/mastodon_api/views/follow_request_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.FollowRequestView do diff --git a/lib/pleroma/web/mastodon_api/views/instance_view.ex b/lib/pleroma/web/mastodon_api/views/instance_view.ex index 8e657ee0f..62931bd41 100644 --- a/lib/pleroma/web/mastodon_api/views/instance_view.ex +++ b/lib/pleroma/web/mastodon_api/views/instance_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.InstanceView do @@ -17,6 +17,7 @@ defmodule Pleroma.Web.MastodonAPI.InstanceView do uri: Pleroma.Web.Endpoint.url(), title: Keyword.get(instance, :name), description: Keyword.get(instance, :description), + short_description: Keyword.get(instance, :short_description), version: "#{@mastodon_api_level} (compatible; #{Pleroma.Application.named_version()})", email: Keyword.get(instance, :email), urls: %{ @@ -31,6 +32,7 @@ defmodule Pleroma.Web.MastodonAPI.InstanceView do approval_required: Keyword.get(instance, :account_approval_required), # Extra (not present in Mastodon): max_toot_chars: Keyword.get(instance, :limit), + max_media_attachments: Keyword.get(instance, :max_media_attachments), poll_limits: Keyword.get(instance, :poll_limits), upload_limit: Keyword.get(instance, :upload_limit), avatar_upload_limit: Keyword.get(instance, :avatar_upload_limit), @@ -46,7 +48,9 @@ defmodule Pleroma.Web.MastodonAPI.InstanceView do federation: federation(), fields_limits: fields_limits(), post_formats: Config.get([:instance, :allowed_post_formats]), - privileged_staff: Config.get([:instance, :privileged_staff]) + privileged_staff: Config.get([:instance, :privileged_staff]), + birthday_required: Config.get([:instance, :birthday_required]), + birthday_min_age: Config.get([:instance, :birthday_min_age]) }, stats: %{mau: Pleroma.User.active_user_count()}, vapid_public_key: Keyword.get(Pleroma.Web.Push.vapid_config(), :public_key) @@ -65,6 +69,9 @@ defmodule Pleroma.Web.MastodonAPI.InstanceView do "shareable_emoji_packs", "multifetch", "pleroma:api/v1/notifications:include_types_filter", + if Config.get([:activitypub, :blockers_visible]) do + "blockers_visible" + end, if Config.get([:media_proxy, :enabled]) do "media_proxy" end, diff --git a/lib/pleroma/web/mastodon_api/views/list_view.ex b/lib/pleroma/web/mastodon_api/views/list_view.ex index 931e77769..a7ae7c5f7 100644 --- a/lib/pleroma/web/mastodon_api/views/list_view.ex +++ b/lib/pleroma/web/mastodon_api/views/list_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.ListView do diff --git a/lib/pleroma/web/mastodon_api/views/marker_view.ex b/lib/pleroma/web/mastodon_api/views/marker_view.ex index 0c1880935..944769b1a 100644 --- a/lib/pleroma/web/mastodon_api/views/marker_view.ex +++ b/lib/pleroma/web/mastodon_api/views/marker_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.MarkerView do diff --git a/lib/pleroma/web/mastodon_api/views/media_view.ex b/lib/pleroma/web/mastodon_api/views/media_view.ex index cf521887e..4db72de8f 100644 --- a/lib/pleroma/web/mastodon_api/views/media_view.ex +++ b/lib/pleroma/web/mastodon_api/views/media_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.MediaView do diff --git a/lib/pleroma/web/mastodon_api/views/notification_view.ex b/lib/pleroma/web/mastodon_api/views/notification_view.ex index 35c636d4e..0dc7f3beb 100644 --- a/lib/pleroma/web/mastodon_api/views/notification_view.ex +++ b/lib/pleroma/web/mastodon_api/views/notification_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.NotificationView do diff --git a/lib/pleroma/web/mastodon_api/views/poll_view.ex b/lib/pleroma/web/mastodon_api/views/poll_view.ex index 71bc8b949..34e23873e 100644 --- a/lib/pleroma/web/mastodon_api/views/poll_view.ex +++ b/lib/pleroma/web/mastodon_api/views/poll_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.PollView do diff --git a/lib/pleroma/web/mastodon_api/views/report_view.ex b/lib/pleroma/web/mastodon_api/views/report_view.ex index 0ff347ade..983f7bd24 100644 --- a/lib/pleroma/web/mastodon_api/views/report_view.ex +++ b/lib/pleroma/web/mastodon_api/views/report_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.ReportView do diff --git a/lib/pleroma/web/mastodon_api/views/scheduled_activity_view.ex b/lib/pleroma/web/mastodon_api/views/scheduled_activity_view.ex index 453221f41..772d22f0c 100644 --- a/lib/pleroma/web/mastodon_api/views/scheduled_activity_view.ex +++ b/lib/pleroma/web/mastodon_api/views/scheduled_activity_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.ScheduledActivityView do diff --git a/lib/pleroma/web/mastodon_api/views/status_view.ex b/lib/pleroma/web/mastodon_api/views/status_view.ex index 463f34198..1ebfd6740 100644 --- a/lib/pleroma/web/mastodon_api/views/status_view.ex +++ b/lib/pleroma/web/mastodon_api/views/status_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.StatusView do diff --git a/lib/pleroma/web/mastodon_api/views/subscription_view.ex b/lib/pleroma/web/mastodon_api/views/subscription_view.ex index a07d23512..baa1e03bd 100644 --- a/lib/pleroma/web/mastodon_api/views/subscription_view.ex +++ b/lib/pleroma/web/mastodon_api/views/subscription_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.SubscriptionView do diff --git a/lib/pleroma/web/mastodon_api/views/suggestion_view.ex b/lib/pleroma/web/mastodon_api/views/suggestion_view.ex index 865229a88..d3df4ef3f 100644 --- a/lib/pleroma/web/mastodon_api/views/suggestion_view.ex +++ b/lib/pleroma/web/mastodon_api/views/suggestion_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.SuggestionView do diff --git a/lib/pleroma/web/mastodon_api/views/timeline_view.ex b/lib/pleroma/web/mastodon_api/views/timeline_view.ex index 91226d78e..702eb7eeb 100644 --- a/lib/pleroma/web/mastodon_api/views/timeline_view.ex +++ b/lib/pleroma/web/mastodon_api/views/timeline_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.TimelineView do diff --git a/lib/pleroma/web/mastodon_api/websocket_handler.ex b/lib/pleroma/web/mastodon_api/websocket_handler.ex index b978167b6..e62b8a135 100644 --- a/lib/pleroma/web/mastodon_api/websocket_handler.ex +++ b/lib/pleroma/web/mastodon_api/websocket_handler.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MastodonAPI.WebsocketHandler do diff --git a/lib/pleroma/web/media_proxy.ex b/lib/pleroma/web/media_proxy.ex index 0b232f14b..d64760fc2 100644 --- a/lib/pleroma/web/media_proxy.ex +++ b/lib/pleroma/web/media_proxy.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MediaProxy do diff --git a/lib/pleroma/web/media_proxy/invalidation.ex b/lib/pleroma/web/media_proxy/invalidation.ex index cb2db5ce9..ea927fe41 100644 --- a/lib/pleroma/web/media_proxy/invalidation.ex +++ b/lib/pleroma/web/media_proxy/invalidation.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MediaProxy.Invalidation do diff --git a/lib/pleroma/web/media_proxy/invalidation/http.ex b/lib/pleroma/web/media_proxy/invalidation/http.ex index 0b2a45518..28ea74991 100644 --- a/lib/pleroma/web/media_proxy/invalidation/http.ex +++ b/lib/pleroma/web/media_proxy/invalidation/http.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MediaProxy.Invalidation.Http do diff --git a/lib/pleroma/web/media_proxy/invalidation/script.ex b/lib/pleroma/web/media_proxy/invalidation/script.ex index 87a21166c..784178f1c 100644 --- a/lib/pleroma/web/media_proxy/invalidation/script.ex +++ b/lib/pleroma/web/media_proxy/invalidation/script.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MediaProxy.Invalidation.Script do diff --git a/lib/pleroma/web/media_proxy/media_proxy_controller.ex b/lib/pleroma/web/media_proxy/media_proxy_controller.ex index c74eaaf93..3d6716d43 100644 --- a/lib/pleroma/web/media_proxy/media_proxy_controller.ex +++ b/lib/pleroma/web/media_proxy/media_proxy_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MediaProxy.MediaProxyController do diff --git a/lib/pleroma/web/metadata.ex b/lib/pleroma/web/metadata.ex index 46ef00c08..59d018730 100644 --- a/lib/pleroma/web/metadata.ex +++ b/lib/pleroma/web/metadata.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Metadata do diff --git a/lib/pleroma/web/metadata/player_view.ex b/lib/pleroma/web/metadata/player_view.ex index 9be5e433d..59c56a236 100644 --- a/lib/pleroma/web/metadata/player_view.ex +++ b/lib/pleroma/web/metadata/player_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Metadata.PlayerView do diff --git a/lib/pleroma/web/metadata/providers/feed.ex b/lib/pleroma/web/metadata/providers/feed.ex index d0ab5c19e..e97d6a54f 100644 --- a/lib/pleroma/web/metadata/providers/feed.ex +++ b/lib/pleroma/web/metadata/providers/feed.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Metadata.Providers.Feed do diff --git a/lib/pleroma/web/metadata/providers/open_graph.ex b/lib/pleroma/web/metadata/providers/open_graph.ex index df0cca74a..97d3865ed 100644 --- a/lib/pleroma/web/metadata/providers/open_graph.ex +++ b/lib/pleroma/web/metadata/providers/open_graph.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Metadata.Providers.OpenGraph do diff --git a/lib/pleroma/web/metadata/providers/provider.ex b/lib/pleroma/web/metadata/providers/provider.ex index c91d87c6d..bb31c4d83 100644 --- a/lib/pleroma/web/metadata/providers/provider.ex +++ b/lib/pleroma/web/metadata/providers/provider.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Metadata.Providers.Provider do diff --git a/lib/pleroma/web/metadata/providers/rel_me.ex b/lib/pleroma/web/metadata/providers/rel_me.ex index f013def51..f0bee85c8 100644 --- a/lib/pleroma/web/metadata/providers/rel_me.ex +++ b/lib/pleroma/web/metadata/providers/rel_me.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Metadata.Providers.RelMe do diff --git a/lib/pleroma/web/metadata/providers/restrict_indexing.ex b/lib/pleroma/web/metadata/providers/restrict_indexing.ex index aa6511610..a43a7c92e 100644 --- a/lib/pleroma/web/metadata/providers/restrict_indexing.ex +++ b/lib/pleroma/web/metadata/providers/restrict_indexing.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Metadata.Providers.RestrictIndexing do diff --git a/lib/pleroma/web/metadata/providers/twitter_card.ex b/lib/pleroma/web/metadata/providers/twitter_card.ex index 79183df86..bf0a12212 100644 --- a/lib/pleroma/web/metadata/providers/twitter_card.ex +++ b/lib/pleroma/web/metadata/providers/twitter_card.ex @@ -1,6 +1,6 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Metadata.Providers.TwitterCard do diff --git a/lib/pleroma/web/metadata/utils.ex b/lib/pleroma/web/metadata/utils.ex index caca42934..8052eaa44 100644 --- a/lib/pleroma/web/metadata/utils.ex +++ b/lib/pleroma/web/metadata/utils.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Metadata.Utils do diff --git a/lib/pleroma/web/mongoose_im/mongoose_im_controller.ex b/lib/pleroma/web/mongoose_im/mongoose_im_controller.ex index 6ace3e0b5..0945ebb12 100644 --- a/lib/pleroma/web/mongoose_im/mongoose_im_controller.ex +++ b/lib/pleroma/web/mongoose_im/mongoose_im_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.MongooseIM.MongooseIMController do diff --git a/lib/pleroma/web/nodeinfo/nodeinfo.ex b/lib/pleroma/web/nodeinfo/nodeinfo.ex index 80a2ce676..62d445f34 100644 --- a/lib/pleroma/web/nodeinfo/nodeinfo.ex +++ b/lib/pleroma/web/nodeinfo/nodeinfo.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Nodeinfo.Nodeinfo do diff --git a/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex b/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex index 69ec27ba0..85c2393ff 100644 --- a/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex +++ b/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Nodeinfo.NodeinfoController do diff --git a/lib/pleroma/web/o_auth.ex b/lib/pleroma/web/o_auth.ex index 3bc1a6ad4..d8c68df66 100644 --- a/lib/pleroma/web/o_auth.ex +++ b/lib/pleroma/web/o_auth.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.OAuth do diff --git a/lib/pleroma/web/o_auth/app.ex b/lib/pleroma/web/o_auth/app.ex index 382750010..0aa655381 100644 --- a/lib/pleroma/web/o_auth/app.ex +++ b/lib/pleroma/web/o_auth/app.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.OAuth.App do @@ -7,6 +7,7 @@ defmodule Pleroma.Web.OAuth.App do import Ecto.Changeset import Ecto.Query alias Pleroma.Repo + alias Pleroma.User @type t :: %__MODULE__{} @@ -19,6 +20,8 @@ defmodule Pleroma.Web.OAuth.App do field(:client_secret, :string) field(:trusted, :boolean, default: false) + belongs_to(:user, User, type: FlakeId.Ecto.CompatType) + has_many(:oauth_authorizations, Pleroma.Web.OAuth.Authorization, on_delete: :delete_all) has_many(:oauth_tokens, Pleroma.Web.OAuth.Token, on_delete: :delete_all) @@ -27,7 +30,7 @@ defmodule Pleroma.Web.OAuth.App do @spec changeset(t(), map()) :: Ecto.Changeset.t() def changeset(struct, params) do - cast(struct, params, [:client_name, :redirect_uris, :scopes, :website, :trusted]) + cast(struct, params, [:client_name, :redirect_uris, :scopes, :website, :trusted, :user_id]) end @spec register_changeset(t(), map()) :: Ecto.Changeset.t() @@ -129,6 +132,12 @@ defmodule Pleroma.Web.OAuth.App do {:ok, Repo.all(query), count} end + @spec get_user_apps(User.t()) :: {:ok, [t()], non_neg_integer()} + def get_user_apps(%User{id: user_id}) do + from(a in __MODULE__, where: a.user_id == ^user_id) + |> Repo.all() + end + @spec destroy(pos_integer()) :: {:ok, t()} | {:error, Ecto.Changeset.t()} def destroy(id) do with %__MODULE__{} = app <- Repo.get(__MODULE__, id) do diff --git a/lib/pleroma/web/o_auth/authorization.ex b/lib/pleroma/web/o_auth/authorization.ex index e0ecb0f4f..593d2d66f 100644 --- a/lib/pleroma/web/o_auth/authorization.ex +++ b/lib/pleroma/web/o_auth/authorization.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.OAuth.Authorization do diff --git a/lib/pleroma/web/o_auth/fallback_controller.ex b/lib/pleroma/web/o_auth/fallback_controller.ex index df68cbfc1..684a52c81 100644 --- a/lib/pleroma/web/o_auth/fallback_controller.ex +++ b/lib/pleroma/web/o_auth/fallback_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.OAuth.FallbackController do diff --git a/lib/pleroma/web/o_auth/mfa_controller.ex b/lib/pleroma/web/o_auth/mfa_controller.ex index b38b00213..c4bc4a879 100644 --- a/lib/pleroma/web/o_auth/mfa_controller.ex +++ b/lib/pleroma/web/o_auth/mfa_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.OAuth.MFAController do diff --git a/lib/pleroma/web/o_auth/mfa_view.ex b/lib/pleroma/web/o_auth/mfa_view.ex index 3d473f29c..bcadafe57 100644 --- a/lib/pleroma/web/o_auth/mfa_view.ex +++ b/lib/pleroma/web/o_auth/mfa_view.ex @@ -1,11 +1,12 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.OAuth.MFAView do use Pleroma.Web, :view import Phoenix.HTML.Form alias Pleroma.MFA + alias Pleroma.Web.Gettext def render("mfa_response.json", %{token: token, user: user}) do %{ diff --git a/lib/pleroma/web/o_auth/o_auth_controller.ex b/lib/pleroma/web/o_auth/o_auth_controller.ex index 0d7d17b8a..c1fb4f378 100644 --- a/lib/pleroma/web/o_auth/o_auth_controller.ex +++ b/lib/pleroma/web/o_auth/o_auth_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.OAuth.OAuthController do diff --git a/lib/pleroma/web/o_auth/o_auth_view.ex b/lib/pleroma/web/o_auth/o_auth_view.ex index 1419c96a2..108102ce2 100644 --- a/lib/pleroma/web/o_auth/o_auth_view.ex +++ b/lib/pleroma/web/o_auth/o_auth_view.ex @@ -1,10 +1,12 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.OAuth.OAuthView do use Pleroma.Web, :view import Phoenix.HTML.Form + import Phoenix.HTML + alias Pleroma.Web.Gettext alias Pleroma.Web.OAuth.Token.Utils diff --git a/lib/pleroma/web/o_auth/scopes.ex b/lib/pleroma/web/o_auth/scopes.ex index ada43eae9..f33fc21c4 100644 --- a/lib/pleroma/web/o_auth/scopes.ex +++ b/lib/pleroma/web/o_auth/scopes.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.OAuth.Scopes do diff --git a/lib/pleroma/web/o_auth/token.ex b/lib/pleroma/web/o_auth/token.ex index 9d69e9db4..26de7bb10 100644 --- a/lib/pleroma/web/o_auth/token.ex +++ b/lib/pleroma/web/o_auth/token.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.OAuth.Token do diff --git a/lib/pleroma/web/o_auth/token/query.ex b/lib/pleroma/web/o_auth/token/query.ex index d16a759d8..4a4d2d3ef 100644 --- a/lib/pleroma/web/o_auth/token/query.ex +++ b/lib/pleroma/web/o_auth/token/query.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.OAuth.Token.Query do diff --git a/lib/pleroma/web/o_auth/token/strategy/refresh_token.ex b/lib/pleroma/web/o_auth/token/strategy/refresh_token.ex index f5a0ed272..6b0d9503c 100644 --- a/lib/pleroma/web/o_auth/token/strategy/refresh_token.ex +++ b/lib/pleroma/web/o_auth/token/strategy/refresh_token.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.OAuth.Token.Strategy.RefreshToken do diff --git a/lib/pleroma/web/o_auth/token/strategy/revoke.ex b/lib/pleroma/web/o_auth/token/strategy/revoke.ex index 8d6572704..752efca89 100644 --- a/lib/pleroma/web/o_auth/token/strategy/revoke.ex +++ b/lib/pleroma/web/o_auth/token/strategy/revoke.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.OAuth.Token.Strategy.Revoke do diff --git a/lib/pleroma/web/o_auth/token/utils.ex b/lib/pleroma/web/o_auth/token/utils.ex index b572dc9cf..773cd9792 100644 --- a/lib/pleroma/web/o_auth/token/utils.ex +++ b/lib/pleroma/web/o_auth/token/utils.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.OAuth.Token.Utils do diff --git a/lib/pleroma/web/o_status/o_status_controller.ex b/lib/pleroma/web/o_status/o_status_controller.ex index da3264149..ea4994bd0 100644 --- a/lib/pleroma/web/o_status/o_status_controller.ex +++ b/lib/pleroma/web/o_status/o_status_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.OStatus.OStatusController do diff --git a/lib/pleroma/web/pleroma_api/controllers/account_controller.ex b/lib/pleroma/web/pleroma_api/controllers/account_controller.ex index 8e4d3e7f7..591391b60 100644 --- a/lib/pleroma/web/pleroma_api/controllers/account_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/account_controller.ex @@ -1,12 +1,17 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.PleromaAPI.AccountController do use Pleroma.Web, :controller import Pleroma.Web.ControllerHelper, - only: [json_response: 3, add_link_headers: 2, assign_account_by_id: 2] + only: [ + json_response: 3, + add_link_headers: 2, + embed_relationships?: 1, + assign_account_by_id: 2 + ] alias Pleroma.User alias Pleroma.Web.ActivityPub.ActivityPub @@ -40,9 +45,23 @@ defmodule Pleroma.Web.PleromaAPI.AccountController do %{scopes: ["read:favourites"], fallback: :proceed_unauthenticated} when action == :favourites ) + plug( + OAuthScopesPlug, + %{fallback: :proceed_unauthenticated, scopes: ["read:accounts"]} + when action == :endorsements + ) + + plug( + OAuthScopesPlug, + %{scopes: ["read:accounts"]} when action == :birthdays + ) + plug(RateLimiter, [name: :account_confirmation_resend] when action == :confirmation_resend) - plug(:assign_account_by_id when action in [:favourites, :subscribe, :unsubscribe]) + plug( + :assign_account_by_id + when action in [:favourites, :endorsements, :subscribe, :unsubscribe] + ) defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.PleromaAccountOperation @@ -90,6 +109,22 @@ defmodule Pleroma.Web.PleromaAPI.AccountController do ) end + @doc "GET /api/v1/pleroma/accounts/:id/endorsements" + def endorsements(%{assigns: %{user: for_user, account: user}} = conn, params) do + users = + user + |> User.endorsed_users_relation(_restrict_deactivated = true) + |> Pleroma.Repo.all() + + conn + |> render("index.json", + for: for_user, + users: users, + as: :user, + embed_relationships: embed_relationships?(params) + ) + end + @doc "POST /api/v1/pleroma/accounts/:id/subscribe" def subscribe(%{assigns: %{user: user, account: subscription_target}} = conn, _params) do with {:ok, _subscription} <- User.subscribe(user, subscription_target) do @@ -107,4 +142,18 @@ defmodule Pleroma.Web.PleromaAPI.AccountController do {:error, message} -> json_response(conn, :forbidden, %{error: message}) end end + + @doc "GET /api/v1/pleroma/birthdays" + def birthdays(%{assigns: %{user: %User{} = user}} = conn, %{day: day, month: month} = _params) do + birthdays = + User.get_friends_birthdays_query(user, day, month) + |> Pleroma.Repo.all() + + conn + |> render("index.json", + for: user, + users: birthdays, + as: :user + ) + end end diff --git a/lib/pleroma/web/pleroma_api/controllers/app_controller.ex b/lib/pleroma/web/pleroma_api/controllers/app_controller.ex new file mode 100644 index 000000000..3e84f75a4 --- /dev/null +++ b/lib/pleroma/web/pleroma_api/controllers/app_controller.ex @@ -0,0 +1,23 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.PleromaAPI.AppController do + use Pleroma.Web, :controller + + alias Pleroma.Web.OAuth.App + alias Pleroma.Web.Plugs.OAuthScopesPlug + + plug(OAuthScopesPlug, %{scopes: ["follow", "read"]} when action in [:index]) + + plug(Pleroma.Web.ApiSpec.CastAndValidate) + + defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.PleromaAppOperation + + @doc "GET /api/v1/pleroma/apps" + def index(%{assigns: %{user: user}} = conn, _params) do + with apps <- App.get_user_apps(user) do + render(conn, "index.json", %{apps: apps}) + end + end +end diff --git a/lib/pleroma/web/pleroma_api/controllers/backup_controller.ex b/lib/pleroma/web/pleroma_api/controllers/backup_controller.ex index fc5d16771..1a0548295 100644 --- a/lib/pleroma/web/pleroma_api/controllers/backup_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/backup_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.PleromaAPI.BackupController do diff --git a/lib/pleroma/web/pleroma_api/controllers/chat_controller.ex b/lib/pleroma/web/pleroma_api/controllers/chat_controller.ex index 669d50132..3d7b6a4a7 100644 --- a/lib/pleroma/web/pleroma_api/controllers/chat_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/chat_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.PleromaAPI.ChatController do use Pleroma.Web, :controller diff --git a/lib/pleroma/web/pleroma_api/controllers/conversation_controller.ex b/lib/pleroma/web/pleroma_api/controllers/conversation_controller.ex index be2f4617d..37990db54 100644 --- a/lib/pleroma/web/pleroma_api/controllers/conversation_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/conversation_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.PleromaAPI.ConversationController do diff --git a/lib/pleroma/web/pleroma_api/controllers/emoji_file_controller.ex b/lib/pleroma/web/pleroma_api/controllers/emoji_file_controller.ex index 204e81311..f854cf9c1 100644 --- a/lib/pleroma/web/pleroma_api/controllers/emoji_file_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/emoji_file_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.PleromaAPI.EmojiFileController do diff --git a/lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex b/lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex index 1ea44f347..420fea12c 100644 --- a/lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.PleromaAPI.EmojiPackController do diff --git a/lib/pleroma/web/pleroma_api/controllers/emoji_reaction_controller.ex b/lib/pleroma/web/pleroma_api/controllers/emoji_reaction_controller.ex index da5f2474f..78fd0b219 100644 --- a/lib/pleroma/web/pleroma_api/controllers/emoji_reaction_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/emoji_reaction_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.PleromaAPI.EmojiReactionController do diff --git a/lib/pleroma/web/pleroma_api/controllers/instances_controller.ex b/lib/pleroma/web/pleroma_api/controllers/instances_controller.ex index 01424c6ba..6257e3153 100644 --- a/lib/pleroma/web/pleroma_api/controllers/instances_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/instances_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.PleromaAPI.InstancesController do diff --git a/lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex b/lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex index 429ef5112..66e9d8481 100644 --- a/lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.PleromaAPI.MascotController do diff --git a/lib/pleroma/web/pleroma_api/controllers/notification_controller.ex b/lib/pleroma/web/pleroma_api/controllers/notification_controller.ex index bcb3a9ae1..87ea81cef 100644 --- a/lib/pleroma/web/pleroma_api/controllers/notification_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/notification_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.PleromaAPI.NotificationController do diff --git a/lib/pleroma/web/pleroma_api/controllers/report_controller.ex b/lib/pleroma/web/pleroma_api/controllers/report_controller.ex index d93d7570a..1f0a82cee 100644 --- a/lib/pleroma/web/pleroma_api/controllers/report_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/report_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.PleromaAPI.ReportController do diff --git a/lib/pleroma/web/pleroma_api/controllers/scrobble_controller.ex b/lib/pleroma/web/pleroma_api/controllers/scrobble_controller.ex index ca26d80ef..bf6dc500c 100644 --- a/lib/pleroma/web/pleroma_api/controllers/scrobble_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/scrobble_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.PleromaAPI.ScrobbleController do diff --git a/lib/pleroma/web/pleroma_api/controllers/two_factor_authentication_controller.ex b/lib/pleroma/web/pleroma_api/controllers/two_factor_authentication_controller.ex index 3940ad581..e69847b00 100644 --- a/lib/pleroma/web/pleroma_api/controllers/two_factor_authentication_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/two_factor_authentication_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.PleromaAPI.TwoFactorAuthenticationController do diff --git a/lib/pleroma/web/pleroma_api/controllers/user_import_controller.ex b/lib/pleroma/web/pleroma_api/controllers/user_import_controller.ex index 078d470d9..90428a532 100644 --- a/lib/pleroma/web/pleroma_api/controllers/user_import_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/user_import_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.PleromaAPI.UserImportController do diff --git a/lib/pleroma/web/pleroma_api/views/account_view.ex b/lib/pleroma/web/pleroma_api/views/account_view.ex index 28941f471..910bcee16 100644 --- a/lib/pleroma/web/pleroma_api/views/account_view.ex +++ b/lib/pleroma/web/pleroma_api/views/account_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.PleromaAPI.AccountView do diff --git a/lib/pleroma/web/pleroma_api/views/app_view.ex b/lib/pleroma/web/pleroma_api/views/app_view.ex new file mode 100644 index 000000000..1fdc3c224 --- /dev/null +++ b/lib/pleroma/web/pleroma_api/views/app_view.ex @@ -0,0 +1,11 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.PleromaAPI.AppView do + use Pleroma.Web, :view + + def render("index.json", %{apps: apps}) do + render_many(apps, Pleroma.Web.MastodonAPI.AppView, "show.json") + end +end diff --git a/lib/pleroma/web/pleroma_api/views/backup_view.ex b/lib/pleroma/web/pleroma_api/views/backup_view.ex index 944600c86..d778590f0 100644 --- a/lib/pleroma/web/pleroma_api/views/backup_view.ex +++ b/lib/pleroma/web/pleroma_api/views/backup_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.PleromaAPI.BackupView do diff --git a/lib/pleroma/web/pleroma_api/views/chat/message_reference_view.ex b/lib/pleroma/web/pleroma_api/views/chat/message_reference_view.ex index 2e4355992..241bf0010 100644 --- a/lib/pleroma/web/pleroma_api/views/chat/message_reference_view.ex +++ b/lib/pleroma/web/pleroma_api/views/chat/message_reference_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.PleromaAPI.Chat.MessageReferenceView do diff --git a/lib/pleroma/web/pleroma_api/views/chat_view.ex b/lib/pleroma/web/pleroma_api/views/chat_view.ex index 3794818a7..db6c13c05 100644 --- a/lib/pleroma/web/pleroma_api/views/chat_view.ex +++ b/lib/pleroma/web/pleroma_api/views/chat_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.PleromaAPI.ChatView do diff --git a/lib/pleroma/web/pleroma_api/views/conversation_view.ex b/lib/pleroma/web/pleroma_api/views/conversation_view.ex index 173006360..2c9c8d1c6 100644 --- a/lib/pleroma/web/pleroma_api/views/conversation_view.ex +++ b/lib/pleroma/web/pleroma_api/views/conversation_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.PleromaAPI.ConversationView do diff --git a/lib/pleroma/web/pleroma_api/views/emoji_reaction_view.ex b/lib/pleroma/web/pleroma_api/views/emoji_reaction_view.ex index c94527e6d..68ebd8292 100644 --- a/lib/pleroma/web/pleroma_api/views/emoji_reaction_view.ex +++ b/lib/pleroma/web/pleroma_api/views/emoji_reaction_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.PleromaAPI.EmojiReactionView do diff --git a/lib/pleroma/web/pleroma_api/views/notification_view.ex b/lib/pleroma/web/pleroma_api/views/notification_view.ex index 36b2fdfe8..db7f94803 100644 --- a/lib/pleroma/web/pleroma_api/views/notification_view.ex +++ b/lib/pleroma/web/pleroma_api/views/notification_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.PleromaAPI.NotificationView do diff --git a/lib/pleroma/web/pleroma_api/views/report_view.ex b/lib/pleroma/web/pleroma_api/views/report_view.ex index a0b3f085c..127e8f0cb 100644 --- a/lib/pleroma/web/pleroma_api/views/report_view.ex +++ b/lib/pleroma/web/pleroma_api/views/report_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.PleromaAPI.ReportView do diff --git a/lib/pleroma/web/pleroma_api/views/scrobble_view.ex b/lib/pleroma/web/pleroma_api/views/scrobble_view.ex index 2bc069529..a5985fb2a 100644 --- a/lib/pleroma/web/pleroma_api/views/scrobble_view.ex +++ b/lib/pleroma/web/pleroma_api/views/scrobble_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.PleromaAPI.ScrobbleView do diff --git a/lib/pleroma/web/plug.ex b/lib/pleroma/web/plug.ex index dffad3a06..29ab52e55 100644 --- a/lib/pleroma/web/plug.ex +++ b/lib/pleroma/web/plug.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Plug do diff --git a/lib/pleroma/web/plugs/admin_secret_authentication_plug.ex b/lib/pleroma/web/plugs/admin_secret_authentication_plug.ex index 976e5cd92..2e4702fa1 100644 --- a/lib/pleroma/web/plugs/admin_secret_authentication_plug.ex +++ b/lib/pleroma/web/plugs/admin_secret_authentication_plug.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Plugs.AdminSecretAuthenticationPlug do diff --git a/lib/pleroma/web/plugs/authentication_plug.ex b/lib/pleroma/web/plugs/authentication_plug.ex index 8d58169cf..a7fd697b5 100644 --- a/lib/pleroma/web/plugs/authentication_plug.ex +++ b/lib/pleroma/web/plugs/authentication_plug.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Plugs.AuthenticationPlug do diff --git a/lib/pleroma/web/plugs/basic_auth_decoder_plug.ex b/lib/pleroma/web/plugs/basic_auth_decoder_plug.ex index 397f26de5..3eb13f955 100644 --- a/lib/pleroma/web/plugs/basic_auth_decoder_plug.ex +++ b/lib/pleroma/web/plugs/basic_auth_decoder_plug.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Plugs.BasicAuthDecoderPlug do diff --git a/lib/pleroma/web/plugs/cache.ex b/lib/pleroma/web/plugs/cache.ex index 111854859..667477857 100644 --- a/lib/pleroma/web/plugs/cache.ex +++ b/lib/pleroma/web/plugs/cache.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Plugs.Cache do @@ -97,13 +97,21 @@ defmodule Pleroma.Web.Plugs.Cache do key = cache_key(conn, opts) content_type = content_type(conn) + should_cache = not Map.get(conn.assigns, :skip_cache, false) + conn = unless opts[:tracking_fun] do - @cachex.put(:web_resp_cache, key, {content_type, body}, ttl: ttl) + if should_cache do + @cachex.put(:web_resp_cache, key, {content_type, body}, ttl: ttl) + end + conn else tracking_fun_data = Map.get(conn.assigns, :tracking_fun_data, nil) - @cachex.put(:web_resp_cache, key, {content_type, body, tracking_fun_data}, ttl: ttl) + + if should_cache do + @cachex.put(:web_resp_cache, key, {content_type, body, tracking_fun_data}, ttl: ttl) + end opts.tracking_fun.(conn, tracking_fun_data) end diff --git a/lib/pleroma/web/plugs/digest_plug.ex b/lib/pleroma/web/plugs/digest_plug.ex index d72f8073c..20e265f8f 100644 --- a/lib/pleroma/web/plugs/digest_plug.ex +++ b/lib/pleroma/web/plugs/digest_plug.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Plugs.DigestPlug do diff --git a/lib/pleroma/web/plugs/ensure_authenticated_plug.ex b/lib/pleroma/web/plugs/ensure_authenticated_plug.ex index 31e7410d6..8044a6bb2 100644 --- a/lib/pleroma/web/plugs/ensure_authenticated_plug.ex +++ b/lib/pleroma/web/plugs/ensure_authenticated_plug.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Plugs.EnsureAuthenticatedPlug do diff --git a/lib/pleroma/web/plugs/ensure_public_or_authenticated_plug.ex b/lib/pleroma/web/plugs/ensure_public_or_authenticated_plug.ex index 8a8532f41..e98a3b661 100644 --- a/lib/pleroma/web/plugs/ensure_public_or_authenticated_plug.ex +++ b/lib/pleroma/web/plugs/ensure_public_or_authenticated_plug.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Plugs.EnsurePublicOrAuthenticatedPlug do diff --git a/lib/pleroma/web/plugs/ensure_staff_privileged_plug.ex b/lib/pleroma/web/plugs/ensure_staff_privileged_plug.ex index c6ed45635..3c2109496 100644 --- a/lib/pleroma/web/plugs/ensure_staff_privileged_plug.ex +++ b/lib/pleroma/web/plugs/ensure_staff_privileged_plug.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Plugs.EnsureStaffPrivilegedPlug do diff --git a/lib/pleroma/web/plugs/ensure_user_token_assigns_plug.ex b/lib/pleroma/web/plugs/ensure_user_token_assigns_plug.ex index 534b0cff1..5c57d2707 100644 --- a/lib/pleroma/web/plugs/ensure_user_token_assigns_plug.ex +++ b/lib/pleroma/web/plugs/ensure_user_token_assigns_plug.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Plugs.EnsureUserTokenAssignsPlug do diff --git a/lib/pleroma/web/plugs/expect_authenticated_check_plug.ex b/lib/pleroma/web/plugs/expect_authenticated_check_plug.ex index f09cffe95..d1403e2bd 100644 --- a/lib/pleroma/web/plugs/expect_authenticated_check_plug.ex +++ b/lib/pleroma/web/plugs/expect_authenticated_check_plug.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Plugs.ExpectAuthenticatedCheckPlug do diff --git a/lib/pleroma/web/plugs/expect_public_or_authenticated_check_plug.ex b/lib/pleroma/web/plugs/expect_public_or_authenticated_check_plug.ex index e227d5150..a74c76395 100644 --- a/lib/pleroma/web/plugs/expect_public_or_authenticated_check_plug.ex +++ b/lib/pleroma/web/plugs/expect_public_or_authenticated_check_plug.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Plugs.ExpectPublicOrAuthenticatedCheckPlug do diff --git a/lib/pleroma/web/plugs/federating_plug.ex b/lib/pleroma/web/plugs/federating_plug.ex index eeef7e45b..d5b8ef3ed 100644 --- a/lib/pleroma/web/plugs/federating_plug.ex +++ b/lib/pleroma/web/plugs/federating_plug.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Plugs.FederatingPlug do diff --git a/lib/pleroma/web/plugs/frontend_static.ex b/lib/pleroma/web/plugs/frontend_static.ex index ebe7eaf86..6ab8e4667 100644 --- a/lib/pleroma/web/plugs/frontend_static.ex +++ b/lib/pleroma/web/plugs/frontend_static.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Plugs.FrontendStatic do diff --git a/lib/pleroma/web/plugs/http_security_plug.ex b/lib/pleroma/web/plugs/http_security_plug.ex index d1e6cc9d3..b89948cec 100644 --- a/lib/pleroma/web/plugs/http_security_plug.ex +++ b/lib/pleroma/web/plugs/http_security_plug.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Plugs.HTTPSecurityPlug do diff --git a/lib/pleroma/web/plugs/http_signature_plug.ex b/lib/pleroma/web/plugs/http_signature_plug.ex index 0f7550516..d023754a6 100644 --- a/lib/pleroma/web/plugs/http_signature_plug.ex +++ b/lib/pleroma/web/plugs/http_signature_plug.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Plugs.HTTPSignaturePlug do diff --git a/lib/pleroma/web/plugs/idempotency_plug.ex b/lib/pleroma/web/plugs/idempotency_plug.ex index 9ac8f3647..a3b7af869 100644 --- a/lib/pleroma/web/plugs/idempotency_plug.ex +++ b/lib/pleroma/web/plugs/idempotency_plug.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Plugs.IdempotencyPlug do diff --git a/lib/pleroma/web/plugs/instance_static.ex b/lib/pleroma/web/plugs/instance_static.ex index 723b25679..75bfdd65b 100644 --- a/lib/pleroma/web/plugs/instance_static.ex +++ b/lib/pleroma/web/plugs/instance_static.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Plugs.InstanceStatic do diff --git a/lib/pleroma/web/plugs/mapped_signature_to_identity_plug.ex b/lib/pleroma/web/plugs/mapped_signature_to_identity_plug.ex index 58cb0316a..c6d531086 100644 --- a/lib/pleroma/web/plugs/mapped_signature_to_identity_plug.ex +++ b/lib/pleroma/web/plugs/mapped_signature_to_identity_plug.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Plugs.MappedSignatureToIdentityPlug do diff --git a/lib/pleroma/web/plugs/o_auth_plug.ex b/lib/pleroma/web/plugs/o_auth_plug.ex index 5e06ac3f6..0f74d626b 100644 --- a/lib/pleroma/web/plugs/o_auth_plug.ex +++ b/lib/pleroma/web/plugs/o_auth_plug.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Plugs.OAuthPlug do diff --git a/lib/pleroma/web/plugs/o_auth_scopes_plug.ex b/lib/pleroma/web/plugs/o_auth_scopes_plug.ex index f017c8bc7..faf0fd8c6 100644 --- a/lib/pleroma/web/plugs/o_auth_scopes_plug.ex +++ b/lib/pleroma/web/plugs/o_auth_scopes_plug.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Plugs.OAuthScopesPlug do diff --git a/lib/pleroma/web/plugs/plug_helper.ex b/lib/pleroma/web/plugs/plug_helper.ex index d73021bf7..21bf03523 100644 --- a/lib/pleroma/web/plugs/plug_helper.ex +++ b/lib/pleroma/web/plugs/plug_helper.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Plugs.PlugHelper do diff --git a/lib/pleroma/web/plugs/rate_limiter.ex b/lib/pleroma/web/plugs/rate_limiter.ex index 5bebe0ad5..2080b06bd 100644 --- a/lib/pleroma/web/plugs/rate_limiter.ex +++ b/lib/pleroma/web/plugs/rate_limiter.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Plugs.RateLimiter do diff --git a/lib/pleroma/web/plugs/rate_limiter/limiter_supervisor.ex b/lib/pleroma/web/plugs/rate_limiter/limiter_supervisor.ex index 3db59bf17..a96be670a 100644 --- a/lib/pleroma/web/plugs/rate_limiter/limiter_supervisor.ex +++ b/lib/pleroma/web/plugs/rate_limiter/limiter_supervisor.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Plugs.RateLimiter.LimiterSupervisor do diff --git a/lib/pleroma/web/plugs/rate_limiter/supervisor.ex b/lib/pleroma/web/plugs/rate_limiter/supervisor.ex index 0dc2aa71b..f00f3d95e 100644 --- a/lib/pleroma/web/plugs/rate_limiter/supervisor.ex +++ b/lib/pleroma/web/plugs/rate_limiter/supervisor.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Plugs.RateLimiter.Supervisor do diff --git a/lib/pleroma/web/plugs/remote_ip.ex b/lib/pleroma/web/plugs/remote_ip.ex index 4d7daca56..f207d9fef 100644 --- a/lib/pleroma/web/plugs/remote_ip.ex +++ b/lib/pleroma/web/plugs/remote_ip.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Plugs.RemoteIp do diff --git a/lib/pleroma/web/plugs/set_format_plug.ex b/lib/pleroma/web/plugs/set_format_plug.ex index 7ef88f305..84c67e7f0 100644 --- a/lib/pleroma/web/plugs/set_format_plug.ex +++ b/lib/pleroma/web/plugs/set_format_plug.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Plugs.SetFormatPlug do diff --git a/lib/pleroma/web/plugs/set_locale_plug.ex b/lib/pleroma/web/plugs/set_locale_plug.ex index d77191cff..271912ace 100644 --- a/lib/pleroma/web/plugs/set_locale_plug.ex +++ b/lib/pleroma/web/plugs/set_locale_plug.ex @@ -1,23 +1,61 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only # NOTE: this module is based on https://github.com/smeevil/set_locale defmodule Pleroma.Web.Plugs.SetLocalePlug do import Plug.Conn, only: [get_req_header: 2, assign: 3] + def frontend_language_cookie_name, do: "userLanguage" + def init(_), do: nil def call(conn, _) do - locale = get_locale_from_header(conn) || Gettext.get_locale() - Gettext.put_locale(locale) - assign(conn, :locale, locale) + locales = get_locales_from_header(conn) + first_locale = Enum.at(locales, 0, Gettext.get_locale()) + + Pleroma.Web.Gettext.put_locales(locales) + + conn + |> assign(:locale, first_locale) + |> assign(:locales, locales) end - defp get_locale_from_header(conn) do + defp get_locales_from_header(conn) do conn - |> extract_accept_language() - |> Enum.find(&supported_locale?/1) + |> extract_preferred_language() + |> normalize_language_codes() + |> all_supported() + |> Enum.uniq() + end + + defp all_supported(locales) do + locales + |> Pleroma.Web.Gettext.ensure_fallbacks() + |> Enum.filter(&supported_locale?/1) + end + + defp normalize_language_codes(codes) do + codes + |> Enum.map(fn code -> Pleroma.Web.Gettext.normalize_locale(code) end) + end + + defp extract_preferred_language(conn) do + extract_frontend_language(conn) ++ extract_accept_language(conn) + end + + defp extract_frontend_language(conn) do + %{req_cookies: cookies} = + conn + |> Plug.Conn.fetch_cookies() + + case cookies[frontend_language_cookie_name()] do + nil -> + [] + + fe_lang -> + String.split(fe_lang, ",") + end end defp extract_accept_language(conn) do @@ -29,7 +67,6 @@ defmodule Pleroma.Web.Plugs.SetLocalePlug do |> Enum.sort(&(&1.quality > &2.quality)) |> Enum.map(& &1.tag) |> Enum.reject(&is_nil/1) - |> ensure_language_fallbacks() _ -> [] @@ -37,9 +74,7 @@ defmodule Pleroma.Web.Plugs.SetLocalePlug do end defp supported_locale?(locale) do - Pleroma.Web.Gettext - |> Gettext.known_locales() - |> Enum.member?(locale) + Pleroma.Web.Gettext.supports_locale?(locale) end defp parse_language_option(string) do @@ -53,11 +88,4 @@ defmodule Pleroma.Web.Plugs.SetLocalePlug do %{tag: captures["tag"], quality: quality} end - - defp ensure_language_fallbacks(tags) do - Enum.flat_map(tags, fn tag -> - [language | _] = String.split(tag, "-") - if Enum.member?(tags, language), do: [tag], else: [tag, language] - end) - end end diff --git a/lib/pleroma/web/plugs/set_user_session_id_plug.ex b/lib/pleroma/web/plugs/set_user_session_id_plug.ex index a1cfa0915..c37214573 100644 --- a/lib/pleroma/web/plugs/set_user_session_id_plug.ex +++ b/lib/pleroma/web/plugs/set_user_session_id_plug.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Plugs.SetUserSessionIdPlug do diff --git a/lib/pleroma/web/plugs/static_fe_plug.ex b/lib/pleroma/web/plugs/static_fe_plug.ex index 9ba9dc5ff..9a364fdbc 100644 --- a/lib/pleroma/web/plugs/static_fe_plug.ex +++ b/lib/pleroma/web/plugs/static_fe_plug.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Plugs.StaticFEPlug do diff --git a/lib/pleroma/web/plugs/trailing_format_plug.ex b/lib/pleroma/web/plugs/trailing_format_plug.ex index c5069ae0e..a883ba541 100644 --- a/lib/pleroma/web/plugs/trailing_format_plug.ex +++ b/lib/pleroma/web/plugs/trailing_format_plug.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Plugs.TrailingFormatPlug do diff --git a/lib/pleroma/web/plugs/uploaded_media.ex b/lib/pleroma/web/plugs/uploaded_media.ex index 2378e98d2..ad8143234 100644 --- a/lib/pleroma/web/plugs/uploaded_media.ex +++ b/lib/pleroma/web/plugs/uploaded_media.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Plugs.UploadedMedia do diff --git a/lib/pleroma/web/plugs/user_enabled_plug.ex b/lib/pleroma/web/plugs/user_enabled_plug.ex index 1142a8dbc..ca104166a 100644 --- a/lib/pleroma/web/plugs/user_enabled_plug.ex +++ b/lib/pleroma/web/plugs/user_enabled_plug.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Plugs.UserEnabledPlug do diff --git a/lib/pleroma/web/plugs/user_fetcher_plug.ex b/lib/pleroma/web/plugs/user_fetcher_plug.ex index 707df9bfd..87bc27393 100644 --- a/lib/pleroma/web/plugs/user_fetcher_plug.ex +++ b/lib/pleroma/web/plugs/user_fetcher_plug.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Plugs.UserFetcherPlug do diff --git a/lib/pleroma/web/plugs/user_is_admin_plug.ex b/lib/pleroma/web/plugs/user_is_admin_plug.ex index 7649912ba..548eb9b9a 100644 --- a/lib/pleroma/web/plugs/user_is_admin_plug.ex +++ b/lib/pleroma/web/plugs/user_is_admin_plug.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Plugs.UserIsAdminPlug do diff --git a/lib/pleroma/web/plugs/user_is_staff_plug.ex b/lib/pleroma/web/plugs/user_is_staff_plug.ex index 49c2d9cca..951e14674 100644 --- a/lib/pleroma/web/plugs/user_is_staff_plug.ex +++ b/lib/pleroma/web/plugs/user_is_staff_plug.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Plugs.UserIsStaffPlug do diff --git a/lib/pleroma/web/plugs/user_tracking_plug.ex b/lib/pleroma/web/plugs/user_tracking_plug.ex index c9a988f00..9b52fd505 100644 --- a/lib/pleroma/web/plugs/user_tracking_plug.ex +++ b/lib/pleroma/web/plugs/user_tracking_plug.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Plugs.UserTrackingPlug do diff --git a/lib/pleroma/web/preload.ex b/lib/pleroma/web/preload.ex index 34a181e17..4485383f9 100644 --- a/lib/pleroma/web/preload.ex +++ b/lib/pleroma/web/preload.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Preload do diff --git a/lib/pleroma/web/preload/providers/instance.ex b/lib/pleroma/web/preload/providers/instance.ex index eb0254c74..6183f7b70 100644 --- a/lib/pleroma/web/preload/providers/instance.ex +++ b/lib/pleroma/web/preload/providers/instance.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Preload.Providers.Instance do diff --git a/lib/pleroma/web/preload/providers/provider.ex b/lib/pleroma/web/preload/providers/provider.ex index 60f304f2c..85e2badaa 100644 --- a/lib/pleroma/web/preload/providers/provider.ex +++ b/lib/pleroma/web/preload/providers/provider.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Preload.Providers.Provider do diff --git a/lib/pleroma/web/preload/providers/timelines.ex b/lib/pleroma/web/preload/providers/timelines.ex index c1704ccdc..1031f48d2 100644 --- a/lib/pleroma/web/preload/providers/timelines.ex +++ b/lib/pleroma/web/preload/providers/timelines.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Preload.Providers.Timelines do diff --git a/lib/pleroma/web/preload/providers/user.ex b/lib/pleroma/web/preload/providers/user.ex index 504f79ba0..74550cd56 100644 --- a/lib/pleroma/web/preload/providers/user.ex +++ b/lib/pleroma/web/preload/providers/user.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Preload.Providers.User do diff --git a/lib/pleroma/web/push.ex b/lib/pleroma/web/push.ex index 154dae614..9665b0b4a 100644 --- a/lib/pleroma/web/push.ex +++ b/lib/pleroma/web/push.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Push do diff --git a/lib/pleroma/web/push/impl.ex b/lib/pleroma/web/push/impl.ex index 28e13ef9c..daf3eeb9e 100644 --- a/lib/pleroma/web/push/impl.ex +++ b/lib/pleroma/web/push/impl.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Push.Impl do diff --git a/lib/pleroma/web/push/subscription.ex b/lib/pleroma/web/push/subscription.ex index 35bf2e223..6fc45bd61 100644 --- a/lib/pleroma/web/push/subscription.ex +++ b/lib/pleroma/web/push/subscription.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Push.Subscription do diff --git a/lib/pleroma/web/rel_me.ex b/lib/pleroma/web/rel_me.ex index 7e745d07e..98fbc1c59 100644 --- a/lib/pleroma/web/rel_me.ex +++ b/lib/pleroma/web/rel_me.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.RelMe do diff --git a/lib/pleroma/web/rich_media/helpers.ex b/lib/pleroma/web/rich_media/helpers.ex index 566fc8c8a..0488df30e 100644 --- a/lib/pleroma/web/rich_media/helpers.ex +++ b/lib/pleroma/web/rich_media/helpers.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright _ 2017-2020 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.RichMedia.Helpers do diff --git a/lib/pleroma/web/rich_media/parser.ex b/lib/pleroma/web/rich_media/parser.ex index d6b54943b..dbe81eabb 100644 --- a/lib/pleroma/web/rich_media/parser.ex +++ b/lib/pleroma/web/rich_media/parser.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.RichMedia.Parser do diff --git a/lib/pleroma/web/rich_media/parser/ttl.ex b/lib/pleroma/web/rich_media/parser/ttl.ex index 0b7f14fb2..59d7f87ab 100644 --- a/lib/pleroma/web/rich_media/parser/ttl.ex +++ b/lib/pleroma/web/rich_media/parser/ttl.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.RichMedia.Parser.TTL do diff --git a/lib/pleroma/web/rich_media/parser/ttl/aws_signed_url.ex b/lib/pleroma/web/rich_media/parser/ttl/aws_signed_url.ex index c7eb267f3..fa41c160d 100644 --- a/lib/pleroma/web/rich_media/parser/ttl/aws_signed_url.ex +++ b/lib/pleroma/web/rich_media/parser/ttl/aws_signed_url.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.RichMedia.Parser.TTL.AwsSignedUrl do diff --git a/lib/pleroma/web/rich_media/parsers/meta_tags_parser.ex b/lib/pleroma/web/rich_media/parsers/meta_tags_parser.ex index 31c3d1e33..320a5f515 100644 --- a/lib/pleroma/web/rich_media/parsers/meta_tags_parser.ex +++ b/lib/pleroma/web/rich_media/parsers/meta_tags_parser.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.RichMedia.Parsers.MetaTagsParser do diff --git a/lib/pleroma/web/rich_media/parsers/o_embed.ex b/lib/pleroma/web/rich_media/parsers/o_embed.ex index 09eabec56..75318d9c7 100644 --- a/lib/pleroma/web/rich_media/parsers/o_embed.ex +++ b/lib/pleroma/web/rich_media/parsers/o_embed.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.RichMedia.Parsers.OEmbed do diff --git a/lib/pleroma/web/rich_media/parsers/ogp.ex b/lib/pleroma/web/rich_media/parsers/ogp.ex index d0edf1c88..b7f2b4216 100644 --- a/lib/pleroma/web/rich_media/parsers/ogp.ex +++ b/lib/pleroma/web/rich_media/parsers/ogp.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.RichMedia.Parsers.OGP do diff --git a/lib/pleroma/web/rich_media/parsers/twitter_card.ex b/lib/pleroma/web/rich_media/parsers/twitter_card.ex index 0adf84159..cc653729d 100644 --- a/lib/pleroma/web/rich_media/parsers/twitter_card.ex +++ b/lib/pleroma/web/rich_media/parsers/twitter_card.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.RichMedia.Parsers.TwitterCard do diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index 4f97bb451..e953116c5 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Router do @@ -229,6 +229,12 @@ defmodule Pleroma.Web.Router do post("/frontends/install", FrontendController, :install) post("/backups", AdminAPIController, :create_backup) + + get("/announcements", AnnouncementController, :index) + post("/announcements", AnnouncementController, :create) + get("/announcements/:id", AnnouncementController, :show) + patch("/announcements/:id", AnnouncementController, :change) + delete("/announcements/:id", AnnouncementController, :delete) end # AdminAPI: admins and mods (staff) can perform these actions (if enabled by config) @@ -400,6 +406,7 @@ defmodule Pleroma.Web.Router do scope "/api/v1/pleroma", Pleroma.Web.PleromaAPI do pipe_through(:api) + get("/apps", AppController, :index) get("/statuses/:id/reactions/:emoji", EmojiReactionController, :index) get("/statuses/:id/reactions", EmojiReactionController, :index) end @@ -444,6 +451,7 @@ defmodule Pleroma.Web.Router do scope [] do pipe_through(:api) get("/accounts/:id/favourites", AccountController, :favourites) + get("/accounts/:id/endorsements", AccountController, :endorsements) end scope [] do @@ -451,6 +459,8 @@ defmodule Pleroma.Web.Router do post("/accounts/:id/subscribe", AccountController, :subscribe) post("/accounts/:id/unsubscribe", AccountController, :unsubscribe) + + get("/birthdays", AccountController, :birthdays) end post("/accounts/confirmation_resend", AccountController, :confirmation_resend) @@ -490,6 +500,8 @@ defmodule Pleroma.Web.Router do post("/accounts/:id/mute", AccountController, :mute) post("/accounts/:id/unmute", AccountController, :unmute) post("/accounts/:id/note", AccountController, :note) + post("/accounts/:id/pin", AccountController, :endorse) + post("/accounts/:id/unpin", AccountController, :unendorse) get("/conversations", ConversationController, :index) post("/conversations/:id/read", ConversationController, :mark_as_read) @@ -574,6 +586,9 @@ defmodule Pleroma.Web.Router do get("/timelines/home", TimelineController, :home) get("/timelines/direct", TimelineController, :direct) get("/timelines/list/:list_id", TimelineController, :list) + + get("/announcements", AnnouncementController, :index) + post("/announcements/:id/dismiss", AnnouncementController, :mark_read) end scope "/api/v1", Pleroma.Web.MastodonAPI do @@ -589,6 +604,8 @@ defmodule Pleroma.Web.Router do get("/accounts/search", SearchController, :account_search) get("/search", SearchController, :search) + get("/accounts/lookup", AccountController, :lookup) + get("/accounts/:id/statuses", AccountController, :statuses) get("/accounts/:id/followers", AccountController, :followers) get("/accounts/:id/following", AccountController, :following) @@ -666,11 +683,6 @@ defmodule Pleroma.Web.Router do get("/activities/:uuid", OStatus.OStatusController, :activity) get("/notice/:id", OStatus.OStatusController, :notice) - # Notice compatibility routes for other frontends - get("/@:nickname/:id", OStatus.OStatusController, :notice) - get("/@:nickname/posts/:id", OStatus.OStatusController, :notice) - get("/:nickname/status/:id", OStatus.OStatusController, :notice) - # Mastodon compatibility routes get("/users/:nickname/statuses/:id", OStatus.OStatusController, :object) get("/users/:nickname/statuses/:id/activity", OStatus.OStatusController, :activity) diff --git a/lib/pleroma/web/shout_channel.ex b/lib/pleroma/web/shout_channel.ex index 17caecb1a..928f0a1dd 100644 --- a/lib/pleroma/web/shout_channel.ex +++ b/lib/pleroma/web/shout_channel.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ShoutChannel do diff --git a/lib/pleroma/web/static_fe/static_fe_controller.ex b/lib/pleroma/web/static_fe/static_fe_controller.ex index 827c0a384..97c41c6f9 100644 --- a/lib/pleroma/web/static_fe/static_fe_controller.ex +++ b/lib/pleroma/web/static_fe/static_fe_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.StaticFE.StaticFEController do @@ -167,15 +167,6 @@ defmodule Pleroma.Web.StaticFE.StaticFEController do defp assign_id(%{path_info: ["notice", notice_id]} = conn, _opts), do: assign(conn, :notice_id, notice_id) - defp assign_id(%{path_info: ["@" <> _nickname, notice_id]} = conn, _opts), - do: assign(conn, :notice_id, notice_id) - - defp assign_id(%{path_info: ["@" <> _nickname, "posts", notice_id]} = conn, _opts), - do: assign(conn, :notice_id, notice_id) - - defp assign_id(%{path_info: [_nickname, "status", notice_id]} = conn, _opts), - do: assign(conn, :notice_id, notice_id) - defp assign_id(%{path_info: ["users", user_id]} = conn, _opts), do: assign(conn, :username_or_id, user_id) diff --git a/lib/pleroma/web/static_fe/static_fe_view.ex b/lib/pleroma/web/static_fe/static_fe_view.ex index c04715337..8e23a79a3 100644 --- a/lib/pleroma/web/static_fe/static_fe_view.ex +++ b/lib/pleroma/web/static_fe/static_fe_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.StaticFE.StaticFEView do diff --git a/lib/pleroma/web/streamer.ex b/lib/pleroma/web/streamer.ex index fc3bbb130..ff7f62a1e 100644 --- a/lib/pleroma/web/streamer.ex +++ b/lib/pleroma/web/streamer.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Streamer do diff --git a/lib/pleroma/web/templates/email/digest.html.eex b/lib/pleroma/web/templates/email/digest.html.eex index 60eceff22..1efc76e1a 100644 --- a/lib/pleroma/web/templates/email/digest.html.eex +++ b/lib/pleroma/web/templates/email/digest.html.eex @@ -160,7 +160,7 @@

Hey <%= @user.nickname %>, here is what you've missed!

+ style="font-size: 30px; color: <%= @styling.header_color %>;"><%= Gettext.dpgettext("static_pages", "digest email header line", "Hey %{nickname}, here is what you've missed!", nickname: @user.nickname) %>

@@ -382,7 +382,7 @@

<%= length(@followers) %> New Followers<%= Gettext.dpngettext("static_pages", "new followers count header", "%{count} New Follower", "%{count} New Followers", length(@followers), count: length(@followers)) %>

@@ -535,16 +535,16 @@ style="color:<%= @styling.text_color %>;font-family:Arial, 'Helvetica Neue', Helvetica, sans-serif;line-height:120%;padding-top:10px;padding-right:10px;padding-bottom:10px;padding-left:10px;">

- You have received this email because you have signed up to receive digest emails from <%= @instance %> Pleroma instance.

+ <%= raw Gettext.dpgettext("static_pages", "digest email sending reason", "You have received this email because you have signed up to receive digest emails from %{instance} Pleroma instance.", instance: safe_to_string(html_escape(@instance))) %>

 

- The email address you are subscribed as is <%= @user.email %>.

+ <%= raw Gettext.dpgettext("static_pages", "digest email receiver address", "The email address you are subscribed as is %{email}. ", color: safe_to_string(html_escape(@styling.link_color)), email: safe_to_string(html_escape(@user.email))) %>

- To unsubscribe, please go <%= link "here", style: "color: #{@styling.link_color};text-decoration: none;", to: @unsubscribe_link %>.

+ <%= raw Gettext.dpgettext("static_pages", "digest email unsubscribe action", "To unsubscribe, please go %{here}.", here: safe_to_string link(Gettext.dpgettext("static_pages", "digest email unsubscribe action link text", "here"), style: "color: #{@styling.link_color};text-decoration: none;", to: @unsubscribe_link)) %>

diff --git a/lib/pleroma/web/templates/feed/feed/tag.atom.eex b/lib/pleroma/web/templates/feed/feed/tag.atom.eex index de0731085..6d497e84c 100644 --- a/lib/pleroma/web/templates/feed/feed/tag.atom.eex +++ b/lib/pleroma/web/templates/feed/feed/tag.atom.eex @@ -1,6 +1,6 @@ -<%= '#{Routes.tag_feed_url(@conn, :feed, @tag)}.rss' %> #<%= @tag %> - These are public toots tagged with #<%= @tag %>. You can interact with them if you have an account anywhere in the fediverse. + <%= Gettext.dpgettext("static_pages", "tag feed description", "These are public toots tagged with #%{tag}. You can interact with them if you have an account anywhere in the fediverse.", tag: @tag) %> <%= feed_logo() %> <%= most_recent_update(@activities) %> diff --git a/lib/pleroma/web/templates/feed/feed/tag.rss.eex b/lib/pleroma/web/templates/feed/feed/tag.rss.eex index 9c3613feb..edcc3e436 100644 --- a/lib/pleroma/web/templates/feed/feed/tag.rss.eex +++ b/lib/pleroma/web/templates/feed/feed/tag.rss.eex @@ -4,7 +4,7 @@ #<%= @tag %> - These are public toots tagged with #<%= @tag %>. You can interact with them if you have an account anywhere in the fediverse. + <%= Gettext.dpgettext("static_pages", "tag feed description", "These are public toots tagged with #%{tag}. You can interact with them if you have an account anywhere in the fediverse.", tag: @tag) %> <%= '#{Routes.tag_feed_url(@conn, :feed, @tag)}.rss' %> <%= feed_logo() %> 2b90d9 diff --git a/lib/pleroma/web/templates/layout/app.html.eex b/lib/pleroma/web/templates/layout/app.html.eex index 1ede59fd8..e33bada85 100644 --- a/lib/pleroma/web/templates/layout/app.html.eex +++ b/lib/pleroma/web/templates/layout/app.html.eex @@ -1,5 +1,5 @@ - + diff --git a/lib/pleroma/web/templates/layout/email.html.eex b/lib/pleroma/web/templates/layout/email.html.eex index f6dcd7f0f..087aa4fc0 100644 --- a/lib/pleroma/web/templates/layout/email.html.eex +++ b/lib/pleroma/web/templates/layout/email.html.eex @@ -1,5 +1,5 @@ - + <%= @email.subject %> @@ -7,4 +7,4 @@ <%= render @view_module, @view_template, assigns %> - \ No newline at end of file + diff --git a/lib/pleroma/web/templates/mailer/subscription/unsubscribe_failure.html.eex b/lib/pleroma/web/templates/mailer/subscription/unsubscribe_failure.html.eex index 7b476f02d..df090ffcd 100644 --- a/lib/pleroma/web/templates/mailer/subscription/unsubscribe_failure.html.eex +++ b/lib/pleroma/web/templates/mailer/subscription/unsubscribe_failure.html.eex @@ -1 +1 @@ -

UNSUBSCRIBE FAILURE

+

<%= Gettext.dpgettext("static_pages", "mailer unsubscribe failed message", "UNSUBSCRIBE FAILURE") %>

diff --git a/lib/pleroma/web/templates/mailer/subscription/unsubscribe_success.html.eex b/lib/pleroma/web/templates/mailer/subscription/unsubscribe_success.html.eex index 6dfa2c185..cbce495d4 100644 --- a/lib/pleroma/web/templates/mailer/subscription/unsubscribe_success.html.eex +++ b/lib/pleroma/web/templates/mailer/subscription/unsubscribe_success.html.eex @@ -1 +1 @@ -

UNSUBSCRIBE SUCCESSFUL

+

<%= Gettext.dpgettext("static_pages", "mailer unsubscribe successful message", "UNSUBSCRIBE SUCCESSFUL") %>

diff --git a/lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex b/lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex index b9daa8d8b..e45d13bdf 100644 --- a/lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex +++ b/lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex @@ -5,11 +5,11 @@ <% end %> -

Two-factor recovery

+

<%= Gettext.dpgettext("static_pages", "mfa recover page title", "Two-factor recovery") %>

<%= form_for @conn, Routes.mfa_verify_path(@conn, :verify), [as: "mfa"], fn f -> %>
- <%= label f, :code, "Recovery code" %> + <%= label f, :code, Gettext.dpgettext("static_pages", "mfa recover recovery code prompt", "Recovery code") %> <%= text_input f, :code, [autocomplete: false, autocorrect: "off", autocapitalize: "off", autofocus: true, spellcheck: false] %> <%= hidden_input f, :mfa_token, value: @mfa_token %> <%= hidden_input f, :state, value: @state %> @@ -17,8 +17,8 @@ <%= hidden_input f, :challenge_type, value: "recovery" %>
-<%= submit "Verify" %> +<%= submit Gettext.dpgettext("static_pages", "mfa recover verify recovery code button", "Verify") %> <% end %> "> - Enter a two-factor code + <%= Gettext.dpgettext("static_pages", "mfa recover use 2fa code link", "Enter a two-factor code") %> diff --git a/lib/pleroma/web/templates/o_auth/mfa/totp.html.eex b/lib/pleroma/web/templates/o_auth/mfa/totp.html.eex index 29ea7c5fb..50e6c04b6 100644 --- a/lib/pleroma/web/templates/o_auth/mfa/totp.html.eex +++ b/lib/pleroma/web/templates/o_auth/mfa/totp.html.eex @@ -5,20 +5,20 @@ <% end %> -

Two-factor authentication

+

<%= Gettext.dpgettext("static_pages", "mfa auth page title", "Two-factor authentication") %>

<%= form_for @conn, Routes.mfa_verify_path(@conn, :verify), [as: "mfa"], fn f -> %>
- <%= label f, :code, "Authentication code" %> - <%= text_input f, :code, [autocomplete: false, autocorrect: "off", autocapitalize: "off", autofocus: true, pattern: "[0-9]*", spellcheck: false] %> + <%= label f, :code, Gettext.dpgettext("static_pages", "mfa auth code prompt", "Authentication code") %> + <%= text_input f, :code, [autocomplete: "one-time-code", autocorrect: "off", autocapitalize: "off", autofocus: true, pattern: "[0-9]*", spellcheck: false] %> <%= hidden_input f, :mfa_token, value: @mfa_token %> <%= hidden_input f, :state, value: @state %> <%= hidden_input f, :redirect_uri, value: @redirect_uri %> <%= hidden_input f, :challenge_type, value: "totp" %>
-<%= submit "Verify" %> +<%= submit Gettext.dpgettext("static_pages", "mfa auth verify code button", "Verify") %> <% end %> "> - Enter a two-factor recovery code + <%= Gettext.dpgettext("static_pages", "mfa auth page use recovery code link", "Enter a two-factor recovery code") %> diff --git a/lib/pleroma/web/templates/o_auth/o_auth/_scopes.html.eex b/lib/pleroma/web/templates/o_auth/o_auth/_scopes.html.eex index c9ec1ecbf..73115e92a 100644 --- a/lib/pleroma/web/templates/o_auth/o_auth/_scopes.html.eex +++ b/lib/pleroma/web/templates/o_auth/o_auth/_scopes.html.eex @@ -1,5 +1,5 @@
- <%= label @form, :scope, "The following permissions will be granted" %> + <%= label @form, :scope, Gettext.dpgettext("static_pages", "oauth scopes message", "The following permissions will be granted") %>
<%= for scope <- @available_scopes do %> <%# Note: using hidden input with `unchecked_value` in order to distinguish user's empty selection from `scope` param being omitted %> diff --git a/lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex b/lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex index dc4521a62..8b894cd58 100644 --- a/lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex +++ b/lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex @@ -1,4 +1,4 @@ -

Sign in with external provider

+

<%= Gettext.dpgettext("static_pages", "oauth external provider page title", "Sign in with external provider") %>

<%= form_for @conn, Routes.o_auth_path(@conn, :prepare_request), [as: "authorization", method: "get"], fn f -> %>
@@ -10,6 +10,6 @@ <%= hidden_input f, :state, value: @state %> <%= for strategy <- Pleroma.Config.oauth_consumer_strategies() do %> - <%= submit "Sign in with #{String.capitalize(strategy)}", name: "provider", value: strategy %> + <%= submit Gettext.dpgettext("static_pages", "oauth external provider sign in button", "Sign in with %{strategy}", strategy: String.capitalize(strategy)), name: "provider", value: strategy %> <% end %> <% end %> diff --git a/lib/pleroma/web/templates/o_auth/o_auth/oob_authorization_created.html.eex b/lib/pleroma/web/templates/o_auth/o_auth/oob_authorization_created.html.eex index ffabe29a6..76ed3fda5 100644 --- a/lib/pleroma/web/templates/o_auth/o_auth/oob_authorization_created.html.eex +++ b/lib/pleroma/web/templates/o_auth/o_auth/oob_authorization_created.html.eex @@ -1,2 +1,2 @@ -

Successfully authorized

-

Token code is
<%= @auth.token %>

+

<%= Gettext.dpgettext("static_pages", "oauth authorized page title", "Successfully authorized") %>

+

<%= raw Gettext.dpgettext("static_pages", "oauth token code message", "Token code is
%{token}", token: safe_to_string(html_escape(@auth.token))) %>

diff --git a/lib/pleroma/web/templates/o_auth/o_auth/oob_token_exists.html.eex b/lib/pleroma/web/templates/o_auth/o_auth/oob_token_exists.html.eex index 82785c4b9..754bf2eb0 100644 --- a/lib/pleroma/web/templates/o_auth/o_auth/oob_token_exists.html.eex +++ b/lib/pleroma/web/templates/o_auth/o_auth/oob_token_exists.html.eex @@ -1,2 +1,2 @@ -

Authorization exists

-

Access token is
<%= @token.token %>

+

<%= Gettext.dpgettext("static_pages", "oauth authorization exists page title", "Authorization exists") %>

+

<%= raw Gettext.dpgettext("static_pages", "oauth token code message", "Token code is
%{token}", token: safe_to_string(html_escape(@token.token))) %>

diff --git a/lib/pleroma/web/templates/o_auth/o_auth/register.html.eex b/lib/pleroma/web/templates/o_auth/o_auth/register.html.eex index 99f900fb7..1f661efb2 100644 --- a/lib/pleroma/web/templates/o_auth/o_auth/register.html.eex +++ b/lib/pleroma/web/templates/o_auth/o_auth/register.html.eex @@ -5,34 +5,34 @@ <% end %> -

Registration Details

+

<%= Gettext.dpgettext("static_pages", "oauth register page title", "Registration Details") %>

-

If you'd like to register a new account, please provide the details below.

+

<%= Gettext.dpgettext("static_pages", "oauth register page fill form prompt", "If you'd like to register a new account, please provide the details below.") %>

<%= form_for @conn, Routes.o_auth_path(@conn, :register), [as: "authorization"], fn f -> %>
- <%= label f, :nickname, "Nickname" %> - <%= text_input f, :nickname, value: @nickname %> + <%= label f, :nickname, Gettext.dpgettext("static_pages", "oauth register page nickname prompt", "Nickname") %> + <%= text_input f, :nickname, value: @nickname, autocomplete: "username" %>
- <%= label f, :email, "Email" %> - <%= text_input f, :email, value: @email %> + <%= label f, :email, Gettext.dpgettext("static_pages", "oauth register page email prompt", "Email") %> + <%= text_input f, :email, value: @email, autocomplete: "email" %>
-<%= submit "Proceed as new user", name: "op", value: "register" %> +<%= submit Gettext.dpgettext("static_pages", "oauth register page register button", "Proceed as new user"), name: "op", value: "register" %> -

Alternatively, sign in to connect to existing account.

+

<%= Gettext.dpgettext("static_pages", "oauth register page login prompt", "Alternatively, sign in to connect to existing account.") %>

- <%= label f, :name, "Name or email" %> - <%= text_input f, :name %> + <%= label f, :name, Gettext.dpgettext("static_pages", "oauth register page login username prompt", "Name or email") %> + <%= text_input f, :name, autocomplete: "username" %>
- <%= label f, :password, "Password" %> - <%= password_input f, :password %> + <%= label f, :password, Gettext.dpgettext("static_pages", "oauth register page login password prompt", "Password") %> + <%= password_input f, :password, autocomplete: "password" %>
-<%= submit "Proceed as existing user", name: "op", value: "connect" %> +<%= submit Gettext.dpgettext("static_pages", "oauth register page login button", "Proceed as existing user"), name: "op", value: "connect" %> <%= hidden_input f, :client_id, value: @client_id %> <%= hidden_input f, :redirect_uri, value: @redirect_uri %> diff --git a/lib/pleroma/web/templates/o_auth/o_auth/show.html.eex b/lib/pleroma/web/templates/o_auth/o_auth/show.html.eex index 181a9519a..a2f41618e 100644 --- a/lib/pleroma/web/templates/o_auth/o_auth/show.html.eex +++ b/lib/pleroma/web/templates/o_auth/o_auth/show.html.eex @@ -20,36 +20,38 @@
<%= if @app do %> -

Application <%= @app.client_name %> is requesting access to your account.

+

<%= raw Gettext.dpgettext("static_pages", "oauth authorize message", "Application %{client_name} is requesting access to your account.", client_name: safe_to_string(html_escape(@app.client_name))) %>

<%= render @view_module, "_scopes.html", Map.merge(assigns, %{form: f}) %> <% end %> <%= if @user do %>
- Cancel - <%= submit "Approve", class: "button--approve" %> + + <%= Gettext.dpgettext("static_pages", "oauth authorize cancel button", "Cancel") %> + + <%= submit Gettext.dpgettext("static_pages", "oauth authorize approve button", "Approve"), class: "button--approve" %>
<% else %> <%= if @params["registration"] in ["true", true] do %> -

This is the first time you visit! Please enter your Pleroma handle.

-

Choose carefully! You won't be able to change this later. You will be able to change your display name, though.

+

<%= Gettext.dpgettext("static_pages", "oauth register page title", "This is the first time you visit! Please enter your Pleroma handle.") %>

+

<%= Gettext.dpgettext("static_pages", "oauth register nickname unchangeable warning", "Choose carefully! You won't be able to change this later. You will be able to change your display name, though.") %>

- <%= label f, :nickname, "Pleroma Handle" %> - <%= text_input f, :nickname, placeholder: "lain" %> + <%= label f, :nickname, Gettext.dpgettext("static_pages", "oauth register nickname prompt", "Pleroma Handle") %> + <%= text_input f, :nickname, placeholder: "lain", autocomplete: "username" %>
<%= hidden_input f, :name, value: @params["name"] %> <%= hidden_input f, :password, value: @params["password"] %>
<% else %>
- <%= label f, :name, "Username" %> + <%= label f, :name, Gettext.dpgettext("static_pages", "oauth login username prompt", "Username") %> <%= text_input f, :name %>
- <%= label f, :password, "Password" %> + <%= label f, :password, Gettext.dpgettext("static_pages", "oauth login password prompt", "Password") %> <%= password_input f, :password %>
- <%= submit "Log In" %> + <%= submit Gettext.dpgettext("static_pages", "oauth login button", "Log In") %> <% end %> <% end %>
diff --git a/lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex b/lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex index 3191bf450..a14ca305e 100644 --- a/lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex +++ b/lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex @@ -5,7 +5,7 @@
- +
<%= raw Formatter.emojify(@user.name, @user.emoji) %> | <%= link "@#{@user.nickname}@#{Endpoint.host()}", to: (@user.uri || @user.ap_id) %> diff --git a/lib/pleroma/web/templates/twitter_api/password/invalid_token.html.eex b/lib/pleroma/web/templates/twitter_api/password/invalid_token.html.eex index ee84750c7..5ac0aa4e0 100644 --- a/lib/pleroma/web/templates/twitter_api/password/invalid_token.html.eex +++ b/lib/pleroma/web/templates/twitter_api/password/invalid_token.html.eex @@ -1 +1 @@ -

Invalid Token

+

<%= Gettext.dpgettext("static_pages", "password reset invalid token message", "Invalid Token") %>

diff --git a/lib/pleroma/web/templates/twitter_api/password/reset.html.eex b/lib/pleroma/web/templates/twitter_api/password/reset.html.eex index fbcacdc14..6a544af51 100644 --- a/lib/pleroma/web/templates/twitter_api/password/reset.html.eex +++ b/lib/pleroma/web/templates/twitter_api/password/reset.html.eex @@ -1,13 +1,13 @@

Password Reset for <%= @user.nickname %>

<%= form_for @conn, Routes.reset_password_path(@conn, :do_reset), [as: "data"], fn f -> %>
- <%= label f, :password, "Password" %> + <%= label f, :password, Gettext.dpgettext("static_pages", "password reset form password prompt", "Password") %> <%= password_input f, :password %>
- <%= label f, :password_confirmation, "Confirmation" %> + <%= label f, :password_confirmation, Gettext.dpgettext("static_pages", "password reset form confirm password prompt", "Confirmation") %> <%= password_input f, :password_confirmation %>
<%= hidden_input f, :token, value: @token.token %> - <%= submit "Reset" %> + <%= submit Gettext.dpgettext("static_pages", "password reset button", "Reset") %> <% end %> diff --git a/lib/pleroma/web/templates/twitter_api/password/reset_failed.html.eex b/lib/pleroma/web/templates/twitter_api/password/reset_failed.html.eex index 4ed4ac8bc..774e3462a 100644 --- a/lib/pleroma/web/templates/twitter_api/password/reset_failed.html.eex +++ b/lib/pleroma/web/templates/twitter_api/password/reset_failed.html.eex @@ -1,2 +1,6 @@ -

Password reset failed

-

Homepage

+

<%= Gettext.dpgettext("static_pages", "password reset failed message", "Password reset failed") %>

+

+ + <%= Gettext.dpgettext("static_pages", "password reset failed homepage link", "Homepage") %> + +

diff --git a/lib/pleroma/web/templates/twitter_api/password/reset_success.html.eex b/lib/pleroma/web/templates/twitter_api/password/reset_success.html.eex index 086d4e08b..40f6bb3fc 100644 --- a/lib/pleroma/web/templates/twitter_api/password/reset_success.html.eex +++ b/lib/pleroma/web/templates/twitter_api/password/reset_success.html.eex @@ -1,2 +1,2 @@ -

Password changed!

-

Homepage

+

<%= Gettext.dpgettext("static_pages", "password reset successful message", "Password changed!") %>

+

<%= Gettext.dpgettext("static_pages", "password reset successful homepage link", "Homepage") %>

diff --git a/lib/pleroma/web/templates/twitter_api/remote_follow/follow.html.eex b/lib/pleroma/web/templates/twitter_api/remote_follow/follow.html.eex index a7be53091..e2d251fac 100644 --- a/lib/pleroma/web/templates/twitter_api/remote_follow/follow.html.eex +++ b/lib/pleroma/web/templates/twitter_api/remote_follow/follow.html.eex @@ -1,11 +1,11 @@ <%= if @error == :error do %> -

Error fetching user

+

<%= Gettext.dpgettext("static_pages", "remote follow error", "Error fetching user") %>

<% else %> -

Remote follow

+

<%= Gettext.dpgettext("static_pages", "remote follow header", "Remote follow") %>

<%= @followee.nickname %>

<%= form_for @conn, Routes.remote_follow_path(@conn, :do_follow), [as: "user"], fn f -> %> <%= hidden_input f, :id, value: @followee.id %> - <%= submit "Authorize" %> + <%= submit Gettext.dpgettext("static_pages", "remote follow authorization button", "Authorize") %> <% end %> <% end %> diff --git a/lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex b/lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex index a8026fa9d..26340a906 100644 --- a/lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex +++ b/lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex @@ -1,14 +1,14 @@ <%= if @error do %>

<%= @error %>

<% end %> -

Log in to follow

+

<%= Gettext.dpgettext("static_pages", "remote follow header, need login", "Log in to follow") %>

<%= @followee.nickname %>

<%= form_for @conn, Routes.remote_follow_path(@conn, :do_follow), [as: "authorization"], fn f -> %> -<%= text_input f, :name, placeholder: "Username", required: true %> +<%= text_input f, :name, placeholder: Gettext.dpgettext("static_pages", "placeholder text for username entry", "Username"), required: true, autocomplete: "username" %>
-<%= password_input f, :password, placeholder: "Password", required: true %> +<%= password_input f, :password, placeholder: Gettext.dpgettext("static_pages", "placeholder text for password entry", "Password"), required: true, autocomplete: "password" %>
<%= hidden_input f, :id, value: @followee.id %> -<%= submit "Authorize" %> +<%= submit Gettext.dpgettext("static_pages", "remote follow authorization button for login", "Authorize") %> <% end %> diff --git a/lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex b/lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex index a54ed83b5..638212c1e 100644 --- a/lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex +++ b/lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex @@ -1,13 +1,13 @@ <%= if @error do %>

<%= @error %>

<% end %> -

Two-factor authentication

+

<%= Gettext.dpgettext("static_pages", "remote follow mfa header", "Two-factor authentication") %>

<%= @followee.nickname %>

<%= form_for @conn, Routes.remote_follow_path(@conn, :do_follow), [as: "mfa"], fn f -> %> -<%= text_input f, :code, placeholder: "Authentication code", required: true %> +<%= text_input f, :code, placeholder: Gettext.dpgettext("static_pages", "placeholder text for auth code entry", "Authentication code"), required: true %>
<%= hidden_input f, :id, value: @followee.id %> <%= hidden_input f, :token, value: @mfa_token %> -<%= submit "Authorize" %> +<%= submit Gettext.dpgettext("static_pages", "remote follow authorization button for mfa", "Authorize") %> <% end %> diff --git a/lib/pleroma/web/templates/twitter_api/remote_follow/followed.html.eex b/lib/pleroma/web/templates/twitter_api/remote_follow/followed.html.eex index da473d502..2fb4cc5d3 100644 --- a/lib/pleroma/web/templates/twitter_api/remote_follow/followed.html.eex +++ b/lib/pleroma/web/templates/twitter_api/remote_follow/followed.html.eex @@ -1,6 +1,5 @@ <%= if @error do %> -

Error following account

+

<%= Gettext.dpgettext("static_pages", "remote follow error", "Error following account") %>

<% else %> -

Account followed!

+

<%= Gettext.dpgettext("static_pages", "remote follow success", "Account followed!") %>

<% end %> - diff --git a/lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex b/lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex index a6b313d8a..848660f26 100644 --- a/lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex +++ b/lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex @@ -1,10 +1,10 @@ <%= if @error do %> -

Error: <%= @error %>

+

<%= Gettext.dpgettext("static_pages", "remote follow error", "Error: %{error}", error: @error) %>

<% else %> -

Remotely follow <%= @nickname %>

+

<%= Gettext.dpgettext("static_pages", "remote follow header", "Remotely follow %{nickname}", nickname: @nickname) %>

<%= form_for @conn, Routes.util_path(@conn, :remote_subscribe), [as: "user"], fn f -> %> <%= hidden_input f, :nickname, value: @nickname %> - <%= text_input f, :profile, placeholder: "Your account ID, e.g. lain@quitter.se" %> - <%= submit "Follow" %> + <%= text_input f, :profile, placeholder: Gettext.dpgettext("static_pages", "placeholder text for account id", "Your account ID, e.g. lain@quitter.se") %> + <%= submit Gettext.dpgettext("static_pages", "remote follow authorization button for following with a remote account", "Follow") %> <% end %> <% end %> diff --git a/lib/pleroma/web/translation_helpers.ex b/lib/pleroma/web/translation_helpers.ex index 0fe31d189..e9638b00a 100644 --- a/lib/pleroma/web/translation_helpers.ex +++ b/lib/pleroma/web/translation_helpers.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.TranslationHelpers do diff --git a/lib/pleroma/web/twitter_api/controller.ex b/lib/pleroma/web/twitter_api/controller.ex index 1e78ff2c1..6db3d6067 100644 --- a/lib/pleroma/web/twitter_api/controller.ex +++ b/lib/pleroma/web/twitter_api/controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.TwitterAPI.Controller do diff --git a/lib/pleroma/web/twitter_api/controllers/password_controller.ex b/lib/pleroma/web/twitter_api/controllers/password_controller.ex index 133a588b0..31b7dd728 100644 --- a/lib/pleroma/web/twitter_api/controllers/password_controller.ex +++ b/lib/pleroma/web/twitter_api/controllers/password_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.TwitterAPI.PasswordController do diff --git a/lib/pleroma/web/twitter_api/controllers/remote_follow_controller.ex b/lib/pleroma/web/twitter_api/controllers/remote_follow_controller.ex index 42d7601ed..6229d5d05 100644 --- a/lib/pleroma/web/twitter_api/controllers/remote_follow_controller.ex +++ b/lib/pleroma/web/twitter_api/controllers/remote_follow_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.TwitterAPI.RemoteFollowController do diff --git a/lib/pleroma/web/twitter_api/controllers/util_controller.ex b/lib/pleroma/web/twitter_api/controllers/util_controller.ex index b8abc666e..5731c78a8 100644 --- a/lib/pleroma/web/twitter_api/controllers/util_controller.ex +++ b/lib/pleroma/web/twitter_api/controllers/util_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.TwitterAPI.UtilController do diff --git a/lib/pleroma/web/twitter_api/twitter_api.ex b/lib/pleroma/web/twitter_api/twitter_api.ex index 76ca82d20..ef2eb75f4 100644 --- a/lib/pleroma/web/twitter_api/twitter_api.ex +++ b/lib/pleroma/web/twitter_api/twitter_api.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.TwitterAPI.TwitterAPI do @@ -12,6 +12,8 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do alias Pleroma.UserInviteToken def register_user(params, opts \\ []) do + fallback_language = Gettext.get_locale() + params = params |> Map.take([:email, :token, :password]) @@ -20,6 +22,11 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do |> Map.put(:name, Map.get(params, :fullname, params[:username])) |> Map.put(:password_confirmation, params[:password]) |> Map.put(:registration_reason, params[:reason]) + |> Map.put(:birthday, params[:birthday]) + |> Map.put( + :language, + Pleroma.Web.Gettext.normalize_locale(params[:language]) || fallback_language + ) if Pleroma.Config.get([:instance, :registrations_open]) do create_user(params, opts) diff --git a/lib/pleroma/web/twitter_api/views/password_view.ex b/lib/pleroma/web/twitter_api/views/password_view.ex index a9bb95a2c..55790941f 100644 --- a/lib/pleroma/web/twitter_api/views/password_view.ex +++ b/lib/pleroma/web/twitter_api/views/password_view.ex @@ -1,8 +1,9 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.TwitterAPI.PasswordView do use Pleroma.Web, :view import Phoenix.HTML.Form + alias Pleroma.Web.Gettext end diff --git a/lib/pleroma/web/twitter_api/views/remote_follow_view.ex b/lib/pleroma/web/twitter_api/views/remote_follow_view.ex index ac3f15eec..8902261b0 100644 --- a/lib/pleroma/web/twitter_api/views/remote_follow_view.ex +++ b/lib/pleroma/web/twitter_api/views/remote_follow_view.ex @@ -1,10 +1,15 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.TwitterAPI.RemoteFollowView do use Pleroma.Web, :view import Phoenix.HTML.Form + alias Pleroma.Web.Gettext - defdelegate avatar_url(user), to: Pleroma.User + def avatar_url(user) do + user + |> Pleroma.User.avatar_url() + |> Pleroma.Web.MediaProxy.url() + end end diff --git a/lib/pleroma/web/twitter_api/views/token_view.ex b/lib/pleroma/web/twitter_api/views/token_view.ex index 99884e714..2e492c13f 100644 --- a/lib/pleroma/web/twitter_api/views/token_view.ex +++ b/lib/pleroma/web/twitter_api/views/token_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.TwitterAPI.TokenView do diff --git a/lib/pleroma/web/twitter_api/views/util_view.ex b/lib/pleroma/web/twitter_api/views/util_view.ex index 87cb79dd7..69f243097 100644 --- a/lib/pleroma/web/twitter_api/views/util_view.ex +++ b/lib/pleroma/web/twitter_api/views/util_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.TwitterAPI.UtilView do @@ -7,6 +7,7 @@ defmodule Pleroma.Web.TwitterAPI.UtilView do import Phoenix.HTML.Form alias Pleroma.Config alias Pleroma.Web.Endpoint + alias Pleroma.Web.Gettext def status_net_config(instance) do """ diff --git a/lib/pleroma/web/uploader_controller.ex b/lib/pleroma/web/uploader_controller.ex index 0d42c7ec3..d5c804932 100644 --- a/lib/pleroma/web/uploader_controller.ex +++ b/lib/pleroma/web/uploader_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.UploaderController do diff --git a/lib/pleroma/web/utils/guards.ex b/lib/pleroma/web/utils/guards.ex index aea7b6314..8a61421fa 100644 --- a/lib/pleroma/web/utils/guards.ex +++ b/lib/pleroma/web/utils/guards.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Utils.Guards do diff --git a/lib/pleroma/web/utils/params.ex b/lib/pleroma/web/utils/params.ex index 6e0900341..636e3de33 100644 --- a/lib/pleroma/web/utils/params.ex +++ b/lib/pleroma/web/utils/params.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Utils.Params do diff --git a/lib/pleroma/web/views/email_view.ex b/lib/pleroma/web/views/email_view.ex index f7659b994..9ab708212 100644 --- a/lib/pleroma/web/views/email_view.ex +++ b/lib/pleroma/web/views/email_view.ex @@ -1,11 +1,12 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.EmailView do use Pleroma.Web, :view import Phoenix.HTML import Phoenix.HTML.Link + alias Pleroma.Web.Gettext def avatar_url(user) do Pleroma.User.avatar_url(user) diff --git a/lib/pleroma/web/views/embed_view.ex b/lib/pleroma/web/views/embed_view.ex index 81e196730..1bfd8c523 100644 --- a/lib/pleroma/web/views/embed_view.ex +++ b/lib/pleroma/web/views/embed_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.EmbedView do diff --git a/lib/pleroma/web/views/error_helpers.ex b/lib/pleroma/web/views/error_helpers.ex index d282c04b7..fd85f7c15 100644 --- a/lib/pleroma/web/views/error_helpers.ex +++ b/lib/pleroma/web/views/error_helpers.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ErrorHelpers do diff --git a/lib/pleroma/web/views/error_view.ex b/lib/pleroma/web/views/error_view.ex index c9715dc4b..9ab16323d 100644 --- a/lib/pleroma/web/views/error_view.ex +++ b/lib/pleroma/web/views/error_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ErrorView do diff --git a/lib/pleroma/web/views/layout_view.ex b/lib/pleroma/web/views/layout_view.ex index c2da10f04..3161bb1ae 100644 --- a/lib/pleroma/web/views/layout_view.ex +++ b/lib/pleroma/web/views/layout_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.LayoutView do diff --git a/lib/pleroma/web/views/mailer/subscription_view.ex b/lib/pleroma/web/views/mailer/subscription_view.ex index 1dc80987b..037fb6578 100644 --- a/lib/pleroma/web/views/mailer/subscription_view.ex +++ b/lib/pleroma/web/views/mailer/subscription_view.ex @@ -1,7 +1,8 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Mailer.SubscriptionView do use Pleroma.Web, :view + alias Pleroma.Web.Gettext end diff --git a/lib/pleroma/web/views/manifest_view.ex b/lib/pleroma/web/views/manifest_view.ex index cc78ea347..2ae82191e 100644 --- a/lib/pleroma/web/views/manifest_view.ex +++ b/lib/pleroma/web/views/manifest_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ManifestView do diff --git a/lib/pleroma/web/views/streamer_view.ex b/lib/pleroma/web/views/streamer_view.ex index 7706035e9..16c2b7d61 100644 --- a/lib/pleroma/web/views/streamer_view.ex +++ b/lib/pleroma/web/views/streamer_view.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.StreamerView do diff --git a/lib/pleroma/web/web_finger.ex b/lib/pleroma/web/web_finger.ex index 938fc09e3..6cd9962ce 100644 --- a/lib/pleroma/web/web_finger.ex +++ b/lib/pleroma/web/web_finger.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.WebFinger do diff --git a/lib/pleroma/web/web_finger/web_finger_controller.ex b/lib/pleroma/web/web_finger/web_finger_controller.ex index 7944c50ad..9e5efb77f 100644 --- a/lib/pleroma/web/web_finger/web_finger_controller.ex +++ b/lib/pleroma/web/web_finger/web_finger_controller.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.WebFinger.WebFingerController do diff --git a/lib/pleroma/web/xml.ex b/lib/pleroma/web/xml.ex index 0ab6e9d32..b699446b0 100644 --- a/lib/pleroma/web/xml.ex +++ b/lib/pleroma/web/xml.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.XML do diff --git a/lib/pleroma/workers/attachments_cleanup_worker.ex b/lib/pleroma/workers/attachments_cleanup_worker.ex index f5090dae7..0a397eae0 100644 --- a/lib/pleroma/workers/attachments_cleanup_worker.ex +++ b/lib/pleroma/workers/attachments_cleanup_worker.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Workers.AttachmentsCleanupWorker do diff --git a/lib/pleroma/workers/background_worker.ex b/lib/pleroma/workers/background_worker.ex index 4db077232..91440cbe6 100644 --- a/lib/pleroma/workers/background_worker.ex +++ b/lib/pleroma/workers/background_worker.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Workers.BackgroundWorker do diff --git a/lib/pleroma/workers/backup_worker.ex b/lib/pleroma/workers/backup_worker.ex index 9b763b04b..3caef85b7 100644 --- a/lib/pleroma/workers/backup_worker.ex +++ b/lib/pleroma/workers/backup_worker.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Workers.BackupWorker do diff --git a/lib/pleroma/workers/cron/digest_emails_worker.ex b/lib/pleroma/workers/cron/digest_emails_worker.ex index 83dc75d60..1540c1605 100644 --- a/lib/pleroma/workers/cron/digest_emails_worker.ex +++ b/lib/pleroma/workers/cron/digest_emails_worker.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Workers.Cron.DigestEmailsWorker do diff --git a/lib/pleroma/workers/cron/new_users_digest_worker.ex b/lib/pleroma/workers/cron/new_users_digest_worker.ex index 9dfd92228..267fe2837 100644 --- a/lib/pleroma/workers/cron/new_users_digest_worker.ex +++ b/lib/pleroma/workers/cron/new_users_digest_worker.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Workers.Cron.NewUsersDigestWorker do diff --git a/lib/pleroma/workers/mailer_worker.ex b/lib/pleroma/workers/mailer_worker.ex index 592230e7a..81764ba72 100644 --- a/lib/pleroma/workers/mailer_worker.ex +++ b/lib/pleroma/workers/mailer_worker.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Workers.MailerWorker do diff --git a/lib/pleroma/workers/mute_expire_worker.ex b/lib/pleroma/workers/mute_expire_worker.ex index 8da903e76..a7841d917 100644 --- a/lib/pleroma/workers/mute_expire_worker.ex +++ b/lib/pleroma/workers/mute_expire_worker.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Workers.MuteExpireWorker do diff --git a/lib/pleroma/workers/poll_worker.ex b/lib/pleroma/workers/poll_worker.ex index 3423cc889..4c7eab5c1 100644 --- a/lib/pleroma/workers/poll_worker.ex +++ b/lib/pleroma/workers/poll_worker.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Workers.PollWorker do diff --git a/lib/pleroma/workers/publisher_worker.ex b/lib/pleroma/workers/publisher_worker.ex index 6209715b3..528a06bb3 100644 --- a/lib/pleroma/workers/publisher_worker.ex +++ b/lib/pleroma/workers/publisher_worker.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Workers.PublisherWorker do diff --git a/lib/pleroma/workers/purge_expired_activity.ex b/lib/pleroma/workers/purge_expired_activity.ex index 027171c1e..0545d3ece 100644 --- a/lib/pleroma/workers/purge_expired_activity.ex +++ b/lib/pleroma/workers/purge_expired_activity.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Workers.PurgeExpiredActivity do diff --git a/lib/pleroma/workers/purge_expired_filter.ex b/lib/pleroma/workers/purge_expired_filter.ex index 4740d52e9..933ecb3f6 100644 --- a/lib/pleroma/workers/purge_expired_filter.ex +++ b/lib/pleroma/workers/purge_expired_filter.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Workers.PurgeExpiredFilter do diff --git a/lib/pleroma/workers/purge_expired_token.ex b/lib/pleroma/workers/purge_expired_token.ex index cfdf5c6dc..1d322b6b6 100644 --- a/lib/pleroma/workers/purge_expired_token.ex +++ b/lib/pleroma/workers/purge_expired_token.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Workers.PurgeExpiredToken do diff --git a/lib/pleroma/workers/receiver_worker.ex b/lib/pleroma/workers/receiver_worker.ex index 69125dcd0..268b5f30f 100644 --- a/lib/pleroma/workers/receiver_worker.ex +++ b/lib/pleroma/workers/receiver_worker.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Workers.ReceiverWorker do diff --git a/lib/pleroma/workers/remote_fetcher_worker.ex b/lib/pleroma/workers/remote_fetcher_worker.ex index ad4d785a1..c3158bbbe 100644 --- a/lib/pleroma/workers/remote_fetcher_worker.ex +++ b/lib/pleroma/workers/remote_fetcher_worker.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Workers.RemoteFetcherWorker do diff --git a/lib/pleroma/workers/scheduled_activity_worker.ex b/lib/pleroma/workers/scheduled_activity_worker.ex index a4ab9928d..9a17330b6 100644 --- a/lib/pleroma/workers/scheduled_activity_worker.ex +++ b/lib/pleroma/workers/scheduled_activity_worker.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Workers.ScheduledActivityWorker do diff --git a/lib/pleroma/workers/transmogrifier_worker.ex b/lib/pleroma/workers/transmogrifier_worker.ex index b39c1ea62..ed319c585 100644 --- a/lib/pleroma/workers/transmogrifier_worker.ex +++ b/lib/pleroma/workers/transmogrifier_worker.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Workers.TransmogrifierWorker do diff --git a/lib/pleroma/workers/web_pusher_worker.ex b/lib/pleroma/workers/web_pusher_worker.ex index 8fc2aff26..6447a5edc 100644 --- a/lib/pleroma/workers/web_pusher_worker.ex +++ b/lib/pleroma/workers/web_pusher_worker.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Workers.WebPusherWorker do diff --git a/lib/pleroma/workers/worker_helper.ex b/lib/pleroma/workers/worker_helper.ex index 4befbeb3b..1d20cbd89 100644 --- a/lib/pleroma/workers/worker_helper.ex +++ b/lib/pleroma/workers/worker_helper.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Workers.WorkerHelper do diff --git a/lib/pleroma/xml_builder.ex b/lib/pleroma/xml_builder.ex index 922d3f6ee..cd74cfbec 100644 --- a/lib/pleroma/xml_builder.ex +++ b/lib/pleroma/xml_builder.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.XmlBuilder do diff --git a/mix.exs b/mix.exs index 360d49905..6e84fe482 100644 --- a/mix.exs +++ b/mix.exs @@ -4,7 +4,7 @@ defmodule Pleroma.Mixfile do def project do [ app: :pleroma, - version: version("2.4.51"), + version: version("2.4.52"), elixir: "~> 1.9", elixirc_paths: elixirc_paths(Mix.env()), compilers: [:phoenix, :gettext] ++ Mix.compilers(), @@ -124,7 +124,10 @@ defmodule Pleroma.Mixfile do {:ecto_sql, "~> 3.6.2"}, {:postgrex, ">= 0.15.5"}, {:oban, "~> 2.3.4"}, - {:gettext, "~> 0.18"}, + {:gettext, + git: "https://github.com/tusooa/gettext.git", + ref: "72fb2496b6c5280ed911bdc3756890e7f38a4808", + override: true}, {:bcrypt_elixir, "~> 2.2"}, {:trailing_format_plug, "~> 0.0.7"}, {:fast_sanitize, "~> 0.2.0"}, @@ -142,15 +145,14 @@ defmodule Pleroma.Mixfile do {:mogrify, "~> 0.9.1"}, {:ex_aws, "~> 2.1.6"}, {:ex_aws_s3, "~> 2.0"}, - {:sweet_xml, "~> 0.6.6"}, + {:sweet_xml, "~> 0.7.2"}, {:earmark, "~> 1.4.15"}, {:bbcode_pleroma, "~> 0.2.0"}, {:crypt, git: "https://github.com/msantos/crypt.git", ref: "f75cd55325e33cbea198fb41fe41871392f8fb76"}, {:cors_plug, "~> 2.0"}, - {:web_push_encryption, - git: "https://github.com/lanodan/elixir-web-push-encryption.git", branch: "bugfix/otp-24"}, + {:web_push_encryption, "~> 0.3.1"}, {:swoosh, "~> 1.0"}, {:phoenix_swoosh, "~> 0.3"}, {:gen_smtp, "~> 0.13"}, @@ -158,7 +160,7 @@ defmodule Pleroma.Mixfile do {:floki, "~> 0.27"}, {:timex, "~> 3.6"}, {:ueberauth, "~> 0.4"}, - {:linkify, "~> 0.5.1"}, + {:linkify, "~> 0.5.2"}, {:http_signatures, "~> 0.1.1"}, {:telemetry, "~> 0.3"}, {:poolboy, "~> 1.5"}, @@ -183,9 +185,7 @@ defmodule Pleroma.Mixfile do {:ex_const, "~> 0.2"}, {:plug_static_index_html, "~> 1.0.0"}, {:flake_id, "~> 0.1.0"}, - {:concurrent_limiter, - git: "https://git.pleroma.social/pleroma/elixir-libraries/concurrent_limiter.git", - ref: "d81be41024569330f296fc472e24198d7499ba78"}, + {:concurrent_limiter, "~> 0.1.1"}, {:remote_ip, git: "https://git.pleroma.social/pleroma/remote_ip.git", ref: "b647d0deecaa3acb140854fe4bda5b7e1dc6d1c8"}, @@ -194,7 +194,7 @@ defmodule Pleroma.Mixfile do ref: "e0f16822d578866e186a0974d65ad58cddc1e2ab"}, {:restarter, path: "./restarter"}, {:majic, "~> 1.0"}, - {:eblurhash, "~> 1.1.0"}, + {:eblurhash, "~> 1.2.2"}, {:open_api_spex, "~> 3.10"}, {:phoenix_live_dashboard, "~> 0.6.2"}, {:ecto_psql_extras, "~> 0.6"}, @@ -246,9 +246,10 @@ defmodule Pleroma.Mixfile do identifier_filter = ~r/[^0-9a-z\-]+/i git_available? = match?({_output, 0}, System.cmd("sh", ["-c", "command -v git"])) + dotgit_present? = File.exists?(".git") git_pre_release = - if git_available? do + if git_available? and dotgit_present? do {tag, tag_err} = System.cmd("git", ["describe", "--tags", "--abbrev=0"], stderr_to_stdout: true) @@ -275,6 +276,7 @@ defmodule Pleroma.Mixfile do # Branch name as pre-release version component, denoted with a dot branch_name = with true <- git_available?, + true <- dotgit_present?, {branch_name, 0} <- System.cmd("git", ["rev-parse", "--abbrev-ref", "HEAD"]), branch_name <- String.trim(branch_name), branch_name <- System.get_env("PLEROMA_BUILD_BRANCH") || branch_name, diff --git a/mix.lock b/mix.lock index f371a6e41..14e43c703 100644 --- a/mix.lock +++ b/mix.lock @@ -14,7 +14,7 @@ "certifi": {:hex, :certifi, "2.8.0", "d4fb0a6bb20b7c9c3643e22507e42f356ac090a1dcea9ab99e27e0376d695eba", [:rebar3], [], "hexpm", "6ac7efc1c6f8600b08d625292d4bbf584e14847ce1b6b5c44d983d273e1097ea"}, "combine": {:hex, :combine, "0.10.0", "eff8224eeb56498a2af13011d142c5e7997a80c8f5b97c499f84c841032e429f", [:mix], [], "hexpm", "1b1dbc1790073076580d0d1d64e42eae2366583e7aecd455d1215b0d16f2451b"}, "comeonin": {:hex, :comeonin, "5.3.2", "5c2f893d05c56ae3f5e24c1b983c2d5dfb88c6d979c9287a76a7feb1e1d8d646", [:mix], [], "hexpm", "d0993402844c49539aeadb3fe46a3c9bd190f1ecf86b6f9ebd71957534c95f04"}, - "concurrent_limiter": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/concurrent_limiter.git", "d81be41024569330f296fc472e24198d7499ba78", [ref: "d81be41024569330f296fc472e24198d7499ba78"]}, + "concurrent_limiter": {:hex, :concurrent_limiter, "0.1.1", "43ae1dc23edda1ab03dd66febc739c4ff710d047bb4d735754909f9a474ae01c", [:mix], [{:telemetry, "~> 0.3", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "53968ff238c0fbb4d7ed76ddb1af0be6f3b2f77909f6796e249e737c505a16eb"}, "connection": {:hex, :connection, "1.1.0", "ff2a49c4b75b6fb3e674bfc5536451607270aac754ffd1bdfe175abe4a6d7a68", [:mix], [], "hexpm", "722c1eb0a418fbe91ba7bd59a47e28008a189d47e37e0e7bb85585a016b2869c"}, "cors_plug": {:hex, :cors_plug, "2.0.3", "316f806d10316e6d10f09473f19052d20ba0a0ce2a1d910ddf57d663dac402ae", [:mix], [{:plug, "~> 1.8", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "ee4ae1418e6ce117fc42c2ba3e6cbdca4e95ecd2fe59a05ec6884ca16d469aea"}, "cowboy": {:hex, :cowboy, "2.9.0", "865dd8b6607e14cf03282e10e934023a1bd8be6f6bacf921a7e2a96d800cd452", [:make, :rebar3], [{:cowlib, "2.11.0", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "2c729f934b4e1aa149aff882f57c6372c15399a20d54f65c8d67bef583021bde"}, @@ -29,7 +29,7 @@ "deep_merge": {:hex, :deep_merge, "1.0.0", "b4aa1a0d1acac393bdf38b2291af38cb1d4a52806cf7a4906f718e1feb5ee961", [:mix], [], "hexpm", "ce708e5f094b9cd4e8f2be4f00d2f4250c4095be93f8cd6d018c753894885430"}, "earmark": {:hex, :earmark, "1.4.18", "618c4ff1563450d1832b7fb41dc6755e470f91a6fd4c70f350a58b14f64a7db8", [:mix], [{:earmark_parser, ">= 1.4.17", [hex: :earmark_parser, repo: "hexpm", optional: false]}], "hexpm", "57ac3b6da3958ed09c669a9b159e86377fcccda56bacde8a209fa4dcdef52560"}, "earmark_parser": {:hex, :earmark_parser, "1.4.17", "6f3c7e94170377ba45241d394389e800fb15adc5de51d0a3cd52ae766aafd63f", [:mix], [], "hexpm", "f93ac89c9feca61c165b264b5837bf82344d13bebc634cd575cb711e2e342023"}, - "eblurhash": {:hex, :eblurhash, "1.1.0", "e10ccae762598507ebfacf0b645ed49520f2afa3e7e9943e73a91117dffce415", [:rebar3], [], "hexpm", "2e6b889d09fddd374e3c5ac57c486138768763264e99ac1074ae5fa7fc9ab51d"}, + "eblurhash": {:hex, :eblurhash, "1.2.2", "7da4255aaea984b31bb71155f673257353b0e0554d0d30dcf859547e74602582", [:rebar3], [], "hexpm", "8c20ca00904de023a835a9dcb7b7762fed32264c85a80c3cafa85288e405044c"}, "ecto": {:hex, :ecto, "3.6.2", "efdf52acfc4ce29249bab5417415bd50abd62db7b0603b8bab0d7b996548c2bc", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "efad6dfb04e6f986b8a3047822b0f826d9affe8e4ebdd2aeedbfcb14fd48884e"}, "ecto_enum": {:hex, :ecto_enum, "1.4.0", "d14b00e04b974afc69c251632d1e49594d899067ee2b376277efd8233027aec8", [:mix], [{:ecto, ">= 3.0.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:ecto_sql, "> 3.0.0", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:mariaex, ">= 0.0.0", [hex: :mariaex, repo: "hexpm", optional: true]}, {:postgrex, ">= 0.0.0", [hex: :postgrex, repo: "hexpm", optional: true]}], "hexpm", "8fb55c087181c2b15eee406519dc22578fa60dd82c088be376d0010172764ee4"}, "ecto_psql_extras": {:hex, :ecto_psql_extras, "0.7.4", "5d43fd088d39a158c860b17e8d210669587f63ec89ea122a4654861c8c6e2db4", [:mix], [{:ecto_sql, "~> 3.4", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:postgrex, ">= 0.15.7", [hex: :postgrex, repo: "hexpm", optional: false]}, {:table_rex, "~> 3.1.1", [hex: :table_rex, repo: "hexpm", optional: false]}], "hexpm", "311db02f1b772e3d0dc7f56a05044b5e1499d78ed6abf38885e1ca70059449e5"}, @@ -55,7 +55,7 @@ "gen_smtp": {:hex, :gen_smtp, "0.15.0", "9f51960c17769b26833b50df0b96123605a8024738b62db747fece14eb2fbfcc", [:rebar3], [], "hexpm", "29bd14a88030980849c7ed2447b8db6d6c9278a28b11a44cafe41b791205440f"}, "gen_stage": {:hex, :gen_stage, "0.14.3", "d0c66f1c87faa301c1a85a809a3ee9097a4264b2edf7644bf5c123237ef732bf", [:mix], [], "hexpm"}, "gen_state_machine": {:hex, :gen_state_machine, "2.0.5", "9ac15ec6e66acac994cc442dcc2c6f9796cf380ec4b08267223014be1c728a95", [:mix], [], "hexpm"}, - "gettext": {:hex, :gettext, "0.18.2", "7df3ea191bb56c0309c00a783334b288d08a879f53a7014341284635850a6e55", [:mix], [], "hexpm", "f9f537b13d4fdd30f3039d33cb80144c3aa1f8d9698e47d7bcbcc8df93b1f5c5"}, + "gettext": {:git, "https://github.com/tusooa/gettext.git", "72fb2496b6c5280ed911bdc3756890e7f38a4808", [ref: "72fb2496b6c5280ed911bdc3756890e7f38a4808"]}, "gun": {:hex, :gun, "2.0.0-rc.2", "7c489a32dedccb77b6e82d1f3c5a7dadfbfa004ec14e322cdb5e579c438632d2", [:make, :rebar3], [{:cowlib, "2.11.0", [hex: :cowlib, repo: "hexpm", optional: false]}], "hexpm", "6b9d1eae146410d727140dbf8b404b9631302ecc2066d1d12f22097ad7d254fc"}, "hackney": {:hex, :hackney, "1.18.0", "c4443d960bb9fba6d01161d01cd81173089686717d9490e5d3606644c48d121f", [:rebar3], [{:certifi, "~>2.8.0", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "~>6.1.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "~>1.0.0", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~>1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:parse_trans, "3.3.1", [hex: :parse_trans, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "~>1.1.0", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}, {:unicode_util_compat, "~>0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "9afcda620704d720db8c6a3123e9848d09c87586dc1c10479c42627b905b5c5e"}, "html_entities": {:hex, :html_entities, "0.5.2", "9e47e70598da7de2a9ff6af8758399251db6dbb7eebe2b013f2bbd2515895c3c", [:mix], [], "hexpm", "c53ba390403485615623b9531e97696f076ed415e8d8058b1dbaa28181f4fdcc"}, @@ -69,7 +69,7 @@ "jose": {:hex, :jose, "1.11.1", "59da64010c69aad6cde2f5b9248b896b84472e99bd18f246085b7b9fe435dcdb", [:mix, :rebar3], [], "hexpm", "078f6c9fb3cd2f4cfafc972c814261a7d1e8d2b3685c0a76eb87e158efff1ac5"}, "jumper": {:hex, :jumper, "1.0.1", "3c00542ef1a83532b72269fab9f0f0c82bf23a35e27d278bfd9ed0865cecabff", [:mix], [], "hexpm", "318c59078ac220e966d27af3646026db9b5a5e6703cb2aa3e26bcfaba65b7433"}, "libring": {:hex, :libring, "1.4.0", "41246ba2f3fbc76b3971f6bce83119dfec1eee17e977a48d8a9cfaaf58c2a8d6", [:mix], [], "hexpm"}, - "linkify": {:hex, :linkify, "0.5.1", "6dc415cbc948b2f6ecec7cb226aab7ba9d3a1815bb501ae33e042334d707ecee", [:mix], [], "hexpm", "a3128c7e22fada4aa7214009501d8131e1fa3faf2f0a68b33dba379dc84ff944"}, + "linkify": {:hex, :linkify, "0.5.2", "fb66be139fdf1656ecb31f78a93592724d1b78d960a1b3598bd661013ea0e3c7", [:mix], [], "hexpm", "8d71ac690218d8952c90cbeb63cb8cc33738bb230d8a56d487d9447f2a5eab86"}, "majic": {:hex, :majic, "1.0.0", "37e50648db5f5c2ff0c9fb46454d034d11596c03683807b9fb3850676ffdaab3", [:make, :mix], [{:elixir_make, "~> 0.6.1", [hex: :elixir_make, repo: "hexpm", optional: false]}, {:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 0.2", [hex: :nimble_pool, repo: "hexpm", optional: false]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "7905858f76650d49695f14ea55cd9aaaee0c6654fa391671d4cf305c275a0a9e"}, "makeup": {:hex, :makeup, "1.0.5", "d5a830bc42c9800ce07dd97fa94669dfb93d3bf5fcf6ea7a0c67b2e0e4a7f26c", [:mix], [{:nimble_parsec, "~> 0.5 or ~> 1.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "cfa158c02d3f5c0c665d0af11512fed3fba0144cf1aadee0f2ce17747fba2ca9"}, "makeup_elixir": {:hex, :makeup_elixir, "0.14.1", "4f0e96847c63c17841d42c08107405a005a2680eb9c7ccadfd757bd31dabccfb", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "f2438b1a80eaec9ede832b5c41cd4f373b38fd7aa33e3b22d9db79e640cbde11"}, @@ -120,7 +120,7 @@ "remote_ip": {:git, "https://git.pleroma.social/pleroma/remote_ip.git", "b647d0deecaa3acb140854fe4bda5b7e1dc6d1c8", [ref: "b647d0deecaa3acb140854fe4bda5b7e1dc6d1c8"]}, "sleeplocks": {:hex, :sleeplocks, "1.1.1", "3d462a0639a6ef36cc75d6038b7393ae537ab394641beb59830a1b8271faeed3", [:rebar3], [], "hexpm", "84ee37aeff4d0d92b290fff986d6a95ac5eedf9b383fadfd1d88e9b84a1c02e1"}, "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.6", "cf344f5692c82d2cd7554f5ec8fd961548d4fd09e7d22f5b62482e5aeaebd4b0", [:make, :mix, :rebar3], [], "hexpm", "bdb0d2471f453c88ff3908e7686f86f9be327d065cc1ec16fa4540197ea04680"}, - "sweet_xml": {:hex, :sweet_xml, "0.6.6", "fc3e91ec5dd7c787b6195757fbcf0abc670cee1e4172687b45183032221b66b8", [:mix], [], "hexpm", "2e1ec458f892ffa81f9f8386e3f35a1af6db7a7a37748a64478f13163a1f3573"}, + "sweet_xml": {:hex, :sweet_xml, "0.7.2", "4729f997286811fabdd8288f8474e0840a76573051062f066c4b597e76f14f9f", [:mix], [], "hexpm", "6894e68a120f454534d99045ea3325f7740ea71260bc315f82e29731d570a6e8"}, "swoosh": {:hex, :swoosh, "1.3.11", "34f79c57f19892b43bd2168de9ff5de478a721a26328ef59567aad4243e7a77b", [:mix], [{:cowboy, "~> 1.1 or ~> 2.4", [hex: :cowboy, 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", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_cowboy, ">= 1.0.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}], "hexpm", "f1e2a048db454f9982b9cf840f75e7399dd48be31ecc2a7dc10012a803b913af"}, "syslog": {:hex, :syslog, "1.1.0", "6419a232bea84f07b56dc575225007ffe34d9fdc91abe6f1b2f254fd71d8efc2", [:rebar3], [], "hexpm", "4c6a41373c7e20587be33ef841d3de6f3beba08519809329ecc4d27b15b659e1"}, "table_rex": {:hex, :table_rex, "3.1.1", "0c67164d1714b5e806d5067c1e96ff098ba7ae79413cc075973e17c38a587caa", [:mix], [], "hexpm", "678a23aba4d670419c23c17790f9dcd635a4a89022040df7d5d772cb21012490"}, @@ -133,6 +133,6 @@ "ueberauth": {:hex, :ueberauth, "0.6.3", "d42ace28b870e8072cf30e32e385579c57b9cc96ec74fa1f30f30da9c14f3cc0", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "afc293d8a1140d6591b53e3eaf415ca92842cb1d32fad3c450c6f045f7f91b60"}, "unicode_util_compat": {:hex, :unicode_util_compat, "0.7.0", "bc84380c9ab48177092f43ac89e4dfa2c6d62b40b8bd132b1059ecc7232f9a78", [:rebar3], [], "hexpm", "25eee6d67df61960cf6a794239566599b09e17e668d3700247bc498638152521"}, "unsafe": {:hex, :unsafe, "1.0.1", "a27e1874f72ee49312e0a9ec2e0b27924214a05e3ddac90e91727bc76f8613d8", [:mix], [], "hexpm", "6c7729a2d214806450d29766abc2afaa7a2cbecf415be64f36a6691afebb50e5"}, - "web_push_encryption": {:git, "https://github.com/lanodan/elixir-web-push-encryption.git", "026a043037a89db4da8f07560bc8f9c68bcf0cc0", [branch: "bugfix/otp-24"]}, + "web_push_encryption": {:hex, :web_push_encryption, "0.3.1", "76d0e7375142dfee67391e7690e89f92578889cbcf2879377900b5620ee4708d", [:mix], [{:httpoison, "~> 1.0", [hex: :httpoison, repo: "hexpm", optional: false]}, {:jose, "~> 1.11.1", [hex: :jose, repo: "hexpm", optional: false]}], "hexpm", "4f82b2e57622fb9337559058e8797cb0df7e7c9790793bdc4e40bc895f70e2a2"}, "websocket_client": {:git, "https://github.com/jeremyong/websocket_client.git", "9a6f65d05ebf2725d62fb19262b21f1805a59fbf", []}, } diff --git a/priv/gettext/config_descriptions.pot b/priv/gettext/config_descriptions.pot new file mode 100644 index 000000000..9021fbfab --- /dev/null +++ b/priv/gettext/config_descriptions.pot @@ -0,0 +1,6023 @@ +## This file is a PO Template file. +## +## "msgid"s here are often extracted from source code. +## Add new translations manually only if they're dynamic +## translations that can't be statically extracted. +## +## Run "mix gettext.extract" to bring this file up to +## date. Leave "msgstr"s empty as changing them here has no +## effect: edit them in PO (.po) files instead. +msgid "" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :esshd" +msgid "Before enabling this you must add :esshd to mix.exs as one of the extra_applications and generate host keys in your priv dir with ssh-keygen -m PEM -N \"\" -b 2048 -t rsa -f ssh_host_rsa_key" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :logger" +msgid "Logger-related settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :mime" +msgid "Mime Types settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma" +msgid "Allows setting a token that can be used to authenticate requests with admin privileges without a normal user account token. Append the `admin_token` parameter to requests to utilize it. (Please reconsider using HTTP Basic Auth or OAuth-based authentication if possible)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma" +msgid "Authenticator" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :quack" +msgid "Quack-related settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :cors_plug" +msgid "CORS plug config" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :esshd" +msgid "ESSHD" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :logger" +msgid "Logger" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :mime" +msgid "Mime Types" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma" +msgid "Pleroma Admin Token" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma" +msgid "Pleroma Authenticator" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :quack" +msgid "Quack Logger" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :logger-:console" +msgid "Console logger settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :logger-:ex_syslogger" +msgid "ExSyslogger-related settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:activitypub" +msgid "ActivityPub-related settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:assets" +msgid "This section configures assets to be used with various frontends. Currently the only option relates to mascots on the mastodon frontend" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:auth" +msgid "Authentication / authorization settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:connections_pool" +msgid "Advanced settings for `Gun` connections pool" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:email_notifications" +msgid "Email notifications settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:features" +msgid "Customizable features" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:feed" +msgid "Configure feed rendering" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations" +msgid "This form can be used to configure a keyword list that keeps the configuration data for any kind of frontend. By default, settings for pleroma_fe are configured. If you want to add your own configuration your settings all fields must be complete." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontends" +msgid "Installed frontends management" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:gopher" +msgid "Gopher settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:hackney_pools" +msgid "Advanced settings for `Hackney` connections pools" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:http" +msgid "HTTP settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:http_security" +msgid "HTTP security settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance" +msgid "Instance-related settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instances_favicons" +msgid "Control favicons for instances" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:ldap" +msgid "Use LDAP for user authentication. When a user logs in to the Pleroma instance, the name and password will be verified by trying to authenticate (bind) to a LDAP server. If a user exists in the LDAP directory but there is no account with the same name yet on the Pleroma instance then a new Pleroma account will be created with the same name as the LDAP user name." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:majic_pool" +msgid "Majic/libmagic configuration" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:manifest" +msgid "This section describe PWA manifest instance-specific values. Currently this option relate only for MastoFE." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:media_preview_proxy" +msgid "Media preview proxy" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:media_proxy" +msgid "Media proxy" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:modules" +msgid "Custom Runtime Modules" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf" +msgid "General MRF settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_activity_expiration" +msgid "Adds automatic expiration to all local activities" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_follow_bot" +msgid "Automatically follows newly discovered accounts." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_hashtag" +msgid "Reject, TWKN-remove or Set-Sensitive messsages with specific hashtags (without the leading #)\n\nNote: This MRF Policy is always enabled, if you want to disable it you have to set empty lists.\n" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_hellthread" +msgid "Block messages with excessive user mentions" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_keyword" +msgid "Reject or Word-Replace messages matching a keyword or [Regex](https://hexdocs.pm/elixir/Regex.html)." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_mention" +msgid "Block messages which mention a specific user" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_normalize_markup" +msgid "MRF NormalizeMarkup settings. Scrub configured hypertext markup." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_object_age" +msgid "Rejects or delists posts based on their timestamp deviance from your server's clock." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_rejectnonpublic" +msgid "RejectNonPublic drops posts with non-public visibility settings." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_simple" +msgid "Simple ingress policies" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_steal_emoji" +msgid "Steals emojis from selected instances when it sees them." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_subchain" +msgid "This policy processes messages through an alternate pipeline when a given message matches certain criteria. All criteria are configured as a map of regular expressions to lists of policy modules." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_vocabulary" +msgid "Filter messages which belong to certain activity vocabularies" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:oauth2" +msgid "Configure OAuth 2 provider capabilities" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:pools" +msgid "Advanced settings for `Gun` workers pools" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:populate_hashtags_table" +msgid "`populate_hashtags_table` background migration settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:rate_limit" +msgid "Rate limit settings. This is an advanced feature enabled only for :authentication by default." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:restrict_unauthenticated" +msgid "Disallow viewing timelines, user profiles and statuses for unauthenticated users." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:rich_media" +msgid "If enabled the instance will parse metadata from attached links to generate link previews" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:shout" +msgid "Pleroma shout settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:static_fe" +msgid "Render profiles and posts using server-generated HTML that is viewable without using JavaScript" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:streamer" +msgid "Settings for notifications streamer" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:uri_schemes" +msgid "URI schemes related settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:web_cache_ttl" +msgid "The expiration time for the web responses cache. Values should be in milliseconds or `nil` to disable expiration." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:welcome" +msgid "Welcome messages settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:workers" +msgid "Includes custom worker options not interpretable directly by `Oban`" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-ConcurrentLimiter" +msgid "Limits configuration for background tasks." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Oban" +msgid "[Oban](https://github.com/sorentwo/oban) asynchronous job processor configuration." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Captcha" +msgid "Captcha-related settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Captcha.Kocaptcha" +msgid "Kocaptcha is a very simple captcha service with a single API endpoint, the source code is here: https://github.com/koto-bank/kocaptcha. The default endpoint (https://captcha.kotobank.ch) is hosted by the developer." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer" +msgid "Mailer-related settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Emails.NewUsersDigestEmail" +msgid "New users admin email digest" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Emails.UserEmail" +msgid "Email template settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Formatter" +msgid "Configuration for Pleroma's link formatter which parses mentions, hashtags, and URLs." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.ScheduledActivity" +msgid "Scheduled activities settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Upload" +msgid "Upload general settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Upload.Filter.AnonymizeFilename" +msgid "Filter replaces the filename of the upload" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Upload.Filter.Mogrify" +msgid "Uploads mogrify filter settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Uploaders.Local" +msgid "Local uploader-related settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Uploaders.S3" +msgid "S3 uploader-related settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.User.Backup" +msgid "Account Backup" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http" +msgid "HTTP invalidate settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script" +msgid "Invalidation script settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Web.Metadata" +msgid "Metadata-related settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp" +msgid "`Pleroma.Web.Plugs.RemoteIp` is a shim to call [`RemoteIp`](https://git.pleroma.social/pleroma/remote_ip) but with runtime configuration.\n**If your instance is not behind at least one reverse proxy, you should not enable this plug.**\n" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Web.Preload" +msgid "Preload-related settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Workers.PurgeExpiredActivity" +msgid "Expired activities settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter" +msgid "Prometheus app metrics endpoint configuration" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :web_push_encryption-:vapid_details" +msgid "Web Push Notifications configuration. You can use the mix task mix web_push.gen.keypair to generate it." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :ex_aws-:s3" +msgid "S3" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :logger-:console" +msgid "Console Logger" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :logger-:ex_syslogger" +msgid "ExSyslogger" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:activitypub" +msgid "ActivityPub" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:assets" +msgid "Assets" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:auth" +msgid "Auth" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:connections_pool" +msgid "Connections pool" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:email_notifications" +msgid "Email notifications" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:emoji" +msgid "Emoji" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:features" +msgid "Features" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:feed" +msgid "Feed" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations" +msgid "Frontend configurations" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontends" +msgid "Frontends" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:gopher" +msgid "Gopher" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:hackney_pools" +msgid "Hackney pools" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:http" +msgid "HTTP" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:http_security" +msgid "HTTP security" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance" +msgid "Instance" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instances_favicons" +msgid "Instances favicons" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:ldap" +msgid "LDAP" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:majic_pool" +msgid "Majic pool" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:manifest" +msgid "Manifest" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:markup" +msgid "Markup Settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:media_preview_proxy" +msgid "Media preview proxy" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:media_proxy" +msgid "Media proxy" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:modules" +msgid "Modules" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf" +msgid "MRF" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_activity_expiration" +msgid "MRF Activity Expiration Policy" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_follow_bot" +msgid "MRF FollowBot Policy" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_hashtag" +msgid "MRF Hashtag" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_hellthread" +msgid "MRF Hellthread" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_keyword" +msgid "MRF Keyword" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_mention" +msgid "MRF Mention" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_normalize_markup" +msgid "MRF Normalize Markup" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_object_age" +msgid "MRF Object Age" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_rejectnonpublic" +msgid "MRF Reject Non Public" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_simple" +msgid "MRF Simple" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_steal_emoji" +msgid "MRF Emojis" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_subchain" +msgid "MRF Subchain" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_vocabulary" +msgid "MRF Vocabulary" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:oauth2" +msgid "OAuth2" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:pools" +msgid "Pools" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:populate_hashtags_table" +msgid "Populate hashtags table" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:rate_limit" +msgid "Rate limit" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:restrict_unauthenticated" +msgid "Restrict Unauthenticated" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:rich_media" +msgid "Rich media" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:shout" +msgid "Shout" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:static_fe" +msgid "Static FE" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:streamer" +msgid "Streamer" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:uri_schemes" +msgid "URI Schemes" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:user" +msgid "User" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:web_cache_ttl" +msgid "Web cache TTL" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:welcome" +msgid "Welcome" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:workers" +msgid "Workers" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-ConcurrentLimiter" +msgid "ConcurrentLimiter" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Oban" +msgid "Oban" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Captcha" +msgid "Pleroma.Captcha" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Captcha.Kocaptcha" +msgid "Pleroma.Captcha.Kocaptcha" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer" +msgid "Pleroma.Emails.Mailer" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.NewUsersDigestEmail" +msgid "Pleroma.Emails.NewUsersDigestEmail" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail" +msgid "Pleroma.Emails.UserEmail" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Formatter" +msgid "Linkify" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.ScheduledActivity" +msgid "Pleroma.ScheduledActivity" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Upload" +msgid "Pleroma.Upload" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Upload.Filter.AnonymizeFilename" +msgid "Pleroma.Upload.Filter.AnonymizeFilename" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Upload.Filter.Mogrify" +msgid "Pleroma.Upload.Filter.Mogrify" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Uploaders.Local" +msgid "Pleroma.Uploaders.Local" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Uploaders.S3" +msgid "Pleroma.Uploaders.S3" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.User" +msgid "Pleroma.User" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.User.Backup" +msgid "Pleroma.User.Backup" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Web.ApiSpec.CastAndValidate" +msgid "Pleroma.Web.ApiSpec.CastAndValidate" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http" +msgid "Pleroma.Web.MediaProxy.Invalidation.Http" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script" +msgid "Pleroma.Web.MediaProxy.Invalidation.Script" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Web.Metadata" +msgid "Pleroma.Web.Metadata" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp" +msgid "Pleroma.Web.Plugs.RemoteIp" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Web.Preload" +msgid "Pleroma.Web.Preload" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Workers.PurgeExpiredActivity" +msgid "Pleroma.Workers.PurgeExpiredActivity" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter" +msgid "Pleroma.Web.Endpoint.MetricsExporter" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :web_push_encryption-:vapid_details" +msgid "Vapid Details" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :esshd > :enabled" +msgid "Enables SSH" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :esshd > :handler" +msgid "Handler module" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :esshd > :password_authenticator" +msgid "Authenticator module" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :esshd > :port" +msgid "Port to connect" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :esshd > :priv_dir" +msgid "Dir with SSH keys" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :ex_aws-:s3 > :access_key_id" +msgid "S3 access key ID" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :ex_aws-:s3 > :host" +msgid "S3 host" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :ex_aws-:s3 > :region" +msgid "S3 region (for AWS)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :ex_aws-:s3 > :secret_access_key" +msgid "Secret access key" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :logger > :backends" +msgid "Where logs will be sent, :console - send logs to stdout, { ExSyslogger, :ex_syslogger } - to syslog, Quack.Logger - to Slack." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :logger-:console > :format" +msgid "Default: \"$date $time [$level] $levelpad$node $metadata $message\"" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :logger-:console > :level" +msgid "Log level" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :logger-:ex_syslogger > :format" +msgid "Default: \"$date $time [$level] $levelpad$node $metadata $message\"" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :logger-:ex_syslogger > :ident" +msgid "A string that's prepended to every message, and is typically set to the app name" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :logger-:ex_syslogger > :level" +msgid "Log level" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma > :admin_token" +msgid "Admin token" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:activitypub > :blockers_visible" +msgid "Whether a user can see someone who has blocked them" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:activitypub > :follow_handshake_timeout" +msgid "Following handshake timeout" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:activitypub > :note_replies_output_limit" +msgid "The number of Note replies' URIs to be included with outgoing federation (`5` to match Mastodon hardcoded value, `0` to disable the output)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:activitypub > :outgoing_blocks" +msgid "Whether to federate blocks to other instances" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:activitypub > :sign_object_fetches" +msgid "Sign object fetches with HTTP signatures" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:activitypub > :unfollow_blocked" +msgid "Whether blocks result in people getting unfollowed" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:assets > :default_mascot" +msgid "This will be used as the default mascot on MastoFE. Default: `:pleroma_fox_tan`" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:assets > :default_user_avatar" +msgid "URL of the default user avatar" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:assets > :mascots" +msgid "Keyword of mascots, each element must contain both an URL and a mime_type key" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:auth > :auth_template" +msgid "Authentication form template. By default it's `show.html` which corresponds to `lib/pleroma/web/templates/o_auth/o_auth/show.html.ee`." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:auth > :enforce_oauth_admin_scope_usage" +msgid "OAuth admin scope requirement toggle. If enabled, admin actions explicitly demand admin OAuth scope(s) presence in OAuth token (client app must support admin scopes). If disabled and token doesn't have admin scope(s), `is_admin` user flag grants access to admin-specific actions." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:auth > :oauth_consumer_strategies" +msgid "The list of enabled OAuth consumer strategies. By default it's set by OAUTH_CONSUMER_STRATEGIES environment variable. Each entry in this space-delimited string should be of format \"strategy\" or \"strategy:dependency\" (e.g. twitter or keycloak:ueberauth_keycloak_strategy in case dependency is named differently than ueberauth_)." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:auth > :oauth_consumer_template" +msgid "OAuth consumer mode authentication form template. By default it's `consumer.html` which corresponds to `lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex`." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:connections_pool > :connect_timeout" +msgid "Timeout while `gun` will wait until connection is up. Default: 5000ms." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:connections_pool > :connection_acquisition_retries" +msgid "Number of attempts to acquire the connection from the pool if it is overloaded. Default: 5" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:connections_pool > :connection_acquisition_wait" +msgid "Timeout to acquire a connection from pool. The total max time is this value multiplied by the number of retries. Default: 250ms." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:connections_pool > :max_connections" +msgid "Maximum number of connections in the pool. Default: 250 connections." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:connections_pool > :reclaim_multiplier" +msgid "Multiplier for the number of idle connection to be reclaimed if the pool is full. For example if the pool maxes out at 250 connections and this setting is set to 0.3, the pool will reclaim at most 75 idle connections if it's overloaded. Default: 0.1" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:email_notifications > :digest" +msgid "emails of \"what you've missed\" for users who have been inactive for a while" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:email_notifications > :digest > :active" +msgid "Globally enable or disable digest emails" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:email_notifications > :digest > :inactivity_threshold" +msgid "Minimum user inactivity threshold" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:email_notifications > :digest > :interval" +msgid "Minimum interval between digest emails to one user" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:email_notifications > :digest > :schedule" +msgid "When to send digest email, in crontab format. \"0 0 0\" is the default, meaning \"once a week at midnight on Sunday morning\"." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:emoji > :default_manifest" +msgid "Location of the JSON-manifest. This manifest contains information about the emoji-packs you can download. Currently only one manifest can be added (no arrays)." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:emoji > :groups" +msgid "Emojis are ordered in groups (tags). This is an array of key-value pairs where the key is the group name and the value is the location or array of locations. * can be used as a wildcard." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:emoji > :pack_extensions" +msgid "A list of file extensions for emojis, when no emoji.txt for a pack is present" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:emoji > :shortcode_globs" +msgid "Location of custom emoji files. * can be used as a wildcard." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:features > :improved_hashtag_timeline" +msgid "Setting to force toggle / force disable improved hashtags timeline. `:enabled` forces hashtags to be fetched from `hashtags` table for hashtags timeline. `:disabled` forces object-embedded hashtags to be used (slower). Keep it `:auto` for automatic behaviour (it is auto-set to `:enabled` [unless overridden] when HashtagsTableMigrator completes)." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:feed > :post_title" +msgid "Configure title rendering" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:feed > :post_title > :max_length" +msgid "Maximum number of characters before truncating title" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:feed > :post_title > :omission" +msgid "Replacement which will be used after truncating string" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe" +msgid "Settings for Pleroma FE" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :alwaysShowSubjectInput" +msgid "When disabled, auto-hide the subject field if it's empty" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :background" +msgid "URL of the background, unless viewing a user profile with a background that is set" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :collapseMessageWithSubject" +msgid "When a message has a subject (aka Content Warning), collapse it by default" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :greentext" +msgid "Enables green text on lines prefixed with the > character" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hideFilteredStatuses" +msgid "Hides filtered statuses from timelines" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hideMutedPosts" +msgid "Hides muted statuses from timelines" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hidePostStats" +msgid "Hide notices statistics (repeats, favorites, ...)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hideSitename" +msgid "Hides instance name from PleromaFE banner" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hideUserStats" +msgid "Hide profile statistics (posts, posts per day, followers, followings, ...)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :logo" +msgid "URL of the logo, defaults to Pleroma's logo" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :logoMargin" +msgid "Allows you to adjust vertical margins between logo boundary and navbar borders. The idea is that to have logo's image without any extra margins and instead adjust them to your need in layout." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :logoMask" +msgid "By default it assumes logo used will be monochrome with alpha channel to be compatible with both light and dark themes. If you want a colorful logo you must disable logoMask." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :minimalScopesMode" +msgid "Limit scope selection to Direct, User default, and Scope of post replying to. Also prevents replying to a DM with a public post from PleromaFE." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :nsfwCensorImage" +msgid "URL of the image to use for hiding NSFW media attachments in the timeline" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :postContentType" +msgid "Default post formatting option" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :redirectRootLogin" +msgid "Relative URL which indicates where to redirect when a user is logged in" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :redirectRootNoLogin" +msgid "Relative URL which indicates where to redirect when a user isn't logged in" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :scopeCopy" +msgid "Copy the scope (private/unlisted/public) in replies to posts by default" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :showFeaturesPanel" +msgid "Enables panel displaying functionality of the instance on the About page" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :showInstanceSpecificPanel" +msgid "Whether to show the instance's custom panel" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :sidebarRight" +msgid "Change alignment of sidebar and panels to the right" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :subjectLineBehavior" +msgid "Allows changing the default behaviour of subject lines in replies.\n `email`: copy and preprend re:, as in email,\n `masto`: copy verbatim, as in Mastodon,\n `noop`: don't copy the subject." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :theme" +msgid "Which theme to use. Available themes are defined in styles.json" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontends > :admin" +msgid "Admin frontend" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontends > :admin > name" +msgid "Name of the installed frontend. Valid config must include both `Name` and `Reference` values." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontends > :admin > ref" +msgid "Reference of the installed frontend to be used. Valid config must include both `Name` and `Reference` values." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontends > :available" +msgid "A map containing available frontends and parameters for their installation." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontends > :available > build_dir" +msgid "The directory inside the zip file " +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontends > :available > build_url" +msgid "Either an url to a zip file containing the frontend or a template to build it by inserting the `ref`. The string `${ref}` will be replaced by the configured `ref`." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontends > :available > custom-http-headers" +msgid "The custom HTTP headers for the frontend" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontends > :available > git" +msgid "URL of the git repository of the frontend" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontends > :available > name" +msgid "Name of the frontend." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontends > :available > ref" +msgid "Reference of the frontend to be used." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontends > :primary" +msgid "Primary frontend, the one that is served for all pages by default" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontends > :primary > name" +msgid "Name of the installed frontend. Valid config must include both `Name` and `Reference` values." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontends > :primary > ref" +msgid "Reference of the installed frontend to be used. Valid config must include both `Name` and `Reference` values." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:gopher > :dstport" +msgid "Port advertised in URLs (optional, defaults to port)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:gopher > :enabled" +msgid "Enables the gopher interface" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:gopher > :ip" +msgid "IP address to bind to" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:gopher > :port" +msgid "Port to bind to" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:hackney_pools > :federation" +msgid "Settings for federation pool." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:hackney_pools > :federation > :max_connections" +msgid "Number workers in the pool." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:hackney_pools > :federation > :timeout" +msgid "Timeout while `hackney` will wait for response." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:hackney_pools > :media" +msgid "Settings for media pool." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:hackney_pools > :media > :max_connections" +msgid "Number workers in the pool." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:hackney_pools > :media > :timeout" +msgid "Timeout while `hackney` will wait for response." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:hackney_pools > :upload" +msgid "Settings for upload pool." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:hackney_pools > :upload > :max_connections" +msgid "Number workers in the pool." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:hackney_pools > :upload > :timeout" +msgid "Timeout while `hackney` will wait for response." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:http > :adapter" +msgid "Adapter specific options" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:http > :adapter > :ssl_options" +msgid "SSL options for HTTP adapter" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:http > :adapter > :ssl_options > :versions" +msgid "List of TLS version to use" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:http > :proxy_url" +msgid "Proxy URL" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:http > :user_agent" +msgid "What user agent to use. Must be a string or an atom `:default`. Default value is `:default`." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:http_security > :ct_max_age" +msgid "The maximum age for the Expect-CT header if sent" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:http_security > :enabled" +msgid "Whether the managed content security policy is enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:http_security > :referrer_policy" +msgid "The referrer policy to use, either \"same-origin\" or \"no-referrer\"" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:http_security > :report_uri" +msgid "Adds the specified URL to report-uri and report-to group in CSP header" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:http_security > :sts" +msgid "Whether to additionally send a Strict-Transport-Security header" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:http_security > :sts_max_age" +msgid "The maximum age for the Strict-Transport-Security header if sent" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :account_activation_required" +msgid "Require users to confirm their emails before signing in" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :account_approval_required" +msgid "Require users to be manually approved by an admin before signing in" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :account_field_name_length" +msgid "An account field name maximum length. Default: 512." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :account_field_value_length" +msgid "An account field value maximum length. Default: 2048." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :allow_relay" +msgid "Permits remote instances to subscribe to all public posts of your instance. (Important!) This may increase the visibility of your instance." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :allowed_post_formats" +msgid "MIME-type list of formats allowed to be posted (transformed into HTML)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :attachment_links" +msgid "Enable to automatically add attachment link text to statuses" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :autofollowed_nicknames" +msgid "Set to nicknames of (local) users that every new user should automatically follow" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :autofollowing_nicknames" +msgid "Set to nicknames of (local) users that automatically follows every newly registered user" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :avatar_upload_limit" +msgid "File size limit of user's profile avatars" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :background_upload_limit" +msgid "File size limit of user's profile backgrounds" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :banner_upload_limit" +msgid "File size limit of user's profile banners" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :birthday_min_age" +msgid "Minimum required age for users to create account. Only used if birthday is required." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :birthday_required" +msgid "Require users to enter their birthday." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :cleanup_attachments" +msgid "Enable to remove associated attachments when status is removed.\nThis will not affect duplicates and attachments without status.\nEnabling this will increase load to database when deleting statuses on larger instances.\n" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :description" +msgid "The instance's description. It can be seen in nodeinfo and `/api/v1/instance`" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :email" +msgid "Email used to reach an Administrator/Moderator of the instance" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :extended_nickname_format" +msgid "Enable to use extended local nicknames format (allows underscores/dashes). This will break federation with older software for theses nicknames." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :external_user_synchronization" +msgid "Enabling following/followers counters synchronization for external users" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :federating" +msgid "Enable federation with other instances" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :federation_incoming_replies_max_depth" +msgid "Max. depth of reply-to and reply activities fetching on incoming federation, to prevent out-of-memory situations while fetching very long threads. If set to `nil`, threads of any depth will be fetched. Lower this value if you experience out-of-memory crashes." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :federation_reachability_timeout_days" +msgid "Timeout (in days) of each external federation target being unreachable prior to pausing federating to it" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :healthcheck" +msgid "If enabled, system data will be shown on `/api/pleroma/healthcheck`" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :instance_thumbnail" +msgid "The instance thumbnail can be any image that represents your instance and is used by some apps or services when they display information about your instance." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :invites_enabled" +msgid "Enable user invitations for admins (depends on `registrations_open` being disabled)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :limit" +msgid "Posts character limit (CW/Subject included in the counter)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :limit_to_local_content" +msgid "Limit unauthenticated users to search for local statutes and users only. Default: `:unauthenticated`." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :max_account_fields" +msgid "The maximum number of custom fields in the user profile. Default: 10." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :max_endorsed_users" +msgid "The maximum number of recommended accounts. 0 will disable the feature." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :max_media_attachments" +msgid "Maximum number of post media attachments" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :max_pinned_statuses" +msgid "The maximum number of pinned statuses. 0 will disable the feature." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :max_remote_account_fields" +msgid "The maximum number of custom fields in the remote user profile. Default: 20." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :max_report_comment_size" +msgid "The maximum size of the report comment. Default: 1000." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication" +msgid "Multi-factor authentication settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :backup_codes" +msgid "MFA backup codes settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :backup_codes > :length" +msgid "Determines the length of backup one-time pass-codes, in characters. Defaults to 16 characters." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :backup_codes > :number" +msgid "Number of backup codes to generate." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :totp" +msgid "TOTP settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :totp > :digits" +msgid "Determines the length of a one-time pass-code, in characters. Defaults to 6 characters." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :totp > :period" +msgid "A period for which the TOTP code will be valid, in seconds. Defaults to 30 seconds." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :name" +msgid "Name of the instance" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :notify_email" +msgid "Envelope FROM address for mail sent via Pleroma" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :poll_limits" +msgid "A map with poll limits for local polls" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :poll_limits > :max_expiration" +msgid "Maximum expiration time (in seconds)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :poll_limits > :max_option_chars" +msgid "Maximum number of characters per option" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :poll_limits > :max_options" +msgid "Maximum number of options" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :poll_limits > :min_expiration" +msgid "Minimum expiration time (in seconds)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :privileged_staff" +msgid "Let moderators access sensitive data (e.g. updating user credentials, get password reset token, delete users, index and read private statuses and chats)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :profile_directory" +msgid "Enable profile directory." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :public" +msgid "Makes the client API in authenticated mode-only except for user-profiles. Useful for disabling the Local Timeline and The Whole Known Network. Note: when setting to `false`, please also check `:restrict_unauthenticated` setting." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :quarantined_instances" +msgid "List of ActivityPub instances where private (DMs, followers-only) activities will not be sent and the reason for doing so" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :registration_reason_length" +msgid "Maximum registration reason length. Default: 500." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :registrations_open" +msgid "Enable registrations for anyone. Invitations require this setting to be disabled." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :remote_limit" +msgid "Hard character limit beyond which remote posts will be dropped" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :remote_post_retention_days" +msgid "The default amount of days to retain remote posts when pruning the database" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :safe_dm_mentions" +msgid "If enabled, only mentions at the beginning of a post will be used to address people in direct messages. This is to prevent accidental mentioning of people when talking about them (e.g. \"@admin please keep an eye on @bad_actor\"). Default: disabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :show_reactions" +msgid "Let favourites and emoji reactions be viewed through the API." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :skip_thread_containment" +msgid "Skip filtering out broken threads. Default: enabled." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :static_dir" +msgid "Instance static directory" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :upload_limit" +msgid "File size limit of uploads (except for avatar, background, banner)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :user_bio_length" +msgid "A user bio maximum length. Default: 5000." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :user_name_length" +msgid "A user name maximum length. Default: 100." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instances_favicons > :enabled" +msgid "Allow/disallow displaying and getting instances favicons" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:ldap > :base" +msgid "LDAP base, e.g. \"dc=example,dc=com\"" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:ldap > :enabled" +msgid "Enables LDAP authentication" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:ldap > :host" +msgid "LDAP server hostname" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:ldap > :port" +msgid "LDAP port, e.g. 389 or 636" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:ldap > :ssl" +msgid "Enable to use SSL, usually implies the port 636" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:ldap > :sslopts" +msgid "Additional SSL options" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:ldap > :sslopts > :cacertfile" +msgid "Path to file with PEM encoded cacerts" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:ldap > :sslopts > :verify" +msgid "Type of cert verification" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:ldap > :tls" +msgid "Enable to use STARTTLS, usually implies the port 389" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:ldap > :tlsopts" +msgid "Additional TLS options" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:ldap > :tlsopts > :cacertfile" +msgid "Path to file with PEM encoded cacerts" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:ldap > :tlsopts > :verify" +msgid "Type of cert verification" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:ldap > :uid" +msgid "LDAP attribute name to authenticate the user, e.g. when \"cn\", the filter will be \"cn=username,base\"" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:majic_pool > :size" +msgid "Number of majic workers to start." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:manifest > :background_color" +msgid "Describe the background color of the app" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:manifest > :icons" +msgid "Describe the icons of the app" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:manifest > :theme_color" +msgid "Describe the theme color of the app" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:markup > :scrub_policy" +msgid "Module names are shortened (removed leading `Pleroma.HTML.` part), but on adding custom module you need to use full name." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:media_preview_proxy > :enabled" +msgid "Enables proxying of remote media preview to the instance's proxy. Requires enabled media proxy." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:media_preview_proxy > :image_quality" +msgid "Quality of the output. Ranges from 0 (min quality) to 100 (max quality)." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:media_preview_proxy > :min_content_length" +msgid "Min content length (in bytes) to perform preview. Media smaller in size will be served without thumbnailing." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:media_preview_proxy > :thumbnail_max_height" +msgid "Max height of preview thumbnail for images (video preview always has original dimensions)." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:media_preview_proxy > :thumbnail_max_width" +msgid "Max width of preview thumbnail for images (video preview always has original dimensions)." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:media_proxy > :base_url" +msgid "The base URL to access a user-uploaded file. Useful when you want to proxy the media files via another host/CDN fronts." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:media_proxy > :enabled" +msgid "Enables proxying of remote media via the instance's proxy" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:media_proxy > :invalidation > :enabled" +msgid "Enables media cache object invalidation." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:media_proxy > :invalidation > :provider" +msgid "Module which will be used to purge objects from the cache." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:media_proxy > :proxy_opts" +msgid "Internal Pleroma.ReverseProxy settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:media_proxy > :proxy_opts > :max_body_length" +msgid "Maximum file size (in bytes) allowed through the Pleroma MediaProxy cache." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:media_proxy > :proxy_opts > :max_read_duration" +msgid "Timeout (in milliseconds) of GET request to the remote URI." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:media_proxy > :proxy_opts > :redirect_on_failure" +msgid "Redirects the client to the origin server upon encountering HTTP errors.\n\nNote that files larger than Max Body Length will trigger an error. (e.g., Peertube videos)\n\n\n**WARNING:** This setting will allow larger files to be accessed, but exposes the\n\nIP addresses of your users to the other servers, bypassing the MediaProxy.\n" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:media_proxy > :whitelist" +msgid "List of hosts with scheme to bypass the MediaProxy" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:modules > :runtime_dir" +msgid "A path to custom Elixir modules (such as MRF policies)." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf > :policies" +msgid "A list of MRF policies enabled. Module names are shortened (removed leading `Pleroma.Web.ActivityPub.MRF.` part), but on adding custom module you need to use full name." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf > :transparency" +msgid "Make the content of your Message Rewrite Facility settings public (via nodeinfo)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf > :transparency_exclusions" +msgid "Exclude specific instance names from MRF transparency. The use of the exclusions feature will be disclosed in nodeinfo as a boolean value. You can also provide a reason for excluding these instance names. The instances and reasons won't be publicly disclosed." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_activity_expiration > :days" +msgid "Default global expiration time for all local activities (in days)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_follow_bot > :follower_nickname" +msgid "The name of the bot account to use for following newly discovered users." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_hashtag > :federated_timeline_removal" +msgid "A list of hashtags which result in message being removed from federated timelines (a.k.a unlisted)." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_hashtag > :reject" +msgid "A list of hashtags which result in message being rejected." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_hashtag > :sensitive" +msgid "A list of hashtags which result in message being set as sensitive (a.k.a NSFW/R-18)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_hellthread > :delist_threshold" +msgid "Number of mentioned users after which the message gets removed from timelines anddisables notifications. Set to 0 to disable." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_hellthread > :reject_threshold" +msgid "Number of mentioned users after which the messaged gets rejected. Set to 0 to disable." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_keyword > :federated_timeline_removal" +msgid " A list of patterns which result in message being removed from federated timelines (a.k.a unlisted).\n\n Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`.\n" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_keyword > :reject" +msgid " A list of patterns which result in message being rejected.\n\n Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`.\n" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_keyword > :replace" +msgid " **Pattern**: a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`.\n\n **Replacement**: a string. Leaving the field empty is permitted.\n" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_mention > :actors" +msgid "A list of actors for which any post mentioning them will be dropped" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_object_age > :actions" +msgid "A list of actions to apply to the post. `:delist` removes the post from public timelines; `:strip_followers` removes followers from the ActivityPub recipient list ensuring they won't be delivered to home timelines; `:reject` rejects the message entirely" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_object_age > :threshold" +msgid "Required age (in seconds) of a post before actions are taken." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_rejectnonpublic > :allow_direct" +msgid "Whether to allow direct messages" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_rejectnonpublic > :allow_followersonly" +msgid "Whether to allow followers-only posts" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_simple > :accept" +msgid "List of instances to only accept activities from (except deletes) and the reason for doing so" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_simple > :avatar_removal" +msgid "List of instances to strip avatars from and the reason for doing so" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_simple > :banner_removal" +msgid "List of instances to strip banners from and the reason for doing so" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_simple > :federated_timeline_removal" +msgid "List of instances to remove from the Federated (aka The Whole Known Network) Timeline and the reason for doing so" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_simple > :followers_only" +msgid "Force posts from the given instances to be visible by followers only and the reason for doing so" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_simple > :media_nsfw" +msgid "List of instances to tag all media as NSFW (sensitive) from and the reason for doing so" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_simple > :media_removal" +msgid "List of instances to strip media attachments from and the reason for doing so" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_simple > :reject" +msgid "List of instances to reject activities from (except deletes) and the reason for doing so" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_simple > :reject_deletes" +msgid "List of instances to reject deletions from and the reason for doing so" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_simple > :report_removal" +msgid "List of instances to reject reports from and the reason for doing so" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_steal_emoji > :hosts" +msgid "List of hosts to steal emojis from" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_steal_emoji > :rejected_shortcodes" +msgid " A list of patterns or matches to reject shortcodes with.\n\n Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`.\n" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_steal_emoji > :size_limit" +msgid "File size limit (in bytes), checked before an emoji is saved to the disk" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_subchain > :match_actor" +msgid "Matches a series of regular expressions against the actor field" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_vocabulary > :accept" +msgid "A list of ActivityStreams terms to accept. If empty, all supported messages are accepted." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_vocabulary > :reject" +msgid "A list of ActivityStreams terms to reject. If empty, no messages are rejected." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:oauth2 > :clean_expired_tokens" +msgid "Enable a background job to clean expired OAuth tokens. Default: disabled." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:oauth2 > :issue_new_refresh_token" +msgid "Keeps old refresh token or generate new refresh token when to obtain an access token" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:oauth2 > :token_expires_in" +msgid "The lifetime in seconds of the access token" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:pools > :default" +msgid "Settings for default pool." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:pools > :default > :max_waiting" +msgid "Maximum number of requests waiting for other requests to finish. After this number is reached, the pool will start returning errrors when a new request is made" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:pools > :default > :recv_timeout" +msgid "Timeout for the pool while gun will wait for response" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:pools > :default > :size" +msgid "Maximum number of concurrent requests in the pool." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:pools > :federation" +msgid "Settings for federation pool." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:pools > :federation > :max_waiting" +msgid "Maximum number of requests waiting for other requests to finish. After this number is reached, the pool will start returning errrors when a new request is made" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:pools > :federation > :recv_timeout" +msgid "Timeout for the pool while gun will wait for response" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:pools > :federation > :size" +msgid "Maximum number of concurrent requests in the pool." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:pools > :media" +msgid "Settings for media pool." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:pools > :media > :max_waiting" +msgid "Maximum number of requests waiting for other requests to finish. After this number is reached, the pool will start returning errrors when a new request is made" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:pools > :media > :recv_timeout" +msgid "Timeout for the pool while gun will wait for response" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:pools > :media > :size" +msgid "Maximum number of concurrent requests in the pool." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:pools > :upload" +msgid "Settings for upload pool." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:pools > :upload > :max_waiting" +msgid "Maximum number of requests waiting for other requests to finish. After this number is reached, the pool will start returning errrors when a new request is made" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:pools > :upload > :recv_timeout" +msgid "Timeout for the pool while gun will wait for response" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:pools > :upload > :size" +msgid "Maximum number of concurrent requests in the pool." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:populate_hashtags_table > :fault_rate_allowance" +msgid "Max accepted rate of objects that failed in the migration. Any value from 0.0 which tolerates no errors to 1.0 which will enable the feature even if hashtags transfer failed for all records." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:populate_hashtags_table > :sleep_interval_ms" +msgid "Sleep interval between each chunk of processed records in order to decrease the load on the system (defaults to 0 and should be keep default on most instances)." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:rate_limit > :app_account_creation" +msgid "For registering user accounts from the same IP address" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:rate_limit > :authentication" +msgid "For authentication create / password check / user existence check requests" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:rate_limit > :relation_id_action" +msgid "For actions on relation with a specific user (follow, unfollow)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:rate_limit > :relations_actions" +msgid "For actions on relationships with all users (follow, unfollow)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:rate_limit > :search" +msgid "For the search requests (account & status search etc.)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:rate_limit > :status_id_action" +msgid "For fav / unfav or reblog / unreblog actions on the same status by the same user" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:rate_limit > :statuses_actions" +msgid "For create / delete / fav / unfav / reblog / unreblog actions on any statuses" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:rate_limit > :timeline" +msgid "For requests to timelines (each timeline has it's own limiter)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:restrict_unauthenticated > :activities" +msgid "Settings for statuses." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:restrict_unauthenticated > :activities > :local" +msgid "Disallow view local statuses." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:restrict_unauthenticated > :activities > :remote" +msgid "Disallow view remote statuses." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:restrict_unauthenticated > :profiles" +msgid "Settings for user profiles." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:restrict_unauthenticated > :profiles > :local" +msgid "Disallow view local user profiles." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:restrict_unauthenticated > :profiles > :remote" +msgid "Disallow view remote user profiles." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:restrict_unauthenticated > :timelines" +msgid "Settings for public and federated timelines." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:restrict_unauthenticated > :timelines > :federated" +msgid "Disallow view federated timeline." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:restrict_unauthenticated > :timelines > :local" +msgid "Disallow view public timeline." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:rich_media > :enabled" +msgid "Enables RichMedia parsing of URLs" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:rich_media > :failure_backoff" +msgid "Amount of milliseconds after request failure, during which the request will not be retried." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:rich_media > :ignore_hosts" +msgid "List of hosts which will be ignored by the metadata parser" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:rich_media > :ignore_tld" +msgid "List TLDs (top-level domains) which will ignore for parse metadata" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:rich_media > :parsers" +msgid "List of Rich Media parsers. Module names are shortened (removed leading `Pleroma.Web.RichMedia.Parsers.` part), but on adding custom module you need to use full name." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:rich_media > :ttl_setters" +msgid "List of rich media TTL setters. Module names are shortened (removed leading `Pleroma.Web.RichMedia.Parser.` part), but on adding custom module you need to use full name." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:shout > :enabled" +msgid "Enables the backend Shoutbox chat feature." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:shout > :limit" +msgid "Shout message character limit." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:static_fe > :enabled" +msgid "Enables the rendering of static HTML. Default: disabled." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:streamer > :overflow_workers" +msgid "Maximum number of workers created if pool is empty" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:streamer > :workers" +msgid "Number of workers to send notifications" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:uri_schemes > :valid_schemes" +msgid "List of the scheme part that is considered valid to be an URL" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:web_cache_ttl > :activity_pub" +msgid "Activity pub routes (except question activities). Default: `nil` (no expiration)." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:web_cache_ttl > :activity_pub_question" +msgid "Activity pub routes (question activities). Default: `30_000` (30 seconds)." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:welcome > :chat_message > :enabled" +msgid "Enables sending a chat message to newly registered users" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:welcome > :chat_message > :message" +msgid "A message that will be sent to newly registered users as a chat message" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:welcome > :chat_message > :sender_nickname" +msgid "The nickname of the local user that sends a welcome chat message" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:welcome > :direct_message > :enabled" +msgid "Enables sending a direct message to newly registered users" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:welcome > :direct_message > :message" +msgid "A message that will be sent to newly registered users" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:welcome > :direct_message > :sender_nickname" +msgid "The nickname of the local user that sends a welcome message" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:welcome > :email > :enabled" +msgid "Enables sending an email to newly registered users" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:welcome > :email > :html" +msgid "HTML content of the welcome email. EEX template with user and instance_name variables can be used." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:welcome > :email > :sender" +msgid "Email address and/or nickname that will be used to send the welcome email." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:welcome > :email > :subject" +msgid "Subject of the welcome email. EEX template with user and instance_name variables can be used." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:welcome > :email > :text" +msgid "Text content of the welcome email. EEX template with user and instance_name variables can be used." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:workers > :retries" +msgid "Max retry attempts for failed jobs, per `Oban` queue" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy" +msgid "Concurrent limits configuration for MediaProxyWarmingPolicy." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy > :max_running" +msgid "Max running concurrently jobs." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy > :max_waiting" +msgid "Max waiting jobs." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers" +msgid "Concurrent limits configuration for getting RichMedia for activities." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers > :max_running" +msgid "Max running concurrently jobs." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers > :max_waiting" +msgid "Max waiting jobs." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Oban > :crontab" +msgid "Settings for cron background jobs" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Oban > :log" +msgid "Logs verbose mode" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Oban > :queues" +msgid "Background jobs queues (keys: queues, values: max numbers of concurrent jobs)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Oban > :queues > :activity_expiration" +msgid "Activity expiration queue" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Oban > :queues > :attachments_cleanup" +msgid "Attachment deletion queue" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Oban > :queues > :background" +msgid "Background queue" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Oban > :queues > :backup" +msgid "Backup queue" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Oban > :queues > :federator_incoming" +msgid "Incoming federation queue" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Oban > :queues > :federator_outgoing" +msgid "Outgoing federation queue" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Oban > :queues > :mailer" +msgid "Email sender queue, see Pleroma.Emails.Mailer" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Oban > :queues > :scheduled_activities" +msgid "Scheduled activities queue, see Pleroma.ScheduledActivities" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Oban > :queues > :transmogrifier" +msgid "Transmogrifier queue" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Oban > :queues > :web_push" +msgid "Web push notifications queue" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Captcha > :enabled" +msgid "Whether the captcha should be shown on registration" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Captcha > :method" +msgid "The method/service to use for captcha" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Captcha > :seconds_valid" +msgid "The time in seconds for which the captcha is valid" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Captcha.Kocaptcha > :endpoint" +msgid "The kocaptcha endpoint to use" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > :adapter" +msgid "One of the mail adapters listed in [Swoosh documentation](https://hexdocs.pm/swoosh/Swoosh.html#module-adapters)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:auth" +msgid "SMTP AUTH enforcement mode" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:password" +msgid "SMTP AUTH password" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:port" +msgid "SMTP port" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:relay" +msgid "Hostname or IP address" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:retries" +msgid "SMTP temporary (4xx) error retries" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:ssl" +msgid "Use Implicit SSL/TLS. e.g. port 465" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:tls" +msgid "Explicit TLS (STARTTLS) enforcement mode" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:username" +msgid "SMTP AUTH username" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Emails.NewUsersDigestEmail > :enabled" +msgid "Enables new users admin digest email when `true`" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Emails.UserEmail > :logo" +msgid "A path to a custom logo. Set it to `nil` to use the default Pleroma logo." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Emails.UserEmail > :styling" +msgid "A map with color settings for email templates." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Formatter > :class" +msgid "Specify the class to be added to the generated link. Disable to clear." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Formatter > :extra" +msgid "Link URLs with rarely used schemes (magnet, ipfs, irc, etc.)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Formatter > :new_window" +msgid "Link URLs will open in a new window/tab." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Formatter > :rel" +msgid "Override the rel attribute. Disable to clear." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Formatter > :strip_prefix" +msgid "Strip the scheme prefix." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Formatter > :truncate" +msgid "Set to a number to truncate URLs longer than the number. Truncated URLs will end in `...`" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Formatter > :validate_tld" +msgid "Set to false to disable TLD validation for URLs/emails. Can be set to :no_scheme to validate TLDs only for URLs without a scheme (e.g `example.com` will be validated, but `http://example.loki` won't)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.ScheduledActivity > :daily_user_limit" +msgid "The number of scheduled activities a user is allowed to create in a single day. Default: 25." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.ScheduledActivity > :enabled" +msgid "Whether scheduled activities are sent to the job queue to be executed" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.ScheduledActivity > :total_user_limit" +msgid "The number of scheduled activities a user is allowed to create in total. Default: 300." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Upload > :base_url" +msgid "Base URL for the uploads. Required if you use a CDN or host attachments under a different domain." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Upload > :filename_display_max_length" +msgid "Set max length of a filename to display. 0 = no limit. Default: 30" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Upload > :filters" +msgid "List of filter modules for uploads. Module names are shortened (removed leading `Pleroma.Upload.Filter.` part), but on adding custom module you need to use full name." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Upload > :link_name" +msgid "If enabled, a name parameter will be added to the URL of the upload. For example `https://instance.tld/media/imagehash.png?name=realname.png`." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Upload > :proxy_remote" +msgid "Proxy requests to the remote uploader.\n\nUseful if media upload endpoint is not internet accessible.\n" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Upload > :uploader" +msgid "Module which will be used for uploads" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Upload.Filter.AnonymizeFilename > :text" +msgid "Text to replace filenames in links. If no setting, {random}.extension will be used. You can get the original filename extension by using {extension}, for example custom-file-name.{extension}." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Upload.Filter.Mogrify > :args" +msgid "List of actions for the mogrify command. It's possible to add self-written settings as string. For example `auto-orient, strip, {\"resize\", \"3840x1080>\"}` value will be parsed into valid list of the settings." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Uploaders.Local > :uploads" +msgid "Path where user's uploads will be saved" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Uploaders.S3 > :bucket" +msgid "S3 bucket" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Uploaders.S3 > :bucket_namespace" +msgid "S3 bucket namespace" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Uploaders.S3 > :streaming_enabled" +msgid "Enable streaming uploads, when enabled the file will be sent to the server in chunks as it's being read. This may be unsupported by some providers, try disabling this if you have upload problems." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Uploaders.S3 > :truncated_namespace" +msgid "If you use S3 compatible service such as Digital Ocean Spaces or CDN, set folder name or \"\" etc. For example, when using CDN to S3 virtual host format, set \"\". At this time, write CNAME to CDN in Upload base_url." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.User > :email_blacklist" +msgid "List of email domains users may not register with." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.User > :restricted_nicknames" +msgid "List of nicknames users may not register with." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.User.Backup > :limit_days" +msgid "Limit user to export not more often than once per N days" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.User.Backup > :purge_after_days" +msgid "Remove backup achives after N days" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Web.ApiSpec.CastAndValidate > :strict" +msgid "Enables strict input validation (useful in development, not recommended in production)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :headers" +msgid "HTTP headers of request" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :method" +msgid "HTTP method of request. Default: :purge" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :options" +msgid "Request options" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :script_path" +msgid "Path to executable script which will purge cached items." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :url_format" +msgid "Optional URL format preprocessing. Only required for Apache's htcacheclean." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Web.Metadata > :providers" +msgid "List of metadata providers to enable" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Web.Metadata > :unfurl_nsfw" +msgid "When enabled NSFW attachments will be shown in previews" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp > :enabled" +msgid "Enable/disable the plug. Default: disabled." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp > :headers" +msgid " A list of strings naming the HTTP headers to use when deriving the true client IP. Default: `[\"x-forwarded-for\"]`.\n" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp > :proxies" +msgid "A list of upstream proxy IP subnets in CIDR notation from which we will parse the content of `headers`. Defaults to `[]`. IPv4 entries without a bitmask will be assumed to be /32 and IPv6 /128." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp > :reserved" +msgid " A list of reserved IP subnets in CIDR notation which should be ignored if found in `headers`. Defaults to `[\"127.0.0.0/8\", \"::1/128\", \"fc00::/7\", \"10.0.0.0/8\", \"172.16.0.0/12\", \"192.168.0.0/16\"]`\n" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Web.Preload > :providers" +msgid "List of preload providers to enable" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :enabled" +msgid "Enables expired activities addition & deletion" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :min_lifetime" +msgid "Minimum lifetime for ephemeral activity (in seconds)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :auth" +msgid "Enables HTTP Basic Auth for app metrics endpoint." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :enabled" +msgid "[Pleroma extension] Enables app metrics endpoint." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :format" +msgid "App metrics endpoint output format." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :ip_whitelist" +msgid "Restrict access of app metrics endpoint to the specified IP addresses." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :path" +msgid "App metrics endpoint URI path." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :quack > :level" +msgid "Log level" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :quack > :meta" +msgid "Configure which metadata you want to report on" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :quack > :webhook_url" +msgid "Configure the Slack incoming webhook" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :web_push_encryption-:vapid_details > :private_key" +msgid "VAPID private key" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :web_push_encryption-:vapid_details > :public_key" +msgid "VAPID public key" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :web_push_encryption-:vapid_details > :subject" +msgid "A mailto link for the administrative contact. It's best if this email is not a personal email address, but rather a group email to the instance moderation team." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :cors_plug > :credentials" +msgid "Credentials" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :cors_plug > :expose" +msgid "Expose" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :cors_plug > :headers" +msgid "Headers" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :cors_plug > :max_age" +msgid "Max age" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :cors_plug > :methods" +msgid "Methods" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :esshd > :enabled" +msgid "Enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :esshd > :handler" +msgid "Handler" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :esshd > :password_authenticator" +msgid "Password authenticator" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :esshd > :port" +msgid "Port" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :esshd > :priv_dir" +msgid "Priv dir" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :ex_aws-:s3 > :access_key_id" +msgid "Access key" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :ex_aws-:s3 > :host" +msgid "Host" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :ex_aws-:s3 > :region" +msgid "Region" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :ex_aws-:s3 > :secret_access_key" +msgid "Secret access key" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :logger > :backends" +msgid "Backends" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :logger-:console > :format" +msgid "Format" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :logger-:console > :level" +msgid "Level" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :logger-:console > :metadata" +msgid "Metadata" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :logger-:ex_syslogger > :format" +msgid "Format" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :logger-:ex_syslogger > :ident" +msgid "Ident" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :logger-:ex_syslogger > :level" +msgid "Level" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :logger-:ex_syslogger > :metadata" +msgid "Metadata" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :mime > :types" +msgid "Types" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :mime > :types > application/activity+json" +msgid "\"application/activity+json\"" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :mime > :types > application/jrd+json" +msgid "\"application/jrd+json\"" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :mime > :types > application/ld+json" +msgid "\"application/ld+json\"" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :mime > :types > application/xml" +msgid "\"application/xml\"" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :mime > :types > application/xrd+xml" +msgid "\"application/xrd+xml\"" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma > :admin_token" +msgid "Admin token" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma > Pleroma.Web.Auth.Authenticator" +msgid "Pleroma.Web.Auth.Authenticator" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:activitypub > :blockers_visible" +msgid "Blockers visible" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:activitypub > :follow_handshake_timeout" +msgid "Follow handshake timeout" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:activitypub > :note_replies_output_limit" +msgid "Note replies output limit" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:activitypub > :outgoing_blocks" +msgid "Outgoing blocks" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:activitypub > :sign_object_fetches" +msgid "Sign object fetches" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:activitypub > :unfollow_blocked" +msgid "Unfollow blocked" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:assets > :default_mascot" +msgid "Default mascot" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:assets > :default_user_avatar" +msgid "Default user avatar" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:assets > :mascots" +msgid "Mascots" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:auth > :auth_template" +msgid "Auth template" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:auth > :enforce_oauth_admin_scope_usage" +msgid "Enforce OAuth admin scope usage" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:auth > :oauth_consumer_strategies" +msgid "OAuth consumer strategies" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:auth > :oauth_consumer_template" +msgid "OAuth consumer template" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:connections_pool > :connect_timeout" +msgid "Connect timeout" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:connections_pool > :connection_acquisition_retries" +msgid "Connection acquisition retries" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:connections_pool > :connection_acquisition_wait" +msgid "Connection acquisition wait" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:connections_pool > :max_connections" +msgid "Max connections" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:connections_pool > :reclaim_multiplier" +msgid "Reclaim multiplier" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:email_notifications > :digest" +msgid "Digest" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:email_notifications > :digest > :active" +msgid "Enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:email_notifications > :digest > :inactivity_threshold" +msgid "Inactivity threshold" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:email_notifications > :digest > :interval" +msgid "Interval" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:email_notifications > :digest > :schedule" +msgid "Schedule" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:emoji > :default_manifest" +msgid "Default manifest" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:emoji > :groups" +msgid "Groups" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:emoji > :pack_extensions" +msgid "Pack extensions" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:emoji > :shared_pack_cache_seconds_per_file" +msgid "Shared pack cache s/file" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:emoji > :shortcode_globs" +msgid "Shortcode globs" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:features > :improved_hashtag_timeline" +msgid "Improved hashtag timeline" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:feed > :post_title" +msgid "Post title" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:feed > :post_title > :max_length" +msgid "Max length" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:feed > :post_title > :omission" +msgid "Omission" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe" +msgid "Pleroma FE" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :alwaysShowSubjectInput" +msgid "Always show subject input" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :background" +msgid "Background" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :collapseMessageWithSubject" +msgid "Collapse message with subject" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :greentext" +msgid "Greentext" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hideFilteredStatuses" +msgid "Hide Filtered Statuses" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hideMutedPosts" +msgid "Hide Muted Posts" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hidePostStats" +msgid "Hide post stats" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hideSitename" +msgid "Hide Sitename" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hideUserStats" +msgid "Hide user stats" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :logo" +msgid "Logo" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :logoMargin" +msgid "Logo margin" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :logoMask" +msgid "Logo mask" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :minimalScopesMode" +msgid "Minimal scopes mode" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :nsfwCensorImage" +msgid "NSFW Censor Image" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :postContentType" +msgid "Post Content Type" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :redirectRootLogin" +msgid "Redirect root login" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :redirectRootNoLogin" +msgid "Redirect root no login" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :scopeCopy" +msgid "Scope copy" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :showFeaturesPanel" +msgid "Show instance features panel" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :showInstanceSpecificPanel" +msgid "Show instance specific panel" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :sidebarRight" +msgid "Sidebar on Right" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :subjectLineBehavior" +msgid "Subject line behavior" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :theme" +msgid "Theme" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontends > :admin" +msgid "Admin" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontends > :admin > name" +msgid "Name" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontends > :admin > ref" +msgid "Reference" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontends > :available" +msgid "Available" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontends > :available > build_dir" +msgid "Build directory" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontends > :available > build_url" +msgid "Build URL" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontends > :available > custom-http-headers" +msgid "Custom HTTP headers" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontends > :available > git" +msgid "Git Repository URL" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontends > :available > name" +msgid "Name" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontends > :available > ref" +msgid "Reference" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontends > :primary" +msgid "Primary" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontends > :primary > name" +msgid "Name" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontends > :primary > ref" +msgid "Reference" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:gopher > :dstport" +msgid "Dstport" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:gopher > :enabled" +msgid "Enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:gopher > :ip" +msgid "IP" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:gopher > :port" +msgid "Port" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:hackney_pools > :federation" +msgid "Federation" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:hackney_pools > :federation > :max_connections" +msgid "Max connections" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:hackney_pools > :federation > :timeout" +msgid "Timeout" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:hackney_pools > :media" +msgid "Media" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:hackney_pools > :media > :max_connections" +msgid "Max connections" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:hackney_pools > :media > :timeout" +msgid "Timeout" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:hackney_pools > :upload" +msgid "Upload" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:hackney_pools > :upload > :max_connections" +msgid "Max connections" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:hackney_pools > :upload > :timeout" +msgid "Timeout" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:http > :adapter" +msgid "Adapter" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:http > :adapter > :ssl_options" +msgid "SSL Options" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:http > :adapter > :ssl_options > :versions" +msgid "Versions" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:http > :proxy_url" +msgid "Proxy URL" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:http > :send_user_agent" +msgid "Send user agent" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:http > :user_agent" +msgid "User agent" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:http_security > :ct_max_age" +msgid "CT max age" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:http_security > :enabled" +msgid "Enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:http_security > :referrer_policy" +msgid "Referrer policy" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:http_security > :report_uri" +msgid "Report URI" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:http_security > :sts" +msgid "STS" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:http_security > :sts_max_age" +msgid "STS max age" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :account_activation_required" +msgid "Account activation required" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :account_approval_required" +msgid "Account approval required" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :account_field_name_length" +msgid "Account field name length" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :account_field_value_length" +msgid "Account field value length" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :allow_relay" +msgid "Allow relay" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :allowed_post_formats" +msgid "Allowed post formats" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :attachment_links" +msgid "Attachment links" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :autofollowed_nicknames" +msgid "Autofollowed nicknames" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :autofollowing_nicknames" +msgid "Autofollowing nicknames" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :avatar_upload_limit" +msgid "Avatar upload limit" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :background_upload_limit" +msgid "Background upload limit" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :banner_upload_limit" +msgid "Banner upload limit" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :birthday_min_age" +msgid "Birthday min age" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :birthday_required" +msgid "Birthday required" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :cleanup_attachments" +msgid "Cleanup attachments" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :description" +msgid "Description" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :email" +msgid "Admin Email Address" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :extended_nickname_format" +msgid "Extended nickname format" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :external_user_synchronization" +msgid "External user synchronization" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :federating" +msgid "Federating" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :federation_incoming_replies_max_depth" +msgid "Fed. incoming replies max depth" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :federation_reachability_timeout_days" +msgid "Fed. reachability timeout days" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :healthcheck" +msgid "Healthcheck" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :instance_thumbnail" +msgid "Instance thumbnail" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :invites_enabled" +msgid "Invites enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :limit" +msgid "Limit" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :limit_to_local_content" +msgid "Limit to local content" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :max_account_fields" +msgid "Max account fields" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :max_endorsed_users" +msgid "Max endorsed users" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :max_media_attachments" +msgid "Max media attachments" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :max_pinned_statuses" +msgid "Max pinned statuses" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :max_remote_account_fields" +msgid "Max remote account fields" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :max_report_comment_size" +msgid "Max report comment size" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication" +msgid "Multi factor authentication" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :backup_codes" +msgid "Backup codes" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :backup_codes > :length" +msgid "Length" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :backup_codes > :number" +msgid "Number" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :totp" +msgid "TOTP settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :totp > :digits" +msgid "Digits" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :totp > :period" +msgid "Period" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :name" +msgid "Name" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :notify_email" +msgid "Sender Email Address" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :poll_limits" +msgid "Poll limits" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :poll_limits > :max_expiration" +msgid "Max expiration" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :poll_limits > :max_option_chars" +msgid "Max option chars" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :poll_limits > :max_options" +msgid "Max options" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :poll_limits > :min_expiration" +msgid "Min expiration" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :privileged_staff" +msgid "Privileged staff" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :profile_directory" +msgid "Profile directory" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :public" +msgid "Public" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :quarantined_instances" +msgid "Quarantined instances" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :registration_reason_length" +msgid "Registration reason length" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :registrations_open" +msgid "Registrations open" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :remote_limit" +msgid "Remote limit" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :remote_post_retention_days" +msgid "Remote post retention days" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :safe_dm_mentions" +msgid "Safe DM mentions" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :show_reactions" +msgid "Show reactions" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :skip_thread_containment" +msgid "Skip thread containment" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :static_dir" +msgid "Static dir" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :upload_limit" +msgid "Upload limit" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :user_bio_length" +msgid "User bio length" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :user_name_length" +msgid "User name length" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instances_favicons > :enabled" +msgid "Enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:ldap > :base" +msgid "Base" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:ldap > :enabled" +msgid "Enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:ldap > :host" +msgid "Host" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:ldap > :port" +msgid "Port" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:ldap > :ssl" +msgid "SSL" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:ldap > :sslopts" +msgid "SSL options" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:ldap > :sslopts > :cacertfile" +msgid "Cacertfile" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:ldap > :sslopts > :verify" +msgid "Verify" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:ldap > :tls" +msgid "TLS" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:ldap > :tlsopts" +msgid "TLS options" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:ldap > :tlsopts > :cacertfile" +msgid "Cacertfile" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:ldap > :tlsopts > :verify" +msgid "Verify" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:ldap > :uid" +msgid "UID" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:majic_pool > :size" +msgid "Size" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:manifest > :background_color" +msgid "Background color" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:manifest > :icons" +msgid "Icons" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:manifest > :theme_color" +msgid "Theme color" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:markup > :allow_fonts" +msgid "Allow fonts" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:markup > :allow_headings" +msgid "Allow headings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:markup > :allow_inline_images" +msgid "Allow inline images" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:markup > :allow_tables" +msgid "Allow tables" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:markup > :scrub_policy" +msgid "Scrub policy" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:media_preview_proxy > :enabled" +msgid "Enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:media_preview_proxy > :image_quality" +msgid "Image quality" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:media_preview_proxy > :min_content_length" +msgid "Min content length" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:media_preview_proxy > :thumbnail_max_height" +msgid "Thumbnail max height" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:media_preview_proxy > :thumbnail_max_width" +msgid "Thumbnail max width" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:media_proxy > :base_url" +msgid "Base URL" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:media_proxy > :enabled" +msgid "Enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:media_proxy > :invalidation" +msgid "Invalidation" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:media_proxy > :invalidation > :enabled" +msgid "Enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:media_proxy > :invalidation > :provider" +msgid "Provider" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:media_proxy > :proxy_opts" +msgid "Advanced MediaProxy Options" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:media_proxy > :proxy_opts > :max_body_length" +msgid "Max body length" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:media_proxy > :proxy_opts > :max_read_duration" +msgid "Max read duration" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:media_proxy > :proxy_opts > :redirect_on_failure" +msgid "Redirect on failure" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:media_proxy > :whitelist" +msgid "Whitelist" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:modules > :runtime_dir" +msgid "Runtime dir" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf > :policies" +msgid "Policies" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf > :transparency" +msgid "MRF transparency" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf > :transparency_exclusions" +msgid "MRF transparency exclusions" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_activity_expiration > :days" +msgid "Days" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_follow_bot > :follower_nickname" +msgid "Follower nickname" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_hashtag > :federated_timeline_removal" +msgid "Federated timeline removal" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_hashtag > :reject" +msgid "Reject" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_hashtag > :sensitive" +msgid "Sensitive" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_hellthread > :delist_threshold" +msgid "Delist threshold" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_hellthread > :reject_threshold" +msgid "Reject threshold" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_keyword > :federated_timeline_removal" +msgid "Federated timeline removal" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_keyword > :reject" +msgid "Reject" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_keyword > :replace" +msgid "Replace" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_mention > :actors" +msgid "Actors" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_normalize_markup > :scrub_policy" +msgid "Scrub policy" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_object_age > :actions" +msgid "Actions" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_object_age > :threshold" +msgid "Threshold" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_rejectnonpublic > :allow_direct" +msgid "Allow direct" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_rejectnonpublic > :allow_followersonly" +msgid "Allow followers-only" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_simple > :accept" +msgid "Accept" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_simple > :avatar_removal" +msgid "Avatar removal" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_simple > :banner_removal" +msgid "Banner removal" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_simple > :federated_timeline_removal" +msgid "Federated timeline removal" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_simple > :followers_only" +msgid "Followers only" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_simple > :media_nsfw" +msgid "Media NSFW" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_simple > :media_removal" +msgid "Media removal" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_simple > :reject" +msgid "Reject" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_simple > :reject_deletes" +msgid "Reject deletes" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_simple > :report_removal" +msgid "Report removal" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_steal_emoji > :hosts" +msgid "Hosts" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_steal_emoji > :rejected_shortcodes" +msgid "Rejected shortcodes" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_steal_emoji > :size_limit" +msgid "Size limit" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_subchain > :match_actor" +msgid "Match actor" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_vocabulary > :accept" +msgid "Accept" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_vocabulary > :reject" +msgid "Reject" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:oauth2 > :clean_expired_tokens" +msgid "Clean expired tokens" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:oauth2 > :issue_new_refresh_token" +msgid "Issue new refresh token" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:oauth2 > :token_expires_in" +msgid "Token expires in" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:pools > :default" +msgid "Default" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:pools > :default > :max_waiting" +msgid "Max waiting" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:pools > :default > :recv_timeout" +msgid "Recv timeout" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:pools > :default > :size" +msgid "Size" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:pools > :federation" +msgid "Federation" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:pools > :federation > :max_waiting" +msgid "Max waiting" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:pools > :federation > :recv_timeout" +msgid "Recv timeout" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:pools > :federation > :size" +msgid "Size" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:pools > :media" +msgid "Media" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:pools > :media > :max_waiting" +msgid "Max waiting" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:pools > :media > :recv_timeout" +msgid "Recv timeout" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:pools > :media > :size" +msgid "Size" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:pools > :upload" +msgid "Upload" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:pools > :upload > :max_waiting" +msgid "Max waiting" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:pools > :upload > :recv_timeout" +msgid "Recv timeout" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:pools > :upload > :size" +msgid "Size" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:populate_hashtags_table > :fault_rate_allowance" +msgid "Fault rate allowance" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:populate_hashtags_table > :sleep_interval_ms" +msgid "Sleep interval ms" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:rate_limit > :app_account_creation" +msgid "App account creation" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:rate_limit > :authentication" +msgid "Authentication" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:rate_limit > :relation_id_action" +msgid "Relation ID action" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:rate_limit > :relations_actions" +msgid "Relations actions" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:rate_limit > :search" +msgid "Search" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:rate_limit > :status_id_action" +msgid "Status ID action" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:rate_limit > :statuses_actions" +msgid "Statuses actions" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:rate_limit > :timeline" +msgid "Timeline" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:restrict_unauthenticated > :activities" +msgid "Activities" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:restrict_unauthenticated > :activities > :local" +msgid "Local" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:restrict_unauthenticated > :activities > :remote" +msgid "Remote" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:restrict_unauthenticated > :profiles" +msgid "Profiles" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:restrict_unauthenticated > :profiles > :local" +msgid "Local" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:restrict_unauthenticated > :profiles > :remote" +msgid "Remote" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:restrict_unauthenticated > :timelines" +msgid "Timelines" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:restrict_unauthenticated > :timelines > :federated" +msgid "Federated" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:restrict_unauthenticated > :timelines > :local" +msgid "Local" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:rich_media > :enabled" +msgid "Enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:rich_media > :failure_backoff" +msgid "Failure backoff" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:rich_media > :ignore_hosts" +msgid "Ignore hosts" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:rich_media > :ignore_tld" +msgid "Ignore TLD" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:rich_media > :parsers" +msgid "Parsers" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:rich_media > :ttl_setters" +msgid "TTL setters" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:shout > :enabled" +msgid "Enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:shout > :limit" +msgid "Limit" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:static_fe > :enabled" +msgid "Enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:streamer > :overflow_workers" +msgid "Overflow workers" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:streamer > :workers" +msgid "Workers" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:uri_schemes > :valid_schemes" +msgid "Valid schemes" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:user > :deny_follow_blocked" +msgid "Deny follow blocked" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:web_cache_ttl > :activity_pub" +msgid "Activity pub" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:web_cache_ttl > :activity_pub_question" +msgid "Activity pub question" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:welcome > :chat_message" +msgid "Chat message" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:welcome > :chat_message > :enabled" +msgid "Enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:welcome > :chat_message > :message" +msgid "Message" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:welcome > :chat_message > :sender_nickname" +msgid "Sender nickname" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:welcome > :direct_message" +msgid "Direct message" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:welcome > :direct_message > :enabled" +msgid "Enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:welcome > :direct_message > :message" +msgid "Message" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:welcome > :direct_message > :sender_nickname" +msgid "Sender nickname" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:welcome > :email" +msgid "Email" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:welcome > :email > :enabled" +msgid "Enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:welcome > :email > :html" +msgid "Html" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:welcome > :email > :sender" +msgid "Sender" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:welcome > :email > :subject" +msgid "Subject" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:welcome > :email > :text" +msgid "Text" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:workers > :retries" +msgid "Retries" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy" +msgid "Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy > :max_running" +msgid "Max running" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy > :max_waiting" +msgid "Max waiting" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers" +msgid "Pleroma.Web.RichMedia.Helpers" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers > :max_running" +msgid "Max running" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers > :max_waiting" +msgid "Max waiting" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Oban > :crontab" +msgid "Crontab" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Oban > :log" +msgid "Log" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Oban > :queues" +msgid "Queues" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Oban > :queues > :activity_expiration" +msgid "Activity expiration" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Oban > :queues > :attachments_cleanup" +msgid "Attachments cleanup" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Oban > :queues > :background" +msgid "Background" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Oban > :queues > :backup" +msgid "Backup" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Oban > :queues > :federator_incoming" +msgid "Federator incoming" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Oban > :queues > :federator_outgoing" +msgid "Federator outgoing" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Oban > :queues > :mailer" +msgid "Mailer" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Oban > :queues > :scheduled_activities" +msgid "Scheduled activities" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Oban > :queues > :transmogrifier" +msgid "Transmogrifier" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Oban > :queues > :web_push" +msgid "Web push" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Captcha > :enabled" +msgid "Enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Captcha > :method" +msgid "Method" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Captcha > :seconds_valid" +msgid "Seconds valid" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Captcha.Kocaptcha > :endpoint" +msgid "Endpoint" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > :adapter" +msgid "Adapter" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > :enabled" +msgid "Mailer Enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.AmazonSES-:access_key" +msgid "AWS Access Key" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.AmazonSES-:region" +msgid "AWS Region" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.AmazonSES-:secret" +msgid "AWS Secret Key" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Dyn-:api_key" +msgid "Dyn API Key" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Gmail-:access_token" +msgid "GMail API Access Token" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailgun-:api_key" +msgid "Mailgun API Key" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailgun-:domain" +msgid "Domain" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailjet-:api_key" +msgid "MailJet Public API Key" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailjet-:secret" +msgid "MailJet Private API Key" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mandrill-:api_key" +msgid "Mandrill API Key" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Postmark-:api_key" +msgid "Postmark API Key" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:auth" +msgid "AUTH Mode" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:password" +msgid "Password" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:port" +msgid "Port" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:relay" +msgid "Relay" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:retries" +msgid "Retries" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:ssl" +msgid "Use SSL" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:tls" +msgid "STARTTLS Mode" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:username" +msgid "Username" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendgrid-:api_key" +msgid "SendGrid API Key" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendmail-:cmd_args" +msgid "Cmd args" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendmail-:cmd_path" +msgid "Cmd path" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendmail-:qmail" +msgid "Qmail compat mode" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SocketLabs-:api_key" +msgid "SocketLabs API Key" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SocketLabs-:server_id" +msgid "Server ID" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SparkPost-:api_key" +msgid "SparkPost API key" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SparkPost-:endpoint" +msgid "Endpoint" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.NewUsersDigestEmail > :enabled" +msgid "Enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :logo" +msgid "Logo" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling" +msgid "Styling" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :background_color" +msgid "Background color" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :content_background_color" +msgid "Content background color" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :header_color" +msgid "Header color" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :link_color" +msgid "Link color" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :text_color" +msgid "Text color" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :text_muted_color" +msgid "Text muted color" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Formatter > :class" +msgid "Class" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Formatter > :extra" +msgid "Extra" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Formatter > :new_window" +msgid "New window" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Formatter > :rel" +msgid "Rel" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Formatter > :strip_prefix" +msgid "Strip prefix" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Formatter > :truncate" +msgid "Truncate" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Formatter > :validate_tld" +msgid "Validate tld" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.ScheduledActivity > :daily_user_limit" +msgid "Daily user limit" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.ScheduledActivity > :enabled" +msgid "Enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.ScheduledActivity > :total_user_limit" +msgid "Total user limit" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Upload > :base_url" +msgid "Base URL" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Upload > :filename_display_max_length" +msgid "Filename display max length" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Upload > :filters" +msgid "Filters" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Upload > :link_name" +msgid "Link name" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Upload > :proxy_remote" +msgid "Proxy remote" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Upload > :uploader" +msgid "Uploader" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Upload.Filter.AnonymizeFilename > :text" +msgid "Text" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Upload.Filter.Mogrify > :args" +msgid "Args" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Uploaders.Local > :uploads" +msgid "Uploads" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Uploaders.S3 > :bucket" +msgid "Bucket" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Uploaders.S3 > :bucket_namespace" +msgid "Bucket namespace" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Uploaders.S3 > :streaming_enabled" +msgid "Streaming enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Uploaders.S3 > :truncated_namespace" +msgid "Truncated namespace" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.User > :email_blacklist" +msgid "Email blacklist" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.User > :restricted_nicknames" +msgid "Restricted nicknames" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.User.Backup > :limit_days" +msgid "Limit days" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.User.Backup > :purge_after_days" +msgid "Purge after days" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Web.ApiSpec.CastAndValidate > :strict" +msgid "Strict" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :headers" +msgid "Headers" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :method" +msgid "Method" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :options" +msgid "Options" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :options > :params" +msgid "Params" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :script_path" +msgid "Script path" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :url_format" +msgid "URL Format" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Web.Metadata > :providers" +msgid "Providers" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Web.Metadata > :unfurl_nsfw" +msgid "Unfurl NSFW" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp > :enabled" +msgid "Enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp > :headers" +msgid "Headers" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp > :proxies" +msgid "Proxies" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp > :reserved" +msgid "Reserved" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Web.Preload > :providers" +msgid "Providers" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :enabled" +msgid "Enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :min_lifetime" +msgid "Min lifetime" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :auth" +msgid "Auth" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :enabled" +msgid "Enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :format" +msgid "Format" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :ip_whitelist" +msgid "IP Whitelist" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :path" +msgid "Path" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :quack > :level" +msgid "Level" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :quack > :meta" +msgid "Meta" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :quack > :webhook_url" +msgid "Webhook URL" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :web_push_encryption-:vapid_details > :private_key" +msgid "Private key" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :web_push_encryption-:vapid_details > :public_key" +msgid "Public key" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :web_push_encryption-:vapid_details > :subject" +msgid "Subject" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:activitypub > :authorized_fetch_mode" +msgid "Require HTTP signatures for AP fetches" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :short_description" +msgid "Shorter version of instance description. It can be seen on `/api/v1/instance`" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:activitypub > :authorized_fetch_mode" +msgid "Authorized fetch mode" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :short_description" +msgid "Short description" +msgstr "" diff --git a/priv/gettext/default.pot b/priv/gettext/default.pot new file mode 100644 index 000000000..10a62d2a8 --- /dev/null +++ b/priv/gettext/default.pot @@ -0,0 +1,185 @@ +## This file is a PO Template file. +## +## "msgid"s here are often extracted from source code. +## Add new translations manually only if they're dynamic +## translations that can't be statically extracted. +## +## Run "mix gettext.extract" to bring this file up to +## date. Leave "msgstr"s empty as changing them here as no +## effect: edit them in PO (.po) files instead. +msgid "" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:122 +msgid "%{name} - %{count} is not a multiple of %{multiple}." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:131 +msgid "%{name} - %{value} is larger than exclusive maximum %{max}." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:140 +msgid "%{name} - %{value} is larger than inclusive maximum %{max}." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:149 +msgid "%{name} - %{value} is smaller than exclusive minimum %{min}." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:158 +msgid "%{name} - %{value} is smaller than inclusive minimum %{min}." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:102 +msgid "%{name} - Array items must be unique." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:114 +msgid "%{name} - Array length %{length} is larger than maxItems: %{}." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:106 +msgid "%{name} - Array length %{length} is smaller than minItems: %{min}." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:166 +msgid "%{name} - Invalid %{type}. Got: %{value}." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:174 +msgid "%{name} - Invalid format. Expected %{format}." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:51 +msgid "%{name} - Invalid schema.type. Got: %{type}." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:178 +msgid "%{name} - Invalid value for enum." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:95 +msgid "%{name} - String length is larger than maxLength: %{length}." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:88 +msgid "%{name} - String length is smaller than minLength: %{length}." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:63 +msgid "%{name} - null value where %{type} expected." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:60 +msgid "%{name} - null value." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:182 +msgid "Failed to cast to any schema in %{polymorphic_type}" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:71 +msgid "Failed to cast value as %{invalid_schema}. Value must be castable using `allOf` schemas listed." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:84 +msgid "Failed to cast value to one of: %{failed_schemas}." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:78 +msgid "Failed to cast value using any of: %{failed_schemas}." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:212 +msgid "Invalid value for header: %{name}." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:204 +msgid "Missing field: %{name}." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:208 +msgid "Missing header: %{name}." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:196 +msgid "No value provided for required discriminator `%{field}`." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:216 +msgid "Object property count %{property_count} is greater than maxProperties: %{max_properties}." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:224 +msgid "Object property count %{property_count} is less than minProperties: %{min_properties}" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/static_fe/static_fe/error.html.eex:2 +msgid "Oops" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:188 +msgid "Unexpected field: %{name}." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:200 +msgid "Unknown schema: %{name}." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:192 +msgid "Value used as discriminator for `%{field}` matches no schemas." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/embed/show.html.eex:43 +#: lib/pleroma/web/templates/static_fe/static_fe/_notice.html.eex:37 +msgid "announces" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/embed/show.html.eex:44 +#: lib/pleroma/web/templates/static_fe/static_fe/_notice.html.eex:38 +msgid "likes" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/embed/show.html.eex:42 +#: lib/pleroma/web/templates/static_fe/static_fe/_notice.html.eex:36 +msgid "replies" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/embed/show.html.eex:27 +#: lib/pleroma/web/templates/static_fe/static_fe/_notice.html.eex:22 +msgid "sensitive media" +msgstr "" diff --git a/priv/gettext/en_test/LC_MESSAGES/default.po b/priv/gettext/en_test/LC_MESSAGES/default.po new file mode 100644 index 000000000..63db74608 --- /dev/null +++ b/priv/gettext/en_test/LC_MESSAGES/default.po @@ -0,0 +1,186 @@ +## "msgid"s in this file come from POT (.pot) files. +## +## Do not add, change, or remove "msgid"s manually here as +## they're tied to the ones in the corresponding POT file +## (with the same domain). +## +## Use "mix gettext.extract --merge" or "mix gettext.merge" +## to merge POT files into PO files. +msgid "" +msgstr "" +"Language: en_test\n" +"Plural-Forms: nplurals=2\n" + +#, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:122 +msgid "%{name} - %{count} is not a multiple of %{multiple}." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:131 +msgid "%{name} - %{value} is larger than exclusive maximum %{max}." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:140 +msgid "%{name} - %{value} is larger than inclusive maximum %{max}." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:149 +msgid "%{name} - %{value} is smaller than exclusive minimum %{min}." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:158 +msgid "%{name} - %{value} is smaller than inclusive minimum %{min}." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:102 +msgid "%{name} - Array items must be unique." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:114 +msgid "%{name} - Array length %{length} is larger than maxItems: %{}." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:106 +msgid "%{name} - Array length %{length} is smaller than minItems: %{min}." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:166 +msgid "%{name} - Invalid %{type}. Got: %{value}." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:174 +msgid "%{name} - Invalid format. Expected %{format}." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:51 +msgid "%{name} - Invalid schema.type. Got: %{type}." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:178 +msgid "%{name} - Invalid value for enum." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:95 +msgid "%{name} - String length is larger than maxLength: %{length}." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:88 +msgid "%{name} - String length is smaller than minLength: %{length}." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:63 +msgid "%{name} - null value where %{type} expected." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:60 +msgid "%{name} - null value." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:182 +msgid "Failed to cast to any schema in %{polymorphic_type}" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:71 +msgid "Failed to cast value as %{invalid_schema}. Value must be castable using `allOf` schemas listed." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:84 +msgid "Failed to cast value to one of: %{failed_schemas}." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:78 +msgid "Failed to cast value using any of: %{failed_schemas}." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:212 +msgid "Invalid value for header: %{name}." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:204 +msgid "Missing field: %{name}." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:208 +msgid "Missing header: %{name}." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:196 +msgid "No value provided for required discriminator `%{field}`." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:216 +msgid "Object property count %{property_count} is greater than maxProperties: %{max_properties}." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:224 +msgid "Object property count %{property_count} is less than minProperties: %{min_properties}" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/static_fe/static_fe/error.html.eex:2 +msgid "Oops" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:188 +msgid "Unexpected field: %{name}." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:200 +msgid "Unknown schema: %{name}." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/api_spec/render_error.ex:192 +msgid "Value used as discriminator for `%{field}` matches no schemas." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/embed/show.html.eex:43 +#: lib/pleroma/web/templates/static_fe/static_fe/_notice.html.eex:37 +msgid "announces" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/embed/show.html.eex:44 +#: lib/pleroma/web/templates/static_fe/static_fe/_notice.html.eex:38 +msgid "likes" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/embed/show.html.eex:42 +#: lib/pleroma/web/templates/static_fe/static_fe/_notice.html.eex:36 +msgid "replies" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/embed/show.html.eex:27 +#: lib/pleroma/web/templates/static_fe/static_fe/_notice.html.eex:22 +msgid "sensitive media" +msgstr "" diff --git a/priv/gettext/en_test/LC_MESSAGES/errors.po b/priv/gettext/en_test/LC_MESSAGES/errors.po new file mode 100644 index 000000000..a40de7f8b --- /dev/null +++ b/priv/gettext/en_test/LC_MESSAGES/errors.po @@ -0,0 +1,557 @@ +## "msgid"s in this file come from POT (.pot) files. +## +## Do not add, change, or remove "msgid"s manually here as +## they're tied to the ones in the corresponding POT file +## (with the same domain). +## +## Use "mix gettext.extract --merge" or "mix gettext.merge" +## to merge POT files into PO files. +msgid "" +msgstr "" +"Language: en_test\n" +"Plural-Forms: nplurals=2\n" + +msgid "can't be blank" +msgstr "" + +msgid "has already been taken" +msgstr "" + +msgid "is invalid" +msgstr "" + +msgid "has invalid format" +msgstr "" + +msgid "has an invalid entry" +msgstr "" + +msgid "is reserved" +msgstr "" + +msgid "does not match confirmation" +msgstr "" + +msgid "is still associated with this entry" +msgstr "" + +msgid "are still associated with this entry" +msgstr "" + +msgid "should be %{count} character(s)" +msgid_plural "should be %{count} character(s)" +msgstr[0] "" +msgstr[1] "" + +msgid "should have %{count} item(s)" +msgid_plural "should have %{count} item(s)" +msgstr[0] "" +msgstr[1] "" + +msgid "should be at least %{count} character(s)" +msgid_plural "should be at least %{count} character(s)" +msgstr[0] "" +msgstr[1] "" + +msgid "should have at least %{count} item(s)" +msgid_plural "should have at least %{count} item(s)" +msgstr[0] "" +msgstr[1] "" + +msgid "should be at most %{count} character(s)" +msgid_plural "should be at most %{count} character(s)" +msgstr[0] "" +msgstr[1] "" + +msgid "should have at most %{count} item(s)" +msgid_plural "should have at most %{count} item(s)" +msgstr[0] "" +msgstr[1] "" + +msgid "must be less than %{number}" +msgstr "" + +msgid "must be greater than %{number}" +msgstr "" + +msgid "must be less than or equal to %{number}" +msgstr "" + +msgid "must be greater than or equal to %{number}" +msgstr "" + +msgid "must be equal to %{number}" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/common_api.ex:523 +msgid "Account not found" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/common_api.ex:316 +msgid "Already voted" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/o_auth/o_auth_controller.ex:402 +msgid "Bad request" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/controller_helper.ex:97 +#: lib/pleroma/web/controller_helper.ex:103 +msgid "Can't display this activity" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:324 +msgid "Can't find user" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/pleroma_api/controllers/account_controller.ex:80 +msgid "Can't get favorites" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/common_api/utils.ex:482 +msgid "Cannot post an empty status without attachments" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/common_api/utils.ex:441 +msgid "Comment must be up to %{max_size} characters" +msgstr "" + +#, elixir-format +#: lib/pleroma/config_db.ex:200 +msgid "Config with params %{params} not found" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/common_api.ex:167 lib/pleroma/web/common_api.ex:171 +msgid "Could not delete" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/common_api.ex:217 +msgid "Could not favorite" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/common_api.ex:254 +msgid "Could not unfavorite" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/common_api.ex:202 +msgid "Could not unrepeat" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/common_api.ex:530 lib/pleroma/web/common_api.ex:539 +msgid "Could not update state" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex:205 +msgid "Error." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/twitter_api/twitter_api.ex:99 +msgid "Invalid CAPTCHA" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:144 +#: lib/pleroma/web/o_auth/o_auth_controller.ex:631 +msgid "Invalid credentials" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/plugs/ensure_authenticated_plug.ex:42 +msgid "Invalid credentials." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/common_api.ex:337 +msgid "Invalid indices" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/admin_api/controllers/fallback_controller.ex:29 +msgid "Invalid parameters" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/common_api/utils.ex:349 +msgid "Invalid password." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:254 +msgid "Invalid request" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/twitter_api/twitter_api.ex:102 +msgid "Kocaptcha service unavailable" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:140 +msgid "Missing parameters" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/common_api/utils.ex:477 +msgid "No such conversation" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:171 +#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:197 lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:239 +msgid "No such permission_group" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:504 +#: lib/pleroma/web/admin_api/controllers/fallback_controller.ex:11 lib/pleroma/web/feed/tag_controller.ex:16 +#: lib/pleroma/web/feed/user_controller.ex:69 lib/pleroma/web/o_status/o_status_controller.ex:132 +#: lib/pleroma/web/plugs/uploaded_media.ex:84 +msgid "Not found" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/common_api.ex:308 +msgid "Poll's author can't vote" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:20 +#: lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:39 lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:51 +#: lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:52 lib/pleroma/web/mastodon_api/controllers/status_controller.ex:326 +#: lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex:71 +msgid "Record not found" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/admin_api/controllers/fallback_controller.ex:35 +#: lib/pleroma/web/feed/user_controller.ex:78 lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:42 +#: lib/pleroma/web/o_status/o_status_controller.ex:138 +msgid "Something went wrong" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/common_api/activity_draft.ex:143 +msgid "The message visibility must be direct" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/common_api/utils.ex:492 +msgid "The status is over the character limit" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/plugs/ensure_public_or_authenticated_plug.ex:36 +msgid "This resource requires authentication." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/plugs/rate_limiter.ex:208 +msgid "Throttled" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/common_api.ex:338 +msgid "Too many choices" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:268 +msgid "You can't revoke your own admin status." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/o_auth/o_auth_controller.ex:243 +#: lib/pleroma/web/o_auth/o_auth_controller.ex:333 +msgid "Your account is currently disabled" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/o_auth/o_auth_controller.ex:205 +#: lib/pleroma/web/o_auth/o_auth_controller.ex:356 +msgid "Your login is missing a confirmed e-mail address" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:392 +msgid "can't read inbox of %{nickname} as %{as_nickname}" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:491 +msgid "can't update outbox of %{nickname} as %{as_nickname}" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/common_api.ex:475 +msgid "conversation is already muted" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:510 +msgid "error" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex:34 +msgid "mascots can only be images" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:63 +msgid "not found" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/o_auth/o_auth_controller.ex:437 +msgid "Bad OAuth request." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/twitter_api/twitter_api.ex:108 +msgid "CAPTCHA already used" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/twitter_api/twitter_api.ex:105 +msgid "CAPTCHA expired" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/plugs/uploaded_media.ex:57 +msgid "Failed" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/o_auth/o_auth_controller.ex:453 +msgid "Failed to authenticate: %{message}." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/o_auth/o_auth_controller.ex:484 +msgid "Failed to set up user account." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/plugs/o_auth_scopes_plug.ex:37 +msgid "Insufficient permissions: %{permissions}." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/plugs/uploaded_media.ex:111 +msgid "Internal Error" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/o_auth/fallback_controller.ex:22 +#: lib/pleroma/web/o_auth/fallback_controller.ex:29 +msgid "Invalid Username/Password" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/twitter_api/twitter_api.ex:111 +msgid "Invalid answer data" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/nodeinfo/nodeinfo_controller.ex:33 +msgid "Nodeinfo schema version not handled" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/o_auth/o_auth_controller.ex:194 +msgid "This action is outside the authorized scopes" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/o_auth/fallback_controller.ex:14 +msgid "Unknown error, please check the details and try again." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/o_auth/o_auth_controller.ex:136 +#: lib/pleroma/web/o_auth/o_auth_controller.ex:180 +msgid "Unlisted redirect_uri." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/o_auth/o_auth_controller.ex:433 +msgid "Unsupported OAuth provider: %{provider}." +msgstr "" + +#, elixir-format +#: lib/pleroma/uploaders/uploader.ex:74 +msgid "Uploader callback timeout" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/uploader_controller.ex:23 +msgid "bad request" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/twitter_api/twitter_api.ex:96 +msgid "CAPTCHA Error" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/common_api.ex:266 +msgid "Could not add reaction emoji" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/common_api.ex:277 +msgid "Could not remove reaction emoji" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/twitter_api/twitter_api.ex:122 +msgid "Invalid CAPTCHA (Missing parameter: %{name})" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/mastodon_api/controllers/list_controller.ex:96 +msgid "List not found" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:151 +msgid "Missing parameter: %{name}" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/o_auth/o_auth_controller.ex:232 +#: lib/pleroma/web/o_auth/o_auth_controller.ex:346 +msgid "Password reset is required" +msgstr "" + +#, elixir-format +#: lib/pleroma/tests/auth_test_controller.ex:9 +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:6 lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/chat_controller.ex:6 lib/pleroma/web/admin_api/controllers/config_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/fallback_controller.ex:6 lib/pleroma/web/admin_api/controllers/frontend_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/instance_controller.ex:6 lib/pleroma/web/admin_api/controllers/instance_document_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/invite_controller.ex:6 lib/pleroma/web/admin_api/controllers/media_proxy_cache_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/o_auth_app_controller.ex:6 lib/pleroma/web/admin_api/controllers/relay_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/report_controller.ex:6 lib/pleroma/web/admin_api/controllers/status_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/user_controller.ex:6 lib/pleroma/web/controller_helper.ex:6 lib/pleroma/web/embed_controller.ex:6 +#: lib/pleroma/web/fallback/redirect_controller.ex:6 lib/pleroma/web/feed/tag_controller.ex:6 +#: lib/pleroma/web/feed/user_controller.ex:6 lib/pleroma/web/mailer/subscription_controller.ex:6 +#: lib/pleroma/web/manifest_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/account_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/app_controller.ex:11 lib/pleroma/web/mastodon_api/controllers/auth_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/conversation_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/custom_emoji_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/directory_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/domain_block_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/filter_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/follow_request_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/instance_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/list_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/marker_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/mastodon_api_controller.ex:14 lib/pleroma/web/mastodon_api/controllers/media_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/notification_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/report_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/scheduled_activity_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/search_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/status_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex:7 lib/pleroma/web/mastodon_api/controllers/suggestion_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex:6 lib/pleroma/web/media_proxy/media_proxy_controller.ex:6 +#: lib/pleroma/web/mongoose_im/mongoose_im_controller.ex:6 lib/pleroma/web/nodeinfo/nodeinfo_controller.ex:6 +#: lib/pleroma/web/o_auth/fallback_controller.ex:6 lib/pleroma/web/o_auth/mfa_controller.ex:10 +#: lib/pleroma/web/o_auth/o_auth_controller.ex:6 lib/pleroma/web/o_status/o_status_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/account_controller.ex:6 lib/pleroma/web/pleroma_api/controllers/app_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/backup_controller.ex:6 lib/pleroma/web/pleroma_api/controllers/chat_controller.ex:5 +#: lib/pleroma/web/pleroma_api/controllers/conversation_controller.ex:6 lib/pleroma/web/pleroma_api/controllers/emoji_file_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex:6 lib/pleroma/web/pleroma_api/controllers/emoji_reaction_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/instances_controller.ex:6 lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/notification_controller.ex:6 lib/pleroma/web/pleroma_api/controllers/report_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/scrobble_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/two_factor_authentication_controller.ex:7 lib/pleroma/web/pleroma_api/controllers/user_import_controller.ex:6 +#: lib/pleroma/web/static_fe/static_fe_controller.ex:6 lib/pleroma/web/twitter_api/controller.ex:6 +#: lib/pleroma/web/twitter_api/controllers/password_controller.ex:10 lib/pleroma/web/twitter_api/controllers/remote_follow_controller.ex:6 +#: lib/pleroma/web/twitter_api/controllers/util_controller.ex:6 lib/pleroma/web/uploader_controller.ex:6 +#: lib/pleroma/web/web_finger/web_finger_controller.ex:6 +msgid "Security violation: OAuth scopes check was neither handled nor explicitly skipped." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/plugs/ensure_authenticated_plug.ex:32 +msgid "Two-factor authentication enabled, you must use a access token." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex:61 +msgid "Web push subscription is disabled on this Pleroma instance" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:234 +msgid "You can't revoke your own admin/moderator status." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex:129 +msgid "authorization required for timeline view" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:24 +msgid "Access denied" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:321 +msgid "This API requires an authenticated user" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/plugs/ensure_staff_privileged_plug.ex:26 +#: lib/pleroma/web/plugs/user_is_admin_plug.ex:21 +msgid "User is not an admin." +msgstr "" + +#, elixir-format +#: lib/pleroma/user/backup.ex:75 +msgid "Last export was less than a day ago" +msgid_plural "Last export was less than %{days} days ago" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/pleroma/user/backup.ex:93 +msgid "Backups require enabled email" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:423 +msgid "Character limit (%{limit} characters) exceeded, contains %{length} characters" +msgstr "" + +#, elixir-format +#: lib/pleroma/user/backup.ex:98 +msgid "Email is required" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/common_api/utils.ex:507 +msgid "Too many attachments" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/plugs/ensure_staff_privileged_plug.ex:33 +#: lib/pleroma/web/plugs/user_is_staff_plug.ex:20 +msgid "User is not a staff member." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/o_auth/o_auth_controller.ex:366 +msgid "Your account is awaiting approval." +msgstr "" diff --git a/priv/gettext/en_test/LC_MESSAGES/posix_errors.po b/priv/gettext/en_test/LC_MESSAGES/posix_errors.po new file mode 100644 index 000000000..663fc5924 --- /dev/null +++ b/priv/gettext/en_test/LC_MESSAGES/posix_errors.po @@ -0,0 +1,153 @@ +## "msgid"s in this file come from POT (.pot) files. +## +## Do not add, change, or remove "msgid"s manually here as +## they're tied to the ones in the corresponding POT file +## (with the same domain). +## +## Use "mix gettext.extract --merge" or "mix gettext.merge" +## to merge POT files into PO files. +msgid "" +msgstr "" +"Language: en_test\n" +"Plural-Forms: nplurals=2\n" + +msgid "eperm" +msgstr "" + +msgid "eacces" +msgstr "" + +msgid "eagain" +msgstr "" + +msgid "ebadf" +msgstr "" + +msgid "ebadmsg" +msgstr "" + +msgid "ebusy" +msgstr "" + +msgid "edeadlk" +msgstr "" + +msgid "edeadlock" +msgstr "" + +msgid "edquot" +msgstr "" + +msgid "eexist" +msgstr "" + +msgid "efault" +msgstr "" + +msgid "efbig" +msgstr "" + +msgid "eftype" +msgstr "" + +msgid "eintr" +msgstr "" + +msgid "einval" +msgstr "" + +msgid "eio" +msgstr "" + +msgid "eisdir" +msgstr "" + +msgid "eloop" +msgstr "" + +msgid "emfile" +msgstr "" + +msgid "emlink" +msgstr "" + +msgid "emultihop" +msgstr "" + +msgid "enametoolong" +msgstr "" + +msgid "enfile" +msgstr "" + +msgid "enobufs" +msgstr "" + +msgid "enodev" +msgstr "" + +msgid "enolck" +msgstr "" + +msgid "enolink" +msgstr "" + +msgid "enoent" +msgstr "" + +msgid "enomem" +msgstr "" + +msgid "enospc" +msgstr "" + +msgid "enosr" +msgstr "" + +msgid "enostr" +msgstr "" + +msgid "enosys" +msgstr "" + +msgid "enotblk" +msgstr "" + +msgid "enotdir" +msgstr "" + +msgid "enotsup" +msgstr "" + +msgid "enxio" +msgstr "" + +msgid "eopnotsupp" +msgstr "" + +msgid "eoverflow" +msgstr "" + +msgid "epipe" +msgstr "" + +msgid "erange" +msgstr "" + +msgid "erofs" +msgstr "" + +msgid "espipe" +msgstr "" + +msgid "esrch" +msgstr "" + +msgid "estale" +msgstr "" + +msgid "etxtbsy" +msgstr "" + +msgid "exdev" +msgstr "" diff --git a/priv/gettext/en_test/LC_MESSAGES/static_pages.po b/priv/gettext/en_test/LC_MESSAGES/static_pages.po new file mode 100644 index 000000000..1a3b7b355 --- /dev/null +++ b/priv/gettext/en_test/LC_MESSAGES/static_pages.po @@ -0,0 +1,529 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Free Software Foundation, Inc. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2022-03-06 11:27-0500\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#~ ## "msgid"s in this file come from POT (.pot) files. +#~ ## +#~ ## Do not add, change, or remove "msgid"s manually here as +#~ ## they're tied to the ones in the corresponding POT file +#~ ## (with the same domain). +#~ ## +#~ ## Use "mix gettext.extract --merge" or "mix gettext.merge" +#~ ## to merge POT files into PO files. +#~ msgid "" +#~ msgstr "" +#~ "Language: en_test\n" +#~ "Plural-Forms: nplurals=2\n" + +#, elixir-format +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow.html.eex:9 +msgctxt "remote follow authorization button" +msgid "Authorize" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow.html.eex:2 +msgctxt "remote follow error" +msgid "Error fetching user" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow.html.eex:4 +msgctxt "remote follow header" +msgid "Remote follow" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex:8 +msgctxt "placeholder text for auth code entry" +msgid "Authentication code" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:10 +msgctxt "placeholder text for password entry" +msgid "Password" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:8 +msgctxt "placeholder text for username entry" +msgid "Username" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:13 +msgctxt "remote follow authorization button for login" +msgid "Authorize" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex:12 +msgctxt "remote follow authorization button for mfa" +msgid "Authorize" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/twitter_api/remote_follow/followed.html.eex:2 +msgctxt "remote follow error" +msgid "Error following account" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:4 +msgctxt "remote follow header, need login" +msgid "Log in to follow" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex:4 +msgctxt "remote follow mfa header" +msgid "Two-factor authentication" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/twitter_api/remote_follow/followed.html.eex:4 +msgctxt "remote follow success" +msgid "Account followed!" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:7 +msgctxt "placeholder text for account id" +msgid "Your account ID, e.g. lain@quitter.se" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:8 +msgctxt "remote follow authorization button for following with a remote account" +msgid "Follow" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:2 +msgctxt "remote follow error" +msgid "Error: %{error}" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:4 +msgctxt "remote follow header" +msgid "Remotely follow %{nickname}" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/twitter_api/password/reset.html.eex:12 +msgctxt "password reset button" +msgid "Reset" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/twitter_api/password/reset_failed.html.eex:4 +msgctxt "password reset failed homepage link" +msgid "Homepage" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/twitter_api/password/reset_failed.html.eex:1 +msgctxt "password reset failed message" +msgid "Password reset failed" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/twitter_api/password/reset.html.eex:8 +msgctxt "password reset form confirm password prompt" +msgid "Confirmation" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/twitter_api/password/reset.html.eex:4 +msgctxt "password reset form password prompt" +msgid "Password" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/twitter_api/password/invalid_token.html.eex:1 +msgctxt "password reset invalid token message" +msgid "Invalid Token" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/twitter_api/password/reset_success.html.eex:2 +msgctxt "password reset successful homepage link" +msgid "Homepage" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/twitter_api/password/reset_success.html.eex:1 +msgctxt "password reset successful message" +msgid "Password changed!" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/feed/feed/tag.atom.eex:15 +#: lib/pleroma/web/templates/feed/feed/tag.rss.eex:7 +msgctxt "tag feed description" +msgid "These are public toots tagged with #%{tag}. You can interact with them if you have an account anywhere in the fediverse." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/oob_token_exists.html.eex:1 +msgctxt "oauth authorization exists page title" +msgid "Authorization exists" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:32 +msgctxt "oauth authorize approve button" +msgid "Approve" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:30 +msgctxt "oauth authorize cancel button" +msgid "Cancel" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:23 +msgctxt "oauth authorize message" +msgid "Application %{client_name} is requesting access to your account." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/oob_authorization_created.html.eex:1 +msgctxt "oauth authorized page title" +msgid "Successfully authorized" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex:1 +msgctxt "oauth external provider page title" +msgid "Sign in with external provider" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex:13 +msgctxt "oauth external provider sign in button" +msgid "Sign in with %{strategy}" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:54 +msgctxt "oauth login button" +msgid "Log In" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:51 +msgctxt "oauth login password prompt" +msgid "Password" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:47 +msgctxt "oauth login username prompt" +msgid "Username" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:39 +msgctxt "oauth register nickname prompt" +msgid "Pleroma Handle" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:37 +msgctxt "oauth register nickname unchangeable warning" +msgid "Choose carefully! You won't be able to change this later. You will be able to change your display name, though." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:18 +msgctxt "oauth register page email prompt" +msgid "Email" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:10 +msgctxt "oauth register page fill form prompt" +msgid "If you'd like to register a new account, please provide the details below." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:35 +msgctxt "oauth register page login button" +msgid "Proceed as existing user" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:31 +msgctxt "oauth register page login password prompt" +msgid "Password" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:24 +msgctxt "oauth register page login prompt" +msgid "Alternatively, sign in to connect to existing account." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:27 +msgctxt "oauth register page login username prompt" +msgid "Name or email" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:14 +msgctxt "oauth register page nickname prompt" +msgid "Nickname" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:22 +msgctxt "oauth register page register button" +msgid "Proceed as new user" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:8 +msgctxt "oauth register page title" +msgid "Registration Details" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:36 +msgctxt "oauth register page title" +msgid "This is the first time you visit! Please enter your Pleroma handle." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/_scopes.html.eex:2 +msgctxt "oauth scopes message" +msgid "The following permissions will be granted" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/oob_authorization_created.html.eex:2 +#: lib/pleroma/web/templates/o_auth/o_auth/oob_token_exists.html.eex:2 +msgctxt "oauth token code message" +msgid "Token code is
%{token}" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:12 +msgctxt "mfa auth code prompt" +msgid "Authentication code" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:8 +msgctxt "mfa auth page title" +msgid "Two-factor authentication" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:23 +msgctxt "mfa auth page use recovery code link" +msgid "Enter a two-factor recovery code" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:20 +msgctxt "mfa auth verify code button" +msgid "Verify" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:8 +msgctxt "mfa recover page title" +msgid "Two-factor recovery" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:12 +msgctxt "mfa recover recovery code prompt" +msgid "Recovery code" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:23 +msgctxt "mfa recover use 2fa code link" +msgid "Enter a two-factor code" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:20 +msgctxt "mfa recover verify recovery code button" +msgid "Verify" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex:8 +msgctxt "static fe profile page remote follow button" +msgid "Remote follow" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/email/digest.html.eex:163 +msgctxt "digest email header line" +msgid "Hey %{nickname}, here is what you've missed!" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/email/digest.html.eex:544 +msgctxt "digest email receiver address" +msgid "The email address you are subscribed as is %{email}. " +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/email/digest.html.eex:538 +msgctxt "digest email sending reason" +msgid "You have received this email because you have signed up to receive digest emails from %{instance} Pleroma instance." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/email/digest.html.eex:547 +msgctxt "digest email unsubscribe action" +msgid "To unsubscribe, please go %{here}." +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/email/digest.html.eex:547 +msgctxt "digest email unsubscribe action link text" +msgid "here" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/mailer/subscription/unsubscribe_failure.html.eex:1 +msgctxt "mailer unsubscribe failed message" +msgid "UNSUBSCRIBE FAILURE" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/mailer/subscription/unsubscribe_success.html.eex:1 +msgctxt "mailer unsubscribe successful message" +msgid "UNSUBSCRIBE SUCCESSFUL" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/email/digest.html.eex:385 +msgctxt "new followers count header" +msgid "%{count} New Follower" +msgid_plural "%{count} New Followers" +msgstr[0] "xx%{count} New Followerxx" +msgstr[1] "xx%{count} New Followersxx" + +#, elixir-format +#: lib/pleroma/emails/user_email.ex:356 +msgctxt "account archive email body - self-requested" +msgid "

You requested a full backup of your Pleroma account. It's ready for download:

\n

%{download_url}

\n" +msgstr "" + +#, elixir-format +#: lib/pleroma/emails/user_email.ex:384 +msgctxt "account archive email subject" +msgid "Your account archive is ready" +msgstr "" + +#, elixir-format +#: lib/pleroma/emails/user_email.ex:188 +msgctxt "approval pending email body" +msgid "

Awaiting Approval

\n

Your account at %{instance_name} is being reviewed by staff. You will receive another email once your account is approved.

\n" +msgstr "" + +#, elixir-format +#: lib/pleroma/emails/user_email.ex:202 +msgctxt "approval pending email subject" +msgid "Your account is awaiting approval" +msgstr "xxYour account is awaiting approvalxx" + +#, elixir-format +#: lib/pleroma/emails/user_email.ex:158 +msgctxt "confirmation email body" +msgid "

Thank you for registering on %{instance_name}

\n

Email confirmation is required to activate the account.

\n

Please click the following link to activate your account.

\n" +msgstr "" + +#, elixir-format +#: lib/pleroma/emails/user_email.ex:174 +msgctxt "confirmation email subject" +msgid "%{instance_name} account confirmation" +msgstr "" + +#, elixir-format +#: lib/pleroma/emails/user_email.ex:310 +msgctxt "digest email subject" +msgid "Your digest from %{instance_name}" +msgstr "xxYour digest from %{instance_name}xx" + +#, elixir-format +#: lib/pleroma/emails/user_email.ex:81 +msgctxt "password reset email body" +msgid "

Reset your password at %{instance_name}

\n

Someone has requested password change for your account at %{instance_name}.

\n

If it was you, visit the following link to proceed: reset password.

\n

If it was someone else, nothing to worry about: your data is secure and your password has not been changed.

\n" +msgstr "" + +#, elixir-format +#: lib/pleroma/emails/user_email.ex:98 +msgctxt "password reset email subject" +msgid "Password reset" +msgstr "" + +#, elixir-format +#: lib/pleroma/emails/user_email.ex:215 +msgctxt "successful registration email body" +msgid "

Hello @%{nickname},

\n

Your account at %{instance_name} has been registered successfully.

\n

No further action is required to activate your account.

\n" +msgstr "" + +#, elixir-format +#: lib/pleroma/emails/user_email.ex:231 +msgctxt "successful registration email subject" +msgid "Account registered on %{instance_name}" +msgstr "" + +#, elixir-format +#: lib/pleroma/emails/user_email.ex:119 +msgctxt "user invitation email body" +msgid "

You are invited to %{instance_name}

\n

%{inviter_name} invites you to join %{instance_name}, an instance of Pleroma federated social networking platform.

\n

Click the following link to register: accept invitation.

\n" +msgstr "" + +#, elixir-format +#: lib/pleroma/emails/user_email.ex:136 +msgctxt "user invitation email subject" +msgid "Invitation to %{instance_name}" +msgstr "" + +#, elixir-format +#: lib/pleroma/emails/user_email.ex:53 +msgctxt "welcome email html body" +msgid "Welcome to %{instance_name}!" +msgstr "" + +#, elixir-format +#: lib/pleroma/emails/user_email.ex:41 +msgctxt "welcome email subject" +msgid "Welcome to %{instance_name}!" +msgstr "" + +#, elixir-format +#: lib/pleroma/emails/user_email.ex:65 +msgctxt "welcome email text body" +msgid "Welcome to %{instance_name}!" +msgstr "" + +#, elixir-format +#: lib/pleroma/emails/user_email.ex:368 +msgctxt "account archive email body - admin requested" +msgid "

Admin @%{admin_nickname} requested a full backup of your Pleroma account. It's ready for download:

\n

%{download_url}

\n" +msgstr "" diff --git a/priv/gettext/errors.pot b/priv/gettext/errors.pot index e337226a7..85854d23e 100644 --- a/priv/gettext/errors.pot +++ b/priv/gettext/errors.pot @@ -89,482 +89,522 @@ msgstr "" msgid "must be equal to %{number}" msgstr "" -#, elixir-format -#: lib/pleroma/web/common_api/common_api.ex:505 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/common_api.ex:523 msgid "Account not found" msgstr "" -#, elixir-format -#: lib/pleroma/web/common_api/common_api.ex:339 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/common_api.ex:316 msgid "Already voted" msgstr "" -#, elixir-format -#: lib/pleroma/web/oauth/oauth_controller.ex:359 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/o_auth/o_auth_controller.ex:402 msgid "Bad request" msgstr "" -#, elixir-format -#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:426 -msgid "Can't delete object" -msgstr "" - -#, elixir-format -#: lib/pleroma/web/controller_helper.ex:105 -#: lib/pleroma/web/controller_helper.ex:111 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/controller_helper.ex:97 +#: lib/pleroma/web/controller_helper.ex:103 msgid "Can't display this activity" msgstr "" -#, elixir-format -#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:285 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:325 msgid "Can't find user" msgstr "" -#, elixir-format -#: lib/pleroma/web/pleroma_api/controllers/account_controller.ex:61 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/pleroma_api/controllers/account_controller.ex:80 msgid "Can't get favorites" msgstr "" -#, elixir-format -#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:438 -msgid "Can't like object" -msgstr "" - -#, elixir-format -#: lib/pleroma/web/common_api/utils.ex:563 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/common_api/utils.ex:482 msgid "Cannot post an empty status without attachments" msgstr "" -#, elixir-format -#: lib/pleroma/web/common_api/utils.ex:511 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/common_api/utils.ex:441 msgid "Comment must be up to %{max_size} characters" msgstr "" -#, elixir-format -#: lib/pleroma/config/config_db.ex:191 +#, elixir-autogen, elixir-format +#: lib/pleroma/config_db.ex:200 msgid "Config with params %{params} not found" msgstr "" -#, elixir-format -#: lib/pleroma/web/common_api/common_api.ex:181 -#: lib/pleroma/web/common_api/common_api.ex:185 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/common_api.ex:167 +#: lib/pleroma/web/common_api.ex:171 msgid "Could not delete" msgstr "" -#, elixir-format -#: lib/pleroma/web/common_api/common_api.ex:231 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/common_api.ex:217 msgid "Could not favorite" msgstr "" -#, elixir-format -#: lib/pleroma/web/common_api/common_api.ex:453 -msgid "Could not pin" -msgstr "" - -#, elixir-format -#: lib/pleroma/web/common_api/common_api.ex:278 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/common_api.ex:254 msgid "Could not unfavorite" msgstr "" -#, elixir-format -#: lib/pleroma/web/common_api/common_api.ex:463 -msgid "Could not unpin" -msgstr "" - -#, elixir-format -#: lib/pleroma/web/common_api/common_api.ex:216 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/common_api.ex:202 msgid "Could not unrepeat" msgstr "" -#, elixir-format -#: lib/pleroma/web/common_api/common_api.ex:512 -#: lib/pleroma/web/common_api/common_api.ex:521 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/common_api.ex:530 +#: lib/pleroma/web/common_api.ex:539 msgid "Could not update state" msgstr "" -#, elixir-format -#: lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex:207 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex:205 msgid "Error." msgstr "" -#, elixir-format -#: lib/pleroma/web/twitter_api/twitter_api.ex:106 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/twitter_api/twitter_api.ex:105 msgid "Invalid CAPTCHA" msgstr "" -#, elixir-format -#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:116 -#: lib/pleroma/web/oauth/oauth_controller.ex:568 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:144 +#: lib/pleroma/web/o_auth/o_auth_controller.ex:631 msgid "Invalid credentials" msgstr "" -#, elixir-format -#: lib/pleroma/plugs/ensure_authenticated_plug.ex:38 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/plugs/ensure_authenticated_plug.ex:42 msgid "Invalid credentials." msgstr "" -#, elixir-format -#: lib/pleroma/web/common_api/common_api.ex:355 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/common_api.ex:337 msgid "Invalid indices" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/admin_api/controllers/fallback_controller.ex:29 msgid "Invalid parameters" msgstr "" -#, elixir-format -#: lib/pleroma/web/common_api/utils.ex:414 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/common_api/utils.ex:349 msgid "Invalid password." msgstr "" -#, elixir-format -#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:220 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:255 msgid "Invalid request" msgstr "" -#, elixir-format -#: lib/pleroma/web/twitter_api/twitter_api.ex:109 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/twitter_api/twitter_api.ex:108 msgid "Kocaptcha service unavailable" msgstr "" -#, elixir-format -#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:112 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:140 msgid "Missing parameters" msgstr "" -#, elixir-format -#: lib/pleroma/web/common_api/utils.ex:547 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/common_api/utils.ex:477 msgid "No such conversation" msgstr "" -#, elixir-format -#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:388 -#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:414 lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:456 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:171 +#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:197 +#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:239 msgid "No such permission_group" msgstr "" -#, elixir-format -#: lib/pleroma/plugs/uploaded_media.ex:84 -#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:486 lib/pleroma/web/admin_api/controllers/fallback_controller.ex:11 -#: lib/pleroma/web/feed/user_controller.ex:71 lib/pleroma/web/ostatus/ostatus_controller.ex:143 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:515 +#: lib/pleroma/web/admin_api/controllers/fallback_controller.ex:11 +#: lib/pleroma/web/feed/tag_controller.ex:16 +#: lib/pleroma/web/feed/user_controller.ex:69 +#: lib/pleroma/web/o_status/o_status_controller.ex:132 +#: lib/pleroma/web/plugs/uploaded_media.ex:84 msgid "Not found" msgstr "" -#, elixir-format -#: lib/pleroma/web/common_api/common_api.ex:331 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/common_api.ex:308 msgid "Poll's author can't vote" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:20 -#: lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:37 lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:49 -#: lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:50 lib/pleroma/web/mastodon_api/controllers/status_controller.ex:306 +#: lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:39 +#: lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:51 +#: lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:52 +#: lib/pleroma/web/mastodon_api/controllers/status_controller.ex:326 #: lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex:71 msgid "Record not found" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/admin_api/controllers/fallback_controller.ex:35 -#: lib/pleroma/web/feed/user_controller.ex:77 lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:36 -#: lib/pleroma/web/ostatus/ostatus_controller.ex:149 +#: lib/pleroma/web/feed/user_controller.ex:78 +#: lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:42 +#: lib/pleroma/web/o_status/o_status_controller.ex:138 msgid "Something went wrong" msgstr "" -#, elixir-format -#: lib/pleroma/web/common_api/activity_draft.ex:107 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/common_api/activity_draft.ex:143 msgid "The message visibility must be direct" msgstr "" -#, elixir-format -#: lib/pleroma/web/common_api/utils.ex:573 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/common_api/utils.ex:492 msgid "The status is over the character limit" msgstr "" -#, elixir-format -#: lib/pleroma/plugs/ensure_public_or_authenticated_plug.ex:31 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/plugs/ensure_public_or_authenticated_plug.ex:36 msgid "This resource requires authentication." msgstr "" -#, elixir-format -#: lib/pleroma/plugs/rate_limiter/rate_limiter.ex:206 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/plugs/rate_limiter.ex:208 msgid "Throttled" msgstr "" -#, elixir-format -#: lib/pleroma/web/common_api/common_api.ex:356 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/common_api.ex:338 msgid "Too many choices" msgstr "" -#, elixir-format -#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:443 -msgid "Unhandled activity type" -msgstr "" - -#, elixir-format -#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:485 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:268 msgid "You can't revoke your own admin status." msgstr "" -#, elixir-format -#: lib/pleroma/web/oauth/oauth_controller.ex:221 -#: lib/pleroma/web/oauth/oauth_controller.ex:308 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/o_auth/o_auth_controller.ex:243 +#: lib/pleroma/web/o_auth/o_auth_controller.ex:333 msgid "Your account is currently disabled" msgstr "" -#, elixir-format -#: lib/pleroma/web/oauth/oauth_controller.ex:183 -#: lib/pleroma/web/oauth/oauth_controller.ex:331 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/o_auth/o_auth_controller.ex:205 +#: lib/pleroma/web/o_auth/o_auth_controller.ex:356 msgid "Your login is missing a confirmed e-mail address" msgstr "" -#, elixir-format -#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:390 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:403 msgid "can't read inbox of %{nickname} as %{as_nickname}" msgstr "" -#, elixir-format -#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:473 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:502 msgid "can't update outbox of %{nickname} as %{as_nickname}" msgstr "" -#, elixir-format -#: lib/pleroma/web/common_api/common_api.ex:471 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/common_api.ex:475 msgid "conversation is already muted" msgstr "" -#, elixir-format -#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:314 -#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:492 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:521 msgid "error" msgstr "" -#, elixir-format -#: lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex:32 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex:34 msgid "mascots can only be images" msgstr "" -#, elixir-format -#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:62 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:63 msgid "not found" msgstr "" -#, elixir-format -#: lib/pleroma/web/oauth/oauth_controller.ex:394 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/o_auth/o_auth_controller.ex:437 msgid "Bad OAuth request." msgstr "" -#, elixir-format -#: lib/pleroma/web/twitter_api/twitter_api.ex:115 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/twitter_api/twitter_api.ex:114 msgid "CAPTCHA already used" msgstr "" -#, elixir-format -#: lib/pleroma/web/twitter_api/twitter_api.ex:112 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/twitter_api/twitter_api.ex:111 msgid "CAPTCHA expired" msgstr "" -#, elixir-format -#: lib/pleroma/plugs/uploaded_media.ex:57 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/plugs/uploaded_media.ex:57 msgid "Failed" msgstr "" -#, elixir-format -#: lib/pleroma/web/oauth/oauth_controller.ex:410 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/o_auth/o_auth_controller.ex:453 msgid "Failed to authenticate: %{message}." msgstr "" -#, elixir-format -#: lib/pleroma/web/oauth/oauth_controller.ex:441 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/o_auth/o_auth_controller.ex:484 msgid "Failed to set up user account." msgstr "" -#, elixir-format -#: lib/pleroma/plugs/oauth_scopes_plug.ex:38 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/plugs/o_auth_scopes_plug.ex:37 msgid "Insufficient permissions: %{permissions}." msgstr "" -#, elixir-format -#: lib/pleroma/plugs/uploaded_media.ex:104 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/plugs/uploaded_media.ex:111 msgid "Internal Error" msgstr "" -#, elixir-format -#: lib/pleroma/web/oauth/fallback_controller.ex:22 -#: lib/pleroma/web/oauth/fallback_controller.ex:29 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/o_auth/fallback_controller.ex:22 +#: lib/pleroma/web/o_auth/fallback_controller.ex:29 msgid "Invalid Username/Password" msgstr "" -#, elixir-format -#: lib/pleroma/web/twitter_api/twitter_api.ex:118 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/twitter_api/twitter_api.ex:117 msgid "Invalid answer data" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/nodeinfo/nodeinfo_controller.ex:33 msgid "Nodeinfo schema version not handled" msgstr "" -#, elixir-format -#: lib/pleroma/web/oauth/oauth_controller.ex:172 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/o_auth/o_auth_controller.ex:194 msgid "This action is outside the authorized scopes" msgstr "" -#, elixir-format -#: lib/pleroma/web/oauth/fallback_controller.ex:14 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/o_auth/fallback_controller.ex:14 msgid "Unknown error, please check the details and try again." msgstr "" -#, elixir-format -#: lib/pleroma/web/oauth/oauth_controller.ex:119 -#: lib/pleroma/web/oauth/oauth_controller.ex:158 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/o_auth/o_auth_controller.ex:136 +#: lib/pleroma/web/o_auth/o_auth_controller.ex:180 msgid "Unlisted redirect_uri." msgstr "" -#, elixir-format -#: lib/pleroma/web/oauth/oauth_controller.ex:390 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/o_auth/o_auth_controller.ex:433 msgid "Unsupported OAuth provider: %{provider}." msgstr "" -#, elixir-format -#: lib/pleroma/uploaders/uploader.ex:72 +#, elixir-autogen, elixir-format +#: lib/pleroma/uploaders/uploader.ex:74 msgid "Uploader callback timeout" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/uploader_controller.ex:23 msgid "bad request" msgstr "" -#, elixir-format -#: lib/pleroma/web/twitter_api/twitter_api.ex:103 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/twitter_api/twitter_api.ex:102 msgid "CAPTCHA Error" msgstr "" -#, elixir-format -#: lib/pleroma/web/common_api/common_api.ex:290 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/common_api.ex:266 msgid "Could not add reaction emoji" msgstr "" -#, elixir-format -#: lib/pleroma/web/common_api/common_api.ex:301 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/common_api.ex:277 msgid "Could not remove reaction emoji" msgstr "" -#, elixir-format -#: lib/pleroma/web/twitter_api/twitter_api.ex:129 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/twitter_api/twitter_api.ex:128 msgid "Invalid CAPTCHA (Missing parameter: %{name})" msgstr "" -#, elixir-format -#: lib/pleroma/web/mastodon_api/controllers/list_controller.ex:92 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/mastodon_api/controllers/list_controller.ex:96 msgid "List not found" msgstr "" -#, elixir-format -#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:123 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:151 msgid "Missing parameter: %{name}" msgstr "" -#, elixir-format -#: lib/pleroma/web/oauth/oauth_controller.ex:210 -#: lib/pleroma/web/oauth/oauth_controller.ex:321 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/o_auth/o_auth_controller.ex:232 +#: lib/pleroma/web/o_auth/o_auth_controller.ex:346 msgid "Password reset is required" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/tests/auth_test_controller.ex:9 -#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:6 lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:6 -#: lib/pleroma/web/admin_api/controllers/config_controller.ex:6 lib/pleroma/web/admin_api/controllers/fallback_controller.ex:6 -#: lib/pleroma/web/admin_api/controllers/invite_controller.ex:6 lib/pleroma/web/admin_api/controllers/media_proxy_cache_controller.ex:6 -#: lib/pleroma/web/admin_api/controllers/oauth_app_controller.ex:6 lib/pleroma/web/admin_api/controllers/relay_controller.ex:6 -#: lib/pleroma/web/admin_api/controllers/report_controller.ex:6 lib/pleroma/web/admin_api/controllers/status_controller.ex:6 -#: lib/pleroma/web/controller_helper.ex:6 lib/pleroma/web/embed_controller.ex:6 -#: lib/pleroma/web/fallback_redirect_controller.ex:6 lib/pleroma/web/feed/tag_controller.ex:6 -#: lib/pleroma/web/feed/user_controller.ex:6 lib/pleroma/web/mailer/subscription_controller.ex:2 -#: lib/pleroma/web/masto_fe_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/account_controller.ex:6 -#: lib/pleroma/web/mastodon_api/controllers/app_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/auth_controller.ex:6 -#: lib/pleroma/web/mastodon_api/controllers/conversation_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/custom_emoji_controller.ex:6 -#: lib/pleroma/web/mastodon_api/controllers/domain_block_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:6 -#: lib/pleroma/web/mastodon_api/controllers/filter_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/follow_request_controller.ex:6 -#: lib/pleroma/web/mastodon_api/controllers/instance_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/list_controller.ex:6 -#: lib/pleroma/web/mastodon_api/controllers/marker_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/mastodon_api_controller.ex:14 -#: lib/pleroma/web/mastodon_api/controllers/media_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/notification_controller.ex:6 -#: lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/report_controller.ex:8 -#: lib/pleroma/web/mastodon_api/controllers/scheduled_activity_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/search_controller.ex:6 -#: lib/pleroma/web/mastodon_api/controllers/status_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex:7 -#: lib/pleroma/web/mastodon_api/controllers/suggestion_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex:6 -#: lib/pleroma/web/media_proxy/media_proxy_controller.ex:6 lib/pleroma/web/mongooseim/mongoose_im_controller.ex:6 -#: lib/pleroma/web/nodeinfo/nodeinfo_controller.ex:6 lib/pleroma/web/oauth/fallback_controller.ex:6 -#: lib/pleroma/web/oauth/mfa_controller.ex:10 lib/pleroma/web/oauth/oauth_controller.ex:6 -#: lib/pleroma/web/ostatus/ostatus_controller.ex:6 lib/pleroma/web/pleroma_api/controllers/account_controller.ex:6 -#: lib/pleroma/web/pleroma_api/controllers/chat_controller.ex:5 lib/pleroma/web/pleroma_api/controllers/conversation_controller.ex:6 -#: lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex:2 lib/pleroma/web/pleroma_api/controllers/emoji_reaction_controller.ex:6 -#: lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex:6 lib/pleroma/web/pleroma_api/controllers/notification_controller.ex:6 +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/announcement_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/chat_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/config_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/fallback_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/frontend_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/instance_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/instance_document_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/invite_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/media_proxy_cache_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/o_auth_app_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/relay_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/report_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/status_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/user_controller.ex:6 +#: lib/pleroma/web/controller_helper.ex:6 +#: lib/pleroma/web/embed_controller.ex:6 +#: lib/pleroma/web/fallback/redirect_controller.ex:6 +#: lib/pleroma/web/feed/tag_controller.ex:6 +#: lib/pleroma/web/feed/user_controller.ex:6 +#: lib/pleroma/web/mailer/subscription_controller.ex:6 +#: lib/pleroma/web/manifest_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/announcement_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/app_controller.ex:11 +#: lib/pleroma/web/mastodon_api/controllers/auth_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/conversation_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/custom_emoji_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/directory_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/domain_block_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/filter_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/follow_request_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/instance_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/list_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/marker_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/mastodon_api_controller.ex:14 +#: lib/pleroma/web/mastodon_api/controllers/media_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/notification_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/report_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/scheduled_activity_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/search_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/status_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex:7 +#: lib/pleroma/web/mastodon_api/controllers/suggestion_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex:6 +#: lib/pleroma/web/media_proxy/media_proxy_controller.ex:6 +#: lib/pleroma/web/mongoose_im/mongoose_im_controller.ex:6 +#: lib/pleroma/web/nodeinfo/nodeinfo_controller.ex:6 +#: lib/pleroma/web/o_auth/fallback_controller.ex:6 +#: lib/pleroma/web/o_auth/mfa_controller.ex:10 +#: lib/pleroma/web/o_auth/o_auth_controller.ex:6 +#: lib/pleroma/web/o_status/o_status_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/account_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/app_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/backup_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/chat_controller.ex:5 +#: lib/pleroma/web/pleroma_api/controllers/conversation_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/emoji_file_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/emoji_reaction_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/instances_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/notification_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/report_controller.ex:6 #: lib/pleroma/web/pleroma_api/controllers/scrobble_controller.ex:6 -#: lib/pleroma/web/pleroma_api/controllers/two_factor_authentication_controller.ex:7 lib/pleroma/web/static_fe/static_fe_controller.ex:6 -#: lib/pleroma/web/twitter_api/controllers/password_controller.ex:10 lib/pleroma/web/twitter_api/controllers/remote_follow_controller.ex:6 -#: lib/pleroma/web/twitter_api/controllers/util_controller.ex:6 lib/pleroma/web/twitter_api/twitter_api_controller.ex:6 -#: lib/pleroma/web/uploader_controller.ex:6 lib/pleroma/web/web_finger/web_finger_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/two_factor_authentication_controller.ex:7 +#: lib/pleroma/web/pleroma_api/controllers/user_import_controller.ex:6 +#: lib/pleroma/web/static_fe/static_fe_controller.ex:6 +#: lib/pleroma/web/twitter_api/controller.ex:6 +#: lib/pleroma/web/twitter_api/controllers/password_controller.ex:10 +#: lib/pleroma/web/twitter_api/controllers/remote_follow_controller.ex:6 +#: lib/pleroma/web/twitter_api/controllers/util_controller.ex:6 +#: lib/pleroma/web/uploader_controller.ex:6 +#: lib/pleroma/web/web_finger/web_finger_controller.ex:6 msgid "Security violation: OAuth scopes check was neither handled nor explicitly skipped." msgstr "" -#, elixir-format -#: lib/pleroma/plugs/ensure_authenticated_plug.ex:28 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/plugs/ensure_authenticated_plug.ex:32 msgid "Two-factor authentication enabled, you must use a access token." msgstr "" -#, elixir-format -#: lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex:210 -msgid "Unexpected error occurred while adding file to pack." -msgstr "" - -#, elixir-format -#: lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex:138 -msgid "Unexpected error occurred while creating pack." -msgstr "" - -#, elixir-format -#: lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex:278 -msgid "Unexpected error occurred while removing file from pack." -msgstr "" - -#, elixir-format -#: lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex:250 -msgid "Unexpected error occurred while updating file in pack." -msgstr "" - -#, elixir-format -#: lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex:179 -msgid "Unexpected error occurred while updating pack metadata." -msgstr "" - -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex:61 msgid "Web push subscription is disabled on this Pleroma instance" msgstr "" -#, elixir-format -#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:451 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:234 msgid "You can't revoke your own admin/moderator status." msgstr "" -#, elixir-format -#: lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex:126 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex:129 msgid "authorization required for timeline view" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:24 msgid "Access denied" msgstr "" -#, elixir-format -#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:282 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:322 msgid "This API requires an authenticated user" msgstr "" -#, elixir-format -#: lib/pleroma/plugs/user_is_admin_plug.ex:21 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/plugs/ensure_staff_privileged_plug.ex:26 +#: lib/pleroma/web/plugs/user_is_admin_plug.ex:21 msgid "User is not an admin." msgstr "" + +#, elixir-format +#: lib/pleroma/user/backup.ex:75 +msgid "Last export was less than a day ago" +msgid_plural "Last export was less than %{days} days ago" +msgstr[0] "" +msgstr[1] "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/user/backup.ex:93 +msgid "Backups require enabled email" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:434 +msgid "Character limit (%{limit} characters) exceeded, contains %{length} characters" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/user/backup.ex:98 +msgid "Email is required" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/common_api/utils.ex:507 +msgid "Too many attachments" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/plugs/ensure_staff_privileged_plug.ex:33 +#: lib/pleroma/web/plugs/user_is_staff_plug.ex:20 +msgid "User is not a staff member." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/o_auth/o_auth_controller.ex:366 +msgid "Your account is awaiting approval." +msgstr "" diff --git a/priv/gettext/fr/LC_MESSAGES/config_descriptions.po b/priv/gettext/fr/LC_MESSAGES/config_descriptions.po new file mode 100644 index 000000000..e43db68aa --- /dev/null +++ b/priv/gettext/fr/LC_MESSAGES/config_descriptions.po @@ -0,0 +1,6011 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-07-22 02:09+0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 3.7.2\n" + +## This file is a PO Template file. +## +## "msgid"s here are often extracted from source code. +## Add new translations manually only if they're dynamic +## translations that can't be statically extracted. +## +## Run "mix gettext.extract" to bring this file up to +## date. Leave "msgstr"s empty as changing them here has no +## effect: edit them in PO (.po) files instead. + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :esshd" +msgid "Before enabling this you must add :esshd to mix.exs as one of the extra_applications and generate host keys in your priv dir with ssh-keygen -m PEM -N \"\" -b 2048 -t rsa -f ssh_host_rsa_key" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :logger" +msgid "Logger-related settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :mime" +msgid "Mime Types settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma" +msgid "Allows setting a token that can be used to authenticate requests with admin privileges without a normal user account token. Append the `admin_token` parameter to requests to utilize it. (Please reconsider using HTTP Basic Auth or OAuth-based authentication if possible)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma" +msgid "Authenticator" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :quack" +msgid "Quack-related settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :cors_plug" +msgid "CORS plug config" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :esshd" +msgid "ESSHD" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :logger" +msgid "Logger" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :mime" +msgid "Mime Types" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma" +msgid "Pleroma Admin Token" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma" +msgid "Pleroma Authenticator" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :quack" +msgid "Quack Logger" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :logger-:console" +msgid "Console logger settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :logger-:ex_syslogger" +msgid "ExSyslogger-related settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:activitypub" +msgid "ActivityPub-related settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:assets" +msgid "This section configures assets to be used with various frontends. Currently the only option relates to mascots on the mastodon frontend" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:auth" +msgid "Authentication / authorization settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:connections_pool" +msgid "Advanced settings for `Gun` connections pool" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:email_notifications" +msgid "Email notifications settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:features" +msgid "Customizable features" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:feed" +msgid "Configure feed rendering" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations" +msgid "This form can be used to configure a keyword list that keeps the configuration data for any kind of frontend. By default, settings for pleroma_fe are configured. If you want to add your own configuration your settings all fields must be complete." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontends" +msgid "Installed frontends management" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:gopher" +msgid "Gopher settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:hackney_pools" +msgid "Advanced settings for `Hackney` connections pools" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:http" +msgid "HTTP settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:http_security" +msgid "HTTP security settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance" +msgid "Instance-related settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instances_favicons" +msgid "Control favicons for instances" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:ldap" +msgid "Use LDAP for user authentication. When a user logs in to the Pleroma instance, the name and password will be verified by trying to authenticate (bind) to a LDAP server. If a user exists in the LDAP directory but there is no account with the same name yet on the Pleroma instance then a new Pleroma account will be created with the same name as the LDAP user name." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:majic_pool" +msgid "Majic/libmagic configuration" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:manifest" +msgid "This section describe PWA manifest instance-specific values. Currently this option relate only for MastoFE." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:media_preview_proxy" +msgid "Media preview proxy" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:media_proxy" +msgid "Media proxy" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:modules" +msgid "Custom Runtime Modules" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf" +msgid "General MRF settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_activity_expiration" +msgid "Adds automatic expiration to all local activities" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_follow_bot" +msgid "Automatically follows newly discovered accounts." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_hashtag" +msgid "Reject, TWKN-remove or Set-Sensitive messsages with specific hashtags (without the leading #)\n\nNote: This MRF Policy is always enabled, if you want to disable it you have to set empty lists.\n" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_hellthread" +msgid "Block messages with excessive user mentions" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_keyword" +msgid "Reject or Word-Replace messages matching a keyword or [Regex](https://hexdocs.pm/elixir/Regex.html)." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_mention" +msgid "Block messages which mention a specific user" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_normalize_markup" +msgid "MRF NormalizeMarkup settings. Scrub configured hypertext markup." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_object_age" +msgid "Rejects or delists posts based on their timestamp deviance from your server's clock." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_rejectnonpublic" +msgid "RejectNonPublic drops posts with non-public visibility settings." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_simple" +msgid "Simple ingress policies" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_steal_emoji" +msgid "Steals emojis from selected instances when it sees them." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_subchain" +msgid "This policy processes messages through an alternate pipeline when a given message matches certain criteria. All criteria are configured as a map of regular expressions to lists of policy modules." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_vocabulary" +msgid "Filter messages which belong to certain activity vocabularies" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:oauth2" +msgid "Configure OAuth 2 provider capabilities" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:pools" +msgid "Advanced settings for `Gun` workers pools" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:populate_hashtags_table" +msgid "`populate_hashtags_table` background migration settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:rate_limit" +msgid "Rate limit settings. This is an advanced feature enabled only for :authentication by default." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:restrict_unauthenticated" +msgid "Disallow viewing timelines, user profiles and statuses for unauthenticated users." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:rich_media" +msgid "If enabled the instance will parse metadata from attached links to generate link previews" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:shout" +msgid "Pleroma shout settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:static_fe" +msgid "Render profiles and posts using server-generated HTML that is viewable without using JavaScript" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:streamer" +msgid "Settings for notifications streamer" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:uri_schemes" +msgid "URI schemes related settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:web_cache_ttl" +msgid "The expiration time for the web responses cache. Values should be in milliseconds or `nil` to disable expiration." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:welcome" +msgid "Welcome messages settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:workers" +msgid "Includes custom worker options not interpretable directly by `Oban`" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-ConcurrentLimiter" +msgid "Limits configuration for background tasks." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Oban" +msgid "[Oban](https://github.com/sorentwo/oban) asynchronous job processor configuration." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Captcha" +msgid "Captcha-related settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Captcha.Kocaptcha" +msgid "Kocaptcha is a very simple captcha service with a single API endpoint, the source code is here: https://github.com/koto-bank/kocaptcha. The default endpoint (https://captcha.kotobank.ch) is hosted by the developer." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer" +msgid "Mailer-related settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Emails.NewUsersDigestEmail" +msgid "New users admin email digest" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Emails.UserEmail" +msgid "Email template settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Formatter" +msgid "Configuration for Pleroma's link formatter which parses mentions, hashtags, and URLs." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.ScheduledActivity" +msgid "Scheduled activities settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Upload" +msgid "Upload general settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Upload.Filter.AnonymizeFilename" +msgid "Filter replaces the filename of the upload" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Upload.Filter.Mogrify" +msgid "Uploads mogrify filter settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Uploaders.Local" +msgid "Local uploader-related settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Uploaders.S3" +msgid "S3 uploader-related settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.User.Backup" +msgid "Account Backup" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http" +msgid "HTTP invalidate settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script" +msgid "Invalidation script settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Web.Metadata" +msgid "Metadata-related settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp" +msgid "`Pleroma.Web.Plugs.RemoteIp` is a shim to call [`RemoteIp`](https://git.pleroma.social/pleroma/remote_ip) but with runtime configuration.\n**If your instance is not behind at least one reverse proxy, you should not enable this plug.**\n" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Web.Preload" +msgid "Preload-related settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Workers.PurgeExpiredActivity" +msgid "Expired activities settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter" +msgid "Prometheus app metrics endpoint configuration" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :web_push_encryption-:vapid_details" +msgid "Web Push Notifications configuration. You can use the mix task mix web_push.gen.keypair to generate it." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :ex_aws-:s3" +msgid "S3" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :logger-:console" +msgid "Console Logger" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :logger-:ex_syslogger" +msgid "ExSyslogger" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:activitypub" +msgid "ActivityPub" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:assets" +msgid "Assets" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:auth" +msgid "Auth" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:connections_pool" +msgid "Connections pool" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:email_notifications" +msgid "Email notifications" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:emoji" +msgid "Emoji" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:features" +msgid "Features" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:feed" +msgid "Feed" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations" +msgid "Frontend configurations" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontends" +msgid "Frontends" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:gopher" +msgid "Gopher" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:hackney_pools" +msgid "Hackney pools" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:http" +msgid "HTTP" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:http_security" +msgid "HTTP security" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance" +msgid "Instance" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instances_favicons" +msgid "Instances favicons" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:ldap" +msgid "LDAP" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:majic_pool" +msgid "Majic pool" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:manifest" +msgid "Manifest" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:markup" +msgid "Markup Settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:media_preview_proxy" +msgid "Media preview proxy" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:media_proxy" +msgid "Media proxy" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:modules" +msgid "Modules" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf" +msgid "MRF" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_activity_expiration" +msgid "MRF Activity Expiration Policy" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_follow_bot" +msgid "MRF FollowBot Policy" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_hashtag" +msgid "MRF Hashtag" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_hellthread" +msgid "MRF Hellthread" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_keyword" +msgid "MRF Keyword" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_mention" +msgid "MRF Mention" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_normalize_markup" +msgid "MRF Normalize Markup" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_object_age" +msgid "MRF Object Age" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_rejectnonpublic" +msgid "MRF Reject Non Public" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_simple" +msgid "MRF Simple" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_steal_emoji" +msgid "MRF Emojis" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_subchain" +msgid "MRF Subchain" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_vocabulary" +msgid "MRF Vocabulary" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:oauth2" +msgid "OAuth2" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:pools" +msgid "Pools" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:populate_hashtags_table" +msgid "Populate hashtags table" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:rate_limit" +msgid "Rate limit" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:restrict_unauthenticated" +msgid "Restrict Unauthenticated" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:rich_media" +msgid "Rich media" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:shout" +msgid "Shout" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:static_fe" +msgid "Static FE" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:streamer" +msgid "Streamer" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:uri_schemes" +msgid "URI Schemes" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:user" +msgid "User" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:web_cache_ttl" +msgid "Web cache TTL" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:welcome" +msgid "Welcome" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:workers" +msgid "Workers" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-ConcurrentLimiter" +msgid "ConcurrentLimiter" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Oban" +msgid "Oban" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Captcha" +msgid "Pleroma.Captcha" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Captcha.Kocaptcha" +msgid "Pleroma.Captcha.Kocaptcha" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer" +msgid "Pleroma.Emails.Mailer" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.NewUsersDigestEmail" +msgid "Pleroma.Emails.NewUsersDigestEmail" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail" +msgid "Pleroma.Emails.UserEmail" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Formatter" +msgid "Linkify" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.ScheduledActivity" +msgid "Pleroma.ScheduledActivity" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Upload" +msgid "Pleroma.Upload" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Upload.Filter.AnonymizeFilename" +msgid "Pleroma.Upload.Filter.AnonymizeFilename" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Upload.Filter.Mogrify" +msgid "Pleroma.Upload.Filter.Mogrify" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Uploaders.Local" +msgid "Pleroma.Uploaders.Local" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Uploaders.S3" +msgid "Pleroma.Uploaders.S3" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.User" +msgid "Pleroma.User" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.User.Backup" +msgid "Pleroma.User.Backup" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Web.ApiSpec.CastAndValidate" +msgid "Pleroma.Web.ApiSpec.CastAndValidate" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http" +msgid "Pleroma.Web.MediaProxy.Invalidation.Http" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script" +msgid "Pleroma.Web.MediaProxy.Invalidation.Script" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Web.Metadata" +msgid "Pleroma.Web.Metadata" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp" +msgid "Pleroma.Web.Plugs.RemoteIp" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Web.Preload" +msgid "Pleroma.Web.Preload" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Workers.PurgeExpiredActivity" +msgid "Pleroma.Workers.PurgeExpiredActivity" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter" +msgid "Pleroma.Web.Endpoint.MetricsExporter" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :web_push_encryption-:vapid_details" +msgid "Vapid Details" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :esshd > :enabled" +msgid "Enables SSH" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :esshd > :handler" +msgid "Handler module" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :esshd > :password_authenticator" +msgid "Authenticator module" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :esshd > :port" +msgid "Port to connect" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :esshd > :priv_dir" +msgid "Dir with SSH keys" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :ex_aws-:s3 > :access_key_id" +msgid "S3 access key ID" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :ex_aws-:s3 > :host" +msgid "S3 host" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :ex_aws-:s3 > :region" +msgid "S3 region (for AWS)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :ex_aws-:s3 > :secret_access_key" +msgid "Secret access key" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :logger > :backends" +msgid "Where logs will be sent, :console - send logs to stdout, { ExSyslogger, :ex_syslogger } - to syslog, Quack.Logger - to Slack." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :logger-:console > :format" +msgid "Default: \"$date $time [$level] $levelpad$node $metadata $message\"" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :logger-:console > :level" +msgid "Log level" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :logger-:ex_syslogger > :format" +msgid "Default: \"$date $time [$level] $levelpad$node $metadata $message\"" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :logger-:ex_syslogger > :ident" +msgid "A string that's prepended to every message, and is typically set to the app name" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :logger-:ex_syslogger > :level" +msgid "Log level" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma > :admin_token" +msgid "Admin token" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:activitypub > :blockers_visible" +msgid "Whether a user can see someone who has blocked them" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:activitypub > :follow_handshake_timeout" +msgid "Following handshake timeout" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:activitypub > :note_replies_output_limit" +msgid "The number of Note replies' URIs to be included with outgoing federation (`5` to match Mastodon hardcoded value, `0` to disable the output)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:activitypub > :outgoing_blocks" +msgid "Whether to federate blocks to other instances" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:activitypub > :sign_object_fetches" +msgid "Sign object fetches with HTTP signatures" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:activitypub > :unfollow_blocked" +msgid "Whether blocks result in people getting unfollowed" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:assets > :default_mascot" +msgid "This will be used as the default mascot on MastoFE. Default: `:pleroma_fox_tan`" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:assets > :default_user_avatar" +msgid "URL of the default user avatar" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:assets > :mascots" +msgid "Keyword of mascots, each element must contain both an URL and a mime_type key" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:auth > :auth_template" +msgid "Authentication form template. By default it's `show.html` which corresponds to `lib/pleroma/web/templates/o_auth/o_auth/show.html.ee`." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:auth > :enforce_oauth_admin_scope_usage" +msgid "OAuth admin scope requirement toggle. If enabled, admin actions explicitly demand admin OAuth scope(s) presence in OAuth token (client app must support admin scopes). If disabled and token doesn't have admin scope(s), `is_admin` user flag grants access to admin-specific actions." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:auth > :oauth_consumer_strategies" +msgid "The list of enabled OAuth consumer strategies. By default it's set by OAUTH_CONSUMER_STRATEGIES environment variable. Each entry in this space-delimited string should be of format \"strategy\" or \"strategy:dependency\" (e.g. twitter or keycloak:ueberauth_keycloak_strategy in case dependency is named differently than ueberauth_)." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:auth > :oauth_consumer_template" +msgid "OAuth consumer mode authentication form template. By default it's `consumer.html` which corresponds to `lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex`." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:connections_pool > :connect_timeout" +msgid "Timeout while `gun` will wait until connection is up. Default: 5000ms." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:connections_pool > :connection_acquisition_retries" +msgid "Number of attempts to acquire the connection from the pool if it is overloaded. Default: 5" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:connections_pool > :connection_acquisition_wait" +msgid "Timeout to acquire a connection from pool. The total max time is this value multiplied by the number of retries. Default: 250ms." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:connections_pool > :max_connections" +msgid "Maximum number of connections in the pool. Default: 250 connections." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:connections_pool > :reclaim_multiplier" +msgid "Multiplier for the number of idle connection to be reclaimed if the pool is full. For example if the pool maxes out at 250 connections and this setting is set to 0.3, the pool will reclaim at most 75 idle connections if it's overloaded. Default: 0.1" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:email_notifications > :digest" +msgid "emails of \"what you've missed\" for users who have been inactive for a while" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:email_notifications > :digest > :active" +msgid "Globally enable or disable digest emails" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:email_notifications > :digest > :inactivity_threshold" +msgid "Minimum user inactivity threshold" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:email_notifications > :digest > :interval" +msgid "Minimum interval between digest emails to one user" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:email_notifications > :digest > :schedule" +msgid "When to send digest email, in crontab format. \"0 0 0\" is the default, meaning \"once a week at midnight on Sunday morning\"." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:emoji > :default_manifest" +msgid "Location of the JSON-manifest. This manifest contains information about the emoji-packs you can download. Currently only one manifest can be added (no arrays)." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:emoji > :groups" +msgid "Emojis are ordered in groups (tags). This is an array of key-value pairs where the key is the group name and the value is the location or array of locations. * can be used as a wildcard." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:emoji > :pack_extensions" +msgid "A list of file extensions for emojis, when no emoji.txt for a pack is present" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:emoji > :shortcode_globs" +msgid "Location of custom emoji files. * can be used as a wildcard." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:features > :improved_hashtag_timeline" +msgid "Setting to force toggle / force disable improved hashtags timeline. `:enabled` forces hashtags to be fetched from `hashtags` table for hashtags timeline. `:disabled` forces object-embedded hashtags to be used (slower). Keep it `:auto` for automatic behaviour (it is auto-set to `:enabled` [unless overridden] when HashtagsTableMigrator completes)." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:feed > :post_title" +msgid "Configure title rendering" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:feed > :post_title > :max_length" +msgid "Maximum number of characters before truncating title" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:feed > :post_title > :omission" +msgid "Replacement which will be used after truncating string" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe" +msgid "Settings for Pleroma FE" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :alwaysShowSubjectInput" +msgid "When disabled, auto-hide the subject field if it's empty" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :background" +msgid "URL of the background, unless viewing a user profile with a background that is set" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :collapseMessageWithSubject" +msgid "When a message has a subject (aka Content Warning), collapse it by default" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :greentext" +msgid "Enables green text on lines prefixed with the > character" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hideFilteredStatuses" +msgid "Hides filtered statuses from timelines" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hideMutedPosts" +msgid "Hides muted statuses from timelines" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hidePostStats" +msgid "Hide notices statistics (repeats, favorites, ...)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hideSitename" +msgid "Hides instance name from PleromaFE banner" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hideUserStats" +msgid "Hide profile statistics (posts, posts per day, followers, followings, ...)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :logo" +msgid "URL of the logo, defaults to Pleroma's logo" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :logoMargin" +msgid "Allows you to adjust vertical margins between logo boundary and navbar borders. The idea is that to have logo's image without any extra margins and instead adjust them to your need in layout." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :logoMask" +msgid "By default it assumes logo used will be monochrome with alpha channel to be compatible with both light and dark themes. If you want a colorful logo you must disable logoMask." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :minimalScopesMode" +msgid "Limit scope selection to Direct, User default, and Scope of post replying to. Also prevents replying to a DM with a public post from PleromaFE." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :nsfwCensorImage" +msgid "URL of the image to use for hiding NSFW media attachments in the timeline" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :postContentType" +msgid "Default post formatting option" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :redirectRootLogin" +msgid "Relative URL which indicates where to redirect when a user is logged in" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :redirectRootNoLogin" +msgid "Relative URL which indicates where to redirect when a user isn't logged in" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :scopeCopy" +msgid "Copy the scope (private/unlisted/public) in replies to posts by default" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :showFeaturesPanel" +msgid "Enables panel displaying functionality of the instance on the About page" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :showInstanceSpecificPanel" +msgid "Whether to show the instance's custom panel" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :sidebarRight" +msgid "Change alignment of sidebar and panels to the right" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :subjectLineBehavior" +msgid "Allows changing the default behaviour of subject lines in replies.\n `email`: copy and preprend re:, as in email,\n `masto`: copy verbatim, as in Mastodon,\n `noop`: don't copy the subject." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :theme" +msgid "Which theme to use. Available themes are defined in styles.json" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontends > :admin" +msgid "Admin frontend" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontends > :admin > name" +msgid "Name of the installed frontend. Valid config must include both `Name` and `Reference` values." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontends > :admin > ref" +msgid "Reference of the installed frontend to be used. Valid config must include both `Name` and `Reference` values." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontends > :available" +msgid "A map containing available frontends and parameters for their installation." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontends > :available > build_dir" +msgid "The directory inside the zip file " +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontends > :available > build_url" +msgid "Either an url to a zip file containing the frontend or a template to build it by inserting the `ref`. The string `${ref}` will be replaced by the configured `ref`." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontends > :available > custom-http-headers" +msgid "The custom HTTP headers for the frontend" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontends > :available > git" +msgid "URL of the git repository of the frontend" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontends > :available > name" +msgid "Name of the frontend." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontends > :available > ref" +msgid "Reference of the frontend to be used." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontends > :primary" +msgid "Primary frontend, the one that is served for all pages by default" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontends > :primary > name" +msgid "Name of the installed frontend. Valid config must include both `Name` and `Reference` values." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontends > :primary > ref" +msgid "Reference of the installed frontend to be used. Valid config must include both `Name` and `Reference` values." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:gopher > :dstport" +msgid "Port advertised in URLs (optional, defaults to port)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:gopher > :enabled" +msgid "Enables the gopher interface" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:gopher > :ip" +msgid "IP address to bind to" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:gopher > :port" +msgid "Port to bind to" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:hackney_pools > :federation" +msgid "Settings for federation pool." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:hackney_pools > :federation > :max_connections" +msgid "Number workers in the pool." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:hackney_pools > :federation > :timeout" +msgid "Timeout while `hackney` will wait for response." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:hackney_pools > :media" +msgid "Settings for media pool." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:hackney_pools > :media > :max_connections" +msgid "Number workers in the pool." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:hackney_pools > :media > :timeout" +msgid "Timeout while `hackney` will wait for response." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:hackney_pools > :upload" +msgid "Settings for upload pool." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:hackney_pools > :upload > :max_connections" +msgid "Number workers in the pool." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:hackney_pools > :upload > :timeout" +msgid "Timeout while `hackney` will wait for response." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:http > :adapter" +msgid "Adapter specific options" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:http > :adapter > :ssl_options" +msgid "SSL options for HTTP adapter" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:http > :adapter > :ssl_options > :versions" +msgid "List of TLS version to use" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:http > :proxy_url" +msgid "Proxy URL" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:http > :user_agent" +msgid "What user agent to use. Must be a string or an atom `:default`. Default value is `:default`." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:http_security > :ct_max_age" +msgid "The maximum age for the Expect-CT header if sent" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:http_security > :enabled" +msgid "Whether the managed content security policy is enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:http_security > :referrer_policy" +msgid "The referrer policy to use, either \"same-origin\" or \"no-referrer\"" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:http_security > :report_uri" +msgid "Adds the specified URL to report-uri and report-to group in CSP header" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:http_security > :sts" +msgid "Whether to additionally send a Strict-Transport-Security header" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:http_security > :sts_max_age" +msgid "The maximum age for the Strict-Transport-Security header if sent" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :account_activation_required" +msgid "Require users to confirm their emails before signing in" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :account_approval_required" +msgid "Require users to be manually approved by an admin before signing in" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :account_field_name_length" +msgid "An account field name maximum length. Default: 512." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :account_field_value_length" +msgid "An account field value maximum length. Default: 2048." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :allow_relay" +msgid "Permits remote instances to subscribe to all public posts of your instance. (Important!) This may increase the visibility of your instance." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :allowed_post_formats" +msgid "MIME-type list of formats allowed to be posted (transformed into HTML)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :attachment_links" +msgid "Enable to automatically add attachment link text to statuses" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :autofollowed_nicknames" +msgid "Set to nicknames of (local) users that every new user should automatically follow" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :autofollowing_nicknames" +msgid "Set to nicknames of (local) users that automatically follows every newly registered user" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :avatar_upload_limit" +msgid "File size limit of user's profile avatars" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :background_upload_limit" +msgid "File size limit of user's profile backgrounds" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :banner_upload_limit" +msgid "File size limit of user's profile banners" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :birthday_min_age" +msgid "Minimum required age for users to create account. Only used if birthday is required." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :birthday_required" +msgid "Require users to enter their birthday." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :cleanup_attachments" +msgid "Enable to remove associated attachments when status is removed.\nThis will not affect duplicates and attachments without status.\nEnabling this will increase load to database when deleting statuses on larger instances.\n" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :description" +msgid "The instance's description. It can be seen in nodeinfo and `/api/v1/instance`" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :email" +msgid "Email used to reach an Administrator/Moderator of the instance" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :extended_nickname_format" +msgid "Enable to use extended local nicknames format (allows underscores/dashes). This will break federation with older software for theses nicknames." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :external_user_synchronization" +msgid "Enabling following/followers counters synchronization for external users" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :federating" +msgid "Enable federation with other instances" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :federation_incoming_replies_max_depth" +msgid "Max. depth of reply-to and reply activities fetching on incoming federation, to prevent out-of-memory situations while fetching very long threads. If set to `nil`, threads of any depth will be fetched. Lower this value if you experience out-of-memory crashes." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :federation_reachability_timeout_days" +msgid "Timeout (in days) of each external federation target being unreachable prior to pausing federating to it" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :healthcheck" +msgid "If enabled, system data will be shown on `/api/pleroma/healthcheck`" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :instance_thumbnail" +msgid "The instance thumbnail can be any image that represents your instance and is used by some apps or services when they display information about your instance." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :invites_enabled" +msgid "Enable user invitations for admins (depends on `registrations_open` being disabled)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :limit" +msgid "Posts character limit (CW/Subject included in the counter)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :limit_to_local_content" +msgid "Limit unauthenticated users to search for local statutes and users only. Default: `:unauthenticated`." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :max_account_fields" +msgid "The maximum number of custom fields in the user profile. Default: 10." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :max_endorsed_users" +msgid "The maximum number of recommended accounts. 0 will disable the feature." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :max_media_attachments" +msgid "Maximum number of post media attachments" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :max_pinned_statuses" +msgid "The maximum number of pinned statuses. 0 will disable the feature." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :max_remote_account_fields" +msgid "The maximum number of custom fields in the remote user profile. Default: 20." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :max_report_comment_size" +msgid "The maximum size of the report comment. Default: 1000." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication" +msgid "Multi-factor authentication settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :backup_codes" +msgid "MFA backup codes settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :backup_codes > :length" +msgid "Determines the length of backup one-time pass-codes, in characters. Defaults to 16 characters." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :backup_codes > :number" +msgid "Number of backup codes to generate." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :totp" +msgid "TOTP settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :totp > :digits" +msgid "Determines the length of a one-time pass-code, in characters. Defaults to 6 characters." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :totp > :period" +msgid "A period for which the TOTP code will be valid, in seconds. Defaults to 30 seconds." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :name" +msgid "Name of the instance" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :notify_email" +msgid "Envelope FROM address for mail sent via Pleroma" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :poll_limits" +msgid "A map with poll limits for local polls" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :poll_limits > :max_expiration" +msgid "Maximum expiration time (in seconds)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :poll_limits > :max_option_chars" +msgid "Maximum number of characters per option" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :poll_limits > :max_options" +msgid "Maximum number of options" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :poll_limits > :min_expiration" +msgid "Minimum expiration time (in seconds)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :privileged_staff" +msgid "Let moderators access sensitive data (e.g. updating user credentials, get password reset token, delete users, index and read private statuses and chats)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :profile_directory" +msgid "Enable profile directory." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :public" +msgid "Makes the client API in authenticated mode-only except for user-profiles. Useful for disabling the Local Timeline and The Whole Known Network. Note: when setting to `false`, please also check `:restrict_unauthenticated` setting." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :quarantined_instances" +msgid "List of ActivityPub instances where private (DMs, followers-only) activities will not be sent and the reason for doing so" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :registration_reason_length" +msgid "Maximum registration reason length. Default: 500." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :registrations_open" +msgid "Enable registrations for anyone. Invitations require this setting to be disabled." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :remote_limit" +msgid "Hard character limit beyond which remote posts will be dropped" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :remote_post_retention_days" +msgid "The default amount of days to retain remote posts when pruning the database" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :safe_dm_mentions" +msgid "If enabled, only mentions at the beginning of a post will be used to address people in direct messages. This is to prevent accidental mentioning of people when talking about them (e.g. \"@admin please keep an eye on @bad_actor\"). Default: disabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :show_reactions" +msgid "Let favourites and emoji reactions be viewed through the API." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :skip_thread_containment" +msgid "Skip filtering out broken threads. Default: enabled." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :static_dir" +msgid "Instance static directory" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :upload_limit" +msgid "File size limit of uploads (except for avatar, background, banner)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :user_bio_length" +msgid "A user bio maximum length. Default: 5000." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :user_name_length" +msgid "A user name maximum length. Default: 100." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instances_favicons > :enabled" +msgid "Allow/disallow displaying and getting instances favicons" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:ldap > :base" +msgid "LDAP base, e.g. \"dc=example,dc=com\"" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:ldap > :enabled" +msgid "Enables LDAP authentication" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:ldap > :host" +msgid "LDAP server hostname" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:ldap > :port" +msgid "LDAP port, e.g. 389 or 636" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:ldap > :ssl" +msgid "Enable to use SSL, usually implies the port 636" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:ldap > :sslopts" +msgid "Additional SSL options" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:ldap > :sslopts > :cacertfile" +msgid "Path to file with PEM encoded cacerts" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:ldap > :sslopts > :verify" +msgid "Type of cert verification" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:ldap > :tls" +msgid "Enable to use STARTTLS, usually implies the port 389" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:ldap > :tlsopts" +msgid "Additional TLS options" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:ldap > :tlsopts > :cacertfile" +msgid "Path to file with PEM encoded cacerts" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:ldap > :tlsopts > :verify" +msgid "Type of cert verification" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:ldap > :uid" +msgid "LDAP attribute name to authenticate the user, e.g. when \"cn\", the filter will be \"cn=username,base\"" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:majic_pool > :size" +msgid "Number of majic workers to start." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:manifest > :background_color" +msgid "Describe the background color of the app" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:manifest > :icons" +msgid "Describe the icons of the app" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:manifest > :theme_color" +msgid "Describe the theme color of the app" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:markup > :scrub_policy" +msgid "Module names are shortened (removed leading `Pleroma.HTML.` part), but on adding custom module you need to use full name." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:media_preview_proxy > :enabled" +msgid "Enables proxying of remote media preview to the instance's proxy. Requires enabled media proxy." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:media_preview_proxy > :image_quality" +msgid "Quality of the output. Ranges from 0 (min quality) to 100 (max quality)." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:media_preview_proxy > :min_content_length" +msgid "Min content length (in bytes) to perform preview. Media smaller in size will be served without thumbnailing." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:media_preview_proxy > :thumbnail_max_height" +msgid "Max height of preview thumbnail for images (video preview always has original dimensions)." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:media_preview_proxy > :thumbnail_max_width" +msgid "Max width of preview thumbnail for images (video preview always has original dimensions)." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:media_proxy > :base_url" +msgid "The base URL to access a user-uploaded file. Useful when you want to proxy the media files via another host/CDN fronts." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:media_proxy > :enabled" +msgid "Enables proxying of remote media via the instance's proxy" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:media_proxy > :invalidation > :enabled" +msgid "Enables media cache object invalidation." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:media_proxy > :invalidation > :provider" +msgid "Module which will be used to purge objects from the cache." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:media_proxy > :proxy_opts" +msgid "Internal Pleroma.ReverseProxy settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:media_proxy > :proxy_opts > :max_body_length" +msgid "Maximum file size (in bytes) allowed through the Pleroma MediaProxy cache." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:media_proxy > :proxy_opts > :max_read_duration" +msgid "Timeout (in milliseconds) of GET request to the remote URI." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:media_proxy > :proxy_opts > :redirect_on_failure" +msgid "Redirects the client to the origin server upon encountering HTTP errors.\n\nNote that files larger than Max Body Length will trigger an error. (e.g., Peertube videos)\n\n\n**WARNING:** This setting will allow larger files to be accessed, but exposes the\n\nIP addresses of your users to the other servers, bypassing the MediaProxy.\n" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:media_proxy > :whitelist" +msgid "List of hosts with scheme to bypass the MediaProxy" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:modules > :runtime_dir" +msgid "A path to custom Elixir modules (such as MRF policies)." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf > :policies" +msgid "A list of MRF policies enabled. Module names are shortened (removed leading `Pleroma.Web.ActivityPub.MRF.` part), but on adding custom module you need to use full name." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf > :transparency" +msgid "Make the content of your Message Rewrite Facility settings public (via nodeinfo)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf > :transparency_exclusions" +msgid "Exclude specific instance names from MRF transparency. The use of the exclusions feature will be disclosed in nodeinfo as a boolean value. You can also provide a reason for excluding these instance names. The instances and reasons won't be publicly disclosed." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_activity_expiration > :days" +msgid "Default global expiration time for all local activities (in days)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_follow_bot > :follower_nickname" +msgid "The name of the bot account to use for following newly discovered users." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_hashtag > :federated_timeline_removal" +msgid "A list of hashtags which result in message being removed from federated timelines (a.k.a unlisted)." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_hashtag > :reject" +msgid "A list of hashtags which result in message being rejected." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_hashtag > :sensitive" +msgid "A list of hashtags which result in message being set as sensitive (a.k.a NSFW/R-18)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_hellthread > :delist_threshold" +msgid "Number of mentioned users after which the message gets removed from timelines anddisables notifications. Set to 0 to disable." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_hellthread > :reject_threshold" +msgid "Number of mentioned users after which the messaged gets rejected. Set to 0 to disable." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_keyword > :federated_timeline_removal" +msgid " A list of patterns which result in message being removed from federated timelines (a.k.a unlisted).\n\n Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`.\n" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_keyword > :reject" +msgid " A list of patterns which result in message being rejected.\n\n Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`.\n" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_keyword > :replace" +msgid " **Pattern**: a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`.\n\n **Replacement**: a string. Leaving the field empty is permitted.\n" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_mention > :actors" +msgid "A list of actors for which any post mentioning them will be dropped" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_object_age > :actions" +msgid "A list of actions to apply to the post. `:delist` removes the post from public timelines; `:strip_followers` removes followers from the ActivityPub recipient list ensuring they won't be delivered to home timelines; `:reject` rejects the message entirely" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_object_age > :threshold" +msgid "Required age (in seconds) of a post before actions are taken." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_rejectnonpublic > :allow_direct" +msgid "Whether to allow direct messages" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_rejectnonpublic > :allow_followersonly" +msgid "Whether to allow followers-only posts" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_simple > :accept" +msgid "List of instances to only accept activities from (except deletes) and the reason for doing so" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_simple > :avatar_removal" +msgid "List of instances to strip avatars from and the reason for doing so" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_simple > :banner_removal" +msgid "List of instances to strip banners from and the reason for doing so" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_simple > :federated_timeline_removal" +msgid "List of instances to remove from the Federated (aka The Whole Known Network) Timeline and the reason for doing so" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_simple > :followers_only" +msgid "Force posts from the given instances to be visible by followers only and the reason for doing so" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_simple > :media_nsfw" +msgid "List of instances to tag all media as NSFW (sensitive) from and the reason for doing so" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_simple > :media_removal" +msgid "List of instances to strip media attachments from and the reason for doing so" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_simple > :reject" +msgid "List of instances to reject activities from (except deletes) and the reason for doing so" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_simple > :reject_deletes" +msgid "List of instances to reject deletions from and the reason for doing so" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_simple > :report_removal" +msgid "List of instances to reject reports from and the reason for doing so" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_steal_emoji > :hosts" +msgid "List of hosts to steal emojis from" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_steal_emoji > :rejected_shortcodes" +msgid " A list of patterns or matches to reject shortcodes with.\n\n Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`.\n" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_steal_emoji > :size_limit" +msgid "File size limit (in bytes), checked before an emoji is saved to the disk" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_subchain > :match_actor" +msgid "Matches a series of regular expressions against the actor field" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_vocabulary > :accept" +msgid "A list of ActivityStreams terms to accept. If empty, all supported messages are accepted." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_vocabulary > :reject" +msgid "A list of ActivityStreams terms to reject. If empty, no messages are rejected." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:oauth2 > :clean_expired_tokens" +msgid "Enable a background job to clean expired OAuth tokens. Default: disabled." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:oauth2 > :issue_new_refresh_token" +msgid "Keeps old refresh token or generate new refresh token when to obtain an access token" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:oauth2 > :token_expires_in" +msgid "The lifetime in seconds of the access token" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:pools > :default" +msgid "Settings for default pool." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:pools > :default > :max_waiting" +msgid "Maximum number of requests waiting for other requests to finish. After this number is reached, the pool will start returning errrors when a new request is made" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:pools > :default > :recv_timeout" +msgid "Timeout for the pool while gun will wait for response" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:pools > :default > :size" +msgid "Maximum number of concurrent requests in the pool." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:pools > :federation" +msgid "Settings for federation pool." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:pools > :federation > :max_waiting" +msgid "Maximum number of requests waiting for other requests to finish. After this number is reached, the pool will start returning errrors when a new request is made" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:pools > :federation > :recv_timeout" +msgid "Timeout for the pool while gun will wait for response" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:pools > :federation > :size" +msgid "Maximum number of concurrent requests in the pool." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:pools > :media" +msgid "Settings for media pool." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:pools > :media > :max_waiting" +msgid "Maximum number of requests waiting for other requests to finish. After this number is reached, the pool will start returning errrors when a new request is made" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:pools > :media > :recv_timeout" +msgid "Timeout for the pool while gun will wait for response" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:pools > :media > :size" +msgid "Maximum number of concurrent requests in the pool." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:pools > :upload" +msgid "Settings for upload pool." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:pools > :upload > :max_waiting" +msgid "Maximum number of requests waiting for other requests to finish. After this number is reached, the pool will start returning errrors when a new request is made" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:pools > :upload > :recv_timeout" +msgid "Timeout for the pool while gun will wait for response" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:pools > :upload > :size" +msgid "Maximum number of concurrent requests in the pool." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:populate_hashtags_table > :fault_rate_allowance" +msgid "Max accepted rate of objects that failed in the migration. Any value from 0.0 which tolerates no errors to 1.0 which will enable the feature even if hashtags transfer failed for all records." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:populate_hashtags_table > :sleep_interval_ms" +msgid "Sleep interval between each chunk of processed records in order to decrease the load on the system (defaults to 0 and should be keep default on most instances)." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:rate_limit > :app_account_creation" +msgid "For registering user accounts from the same IP address" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:rate_limit > :authentication" +msgid "For authentication create / password check / user existence check requests" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:rate_limit > :relation_id_action" +msgid "For actions on relation with a specific user (follow, unfollow)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:rate_limit > :relations_actions" +msgid "For actions on relationships with all users (follow, unfollow)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:rate_limit > :search" +msgid "For the search requests (account & status search etc.)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:rate_limit > :status_id_action" +msgid "For fav / unfav or reblog / unreblog actions on the same status by the same user" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:rate_limit > :statuses_actions" +msgid "For create / delete / fav / unfav / reblog / unreblog actions on any statuses" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:rate_limit > :timeline" +msgid "For requests to timelines (each timeline has it's own limiter)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:restrict_unauthenticated > :activities" +msgid "Settings for statuses." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:restrict_unauthenticated > :activities > :local" +msgid "Disallow view local statuses." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:restrict_unauthenticated > :activities > :remote" +msgid "Disallow view remote statuses." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:restrict_unauthenticated > :profiles" +msgid "Settings for user profiles." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:restrict_unauthenticated > :profiles > :local" +msgid "Disallow view local user profiles." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:restrict_unauthenticated > :profiles > :remote" +msgid "Disallow view remote user profiles." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:restrict_unauthenticated > :timelines" +msgid "Settings for public and federated timelines." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:restrict_unauthenticated > :timelines > :federated" +msgid "Disallow view federated timeline." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:restrict_unauthenticated > :timelines > :local" +msgid "Disallow view public timeline." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:rich_media > :enabled" +msgid "Enables RichMedia parsing of URLs" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:rich_media > :failure_backoff" +msgid "Amount of milliseconds after request failure, during which the request will not be retried." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:rich_media > :ignore_hosts" +msgid "List of hosts which will be ignored by the metadata parser" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:rich_media > :ignore_tld" +msgid "List TLDs (top-level domains) which will ignore for parse metadata" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:rich_media > :parsers" +msgid "List of Rich Media parsers. Module names are shortened (removed leading `Pleroma.Web.RichMedia.Parsers.` part), but on adding custom module you need to use full name." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:rich_media > :ttl_setters" +msgid "List of rich media TTL setters. Module names are shortened (removed leading `Pleroma.Web.RichMedia.Parser.` part), but on adding custom module you need to use full name." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:shout > :enabled" +msgid "Enables the backend Shoutbox chat feature." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:shout > :limit" +msgid "Shout message character limit." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:static_fe > :enabled" +msgid "Enables the rendering of static HTML. Default: disabled." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:streamer > :overflow_workers" +msgid "Maximum number of workers created if pool is empty" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:streamer > :workers" +msgid "Number of workers to send notifications" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:uri_schemes > :valid_schemes" +msgid "List of the scheme part that is considered valid to be an URL" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:web_cache_ttl > :activity_pub" +msgid "Activity pub routes (except question activities). Default: `nil` (no expiration)." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:web_cache_ttl > :activity_pub_question" +msgid "Activity pub routes (question activities). Default: `30_000` (30 seconds)." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:welcome > :chat_message > :enabled" +msgid "Enables sending a chat message to newly registered users" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:welcome > :chat_message > :message" +msgid "A message that will be sent to newly registered users as a chat message" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:welcome > :chat_message > :sender_nickname" +msgid "The nickname of the local user that sends a welcome chat message" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:welcome > :direct_message > :enabled" +msgid "Enables sending a direct message to newly registered users" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:welcome > :direct_message > :message" +msgid "A message that will be sent to newly registered users" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:welcome > :direct_message > :sender_nickname" +msgid "The nickname of the local user that sends a welcome message" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:welcome > :email > :enabled" +msgid "Enables sending an email to newly registered users" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:welcome > :email > :html" +msgid "HTML content of the welcome email. EEX template with user and instance_name variables can be used." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:welcome > :email > :sender" +msgid "Email address and/or nickname that will be used to send the welcome email." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:welcome > :email > :subject" +msgid "Subject of the welcome email. EEX template with user and instance_name variables can be used." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:welcome > :email > :text" +msgid "Text content of the welcome email. EEX template with user and instance_name variables can be used." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:workers > :retries" +msgid "Max retry attempts for failed jobs, per `Oban` queue" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy" +msgid "Concurrent limits configuration for MediaProxyWarmingPolicy." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy > :max_running" +msgid "Max running concurrently jobs." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy > :max_waiting" +msgid "Max waiting jobs." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers" +msgid "Concurrent limits configuration for getting RichMedia for activities." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers > :max_running" +msgid "Max running concurrently jobs." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers > :max_waiting" +msgid "Max waiting jobs." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Oban > :crontab" +msgid "Settings for cron background jobs" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Oban > :log" +msgid "Logs verbose mode" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Oban > :queues" +msgid "Background jobs queues (keys: queues, values: max numbers of concurrent jobs)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Oban > :queues > :activity_expiration" +msgid "Activity expiration queue" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Oban > :queues > :attachments_cleanup" +msgid "Attachment deletion queue" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Oban > :queues > :background" +msgid "Background queue" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Oban > :queues > :backup" +msgid "Backup queue" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Oban > :queues > :federator_incoming" +msgid "Incoming federation queue" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Oban > :queues > :federator_outgoing" +msgid "Outgoing federation queue" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Oban > :queues > :mailer" +msgid "Email sender queue, see Pleroma.Emails.Mailer" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Oban > :queues > :scheduled_activities" +msgid "Scheduled activities queue, see Pleroma.ScheduledActivities" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Oban > :queues > :transmogrifier" +msgid "Transmogrifier queue" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Oban > :queues > :web_push" +msgid "Web push notifications queue" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Captcha > :enabled" +msgid "Whether the captcha should be shown on registration" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Captcha > :method" +msgid "The method/service to use for captcha" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Captcha > :seconds_valid" +msgid "The time in seconds for which the captcha is valid" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Captcha.Kocaptcha > :endpoint" +msgid "The kocaptcha endpoint to use" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > :adapter" +msgid "One of the mail adapters listed in [Swoosh documentation](https://hexdocs.pm/swoosh/Swoosh.html#module-adapters)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:auth" +msgid "SMTP AUTH enforcement mode" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:password" +msgid "SMTP AUTH password" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:port" +msgid "SMTP port" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:relay" +msgid "Hostname or IP address" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:retries" +msgid "SMTP temporary (4xx) error retries" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:ssl" +msgid "Use Implicit SSL/TLS. e.g. port 465" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:tls" +msgid "Explicit TLS (STARTTLS) enforcement mode" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:username" +msgid "SMTP AUTH username" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Emails.NewUsersDigestEmail > :enabled" +msgid "Enables new users admin digest email when `true`" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Emails.UserEmail > :logo" +msgid "A path to a custom logo. Set it to `nil` to use the default Pleroma logo." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Emails.UserEmail > :styling" +msgid "A map with color settings for email templates." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Formatter > :class" +msgid "Specify the class to be added to the generated link. Disable to clear." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Formatter > :extra" +msgid "Link URLs with rarely used schemes (magnet, ipfs, irc, etc.)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Formatter > :new_window" +msgid "Link URLs will open in a new window/tab." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Formatter > :rel" +msgid "Override the rel attribute. Disable to clear." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Formatter > :strip_prefix" +msgid "Strip the scheme prefix." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Formatter > :truncate" +msgid "Set to a number to truncate URLs longer than the number. Truncated URLs will end in `...`" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Formatter > :validate_tld" +msgid "Set to false to disable TLD validation for URLs/emails. Can be set to :no_scheme to validate TLDs only for URLs without a scheme (e.g `example.com` will be validated, but `http://example.loki` won't)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.ScheduledActivity > :daily_user_limit" +msgid "The number of scheduled activities a user is allowed to create in a single day. Default: 25." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.ScheduledActivity > :enabled" +msgid "Whether scheduled activities are sent to the job queue to be executed" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.ScheduledActivity > :total_user_limit" +msgid "The number of scheduled activities a user is allowed to create in total. Default: 300." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Upload > :base_url" +msgid "Base URL for the uploads. Required if you use a CDN or host attachments under a different domain." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Upload > :filename_display_max_length" +msgid "Set max length of a filename to display. 0 = no limit. Default: 30" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Upload > :filters" +msgid "List of filter modules for uploads. Module names are shortened (removed leading `Pleroma.Upload.Filter.` part), but on adding custom module you need to use full name." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Upload > :link_name" +msgid "If enabled, a name parameter will be added to the URL of the upload. For example `https://instance.tld/media/imagehash.png?name=realname.png`." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Upload > :proxy_remote" +msgid "Proxy requests to the remote uploader.\n\nUseful if media upload endpoint is not internet accessible.\n" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Upload > :uploader" +msgid "Module which will be used for uploads" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Upload.Filter.AnonymizeFilename > :text" +msgid "Text to replace filenames in links. If no setting, {random}.extension will be used. You can get the original filename extension by using {extension}, for example custom-file-name.{extension}." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Upload.Filter.Mogrify > :args" +msgid "List of actions for the mogrify command. It's possible to add self-written settings as string. For example `auto-orient, strip, {\"resize\", \"3840x1080>\"}` value will be parsed into valid list of the settings." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Uploaders.Local > :uploads" +msgid "Path where user's uploads will be saved" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Uploaders.S3 > :bucket" +msgid "S3 bucket" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Uploaders.S3 > :bucket_namespace" +msgid "S3 bucket namespace" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Uploaders.S3 > :streaming_enabled" +msgid "Enable streaming uploads, when enabled the file will be sent to the server in chunks as it's being read. This may be unsupported by some providers, try disabling this if you have upload problems." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Uploaders.S3 > :truncated_namespace" +msgid "If you use S3 compatible service such as Digital Ocean Spaces or CDN, set folder name or \"\" etc. For example, when using CDN to S3 virtual host format, set \"\". At this time, write CNAME to CDN in Upload base_url." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.User > :email_blacklist" +msgid "List of email domains users may not register with." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.User > :restricted_nicknames" +msgid "List of nicknames users may not register with." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.User.Backup > :limit_days" +msgid "Limit user to export not more often than once per N days" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.User.Backup > :purge_after_days" +msgid "Remove backup achives after N days" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Web.ApiSpec.CastAndValidate > :strict" +msgid "Enables strict input validation (useful in development, not recommended in production)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :headers" +msgid "HTTP headers of request" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :method" +msgid "HTTP method of request. Default: :purge" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :options" +msgid "Request options" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :script_path" +msgid "Path to executable script which will purge cached items." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :url_format" +msgid "Optional URL format preprocessing. Only required for Apache's htcacheclean." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Web.Metadata > :providers" +msgid "List of metadata providers to enable" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Web.Metadata > :unfurl_nsfw" +msgid "When enabled NSFW attachments will be shown in previews" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp > :enabled" +msgid "Enable/disable the plug. Default: disabled." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp > :headers" +msgid " A list of strings naming the HTTP headers to use when deriving the true client IP. Default: `[\"x-forwarded-for\"]`.\n" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp > :proxies" +msgid "A list of upstream proxy IP subnets in CIDR notation from which we will parse the content of `headers`. Defaults to `[]`. IPv4 entries without a bitmask will be assumed to be /32 and IPv6 /128." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp > :reserved" +msgid " A list of reserved IP subnets in CIDR notation which should be ignored if found in `headers`. Defaults to `[\"127.0.0.0/8\", \"::1/128\", \"fc00::/7\", \"10.0.0.0/8\", \"172.16.0.0/12\", \"192.168.0.0/16\"]`\n" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Web.Preload > :providers" +msgid "List of preload providers to enable" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :enabled" +msgid "Enables expired activities addition & deletion" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :min_lifetime" +msgid "Minimum lifetime for ephemeral activity (in seconds)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :auth" +msgid "Enables HTTP Basic Auth for app metrics endpoint." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :enabled" +msgid "[Pleroma extension] Enables app metrics endpoint." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :format" +msgid "App metrics endpoint output format." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :ip_whitelist" +msgid "Restrict access of app metrics endpoint to the specified IP addresses." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :path" +msgid "App metrics endpoint URI path." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :quack > :level" +msgid "Log level" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :quack > :meta" +msgid "Configure which metadata you want to report on" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :quack > :webhook_url" +msgid "Configure the Slack incoming webhook" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :web_push_encryption-:vapid_details > :private_key" +msgid "VAPID private key" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :web_push_encryption-:vapid_details > :public_key" +msgid "VAPID public key" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :web_push_encryption-:vapid_details > :subject" +msgid "A mailto link for the administrative contact. It's best if this email is not a personal email address, but rather a group email to the instance moderation team." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :cors_plug > :credentials" +msgid "Credentials" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :cors_plug > :expose" +msgid "Expose" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :cors_plug > :headers" +msgid "Headers" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :cors_plug > :max_age" +msgid "Max age" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :cors_plug > :methods" +msgid "Methods" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :esshd > :enabled" +msgid "Enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :esshd > :handler" +msgid "Handler" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :esshd > :password_authenticator" +msgid "Password authenticator" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :esshd > :port" +msgid "Port" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :esshd > :priv_dir" +msgid "Priv dir" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :ex_aws-:s3 > :access_key_id" +msgid "Access key" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :ex_aws-:s3 > :host" +msgid "Host" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :ex_aws-:s3 > :region" +msgid "Region" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :ex_aws-:s3 > :secret_access_key" +msgid "Secret access key" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :logger > :backends" +msgid "Backends" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :logger-:console > :format" +msgid "Format" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :logger-:console > :level" +msgid "Level" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :logger-:console > :metadata" +msgid "Metadata" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :logger-:ex_syslogger > :format" +msgid "Format" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :logger-:ex_syslogger > :ident" +msgid "Ident" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :logger-:ex_syslogger > :level" +msgid "Level" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :logger-:ex_syslogger > :metadata" +msgid "Metadata" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :mime > :types" +msgid "Types" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :mime > :types > application/activity+json" +msgid "\"application/activity+json\"" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :mime > :types > application/jrd+json" +msgid "\"application/jrd+json\"" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :mime > :types > application/ld+json" +msgid "\"application/ld+json\"" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :mime > :types > application/xml" +msgid "\"application/xml\"" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :mime > :types > application/xrd+xml" +msgid "\"application/xrd+xml\"" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma > :admin_token" +msgid "Admin token" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma > Pleroma.Web.Auth.Authenticator" +msgid "Pleroma.Web.Auth.Authenticator" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:activitypub > :blockers_visible" +msgid "Blockers visible" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:activitypub > :follow_handshake_timeout" +msgid "Follow handshake timeout" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:activitypub > :note_replies_output_limit" +msgid "Note replies output limit" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:activitypub > :outgoing_blocks" +msgid "Outgoing blocks" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:activitypub > :sign_object_fetches" +msgid "Sign object fetches" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:activitypub > :unfollow_blocked" +msgid "Unfollow blocked" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:assets > :default_mascot" +msgid "Default mascot" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:assets > :default_user_avatar" +msgid "Default user avatar" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:assets > :mascots" +msgid "Mascots" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:auth > :auth_template" +msgid "Auth template" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:auth > :enforce_oauth_admin_scope_usage" +msgid "Enforce OAuth admin scope usage" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:auth > :oauth_consumer_strategies" +msgid "OAuth consumer strategies" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:auth > :oauth_consumer_template" +msgid "OAuth consumer template" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:connections_pool > :connect_timeout" +msgid "Connect timeout" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:connections_pool > :connection_acquisition_retries" +msgid "Connection acquisition retries" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:connections_pool > :connection_acquisition_wait" +msgid "Connection acquisition wait" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:connections_pool > :max_connections" +msgid "Max connections" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:connections_pool > :reclaim_multiplier" +msgid "Reclaim multiplier" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:email_notifications > :digest" +msgid "Digest" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:email_notifications > :digest > :active" +msgid "Enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:email_notifications > :digest > :inactivity_threshold" +msgid "Inactivity threshold" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:email_notifications > :digest > :interval" +msgid "Interval" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:email_notifications > :digest > :schedule" +msgid "Schedule" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:emoji > :default_manifest" +msgid "Default manifest" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:emoji > :groups" +msgid "Groups" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:emoji > :pack_extensions" +msgid "Pack extensions" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:emoji > :shared_pack_cache_seconds_per_file" +msgid "Shared pack cache s/file" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:emoji > :shortcode_globs" +msgid "Shortcode globs" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:features > :improved_hashtag_timeline" +msgid "Improved hashtag timeline" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:feed > :post_title" +msgid "Post title" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:feed > :post_title > :max_length" +msgid "Max length" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:feed > :post_title > :omission" +msgid "Omission" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe" +msgid "Pleroma FE" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :alwaysShowSubjectInput" +msgid "Always show subject input" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :background" +msgid "Background" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :collapseMessageWithSubject" +msgid "Collapse message with subject" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :greentext" +msgid "Greentext" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hideFilteredStatuses" +msgid "Hide Filtered Statuses" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hideMutedPosts" +msgid "Hide Muted Posts" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hidePostStats" +msgid "Hide post stats" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hideSitename" +msgid "Hide Sitename" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hideUserStats" +msgid "Hide user stats" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :logo" +msgid "Logo" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :logoMargin" +msgid "Logo margin" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :logoMask" +msgid "Logo mask" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :minimalScopesMode" +msgid "Minimal scopes mode" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :nsfwCensorImage" +msgid "NSFW Censor Image" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :postContentType" +msgid "Post Content Type" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :redirectRootLogin" +msgid "Redirect root login" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :redirectRootNoLogin" +msgid "Redirect root no login" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :scopeCopy" +msgid "Scope copy" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :showFeaturesPanel" +msgid "Show instance features panel" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :showInstanceSpecificPanel" +msgid "Show instance specific panel" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :sidebarRight" +msgid "Sidebar on Right" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :subjectLineBehavior" +msgid "Subject line behavior" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :theme" +msgid "Theme" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontends > :admin" +msgid "Admin" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontends > :admin > name" +msgid "Name" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontends > :admin > ref" +msgid "Reference" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontends > :available" +msgid "Available" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontends > :available > build_dir" +msgid "Build directory" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontends > :available > build_url" +msgid "Build URL" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontends > :available > custom-http-headers" +msgid "Custom HTTP headers" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontends > :available > git" +msgid "Git Repository URL" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontends > :available > name" +msgid "Name" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontends > :available > ref" +msgid "Reference" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontends > :primary" +msgid "Primary" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontends > :primary > name" +msgid "Name" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontends > :primary > ref" +msgid "Reference" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:gopher > :dstport" +msgid "Dstport" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:gopher > :enabled" +msgid "Enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:gopher > :ip" +msgid "IP" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:gopher > :port" +msgid "Port" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:hackney_pools > :federation" +msgid "Federation" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:hackney_pools > :federation > :max_connections" +msgid "Max connections" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:hackney_pools > :federation > :timeout" +msgid "Timeout" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:hackney_pools > :media" +msgid "Media" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:hackney_pools > :media > :max_connections" +msgid "Max connections" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:hackney_pools > :media > :timeout" +msgid "Timeout" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:hackney_pools > :upload" +msgid "Upload" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:hackney_pools > :upload > :max_connections" +msgid "Max connections" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:hackney_pools > :upload > :timeout" +msgid "Timeout" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:http > :adapter" +msgid "Adapter" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:http > :adapter > :ssl_options" +msgid "SSL Options" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:http > :adapter > :ssl_options > :versions" +msgid "Versions" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:http > :proxy_url" +msgid "Proxy URL" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:http > :send_user_agent" +msgid "Send user agent" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:http > :user_agent" +msgid "User agent" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:http_security > :ct_max_age" +msgid "CT max age" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:http_security > :enabled" +msgid "Enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:http_security > :referrer_policy" +msgid "Referrer policy" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:http_security > :report_uri" +msgid "Report URI" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:http_security > :sts" +msgid "STS" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:http_security > :sts_max_age" +msgid "STS max age" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :account_activation_required" +msgid "Account activation required" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :account_approval_required" +msgid "Account approval required" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :account_field_name_length" +msgid "Account field name length" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :account_field_value_length" +msgid "Account field value length" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :allow_relay" +msgid "Allow relay" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :allowed_post_formats" +msgid "Allowed post formats" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :attachment_links" +msgid "Attachment links" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :autofollowed_nicknames" +msgid "Autofollowed nicknames" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :autofollowing_nicknames" +msgid "Autofollowing nicknames" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :avatar_upload_limit" +msgid "Avatar upload limit" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :background_upload_limit" +msgid "Background upload limit" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :banner_upload_limit" +msgid "Banner upload limit" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :birthday_min_age" +msgid "Birthday min age" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :birthday_required" +msgid "Birthday required" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :cleanup_attachments" +msgid "Cleanup attachments" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :description" +msgid "Description" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :email" +msgid "Admin Email Address" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :extended_nickname_format" +msgid "Extended nickname format" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :external_user_synchronization" +msgid "External user synchronization" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :federating" +msgid "Federating" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :federation_incoming_replies_max_depth" +msgid "Fed. incoming replies max depth" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :federation_reachability_timeout_days" +msgid "Fed. reachability timeout days" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :healthcheck" +msgid "Healthcheck" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :instance_thumbnail" +msgid "Instance thumbnail" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :invites_enabled" +msgid "Invites enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :limit" +msgid "Limit" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :limit_to_local_content" +msgid "Limit to local content" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :max_account_fields" +msgid "Max account fields" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :max_endorsed_users" +msgid "Max endorsed users" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :max_media_attachments" +msgid "Max media attachments" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :max_pinned_statuses" +msgid "Max pinned statuses" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :max_remote_account_fields" +msgid "Max remote account fields" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :max_report_comment_size" +msgid "Max report comment size" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication" +msgid "Multi factor authentication" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :backup_codes" +msgid "Backup codes" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :backup_codes > :length" +msgid "Length" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :backup_codes > :number" +msgid "Number" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :totp" +msgid "TOTP settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :totp > :digits" +msgid "Digits" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :totp > :period" +msgid "Period" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :name" +msgid "Name" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :notify_email" +msgid "Sender Email Address" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :poll_limits" +msgid "Poll limits" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :poll_limits > :max_expiration" +msgid "Max expiration" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :poll_limits > :max_option_chars" +msgid "Max option chars" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :poll_limits > :max_options" +msgid "Max options" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :poll_limits > :min_expiration" +msgid "Min expiration" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :privileged_staff" +msgid "Privileged staff" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :profile_directory" +msgid "Profile directory" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :public" +msgid "Public" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :quarantined_instances" +msgid "Quarantined instances" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :registration_reason_length" +msgid "Registration reason length" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :registrations_open" +msgid "Registrations open" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :remote_limit" +msgid "Remote limit" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :remote_post_retention_days" +msgid "Remote post retention days" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :safe_dm_mentions" +msgid "Safe DM mentions" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :show_reactions" +msgid "Show reactions" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :skip_thread_containment" +msgid "Skip thread containment" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :static_dir" +msgid "Static dir" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :upload_limit" +msgid "Upload limit" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :user_bio_length" +msgid "User bio length" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :user_name_length" +msgid "User name length" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instances_favicons > :enabled" +msgid "Enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:ldap > :base" +msgid "Base" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:ldap > :enabled" +msgid "Enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:ldap > :host" +msgid "Host" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:ldap > :port" +msgid "Port" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:ldap > :ssl" +msgid "SSL" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:ldap > :sslopts" +msgid "SSL options" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:ldap > :sslopts > :cacertfile" +msgid "Cacertfile" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:ldap > :sslopts > :verify" +msgid "Verify" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:ldap > :tls" +msgid "TLS" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:ldap > :tlsopts" +msgid "TLS options" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:ldap > :tlsopts > :cacertfile" +msgid "Cacertfile" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:ldap > :tlsopts > :verify" +msgid "Verify" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:ldap > :uid" +msgid "UID" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:majic_pool > :size" +msgid "Size" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:manifest > :background_color" +msgid "Background color" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:manifest > :icons" +msgid "Icons" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:manifest > :theme_color" +msgid "Theme color" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:markup > :allow_fonts" +msgid "Allow fonts" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:markup > :allow_headings" +msgid "Allow headings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:markup > :allow_inline_images" +msgid "Allow inline images" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:markup > :allow_tables" +msgid "Allow tables" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:markup > :scrub_policy" +msgid "Scrub policy" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:media_preview_proxy > :enabled" +msgid "Enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:media_preview_proxy > :image_quality" +msgid "Image quality" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:media_preview_proxy > :min_content_length" +msgid "Min content length" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:media_preview_proxy > :thumbnail_max_height" +msgid "Thumbnail max height" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:media_preview_proxy > :thumbnail_max_width" +msgid "Thumbnail max width" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:media_proxy > :base_url" +msgid "Base URL" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:media_proxy > :enabled" +msgid "Enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:media_proxy > :invalidation" +msgid "Invalidation" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:media_proxy > :invalidation > :enabled" +msgid "Enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:media_proxy > :invalidation > :provider" +msgid "Provider" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:media_proxy > :proxy_opts" +msgid "Advanced MediaProxy Options" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:media_proxy > :proxy_opts > :max_body_length" +msgid "Max body length" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:media_proxy > :proxy_opts > :max_read_duration" +msgid "Max read duration" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:media_proxy > :proxy_opts > :redirect_on_failure" +msgid "Redirect on failure" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:media_proxy > :whitelist" +msgid "Whitelist" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:modules > :runtime_dir" +msgid "Runtime dir" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf > :policies" +msgid "Policies" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf > :transparency" +msgid "MRF transparency" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf > :transparency_exclusions" +msgid "MRF transparency exclusions" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_activity_expiration > :days" +msgid "Days" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_follow_bot > :follower_nickname" +msgid "Follower nickname" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_hashtag > :federated_timeline_removal" +msgid "Federated timeline removal" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_hashtag > :reject" +msgid "Reject" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_hashtag > :sensitive" +msgid "Sensitive" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_hellthread > :delist_threshold" +msgid "Delist threshold" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_hellthread > :reject_threshold" +msgid "Reject threshold" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_keyword > :federated_timeline_removal" +msgid "Federated timeline removal" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_keyword > :reject" +msgid "Reject" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_keyword > :replace" +msgid "Replace" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_mention > :actors" +msgid "Actors" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_normalize_markup > :scrub_policy" +msgid "Scrub policy" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_object_age > :actions" +msgid "Actions" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_object_age > :threshold" +msgid "Threshold" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_rejectnonpublic > :allow_direct" +msgid "Allow direct" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_rejectnonpublic > :allow_followersonly" +msgid "Allow followers-only" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_simple > :accept" +msgid "Accept" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_simple > :avatar_removal" +msgid "Avatar removal" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_simple > :banner_removal" +msgid "Banner removal" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_simple > :federated_timeline_removal" +msgid "Federated timeline removal" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_simple > :followers_only" +msgid "Followers only" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_simple > :media_nsfw" +msgid "Media NSFW" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_simple > :media_removal" +msgid "Media removal" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_simple > :reject" +msgid "Reject" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_simple > :reject_deletes" +msgid "Reject deletes" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_simple > :report_removal" +msgid "Report removal" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_steal_emoji > :hosts" +msgid "Hosts" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_steal_emoji > :rejected_shortcodes" +msgid "Rejected shortcodes" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_steal_emoji > :size_limit" +msgid "Size limit" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_subchain > :match_actor" +msgid "Match actor" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_vocabulary > :accept" +msgid "Accept" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_vocabulary > :reject" +msgid "Reject" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:oauth2 > :clean_expired_tokens" +msgid "Clean expired tokens" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:oauth2 > :issue_new_refresh_token" +msgid "Issue new refresh token" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:oauth2 > :token_expires_in" +msgid "Token expires in" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:pools > :default" +msgid "Default" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:pools > :default > :max_waiting" +msgid "Max waiting" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:pools > :default > :recv_timeout" +msgid "Recv timeout" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:pools > :default > :size" +msgid "Size" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:pools > :federation" +msgid "Federation" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:pools > :federation > :max_waiting" +msgid "Max waiting" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:pools > :federation > :recv_timeout" +msgid "Recv timeout" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:pools > :federation > :size" +msgid "Size" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:pools > :media" +msgid "Media" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:pools > :media > :max_waiting" +msgid "Max waiting" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:pools > :media > :recv_timeout" +msgid "Recv timeout" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:pools > :media > :size" +msgid "Size" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:pools > :upload" +msgid "Upload" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:pools > :upload > :max_waiting" +msgid "Max waiting" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:pools > :upload > :recv_timeout" +msgid "Recv timeout" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:pools > :upload > :size" +msgid "Size" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:populate_hashtags_table > :fault_rate_allowance" +msgid "Fault rate allowance" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:populate_hashtags_table > :sleep_interval_ms" +msgid "Sleep interval ms" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:rate_limit > :app_account_creation" +msgid "App account creation" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:rate_limit > :authentication" +msgid "Authentication" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:rate_limit > :relation_id_action" +msgid "Relation ID action" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:rate_limit > :relations_actions" +msgid "Relations actions" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:rate_limit > :search" +msgid "Search" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:rate_limit > :status_id_action" +msgid "Status ID action" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:rate_limit > :statuses_actions" +msgid "Statuses actions" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:rate_limit > :timeline" +msgid "Timeline" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:restrict_unauthenticated > :activities" +msgid "Activities" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:restrict_unauthenticated > :activities > :local" +msgid "Local" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:restrict_unauthenticated > :activities > :remote" +msgid "Remote" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:restrict_unauthenticated > :profiles" +msgid "Profiles" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:restrict_unauthenticated > :profiles > :local" +msgid "Local" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:restrict_unauthenticated > :profiles > :remote" +msgid "Remote" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:restrict_unauthenticated > :timelines" +msgid "Timelines" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:restrict_unauthenticated > :timelines > :federated" +msgid "Federated" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:restrict_unauthenticated > :timelines > :local" +msgid "Local" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:rich_media > :enabled" +msgid "Enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:rich_media > :failure_backoff" +msgid "Failure backoff" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:rich_media > :ignore_hosts" +msgid "Ignore hosts" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:rich_media > :ignore_tld" +msgid "Ignore TLD" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:rich_media > :parsers" +msgid "Parsers" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:rich_media > :ttl_setters" +msgid "TTL setters" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:shout > :enabled" +msgid "Enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:shout > :limit" +msgid "Limit" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:static_fe > :enabled" +msgid "Enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:streamer > :overflow_workers" +msgid "Overflow workers" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:streamer > :workers" +msgid "Workers" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:uri_schemes > :valid_schemes" +msgid "Valid schemes" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:user > :deny_follow_blocked" +msgid "Deny follow blocked" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:web_cache_ttl > :activity_pub" +msgid "Activity pub" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:web_cache_ttl > :activity_pub_question" +msgid "Activity pub question" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:welcome > :chat_message" +msgid "Chat message" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:welcome > :chat_message > :enabled" +msgid "Enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:welcome > :chat_message > :message" +msgid "Message" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:welcome > :chat_message > :sender_nickname" +msgid "Sender nickname" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:welcome > :direct_message" +msgid "Direct message" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:welcome > :direct_message > :enabled" +msgid "Enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:welcome > :direct_message > :message" +msgid "Message" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:welcome > :direct_message > :sender_nickname" +msgid "Sender nickname" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:welcome > :email" +msgid "Email" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:welcome > :email > :enabled" +msgid "Enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:welcome > :email > :html" +msgid "Html" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:welcome > :email > :sender" +msgid "Sender" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:welcome > :email > :subject" +msgid "Subject" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:welcome > :email > :text" +msgid "Text" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:workers > :retries" +msgid "Retries" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy" +msgid "Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy > :max_running" +msgid "Max running" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy > :max_waiting" +msgid "Max waiting" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers" +msgid "Pleroma.Web.RichMedia.Helpers" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers > :max_running" +msgid "Max running" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers > :max_waiting" +msgid "Max waiting" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Oban > :crontab" +msgid "Crontab" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Oban > :log" +msgid "Log" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Oban > :queues" +msgid "Queues" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Oban > :queues > :activity_expiration" +msgid "Activity expiration" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Oban > :queues > :attachments_cleanup" +msgid "Attachments cleanup" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Oban > :queues > :background" +msgid "Background" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Oban > :queues > :backup" +msgid "Backup" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Oban > :queues > :federator_incoming" +msgid "Federator incoming" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Oban > :queues > :federator_outgoing" +msgid "Federator outgoing" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Oban > :queues > :mailer" +msgid "Mailer" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Oban > :queues > :scheduled_activities" +msgid "Scheduled activities" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Oban > :queues > :transmogrifier" +msgid "Transmogrifier" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Oban > :queues > :web_push" +msgid "Web push" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Captcha > :enabled" +msgid "Enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Captcha > :method" +msgid "Method" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Captcha > :seconds_valid" +msgid "Seconds valid" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Captcha.Kocaptcha > :endpoint" +msgid "Endpoint" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > :adapter" +msgid "Adapter" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > :enabled" +msgid "Mailer Enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.AmazonSES-:access_key" +msgid "AWS Access Key" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.AmazonSES-:region" +msgid "AWS Region" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.AmazonSES-:secret" +msgid "AWS Secret Key" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Dyn-:api_key" +msgid "Dyn API Key" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Gmail-:access_token" +msgid "GMail API Access Token" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailgun-:api_key" +msgid "Mailgun API Key" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailgun-:domain" +msgid "Domain" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailjet-:api_key" +msgid "MailJet Public API Key" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailjet-:secret" +msgid "MailJet Private API Key" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mandrill-:api_key" +msgid "Mandrill API Key" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Postmark-:api_key" +msgid "Postmark API Key" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:auth" +msgid "AUTH Mode" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:password" +msgid "Password" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:port" +msgid "Port" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:relay" +msgid "Relay" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:retries" +msgid "Retries" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:ssl" +msgid "Use SSL" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:tls" +msgid "STARTTLS Mode" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:username" +msgid "Username" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendgrid-:api_key" +msgid "SendGrid API Key" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendmail-:cmd_args" +msgid "Cmd args" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendmail-:cmd_path" +msgid "Cmd path" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendmail-:qmail" +msgid "Qmail compat mode" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SocketLabs-:api_key" +msgid "SocketLabs API Key" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SocketLabs-:server_id" +msgid "Server ID" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SparkPost-:api_key" +msgid "SparkPost API key" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SparkPost-:endpoint" +msgid "Endpoint" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.NewUsersDigestEmail > :enabled" +msgid "Enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :logo" +msgid "Logo" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling" +msgid "Styling" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :background_color" +msgid "Background color" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :content_background_color" +msgid "Content background color" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :header_color" +msgid "Header color" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :link_color" +msgid "Link color" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :text_color" +msgid "Text color" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :text_muted_color" +msgid "Text muted color" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Formatter > :class" +msgid "Class" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Formatter > :extra" +msgid "Extra" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Formatter > :new_window" +msgid "New window" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Formatter > :rel" +msgid "Rel" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Formatter > :strip_prefix" +msgid "Strip prefix" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Formatter > :truncate" +msgid "Truncate" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Formatter > :validate_tld" +msgid "Validate tld" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.ScheduledActivity > :daily_user_limit" +msgid "Daily user limit" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.ScheduledActivity > :enabled" +msgid "Enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.ScheduledActivity > :total_user_limit" +msgid "Total user limit" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Upload > :base_url" +msgid "Base URL" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Upload > :filename_display_max_length" +msgid "Filename display max length" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Upload > :filters" +msgid "Filters" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Upload > :link_name" +msgid "Link name" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Upload > :proxy_remote" +msgid "Proxy remote" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Upload > :uploader" +msgid "Uploader" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Upload.Filter.AnonymizeFilename > :text" +msgid "Text" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Upload.Filter.Mogrify > :args" +msgid "Args" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Uploaders.Local > :uploads" +msgid "Uploads" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Uploaders.S3 > :bucket" +msgid "Bucket" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Uploaders.S3 > :bucket_namespace" +msgid "Bucket namespace" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Uploaders.S3 > :streaming_enabled" +msgid "Streaming enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Uploaders.S3 > :truncated_namespace" +msgid "Truncated namespace" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.User > :email_blacklist" +msgid "Email blacklist" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.User > :restricted_nicknames" +msgid "Restricted nicknames" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.User.Backup > :limit_days" +msgid "Limit days" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.User.Backup > :purge_after_days" +msgid "Purge after days" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Web.ApiSpec.CastAndValidate > :strict" +msgid "Strict" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :headers" +msgid "Headers" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :method" +msgid "Method" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :options" +msgid "Options" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :options > :params" +msgid "Params" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :script_path" +msgid "Script path" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :url_format" +msgid "URL Format" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Web.Metadata > :providers" +msgid "Providers" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Web.Metadata > :unfurl_nsfw" +msgid "Unfurl NSFW" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp > :enabled" +msgid "Enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp > :headers" +msgid "Headers" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp > :proxies" +msgid "Proxies" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp > :reserved" +msgid "Reserved" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Web.Preload > :providers" +msgid "Providers" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :enabled" +msgid "Enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :min_lifetime" +msgid "Min lifetime" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :auth" +msgid "Auth" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :enabled" +msgid "Enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :format" +msgid "Format" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :ip_whitelist" +msgid "IP Whitelist" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :path" +msgid "Path" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :quack > :level" +msgid "Level" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :quack > :meta" +msgid "Meta" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :quack > :webhook_url" +msgid "Webhook URL" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :web_push_encryption-:vapid_details > :private_key" +msgid "Private key" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :web_push_encryption-:vapid_details > :public_key" +msgid "Public key" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :web_push_encryption-:vapid_details > :subject" +msgid "Subject" +msgstr "" diff --git a/priv/gettext/fr/LC_MESSAGES/default.po b/priv/gettext/fr/LC_MESSAGES/default.po new file mode 100644 index 000000000..36112e754 --- /dev/null +++ b/priv/gettext/fr/LC_MESSAGES/default.po @@ -0,0 +1,212 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-07-21 23:42+0300\n" +"PO-Revision-Date: 2022-07-22 19:00+0000\n" +"Last-Translator: Haelwenn \n" +"Language-Team: French \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.13.1\n" + +## This file is a PO Template file. +## +## "msgid"s here are often extracted from source code. +## Add new translations manually only if they're dynamic +## translations that can't be statically extracted. +## +## Run "mix gettext.extract" to bring this file up to +## date. Leave "msgstr"s empty as changing them here as no +## effect: edit them in PO (.po) files instead. +#: lib/pleroma/web/api_spec/render_error.ex:122 +#, elixir-autogen, elixir-format +msgid "%{name} - %{count} is not a multiple of %{multiple}." +msgstr "%{name} - %{count} n'est pas un multiple de %{multiple}." + +#: lib/pleroma/web/api_spec/render_error.ex:131 +#, elixir-autogen, elixir-format +msgid "%{name} - %{value} is larger than exclusive maximum %{max}." +msgstr "%{name} - %{value} est plus large que %{max}." + +#: lib/pleroma/web/api_spec/render_error.ex:140 +#, elixir-autogen, elixir-format +msgid "%{name} - %{value} is larger than inclusive maximum %{max}." +msgstr "%{name} - %{value} est plus large que %{max}." + +#: lib/pleroma/web/api_spec/render_error.ex:149 +#, elixir-autogen, elixir-format +msgid "%{name} - %{value} is smaller than exclusive minimum %{min}." +msgstr "%{name} - %{value} est plus petit que %{min}." + +#: lib/pleroma/web/api_spec/render_error.ex:158 +#, elixir-autogen, elixir-format +msgid "%{name} - %{value} is smaller than inclusive minimum %{min}." +msgstr "%{name} - %{value} est plus petit que %{min}." + +#: lib/pleroma/web/api_spec/render_error.ex:102 +#, elixir-autogen, elixir-format +msgid "%{name} - Array items must be unique." +msgstr "%{name} - Les objects de la liste doivent être uniques." + +#: lib/pleroma/web/api_spec/render_error.ex:114 +#, elixir-autogen, elixir-format +msgid "%{name} - Array length %{length} is larger than maxItems: %{}." +msgstr "" +"%{name} - La longueur %{length} de la liste est supérieure à maxItems : %{}." + +#: lib/pleroma/web/api_spec/render_error.ex:106 +#, elixir-autogen, elixir-format +msgid "%{name} - Array length %{length} is smaller than minItems: %{min}." +msgstr "" +"%{name} - La longueur %{length} de la liste est inférieure à minItems : " +"%{min}." + +#: lib/pleroma/web/api_spec/render_error.ex:166 +#, elixir-autogen, elixir-format +msgid "%{name} - Invalid %{type}. Got: %{value}." +msgstr "%{name} - %{type} invalide. Reçu : %{value}." + +#: lib/pleroma/web/api_spec/render_error.ex:174 +#, elixir-autogen, elixir-format +msgid "%{name} - Invalid format. Expected %{format}." +msgstr "%{name} - Format invalide. Format voulu : %{format}." + +#: lib/pleroma/web/api_spec/render_error.ex:51 +#, elixir-autogen, elixir-format +msgid "%{name} - Invalid schema.type. Got: %{type}." +msgstr "%{name} - schema.type invalide. Reçu : %{type}." + +#: lib/pleroma/web/api_spec/render_error.ex:178 +#, elixir-autogen, elixir-format +msgid "%{name} - Invalid value for enum." +msgstr "%{name} - valeur invalide pour enum." + +#: lib/pleroma/web/api_spec/render_error.ex:95 +#, elixir-autogen, elixir-format +msgid "%{name} - String length is larger than maxLength: %{length}." +msgstr "" +"%{name} - Longueur de chaine de caractères supérieure à maxLength : " +"%{length}." + +#: lib/pleroma/web/api_spec/render_error.ex:88 +#, elixir-autogen, elixir-format +msgid "%{name} - String length is smaller than minLength: %{length}." +msgstr "" +"%{name} - Longueur de chaine de caractères inférieure à minLength : " +"%{length}." + +#: lib/pleroma/web/api_spec/render_error.ex:63 +#, elixir-autogen, elixir-format +msgid "%{name} - null value where %{type} expected." +msgstr "%{name} - valeur nulle quand %{type} est requis." + +#: lib/pleroma/web/api_spec/render_error.ex:60 +#, elixir-autogen, elixir-format +msgid "%{name} - null value." +msgstr "%{name} - valeur nulle." + +#: lib/pleroma/web/api_spec/render_error.ex:182 +#, elixir-autogen, elixir-format +msgid "Failed to cast to any schema in %{polymorphic_type}" +msgstr "Échec de transformation du schéma en %{polymorphic_type}" + +#: lib/pleroma/web/api_spec/render_error.ex:71 +#, elixir-autogen, elixir-format +msgid "Failed to cast value as %{invalid_schema}. Value must be castable using `allOf` schemas listed." +msgstr "" +"Échec de transformation de la valeur en %{invalid_schema}. La valeur doit " +"être transformable dans un des schémas `allOf` listés." + +#: lib/pleroma/web/api_spec/render_error.ex:84 +#, elixir-autogen, elixir-format +msgid "Failed to cast value to one of: %{failed_schemas}." +msgstr "Échec de transformation de la valeur en un des : %{failed_schemas}." + +#: lib/pleroma/web/api_spec/render_error.ex:78 +#, elixir-autogen, elixir-format +msgid "Failed to cast value using any of: %{failed_schemas}." +msgstr "Échec de transformation de la valeur en un des : %{failed_schemas}." + +#: lib/pleroma/web/api_spec/render_error.ex:212 +#, elixir-autogen, elixir-format +msgid "Invalid value for header: %{name}." +msgstr "Valeur invalide pour l'en-tête : %{name}." + +#: lib/pleroma/web/api_spec/render_error.ex:204 +#, elixir-autogen, elixir-format +msgid "Missing field: %{name}." +msgstr "Champ manquant : %{name}." + +#: lib/pleroma/web/api_spec/render_error.ex:208 +#, elixir-autogen, elixir-format +msgid "Missing header: %{name}." +msgstr "En-tête manquant : %{name}." + +#: lib/pleroma/web/api_spec/render_error.ex:196 +#, elixir-autogen, elixir-format +msgid "No value provided for required discriminator `%{field}`." +msgstr "Aucune valeur fournie pour le discriminant `%{field}`." + +#: lib/pleroma/web/api_spec/render_error.ex:216 +#, elixir-autogen, elixir-format +msgid "Object property count %{property_count} is greater than maxProperties: %{max_properties}." +msgstr "" +"Le nombre de propriétés, %{property_count} est supérieur à maxProperties : " +"%{max_properties}." + +#: lib/pleroma/web/api_spec/render_error.ex:224 +#, elixir-autogen, elixir-format +msgid "Object property count %{property_count} is less than minProperties: %{min_properties}" +msgstr "" +"Le nombre de propriétés, %{property_count} est inférieur à minProperties : " +"%{min_properties}" + +#: lib/pleroma/web/templates/static_fe/static_fe/error.html.eex:2 +#, elixir-autogen, elixir-format +msgid "Oops" +msgstr "Oups" + +#: lib/pleroma/web/api_spec/render_error.ex:188 +#, elixir-autogen, elixir-format +msgid "Unexpected field: %{name}." +msgstr "Champ inconnu : %{name}." + +#: lib/pleroma/web/api_spec/render_error.ex:200 +#, elixir-autogen, elixir-format +msgid "Unknown schema: %{name}." +msgstr "Schéma inconnu : %{name}." + +#: lib/pleroma/web/api_spec/render_error.ex:192 +#, elixir-autogen, elixir-format +msgid "Value used as discriminator for `%{field}` matches no schemas." +msgstr "" +"Valeur utilisée en discriminant de `%{field}` ne correspond à aucun schémas." + +#: lib/pleroma/web/templates/embed/show.html.eex:43 +#: lib/pleroma/web/templates/static_fe/static_fe/_notice.html.eex:37 +#, elixir-autogen, elixir-format +msgid "announces" +msgstr "annonces" + +#: lib/pleroma/web/templates/embed/show.html.eex:44 +#: lib/pleroma/web/templates/static_fe/static_fe/_notice.html.eex:38 +#, elixir-autogen, elixir-format +msgid "likes" +msgstr "favoris" + +#: lib/pleroma/web/templates/embed/show.html.eex:42 +#: lib/pleroma/web/templates/static_fe/static_fe/_notice.html.eex:36 +#, elixir-autogen, elixir-format +msgid "replies" +msgstr "réponses" + +#: lib/pleroma/web/templates/embed/show.html.eex:27 +#: lib/pleroma/web/templates/static_fe/static_fe/_notice.html.eex:22 +#, elixir-autogen, elixir-format +msgid "sensitive media" +msgstr "contenu sensible" diff --git a/priv/gettext/fr/LC_MESSAGES/posix_errors.po b/priv/gettext/fr/LC_MESSAGES/posix_errors.po new file mode 100644 index 000000000..ba8169dda --- /dev/null +++ b/priv/gettext/fr/LC_MESSAGES/posix_errors.po @@ -0,0 +1,165 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-07-22 02:09+0300\n" +"PO-Revision-Date: 2022-07-21 23:35+0000\n" +"Last-Translator: Haelwenn \n" +"Language-Team: French \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.13.1\n" + +## This file is a PO Template file. +## +## `msgid`s here are often extracted from source code. +## Add new translations manually only if they're dynamic +## translations that can't be statically extracted. +## +## Run `mix gettext.extract` to bring this file up to +## date. Leave `msgstr`s empty as changing them here as no +## effect: edit them in PO (`.po`) files instead. +msgid "eperm" +msgstr "Opération non permise" + +msgid "eacces" +msgstr "Permission refusée" + +msgid "eagain" +msgstr "Ressource temporairement indisponible" + +msgid "ebadf" +msgstr "Mauvais descripteur de fichier" + +msgid "ebadmsg" +msgstr "Mauvais message" + +msgid "ebusy" +msgstr "Périphérique ou ressource occupée" + +msgid "edeadlk" +msgstr "Interblocage des ressources évité" + +msgid "edeadlock" +msgstr "Interblocage des ressources évité" + +msgid "edquot" +msgstr "Quota disque dépassé" + +msgid "eexist" +msgstr "Fichier existant" + +msgid "efault" +msgstr "Mauvaise addresse" + +msgid "efbig" +msgstr "Fichier trop gros" + +msgid "eftype" +msgstr "Type ou format de fichier inapproprié" + +msgid "eintr" +msgstr "Appel système interrompu" + +msgid "einval" +msgstr "Argument invalide" + +msgid "eio" +msgstr "Erreur entrée/sortie" + +msgid "eisdir" +msgstr "Opération non-permise sur un répertoire" + +msgid "eloop" +msgstr "Trop de niveau de liens symboliques" + +msgid "emfile" +msgstr "Trop de fichiers ouverts" + +msgid "emlink" +msgstr "Trop de liens" + +msgid "emultihop" +msgstr "Multi-saut essayé" + +msgid "enametoolong" +msgstr "Nom de fichier trop long" + +msgid "enfile" +msgstr "Trop de fichier ouvert dans le système" + +msgid "enobufs" +msgstr "Pas d'espace tampon disponible" + +msgid "enodev" +msgstr "Périphérique inexistant" + +msgid "enolck" +msgstr "Pas de verrous disponibles" + +msgid "enolink" +msgstr "Lien rompus" + +msgid "enoent" +msgstr "Fichier ou dossier non trouvé" + +msgid "enomem" +msgstr "Échec d'allocation mémoire" + +msgid "enospc" +msgstr "Plus de place disponible sur le périphérique" + +msgid "enosr" +msgstr "Plus de flux disponibles" + +msgid "enostr" +msgstr "Périphérique qui n'est pas un flux" + +msgid "enosys" +msgstr "Fonction non implémentée" + +msgid "enotblk" +msgstr "Périphérique bloc requis" + +msgid "enotdir" +msgstr "Pas un répertoire" + +msgid "enotsup" +msgstr "Opération non supportée" + +msgid "enxio" +msgstr "Addresse de périphérique inconnue" + +msgid "eopnotsupp" +msgstr "Opération non supportée" + +msgid "eoverflow" +msgstr "Valeur trop grande pour le type de donnée definit" + +msgid "epipe" +msgstr "Tuyaux rompu" + +msgid "erange" +msgstr "Valeur numérique hors de l'interval" + +msgid "erofs" +msgstr "Système de fichier en lecture-seule" + +msgid "espipe" +msgstr "Déplacement interdit" + +msgid "esrch" +msgstr "Processus inexistant" + +msgid "estale" +msgstr "Descripteur de fichier bouché" + +msgid "etxtbsy" +msgstr "Fichier texte occupé" + +msgid "exdev" +msgstr "Lien inter-périphérique invalide" diff --git a/priv/gettext/fr/LC_MESSAGES/static_pages.po b/priv/gettext/fr/LC_MESSAGES/static_pages.po new file mode 100644 index 000000000..afcaac826 --- /dev/null +++ b/priv/gettext/fr/LC_MESSAGES/static_pages.po @@ -0,0 +1,564 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-07-21 23:03+0300\n" +"PO-Revision-Date: 2022-07-21 20:44+0000\n" +"Last-Translator: Haelwenn \n" +"Language-Team: French \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.13.1\n" + +## This file is a PO Template file. +## +## "msgid"s here are often extracted from source code. +## Add new translations manually only if they're dynamic +## translations that can't be statically extracted. +## +## Run "mix gettext.extract" to bring this file up to +## date. Leave "msgstr"s empty as changing them here as no +## effect: edit them in PO (.po) files instead. +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow.html.eex:9 +#, elixir-autogen, elixir-format +msgctxt "remote follow authorization button" +msgid "Authorize" +msgstr "Autoriser" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow.html.eex:2 +#, elixir-autogen, elixir-format +msgctxt "remote follow error" +msgid "Error fetching user" +msgstr "Erreur de requête au compte" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow.html.eex:4 +#, elixir-autogen, elixir-format +msgctxt "remote follow header" +msgid "Remote follow" +msgstr "Suivit distant" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex:8 +#, elixir-autogen, elixir-format +msgctxt "placeholder text for auth code entry" +msgid "Authentication code" +msgstr "Code d'Authentification" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:10 +#, elixir-autogen, elixir-format +msgctxt "placeholder text for password entry" +msgid "Password" +msgstr "Mot de passe" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:8 +#, elixir-autogen, elixir-format +msgctxt "placeholder text for username entry" +msgid "Username" +msgstr "Nom d'utilisateur·rice" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:13 +#, elixir-autogen, elixir-format +msgctxt "remote follow authorization button for login" +msgid "Authorize" +msgstr "Autoriser" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex:12 +#, elixir-autogen, elixir-format +msgctxt "remote follow authorization button for mfa" +msgid "Authorize" +msgstr "Autoriser" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/followed.html.eex:2 +#, elixir-autogen, elixir-format +msgctxt "remote follow error" +msgid "Error following account" +msgstr "Erreur de suivi du compte" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:4 +#, elixir-autogen, elixir-format +msgctxt "remote follow header, need login" +msgid "Log in to follow" +msgstr "Authentification pour le suivit" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex:4 +#, elixir-autogen, elixir-format +msgctxt "remote follow mfa header" +msgid "Two-factor authentication" +msgstr "Authentification à deux facteurs" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/followed.html.eex:4 +#, elixir-autogen, elixir-format +msgctxt "remote follow success" +msgid "Account followed!" +msgstr "Utilisateur·rice suivi·e !" + +#: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:7 +#, elixir-autogen, elixir-format +msgctxt "placeholder text for account id" +msgid "Your account ID, e.g. lain@quitter.se" +msgstr "Votre identifiant, ex. lain@quitter.se" + +#: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:8 +#, elixir-autogen, elixir-format +msgctxt "remote follow authorization button for following with a remote account" +msgid "Follow" +msgstr "Suivre" + +#: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:2 +#, elixir-autogen, elixir-format +msgctxt "remote follow error" +msgid "Error: %{error}" +msgstr "Erreur : %{error}" + +#: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:4 +#, elixir-autogen, elixir-format +msgctxt "remote follow header" +msgid "Remotely follow %{nickname}" +msgstr "Suivre %{nickname} à distance" + +#: lib/pleroma/web/templates/twitter_api/password/reset.html.eex:12 +#, elixir-autogen, elixir-format +msgctxt "password reset button" +msgid "Reset" +msgstr "Changer" + +#: lib/pleroma/web/templates/twitter_api/password/reset_failed.html.eex:4 +#, elixir-autogen, elixir-format +msgctxt "password reset failed homepage link" +msgid "Homepage" +msgstr "Page d'accueil" + +#: lib/pleroma/web/templates/twitter_api/password/reset_failed.html.eex:1 +#, elixir-autogen, elixir-format +msgctxt "password reset failed message" +msgid "Password reset failed" +msgstr "Échec de changement du mot de passe" + +#: lib/pleroma/web/templates/twitter_api/password/reset.html.eex:8 +#, elixir-autogen, elixir-format +msgctxt "password reset form confirm password prompt" +msgid "Confirmation" +msgstr "Confirmation" + +#: lib/pleroma/web/templates/twitter_api/password/reset.html.eex:4 +#, elixir-autogen, elixir-format +msgctxt "password reset form password prompt" +msgid "Password" +msgstr "Mot de passe" + +#: lib/pleroma/web/templates/twitter_api/password/invalid_token.html.eex:1 +#, elixir-autogen, elixir-format +msgctxt "password reset invalid token message" +msgid "Invalid Token" +msgstr "Jeton invalide" + +#: lib/pleroma/web/templates/twitter_api/password/reset_success.html.eex:2 +#, elixir-autogen, elixir-format +msgctxt "password reset successful homepage link" +msgid "Homepage" +msgstr "Page d'accueil" + +#: lib/pleroma/web/templates/twitter_api/password/reset_success.html.eex:1 +#, elixir-autogen, elixir-format +msgctxt "password reset successful message" +msgid "Password changed!" +msgstr "Mot de passe changé !" + +#: lib/pleroma/web/templates/feed/feed/tag.atom.eex:15 +#: lib/pleroma/web/templates/feed/feed/tag.rss.eex:7 +#, elixir-autogen, elixir-format +msgctxt "tag feed description" +msgid "These are public toots tagged with #%{tag}. You can interact with them if you have an account anywhere in the fediverse." +msgstr "" +"Ceci sont des messages publics lié à #%{tag}. Vous pouvez intéragir avec si " +"vous avez un compte sur le Fediverse." + +#: lib/pleroma/web/templates/o_auth/o_auth/oob_token_exists.html.eex:1 +#, elixir-autogen, elixir-format +msgctxt "oauth authorization exists page title" +msgid "Authorization exists" +msgstr "Autorisation existante" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:32 +#, elixir-autogen, elixir-format +msgctxt "oauth authorize approve button" +msgid "Approve" +msgstr "Approuver" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:30 +#, elixir-autogen, elixir-format +msgctxt "oauth authorize cancel button" +msgid "Cancel" +msgstr "Annuler" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:23 +#, elixir-autogen, elixir-format +msgctxt "oauth authorize message" +msgid "Application %{client_name} is requesting access to your account." +msgstr "" +"L'application %{client_name} demande un accès à votre " +"compte." + +#: lib/pleroma/web/templates/o_auth/o_auth/oob_authorization_created.html.eex:1 +#, elixir-autogen, elixir-format +msgctxt "oauth authorized page title" +msgid "Successfully authorized" +msgstr "Autorisé avec succès" + +#: lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex:1 +#, elixir-autogen, elixir-format +msgctxt "oauth external provider page title" +msgid "Sign in with external provider" +msgstr "Authentication externe" + +#: lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex:13 +#, elixir-autogen, elixir-format +msgctxt "oauth external provider sign in button" +msgid "Sign in with %{strategy}" +msgstr "Authentification avec %{strategy}" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:54 +#, elixir-autogen, elixir-format +msgctxt "oauth login button" +msgid "Log In" +msgstr "Authentification" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:51 +#, elixir-autogen, elixir-format +msgctxt "oauth login password prompt" +msgid "Password" +msgstr "Mot de passe" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:47 +#, elixir-autogen, elixir-format +msgctxt "oauth login username prompt" +msgid "Username" +msgstr "Nom d'utilisateur·rice" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:39 +#, elixir-autogen, elixir-format +msgctxt "oauth register nickname prompt" +msgid "Pleroma Handle" +msgstr "Pseudo Pleroma" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:37 +#, elixir-autogen, elixir-format +msgctxt "oauth register nickname unchangeable warning" +msgid "Choose carefully! You won't be able to change this later. You will be able to change your display name, though." +msgstr "" +"Faites attention ! Vous ne pourrez plus le changer plus tard. Mais, vous " +"pourrez changer votre Nom." + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:18 +#, elixir-autogen, elixir-format +msgctxt "oauth register page email prompt" +msgid "Email" +msgstr "Courriel" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:10 +#, elixir-autogen, elixir-format +msgctxt "oauth register page fill form prompt" +msgid "If you'd like to register a new account, please provide the details below." +msgstr "Si vous voulez créer un compte, veuillez fournir les détails suivants." + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:35 +#, elixir-autogen, elixir-format +msgctxt "oauth register page login button" +msgid "Proceed as existing user" +msgstr "Continuer avec un compte existant" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:31 +#, elixir-autogen, elixir-format +msgctxt "oauth register page login password prompt" +msgid "Password" +msgstr "Mot de passe" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:24 +#, elixir-autogen, elixir-format +msgctxt "oauth register page login prompt" +msgid "Alternatively, sign in to connect to existing account." +msgstr "Alternativement, s'authentifier avec un compte existant." + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:27 +#, elixir-autogen, elixir-format +msgctxt "oauth register page login username prompt" +msgid "Name or email" +msgstr "Nom ou courriel" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:14 +#, elixir-autogen, elixir-format +msgctxt "oauth register page nickname prompt" +msgid "Nickname" +msgstr "Pseudonyme" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:22 +#, elixir-autogen, elixir-format +msgctxt "oauth register page register button" +msgid "Proceed as new user" +msgstr "Continuer avec un nouveau compte" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:8 +#, elixir-autogen, elixir-format +msgctxt "oauth register page title" +msgid "Registration Details" +msgstr "Détails d'inscriptions" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:36 +#, elixir-autogen, elixir-format +msgctxt "oauth register page title" +msgid "This is the first time you visit! Please enter your Pleroma handle." +msgstr "Ceci est votre première visite ! Veuillez entrer votre pseudo." + +#: lib/pleroma/web/templates/o_auth/o_auth/_scopes.html.eex:2 +#, elixir-autogen, elixir-format +msgctxt "oauth scopes message" +msgid "The following permissions will be granted" +msgstr "Les permissions suivantes seront données" + +#: lib/pleroma/web/templates/o_auth/o_auth/oob_authorization_created.html.eex:2 +#: lib/pleroma/web/templates/o_auth/o_auth/oob_token_exists.html.eex:2 +#, elixir-autogen, elixir-format +msgctxt "oauth token code message" +msgid "Token code is
%{token}" +msgstr "Le jeton est
%{token}" + +#: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:12 +#, elixir-autogen, elixir-format +msgctxt "mfa auth code prompt" +msgid "Authentication code" +msgstr "Code d'authentification" + +#: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:8 +#, elixir-autogen, elixir-format +msgctxt "mfa auth page title" +msgid "Two-factor authentication" +msgstr "Authentification à double-facteurs" + +#: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:23 +#, elixir-autogen, elixir-format +msgctxt "mfa auth page use recovery code link" +msgid "Enter a two-factor recovery code" +msgstr "Entrer un code de récupération de l'authentification à double-facteur" + +#: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:20 +#, elixir-autogen, elixir-format +msgctxt "mfa auth verify code button" +msgid "Verify" +msgstr "Vérifier" + +#: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:8 +#, elixir-autogen, elixir-format +msgctxt "mfa recover page title" +msgid "Two-factor recovery" +msgstr "Récupération du double-facteur" + +#: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:12 +#, elixir-autogen, elixir-format +msgctxt "mfa recover recovery code prompt" +msgid "Recovery code" +msgstr "Code de récupération" + +#: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:23 +#, elixir-autogen, elixir-format +msgctxt "mfa recover use 2fa code link" +msgid "Enter a two-factor code" +msgstr "Entrer un code double-facteur" + +#: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:20 +#, elixir-autogen, elixir-format +msgctxt "mfa recover verify recovery code button" +msgid "Verify" +msgstr "Vérifier" + +#: lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex:8 +#, elixir-autogen, elixir-format +msgctxt "static fe profile page remote follow button" +msgid "Remote follow" +msgstr "Suivit distant" + +#: lib/pleroma/web/templates/email/digest.html.eex:163 +#, elixir-autogen, elixir-format +msgctxt "digest email header line" +msgid "Hey %{nickname}, here is what you've missed!" +msgstr "Salut %{nickname}, voici ce que tu as manqué·e !" + +#: lib/pleroma/web/templates/email/digest.html.eex:544 +#, elixir-autogen, elixir-format +msgctxt "digest email receiver address" +msgid "The email address you are subscribed as is %{email}. " +msgstr "" +"L'adresse que vous avez enregistré est %{email}. " + +#: lib/pleroma/web/templates/email/digest.html.eex:538 +#, elixir-autogen, elixir-format +msgctxt "digest email sending reason" +msgid "You have received this email because you have signed up to receive digest emails from %{instance} Pleroma instance." +msgstr "" +"Vous recevez ce courriel parce-que vous avez autorisé les messages-résumés " +"de l'instance pleroma, %{instance}." + +#: lib/pleroma/web/templates/email/digest.html.eex:547 +#, elixir-autogen, elixir-format +msgctxt "digest email unsubscribe action" +msgid "To unsubscribe, please go %{here}." +msgstr "Pour vous désinscrire, aller %{here}." + +#: lib/pleroma/web/templates/email/digest.html.eex:547 +#, elixir-autogen, elixir-format +msgctxt "digest email unsubscribe action link text" +msgid "here" +msgstr "ici" + +#: lib/pleroma/web/templates/mailer/subscription/unsubscribe_failure.html.eex:1 +#, elixir-autogen, elixir-format +msgctxt "mailer unsubscribe failed message" +msgid "UNSUBSCRIBE FAILURE" +msgstr "ÉCHEC DE DÉSINSCRIPTION" + +#: lib/pleroma/web/templates/mailer/subscription/unsubscribe_success.html.eex:1 +#, elixir-autogen, elixir-format +msgctxt "mailer unsubscribe successful message" +msgid "UNSUBSCRIBE SUCCESSFUL" +msgstr "SUCCÈS DE LA DÉSINSCRIPTION" + +#: lib/pleroma/web/templates/email/digest.html.eex:385 +#, elixir-format +msgctxt "new followers count header" +msgid "%{count} New Follower" +msgid_plural "%{count} New Followers" +msgstr[0] "%{count} nouveau suivit" +msgstr[1] "%{count} nouveaux suivits" + +#: lib/pleroma/emails/user_email.ex:356 +#, elixir-autogen, elixir-format +msgctxt "account archive email body - self-requested" +msgid "

You requested a full backup of your Pleroma account. It's ready for download:

\n

%{download_url}

\n" +msgstr "" +"

Vous avez demandé une sauvegarde complète de votre compte Pleroma. Le " +"téléchargement est prêt :

\n" +"

%{download_url}

\n" + +#: lib/pleroma/emails/user_email.ex:384 +#, elixir-autogen, elixir-format +msgctxt "account archive email subject" +msgid "Your account archive is ready" +msgstr "La sauvegarde de votre compte est prête" + +#: lib/pleroma/emails/user_email.ex:188 +#, elixir-autogen, elixir-format +msgctxt "approval pending email body" +msgid "

Awaiting Approval

\n

Your account at %{instance_name} is being reviewed by staff. You will receive another email once your account is approved.

\n" +msgstr "" +"

En attente d'approbation

\n" +"

Votre compte sur %{instance_name} est en revue par l'équipe. Vous " +"recevrez un autre courriel quand le compte sera approuvé.

\n" + +#: lib/pleroma/emails/user_email.ex:202 +#, elixir-autogen, elixir-format +msgctxt "approval pending email subject" +msgid "Your account is awaiting approval" +msgstr "Votre compte est en attente d'approbation" + +#: lib/pleroma/emails/user_email.ex:158 +#, elixir-autogen, elixir-format +msgctxt "confirmation email body" +msgid "

Thank you for registering on %{instance_name}

\n

Email confirmation is required to activate the account.

\n

Please click the following link to activate your account.

\n" +msgstr "" +"

Merci de votre inscription à %{instance_name}

\n" +"

Une confirmation du courriel est requise.

\n" +"

Veuillez cliquer sur pour activer votre " +"compte.

\n" + +#: lib/pleroma/emails/user_email.ex:174 +#, elixir-autogen, elixir-format +msgctxt "confirmation email subject" +msgid "%{instance_name} account confirmation" +msgstr "confirmation du compte %{instance_name}" + +#: lib/pleroma/emails/user_email.ex:310 +#, elixir-autogen, elixir-format +msgctxt "digest email subject" +msgid "Your digest from %{instance_name}" +msgstr "Votre résumé de %{instance_name}" + +#: lib/pleroma/emails/user_email.ex:81 +#, elixir-autogen, elixir-format +msgctxt "password reset email body" +msgid "

Reset your password at %{instance_name}

\n

Someone has requested password change for your account at %{instance_name}.

\n

If it was you, visit the following link to proceed: reset password.

\n

If it was someone else, nothing to worry about: your data is secure and your password has not been changed.

\n" +msgstr "" +"

Changement de mot de passe à %{instance_name}

\n" +"

Une requête de changement de mot de passe pour votre compte à " +"%{instance_name} à été reçue.

\n" +"

Si c'était vous, veuillez suivre le lien suivant pour continuer : changer de mot de passe.

\n" +"

Si ça n'était pas vous, rien à craindre, vos données sont sécurisés et " +"votre mot de passe n'a pas été changé.

\n" + +#: lib/pleroma/emails/user_email.ex:98 +#, elixir-autogen, elixir-format +msgctxt "password reset email subject" +msgid "Password reset" +msgstr "Changement de mot de passe" + +#: lib/pleroma/emails/user_email.ex:215 +#, elixir-autogen, elixir-format +msgctxt "successful registration email body" +msgid "

Hello @%{nickname},

\n

Your account at %{instance_name} has been registered successfully.

\n

No further action is required to activate your account.

\n" +msgstr "" +"

Bonjour @%{nickname},

\n" +"

Votre compte %{instance_name} à été enregistré avec succès.

\n" +"

Aucune action suivante est requise.

\n" + +#: lib/pleroma/emails/user_email.ex:231 +#, elixir-autogen, elixir-format +msgctxt "successful registration email subject" +msgid "Account registered on %{instance_name}" +msgstr "Compte enregistré sur %{instance_name}" + +#: lib/pleroma/emails/user_email.ex:119 +#, elixir-autogen, elixir-format +msgctxt "user invitation email body" +msgid "

You are invited to %{instance_name}

\n

%{inviter_name} invites you to join %{instance_name}, an instance of Pleroma federated social networking platform.

\n

Click the following link to register: accept invitation.

\n" +msgstr "" +"

Vous avez été invité à %{instance_name}

\n" +"

%{inviter_name} vous invite à rejoindre %{instance_name}, une instance de " +"Pleroma, réseau social fédéré.

\n" +"

Cliquer le lien suivant pour vous enregistrer : accepter l'invitation.

\n" + +#: lib/pleroma/emails/user_email.ex:136 +#, elixir-autogen, elixir-format +msgctxt "user invitation email subject" +msgid "Invitation to %{instance_name}" +msgstr "Invitation à %{instance_name}" + +#: lib/pleroma/emails/user_email.ex:53 +#, elixir-autogen, elixir-format +msgctxt "welcome email html body" +msgid "Welcome to %{instance_name}!" +msgstr "Bienvenu·e à %{instance_name} !" + +#: lib/pleroma/emails/user_email.ex:41 +#, elixir-autogen, elixir-format +msgctxt "welcome email subject" +msgid "Welcome to %{instance_name}!" +msgstr "Bienvenu·e à %{instance_name} !" + +#: lib/pleroma/emails/user_email.ex:65 +#, elixir-autogen, elixir-format +msgctxt "welcome email text body" +msgid "Welcome to %{instance_name}!" +msgstr "Bienvenu·e à %{instance_name} !" + +#: lib/pleroma/emails/user_email.ex:368 +#, elixir-autogen, elixir-format +msgctxt "account archive email body - admin requested" +msgid "

Admin @%{admin_nickname} requested a full backup of your Pleroma account. It's ready for download:

\n

%{download_url}

\n" +msgstr "" +"

L'Admin de @%{admin_nickname} à demandé une sauvegarde complète de votre " +"compte Pleroma. Le téléchargement est prêt:

\n" +"

%{download_url}

\n" diff --git a/priv/gettext/posix_errors.pot b/priv/gettext/posix_errors.pot index c9f593944..3533639e0 100644 --- a/priv/gettext/posix_errors.pot +++ b/priv/gettext/posix_errors.pot @@ -15,135 +15,135 @@ msgstr "" msgid "eagain" msgstr "" - + msgid "ebadf" msgstr "" - + msgid "ebadmsg" msgstr "" - + msgid "ebusy" msgstr "" - + msgid "edeadlk" msgstr "" - + msgid "edeadlock" msgstr "" - + msgid "edquot" msgstr "" - + msgid "eexist" msgstr "" - + msgid "efault" msgstr "" - + msgid "efbig" msgstr "" - + msgid "eftype" msgstr "" - + msgid "eintr" msgstr "" - + msgid "einval" msgstr "" - + msgid "eio" msgstr "" - + msgid "eisdir" msgstr "" - + msgid "eloop" msgstr "" - + msgid "emfile" msgstr "" - + msgid "emlink" msgstr "" - + msgid "emultihop" msgstr "" - + msgid "enametoolong" msgstr "" - + msgid "enfile" msgstr "" - + msgid "enobufs" msgstr "" - + msgid "enodev" msgstr "" - + msgid "enolck" msgstr "" - + msgid "enolink" msgstr "" - + msgid "enoent" msgstr "" - + msgid "enomem" msgstr "" - + msgid "enospc" msgstr "" - + msgid "enosr" msgstr "" - + msgid "enostr" msgstr "" - + msgid "enosys" msgstr "" - + msgid "enotblk" msgstr "" - + msgid "enotdir" msgstr "" - + msgid "enotsup" msgstr "" - + msgid "enxio" msgstr "" - + msgid "eopnotsupp" msgstr "" - + msgid "eoverflow" msgstr "" - + msgid "epipe" msgstr "" - + msgid "erange" msgstr "" - + msgid "erofs" msgstr "" - + msgid "espipe" msgstr "" - + msgid "esrch" msgstr "" - + msgid "estale" msgstr "" - + msgid "etxtbsy" msgstr "" - + msgid "exdev" msgstr "" diff --git a/priv/gettext/static_pages.pot b/priv/gettext/static_pages.pot new file mode 100644 index 000000000..8e1b1d9db --- /dev/null +++ b/priv/gettext/static_pages.pot @@ -0,0 +1,513 @@ +## This file is a PO Template file. +## +## "msgid"s here are often extracted from source code. +## Add new translations manually only if they're dynamic +## translations that can't be statically extracted. +## +## Run "mix gettext.extract" to bring this file up to +## date. Leave "msgstr"s empty as changing them here as no +## effect: edit them in PO (.po) files instead. +msgid "" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow.html.eex:9 +msgctxt "remote follow authorization button" +msgid "Authorize" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow.html.eex:2 +msgctxt "remote follow error" +msgid "Error fetching user" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow.html.eex:4 +msgctxt "remote follow header" +msgid "Remote follow" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex:8 +msgctxt "placeholder text for auth code entry" +msgid "Authentication code" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:10 +msgctxt "placeholder text for password entry" +msgid "Password" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:8 +msgctxt "placeholder text for username entry" +msgid "Username" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:13 +msgctxt "remote follow authorization button for login" +msgid "Authorize" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex:12 +msgctxt "remote follow authorization button for mfa" +msgid "Authorize" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/twitter_api/remote_follow/followed.html.eex:2 +msgctxt "remote follow error" +msgid "Error following account" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:4 +msgctxt "remote follow header, need login" +msgid "Log in to follow" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex:4 +msgctxt "remote follow mfa header" +msgid "Two-factor authentication" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/twitter_api/remote_follow/followed.html.eex:4 +msgctxt "remote follow success" +msgid "Account followed!" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:7 +msgctxt "placeholder text for account id" +msgid "Your account ID, e.g. lain@quitter.se" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:8 +msgctxt "remote follow authorization button for following with a remote account" +msgid "Follow" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:2 +msgctxt "remote follow error" +msgid "Error: %{error}" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:4 +msgctxt "remote follow header" +msgid "Remotely follow %{nickname}" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/twitter_api/password/reset.html.eex:12 +msgctxt "password reset button" +msgid "Reset" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/twitter_api/password/reset_failed.html.eex:4 +msgctxt "password reset failed homepage link" +msgid "Homepage" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/twitter_api/password/reset_failed.html.eex:1 +msgctxt "password reset failed message" +msgid "Password reset failed" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/twitter_api/password/reset.html.eex:8 +msgctxt "password reset form confirm password prompt" +msgid "Confirmation" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/twitter_api/password/reset.html.eex:4 +msgctxt "password reset form password prompt" +msgid "Password" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/twitter_api/password/invalid_token.html.eex:1 +msgctxt "password reset invalid token message" +msgid "Invalid Token" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/twitter_api/password/reset_success.html.eex:2 +msgctxt "password reset successful homepage link" +msgid "Homepage" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/twitter_api/password/reset_success.html.eex:1 +msgctxt "password reset successful message" +msgid "Password changed!" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/feed/feed/tag.atom.eex:15 +#: lib/pleroma/web/templates/feed/feed/tag.rss.eex:7 +msgctxt "tag feed description" +msgid "These are public toots tagged with #%{tag}. You can interact with them if you have an account anywhere in the fediverse." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/oob_token_exists.html.eex:1 +msgctxt "oauth authorization exists page title" +msgid "Authorization exists" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:32 +msgctxt "oauth authorize approve button" +msgid "Approve" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:30 +msgctxt "oauth authorize cancel button" +msgid "Cancel" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:23 +msgctxt "oauth authorize message" +msgid "Application %{client_name} is requesting access to your account." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/oob_authorization_created.html.eex:1 +msgctxt "oauth authorized page title" +msgid "Successfully authorized" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex:1 +msgctxt "oauth external provider page title" +msgid "Sign in with external provider" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex:13 +msgctxt "oauth external provider sign in button" +msgid "Sign in with %{strategy}" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:54 +msgctxt "oauth login button" +msgid "Log In" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:51 +msgctxt "oauth login password prompt" +msgid "Password" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:47 +msgctxt "oauth login username prompt" +msgid "Username" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:39 +msgctxt "oauth register nickname prompt" +msgid "Pleroma Handle" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:37 +msgctxt "oauth register nickname unchangeable warning" +msgid "Choose carefully! You won't be able to change this later. You will be able to change your display name, though." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:18 +msgctxt "oauth register page email prompt" +msgid "Email" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:10 +msgctxt "oauth register page fill form prompt" +msgid "If you'd like to register a new account, please provide the details below." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:35 +msgctxt "oauth register page login button" +msgid "Proceed as existing user" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:31 +msgctxt "oauth register page login password prompt" +msgid "Password" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:24 +msgctxt "oauth register page login prompt" +msgid "Alternatively, sign in to connect to existing account." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:27 +msgctxt "oauth register page login username prompt" +msgid "Name or email" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:14 +msgctxt "oauth register page nickname prompt" +msgid "Nickname" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:22 +msgctxt "oauth register page register button" +msgid "Proceed as new user" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:8 +msgctxt "oauth register page title" +msgid "Registration Details" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:36 +msgctxt "oauth register page title" +msgid "This is the first time you visit! Please enter your Pleroma handle." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/_scopes.html.eex:2 +msgctxt "oauth scopes message" +msgid "The following permissions will be granted" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/o_auth/o_auth/oob_authorization_created.html.eex:2 +#: lib/pleroma/web/templates/o_auth/o_auth/oob_token_exists.html.eex:2 +msgctxt "oauth token code message" +msgid "Token code is
%{token}" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:12 +msgctxt "mfa auth code prompt" +msgid "Authentication code" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:8 +msgctxt "mfa auth page title" +msgid "Two-factor authentication" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:23 +msgctxt "mfa auth page use recovery code link" +msgid "Enter a two-factor recovery code" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:20 +msgctxt "mfa auth verify code button" +msgid "Verify" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:8 +msgctxt "mfa recover page title" +msgid "Two-factor recovery" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:12 +msgctxt "mfa recover recovery code prompt" +msgid "Recovery code" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:23 +msgctxt "mfa recover use 2fa code link" +msgid "Enter a two-factor code" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:20 +msgctxt "mfa recover verify recovery code button" +msgid "Verify" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex:8 +msgctxt "static fe profile page remote follow button" +msgid "Remote follow" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/email/digest.html.eex:163 +msgctxt "digest email header line" +msgid "Hey %{nickname}, here is what you've missed!" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/email/digest.html.eex:544 +msgctxt "digest email receiver address" +msgid "The email address you are subscribed as is %{email}. " +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/email/digest.html.eex:538 +msgctxt "digest email sending reason" +msgid "You have received this email because you have signed up to receive digest emails from %{instance} Pleroma instance." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/email/digest.html.eex:547 +msgctxt "digest email unsubscribe action" +msgid "To unsubscribe, please go %{here}." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/email/digest.html.eex:547 +msgctxt "digest email unsubscribe action link text" +msgid "here" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/mailer/subscription/unsubscribe_failure.html.eex:1 +msgctxt "mailer unsubscribe failed message" +msgid "UNSUBSCRIBE FAILURE" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/web/templates/mailer/subscription/unsubscribe_success.html.eex:1 +msgctxt "mailer unsubscribe successful message" +msgid "UNSUBSCRIBE SUCCESSFUL" +msgstr "" + +#, elixir-format +#: lib/pleroma/web/templates/email/digest.html.eex:385 +msgctxt "new followers count header" +msgid "%{count} New Follower" +msgid_plural "%{count} New Followers" +msgstr[0] "" +msgstr[1] "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/emails/user_email.ex:356 +msgctxt "account archive email body - self-requested" +msgid "

You requested a full backup of your Pleroma account. It's ready for download:

\n

%{download_url}

\n" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/emails/user_email.ex:384 +msgctxt "account archive email subject" +msgid "Your account archive is ready" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/emails/user_email.ex:188 +msgctxt "approval pending email body" +msgid "

Awaiting Approval

\n

Your account at %{instance_name} is being reviewed by staff. You will receive another email once your account is approved.

\n" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/emails/user_email.ex:202 +msgctxt "approval pending email subject" +msgid "Your account is awaiting approval" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/emails/user_email.ex:158 +msgctxt "confirmation email body" +msgid "

Thank you for registering on %{instance_name}

\n

Email confirmation is required to activate the account.

\n

Please click the following link to activate your account.

\n" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/emails/user_email.ex:174 +msgctxt "confirmation email subject" +msgid "%{instance_name} account confirmation" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/emails/user_email.ex:310 +msgctxt "digest email subject" +msgid "Your digest from %{instance_name}" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/emails/user_email.ex:81 +msgctxt "password reset email body" +msgid "

Reset your password at %{instance_name}

\n

Someone has requested password change for your account at %{instance_name}.

\n

If it was you, visit the following link to proceed: reset password.

\n

If it was someone else, nothing to worry about: your data is secure and your password has not been changed.

\n" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/emails/user_email.ex:98 +msgctxt "password reset email subject" +msgid "Password reset" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/emails/user_email.ex:215 +msgctxt "successful registration email body" +msgid "

Hello @%{nickname},

\n

Your account at %{instance_name} has been registered successfully.

\n

No further action is required to activate your account.

\n" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/emails/user_email.ex:231 +msgctxt "successful registration email subject" +msgid "Account registered on %{instance_name}" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/emails/user_email.ex:119 +msgctxt "user invitation email body" +msgid "

You are invited to %{instance_name}

\n

%{inviter_name} invites you to join %{instance_name}, an instance of Pleroma federated social networking platform.

\n

Click the following link to register: accept invitation.

\n" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/emails/user_email.ex:136 +msgctxt "user invitation email subject" +msgid "Invitation to %{instance_name}" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/emails/user_email.ex:53 +msgctxt "welcome email html body" +msgid "Welcome to %{instance_name}!" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/emails/user_email.ex:41 +msgctxt "welcome email subject" +msgid "Welcome to %{instance_name}!" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/emails/user_email.ex:65 +msgctxt "welcome email text body" +msgid "Welcome to %{instance_name}!" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/emails/user_email.ex:368 +msgctxt "account archive email body - admin requested" +msgid "

Admin @%{admin_nickname} requested a full backup of your Pleroma account. It's ready for download:

\n

%{download_url}

\n" +msgstr "" diff --git a/priv/gettext/zh_Hans/LC_MESSAGES/config_descriptions.po b/priv/gettext/zh_Hans/LC_MESSAGES/config_descriptions.po new file mode 100644 index 000000000..8ac24948a --- /dev/null +++ b/priv/gettext/zh_Hans/LC_MESSAGES/config_descriptions.po @@ -0,0 +1,6027 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-07-21 04:21+0300\n" +"PO-Revision-Date: 2022-07-22 19:00+0000\n" +"Last-Translator: Yating Zhan \n" +"Language-Team: Chinese (Simplified) \n" +"Language: zh_Hans\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.13.1\n" + +## This file is a PO Template file. +## +## "msgid"s here are often extracted from source code. +## Add new translations manually only if they're dynamic +## translations that can't be statically extracted. +## +## Run "mix gettext.extract" to bring this file up to +## date. Leave "msgstr"s empty as changing them here has no +## effect: edit them in PO (.po) files instead. +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :esshd" +msgid "Before enabling this you must add :esshd to mix.exs as one of the extra_applications and generate host keys in your priv dir with ssh-keygen -m PEM -N \"\" -b 2048 -t rsa -f ssh_host_rsa_key" +msgstr "" +"在启用这个之前,必须先把 :esshd 作为 extra_application 中之一添加到 mix.exs " +"里,然后在你的 priv 目录里通过 ssh-keygen -m PEM -N \"\" -b 2048 -t rsa -f " +"ssh_host_rsa_key 生成主机密钥" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :logger" +msgid "Logger-related settings" +msgstr "日志器相关设置" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :mime" +msgid "Mime Types settings" +msgstr "Mime 类型设置" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma" +msgid "Allows setting a token that can be used to authenticate requests with admin privileges without a normal user account token. Append the `admin_token` parameter to requests to utilize it. (Please reconsider using HTTP Basic Auth or OAuth-based authentication if possible)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma" +msgid "Authenticator" +msgstr "鉴权器" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :quack" +msgid "Quack-related settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :cors_plug" +msgid "CORS plug config" +msgstr "CORS 插件配置" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :esshd" +msgid "ESSHD" +msgstr "ESSHD" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :logger" +msgid "Logger" +msgstr "日志器" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :mime" +msgid "Mime Types" +msgstr "Mime 类型" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma" +msgid "Pleroma Admin Token" +msgstr "Pleroma 管理员令牌" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma" +msgid "Pleroma Authenticator" +msgstr "Pleroma 鉴权器" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :quack" +msgid "Quack Logger" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :logger-:console" +msgid "Console logger settings" +msgstr "终端日志器设置" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :logger-:ex_syslogger" +msgid "ExSyslogger-related settings" +msgstr "ExSyslogger 相关设置" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:activitypub" +msgid "ActivityPub-related settings" +msgstr "ActivityPub 相关设置" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:assets" +msgid "This section configures assets to be used with various frontends. Currently the only option relates to mascots on the mastodon frontend" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:auth" +msgid "Authentication / authorization settings" +msgstr "鉴权/授权设置" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:connections_pool" +msgid "Advanced settings for `Gun` connections pool" +msgstr "「Gun」连接池的高级设置" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:email_notifications" +msgid "Email notifications settings" +msgstr "邮件通知设置" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:features" +msgid "Customizable features" +msgstr "可定制的特性" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:feed" +msgid "Configure feed rendering" +msgstr "配置 feed 渲染" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations" +msgid "This form can be used to configure a keyword list that keeps the configuration data for any kind of frontend. By default, settings for pleroma_fe are configured. If you want to add your own configuration your settings all fields must be complete." +msgstr "" +"这个表单可以用来配置一个 keyword " +"列表,来存放给任意种类的前端的配置数据。默认地,这里配置了 pleroma_fe " +"的设置。如果你想添加自己的配置,所有的项都得完成。" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontends" +msgid "Installed frontends management" +msgstr "已经安装的前端的管理" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:gopher" +msgid "Gopher settings" +msgstr "Gopher 设置" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:hackney_pools" +msgid "Advanced settings for `Hackney` connections pools" +msgstr "「Hackney」连接池的高级设置" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:http" +msgid "HTTP settings" +msgstr "HTTP 设置" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:http_security" +msgid "HTTP security settings" +msgstr "HTTP 安全设置" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance" +msgid "Instance-related settings" +msgstr "实例相关设置" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instances_favicons" +msgid "Control favicons for instances" +msgstr "控制实例的 favicon" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:ldap" +msgid "Use LDAP for user authentication. When a user logs in to the Pleroma instance, the name and password will be verified by trying to authenticate (bind) to a LDAP server. If a user exists in the LDAP directory but there is no account with the same name yet on the Pleroma instance then a new Pleroma account will be created with the same name as the LDAP user name." +msgstr "" +"用 LDAP 作用户鉴权。当用户登录进 Pleroma 实例时,会通过向 LDAP " +"服务器尝试鉴权(绑定)来验证名字和密码。如果用户在 LDAP 目录里,但同名账号在 " +"Pleroma 实例里还不存在,那么就会创建一个新的 Pleroma 账号,它的名字和 LDAP " +"用户名一样。" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:majic_pool" +msgid "Majic/libmagic configuration" +msgstr "Majic/libmagic 配置" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:manifest" +msgid "This section describe PWA manifest instance-specific values. Currently this option relate only for MastoFE." +msgstr "此处提供针对特定实例的 PWA manifest 数值。目前相关设定尚只支持 MastoFE。" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:media_preview_proxy" +msgid "Media preview proxy" +msgstr "媒体预览代理" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:media_proxy" +msgid "Media proxy" +msgstr "媒体代理" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:modules" +msgid "Custom Runtime Modules" +msgstr "自定义 Runtime 模块" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf" +msgid "General MRF settings" +msgstr "通用 MRF 设置" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_activity_expiration" +msgid "Adds automatic expiration to all local activities" +msgstr "给所有本地 activity 添加自动过期" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_follow_bot" +msgid "Automatically follows newly discovered accounts." +msgstr "自动关注新发现的账号。" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_hashtag" +msgid "Reject, TWKN-remove or Set-Sensitive messsages with specific hashtags (without the leading #)\n\nNote: This MRF Policy is always enabled, if you want to disable it you have to set empty lists.\n" +msgstr "" +"把带有特定标签(不带开头#号)的讯息拒绝,从已知网络里删除或者设成敏感的\n" +"\n" +"注:这个 MRF 策略总是开启的,如果你想禁用它,你得设置成空列表。\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_hellthread" +msgid "Block messages with excessive user mentions" +msgstr "屏蔽提及太多用户的讯息" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_keyword" +msgid "Reject or Word-Replace messages matching a keyword or [Regex](https://hexdocs.pm/elixir/Regex.html)." +msgstr "对匹配一个关键词或者[正则](https://hexdocs.pm/elixir/Regex." +"html)的讯息拒绝或替换词语。" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_mention" +msgid "Block messages which mention a specific user" +msgstr "拒绝提及特定用户的讯息" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_normalize_markup" +msgid "MRF NormalizeMarkup settings. Scrub configured hypertext markup." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_object_age" +msgid "Rejects or delists posts based on their timestamp deviance from your server's clock." +msgstr "基于时间戳和服务器时钟的差距而拒绝或除列文章。" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_rejectnonpublic" +msgid "RejectNonPublic drops posts with non-public visibility settings." +msgstr "RejectNonPublic 丢弃有非公开的可见性设置的文章。" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_simple" +msgid "Simple ingress policies" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_steal_emoji" +msgid "Steals emojis from selected instances when it sees them." +msgstr "从选择的实例偷取看到的 emoji。" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_subchain" +msgid "This policy processes messages through an alternate pipeline when a given message matches certain criteria. All criteria are configured as a map of regular expressions to lists of policy modules." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_vocabulary" +msgid "Filter messages which belong to certain activity vocabularies" +msgstr "过滤属于特定 activity 词汇的讯息" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:oauth2" +msgid "Configure OAuth 2 provider capabilities" +msgstr "配置 OAuth 2 提供者的能力" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:pools" +msgid "Advanced settings for `Gun` workers pools" +msgstr "「Gun」工人池的高级设置" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:populate_hashtags_table" +msgid "`populate_hashtags_table` background migration settings" +msgstr "「populate_hashtags_table」后台迁移设置" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:rate_limit" +msgid "Rate limit settings. This is an advanced feature enabled only for :authentication by default." +msgstr "频率限制设置。这是高级特性,默认只对 :authentication (鉴权)开启。" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:restrict_unauthenticated" +msgid "Disallow viewing timelines, user profiles and statuses for unauthenticated users." +msgstr "不允许未被鉴权的用户查看时间线、用户主页和状态。" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:rich_media" +msgid "If enabled the instance will parse metadata from attached links to generate link previews" +msgstr "如果开启,实例会从附上的链接里析出元数据来生成链接预览" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:shout" +msgid "Pleroma shout settings" +msgstr "Pleroma 留言板设定" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:static_fe" +msgid "Render profiles and posts using server-generated HTML that is viewable without using JavaScript" +msgstr "用服务器生成的,不用 JavaScript 就可以查看的 HTML 来渲染用户页和文章" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:streamer" +msgid "Settings for notifications streamer" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:uri_schemes" +msgid "URI schemes related settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:web_cache_ttl" +msgid "The expiration time for the web responses cache. Values should be in milliseconds or `nil` to disable expiration." +msgstr "web 回应缓存的过期时间。值应该以毫秒为单位,或者用「nil」来禁用过期。" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:welcome" +msgid "Welcome messages settings" +msgstr "欢迎讯息设置" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:workers" +msgid "Includes custom worker options not interpretable directly by `Oban`" +msgstr "包含不能直接被「Oban」解读的自定工人选项" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-ConcurrentLimiter" +msgid "Limits configuration for background tasks." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Oban" +msgid "[Oban](https://github.com/sorentwo/oban) asynchronous job processor configuration." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Captcha" +msgid "Captcha-related settings" +msgstr "验证码相关设定" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Captcha.Kocaptcha" +msgid "Kocaptcha is a very simple captcha service with a single API endpoint, the source code is here: https://github.com/koto-bank/kocaptcha. The default endpoint (https://captcha.kotobank.ch) is hosted by the developer." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer" +msgid "Mailer-related settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Emails.NewUsersDigestEmail" +msgid "New users admin email digest" +msgstr "新用户管理邮件摘要" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Emails.UserEmail" +msgid "Email template settings" +msgstr "邮件模板设定" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Formatter" +msgid "Configuration for Pleroma's link formatter which parses mentions, hashtags, and URLs." +msgstr "这是 Pleroma 的链接格式器的具体设定,可在此配置提及,标签与网址等。" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.ScheduledActivity" +msgid "Scheduled activities settings" +msgstr "定时活动设定" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Upload" +msgid "Upload general settings" +msgstr "上传通用设定" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Upload.Filter.AnonymizeFilename" +msgid "Filter replaces the filename of the upload" +msgstr "过滤器将会匿名化上传文件的文件名" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Upload.Filter.Mogrify" +msgid "Uploads mogrify filter settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Uploaders.Local" +msgid "Local uploader-related settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Uploaders.S3" +msgid "S3 uploader-related settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.User.Backup" +msgid "Account Backup" +msgstr "账户备份" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http" +msgid "HTTP invalidate settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script" +msgid "Invalidation script settings" +msgstr "无效的脚本设定" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Web.Metadata" +msgid "Metadata-related settings" +msgstr "元数据相关设定" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp" +msgid "`Pleroma.Web.Plugs.RemoteIp` is a shim to call [`RemoteIp`](https://git.pleroma.social/pleroma/remote_ip) but with runtime configuration.\n**If your instance is not behind at least one reverse proxy, you should not enable this plug.**\n" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Web.Preload" +msgid "Preload-related settings" +msgstr "预加载相关设定" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Workers.PurgeExpiredActivity" +msgid "Expired activities settings" +msgstr "失效活动设定" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter" +msgid "Prometheus app metrics endpoint configuration" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :web_push_encryption-:vapid_details" +msgid "Web Push Notifications configuration. You can use the mix task mix web_push.gen.keypair to generate it." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :ex_aws-:s3" +msgid "S3" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :logger-:console" +msgid "Console Logger" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :logger-:ex_syslogger" +msgid "ExSyslogger" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:activitypub" +msgid "ActivityPub" +msgstr "ActivityPub" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:assets" +msgid "Assets" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:auth" +msgid "Auth" +msgstr "验证" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:connections_pool" +msgid "Connections pool" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:email_notifications" +msgid "Email notifications" +msgstr "邮件通知" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:emoji" +msgid "Emoji" +msgstr "Emoji" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:features" +msgid "Features" +msgstr "特性" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:feed" +msgid "Feed" +msgstr "信息流" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations" +msgid "Frontend configurations" +msgstr "前端配置" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontends" +msgid "Frontends" +msgstr "前端" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:gopher" +msgid "Gopher" +msgstr "Gopher" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:hackney_pools" +msgid "Hackney pools" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:http" +msgid "HTTP" +msgstr "HTTP" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:http_security" +msgid "HTTP security" +msgstr "HTTP 安全性" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance" +msgid "Instance" +msgstr "实例" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instances_favicons" +msgid "Instances favicons" +msgstr "实例图标" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:ldap" +msgid "LDAP" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:majic_pool" +msgid "Majic pool" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:manifest" +msgid "Manifest" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:markup" +msgid "Markup Settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:media_preview_proxy" +msgid "Media preview proxy" +msgstr "媒体文件预览代理" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:media_proxy" +msgid "Media proxy" +msgstr "媒体文件代理" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:modules" +msgid "Modules" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf" +msgid "MRF" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_activity_expiration" +msgid "MRF Activity Expiration Policy" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_follow_bot" +msgid "MRF FollowBot Policy" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_hashtag" +msgid "MRF Hashtag" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_hellthread" +msgid "MRF Hellthread" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_keyword" +msgid "MRF Keyword" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_mention" +msgid "MRF Mention" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_normalize_markup" +msgid "MRF Normalize Markup" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_object_age" +msgid "MRF Object Age" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_rejectnonpublic" +msgid "MRF Reject Non Public" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_simple" +msgid "MRF Simple" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_steal_emoji" +msgid "MRF Emojis" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_subchain" +msgid "MRF Subchain" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_vocabulary" +msgid "MRF Vocabulary" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:oauth2" +msgid "OAuth2" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:pools" +msgid "Pools" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:populate_hashtags_table" +msgid "Populate hashtags table" +msgstr "本站话题标签列表" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:rate_limit" +msgid "Rate limit" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:restrict_unauthenticated" +msgid "Restrict Unauthenticated" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:rich_media" +msgid "Rich media" +msgstr "富媒体" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:shout" +msgid "Shout" +msgstr "留言板" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:static_fe" +msgid "Static FE" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:streamer" +msgid "Streamer" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:uri_schemes" +msgid "URI Schemes" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:user" +msgid "User" +msgstr "用户" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:web_cache_ttl" +msgid "Web cache TTL" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:welcome" +msgid "Welcome" +msgstr "欢迎" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:workers" +msgid "Workers" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-ConcurrentLimiter" +msgid "ConcurrentLimiter" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Oban" +msgid "Oban" +msgstr "Oban" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Captcha" +msgid "Pleroma.Captcha" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Captcha.Kocaptcha" +msgid "Pleroma.Captcha.Kocaptcha" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer" +msgid "Pleroma.Emails.Mailer" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.NewUsersDigestEmail" +msgid "Pleroma.Emails.NewUsersDigestEmail" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail" +msgid "Pleroma.Emails.UserEmail" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Formatter" +msgid "Linkify" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.ScheduledActivity" +msgid "Pleroma.ScheduledActivity" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Upload" +msgid "Pleroma.Upload" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Upload.Filter.AnonymizeFilename" +msgid "Pleroma.Upload.Filter.AnonymizeFilename" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Upload.Filter.Mogrify" +msgid "Pleroma.Upload.Filter.Mogrify" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Uploaders.Local" +msgid "Pleroma.Uploaders.Local" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Uploaders.S3" +msgid "Pleroma.Uploaders.S3" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.User" +msgid "Pleroma.User" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.User.Backup" +msgid "Pleroma.User.Backup" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Web.ApiSpec.CastAndValidate" +msgid "Pleroma.Web.ApiSpec.CastAndValidate" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http" +msgid "Pleroma.Web.MediaProxy.Invalidation.Http" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script" +msgid "Pleroma.Web.MediaProxy.Invalidation.Script" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Web.Metadata" +msgid "Pleroma.Web.Metadata" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp" +msgid "Pleroma.Web.Plugs.RemoteIp" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Web.Preload" +msgid "Pleroma.Web.Preload" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Workers.PurgeExpiredActivity" +msgid "Pleroma.Workers.PurgeExpiredActivity" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter" +msgid "Pleroma.Web.Endpoint.MetricsExporter" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :web_push_encryption-:vapid_details" +msgid "Vapid Details" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :esshd > :enabled" +msgid "Enables SSH" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :esshd > :handler" +msgid "Handler module" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :esshd > :password_authenticator" +msgid "Authenticator module" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :esshd > :port" +msgid "Port to connect" +msgstr "用于连接的端口" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :esshd > :priv_dir" +msgid "Dir with SSH keys" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :ex_aws-:s3 > :access_key_id" +msgid "S3 access key ID" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :ex_aws-:s3 > :host" +msgid "S3 host" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :ex_aws-:s3 > :region" +msgid "S3 region (for AWS)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :ex_aws-:s3 > :secret_access_key" +msgid "Secret access key" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :logger > :backends" +msgid "Where logs will be sent, :console - send logs to stdout, { ExSyslogger, :ex_syslogger } - to syslog, Quack.Logger - to Slack." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :logger-:console > :format" +msgid "Default: \"$date $time [$level] $levelpad$node $metadata $message\"" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :logger-:console > :level" +msgid "Log level" +msgstr "日志等级" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :logger-:ex_syslogger > :format" +msgid "Default: \"$date $time [$level] $levelpad$node $metadata $message\"" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :logger-:ex_syslogger > :ident" +msgid "A string that's prepended to every message, and is typically set to the app name" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :logger-:ex_syslogger > :level" +msgid "Log level" +msgstr "日志等级" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma > :admin_token" +msgid "Admin token" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:activitypub > :blockers_visible" +msgid "Whether a user can see someone who has blocked them" +msgstr "用户能否查看屏蔽了他们的用户" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:activitypub > :follow_handshake_timeout" +msgid "Following handshake timeout" +msgstr "关注请求超时" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:activitypub > :note_replies_output_limit" +msgid "The number of Note replies' URIs to be included with outgoing federation (`5` to match Mastodon hardcoded value, `0` to disable the output)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:activitypub > :outgoing_blocks" +msgid "Whether to federate blocks to other instances" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:activitypub > :sign_object_fetches" +msgid "Sign object fetches with HTTP signatures" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:activitypub > :unfollow_blocked" +msgid "Whether blocks result in people getting unfollowed" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:assets > :default_mascot" +msgid "This will be used as the default mascot on MastoFE. Default: `:pleroma_fox_tan`" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:assets > :default_user_avatar" +msgid "URL of the default user avatar" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:assets > :mascots" +msgid "Keyword of mascots, each element must contain both an URL and a mime_type key" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:auth > :auth_template" +msgid "Authentication form template. By default it's `show.html` which corresponds to `lib/pleroma/web/templates/o_auth/o_auth/show.html.ee`." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:auth > :enforce_oauth_admin_scope_usage" +msgid "OAuth admin scope requirement toggle. If enabled, admin actions explicitly demand admin OAuth scope(s) presence in OAuth token (client app must support admin scopes). If disabled and token doesn't have admin scope(s), `is_admin` user flag grants access to admin-specific actions." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:auth > :oauth_consumer_strategies" +msgid "The list of enabled OAuth consumer strategies. By default it's set by OAUTH_CONSUMER_STRATEGIES environment variable. Each entry in this space-delimited string should be of format \"strategy\" or \"strategy:dependency\" (e.g. twitter or keycloak:ueberauth_keycloak_strategy in case dependency is named differently than ueberauth_)." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:auth > :oauth_consumer_template" +msgid "OAuth consumer mode authentication form template. By default it's `consumer.html` which corresponds to `lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex`." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:connections_pool > :connect_timeout" +msgid "Timeout while `gun` will wait until connection is up. Default: 5000ms." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:connections_pool > :connection_acquisition_retries" +msgid "Number of attempts to acquire the connection from the pool if it is overloaded. Default: 5" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:connections_pool > :connection_acquisition_wait" +msgid "Timeout to acquire a connection from pool. The total max time is this value multiplied by the number of retries. Default: 250ms." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:connections_pool > :max_connections" +msgid "Maximum number of connections in the pool. Default: 250 connections." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:connections_pool > :reclaim_multiplier" +msgid "Multiplier for the number of idle connection to be reclaimed if the pool is full. For example if the pool maxes out at 250 connections and this setting is set to 0.3, the pool will reclaim at most 75 idle connections if it's overloaded. Default: 0.1" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:email_notifications > :digest" +msgid "emails of \"what you've missed\" for users who have been inactive for a while" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:email_notifications > :digest > :active" +msgid "Globally enable or disable digest emails" +msgstr "完全开启或关闭摘要邮件" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:email_notifications > :digest > :inactivity_threshold" +msgid "Minimum user inactivity threshold" +msgstr "非活跃用户数量最低门槛" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:email_notifications > :digest > :interval" +msgid "Minimum interval between digest emails to one user" +msgstr "单个用户能收到摘要邮件的间隔频次" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:email_notifications > :digest > :schedule" +msgid "When to send digest email, in crontab format. \"0 0 0\" is the default, meaning \"once a week at midnight on Sunday morning\"." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:emoji > :default_manifest" +msgid "Location of the JSON-manifest. This manifest contains information about the emoji-packs you can download. Currently only one manifest can be added (no arrays)." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:emoji > :groups" +msgid "Emojis are ordered in groups (tags). This is an array of key-value pairs where the key is the group name and the value is the location or array of locations. * can be used as a wildcard." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:emoji > :pack_extensions" +msgid "A list of file extensions for emojis, when no emoji.txt for a pack is present" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:emoji > :shortcode_globs" +msgid "Location of custom emoji files. * can be used as a wildcard." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:features > :improved_hashtag_timeline" +msgid "Setting to force toggle / force disable improved hashtags timeline. `:enabled` forces hashtags to be fetched from `hashtags` table for hashtags timeline. `:disabled` forces object-embedded hashtags to be used (slower). Keep it `:auto` for automatic behaviour (it is auto-set to `:enabled` [unless overridden] when HashtagsTableMigrator completes)." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:feed > :post_title" +msgid "Configure title rendering" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:feed > :post_title > :max_length" +msgid "Maximum number of characters before truncating title" +msgstr "不被折叠的用户名的字符上限" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:feed > :post_title > :omission" +msgid "Replacement which will be used after truncating string" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe" +msgid "Settings for Pleroma FE" +msgstr "Pleroma FE 设定" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :alwaysShowSubjectInput" +msgid "When disabled, auto-hide the subject field if it's empty" +msgstr "当被停用时,自动隐藏未被填写的标题栏" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :background" +msgid "URL of the background, unless viewing a user profile with a background that is set" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :collapseMessageWithSubject" +msgid "When a message has a subject (aka Content Warning), collapse it by default" +msgstr "默认状态下,将自动折叠带有标题的信息(内容警告)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :greentext" +msgid "Enables green text on lines prefixed with the > character" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hideFilteredStatuses" +msgid "Hides filtered statuses from timelines" +msgstr "从时间线上隐藏被过滤的状态" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hideMutedPosts" +msgid "Hides muted statuses from timelines" +msgstr "从时间线上折叠被隐藏的状态" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hidePostStats" +msgid "Hide notices statistics (repeats, favorites, ...)" +msgstr "关闭互动提醒(转发,点赞等)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hideSitename" +msgid "Hides instance name from PleromaFE banner" +msgstr "在 PleromaFE 横幅上隐藏实例名称" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hideUserStats" +msgid "Hide profile statistics (posts, posts per day, followers, followings, ...)" +msgstr "隐藏账号页面数据(发文数量、平均每日发文数量、关注者数量、正在关注数量等)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :logo" +msgid "URL of the logo, defaults to Pleroma's logo" +msgstr "输入指定 logo 的链接,默认下为 Pleroma 的 logo" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :logoMargin" +msgid "Allows you to adjust vertical margins between logo boundary and navbar borders. The idea is that to have logo's image without any extra margins and instead adjust them to your need in layout." +msgstr "您可以自定义 logo 与导航栏边界之间的垂直间隔。此功能是为了去除多余的 logo " +"间隔,允许您根据自己所需来调整布局。" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :logoMask" +msgid "By default it assumes logo used will be monochrome with alpha channel to be compatible with both light and dark themes. If you want a colorful logo you must disable logoMask." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :minimalScopesMode" +msgid "Limit scope selection to Direct, User default, and Scope of post replying to. Also prevents replying to a DM with a public post from PleromaFE." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :nsfwCensorImage" +msgid "URL of the image to use for hiding NSFW media attachments in the timeline" +msgstr "在此指定用于隐藏出现在时间线上 NSFW 媒体文件的遮罩图片链接" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :postContentType" +msgid "Default post formatting option" +msgstr "贴文格式默认选项" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :redirectRootLogin" +msgid "Relative URL which indicates where to redirect when a user is logged in" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :redirectRootNoLogin" +msgid "Relative URL which indicates where to redirect when a user isn't logged in" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :scopeCopy" +msgid "Copy the scope (private/unlisted/public) in replies to posts by default" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :showFeaturesPanel" +msgid "Enables panel displaying functionality of the instance on the About page" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :showInstanceSpecificPanel" +msgid "Whether to show the instance's custom panel" +msgstr "是否展示该实例的自定义面板" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :sidebarRight" +msgid "Change alignment of sidebar and panels to the right" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :subjectLineBehavior" +msgid "Allows changing the default behaviour of subject lines in replies.\n `email`: copy and preprend re:, as in email,\n `masto`: copy verbatim, as in Mastodon,\n `noop`: don't copy the subject." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :theme" +msgid "Which theme to use. Available themes are defined in styles.json" +msgstr "使用某个主题。styles.json 中已限定了可用主题" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontends > :admin" +msgid "Admin frontend" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontends > :admin > name" +msgid "Name of the installed frontend. Valid config must include both `Name` and `Reference` values." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontends > :admin > ref" +msgid "Reference of the installed frontend to be used. Valid config must include both `Name` and `Reference` values." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontends > :available" +msgid "A map containing available frontends and parameters for their installation." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontends > :available > build_dir" +msgid "The directory inside the zip file " +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontends > :available > build_url" +msgid "Either an url to a zip file containing the frontend or a template to build it by inserting the `ref`. The string `${ref}` will be replaced by the configured `ref`." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontends > :available > custom-http-headers" +msgid "The custom HTTP headers for the frontend" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontends > :available > git" +msgid "URL of the git repository of the frontend" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontends > :available > name" +msgid "Name of the frontend." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontends > :available > ref" +msgid "Reference of the frontend to be used." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontends > :primary" +msgid "Primary frontend, the one that is served for all pages by default" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontends > :primary > name" +msgid "Name of the installed frontend. Valid config must include both `Name` and `Reference` values." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:frontends > :primary > ref" +msgid "Reference of the installed frontend to be used. Valid config must include both `Name` and `Reference` values." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:gopher > :dstport" +msgid "Port advertised in URLs (optional, defaults to port)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:gopher > :enabled" +msgid "Enables the gopher interface" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:gopher > :ip" +msgid "IP address to bind to" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:gopher > :port" +msgid "Port to bind to" +msgstr "指定绑定端口" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:hackney_pools > :federation" +msgid "Settings for federation pool." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:hackney_pools > :federation > :max_connections" +msgid "Number workers in the pool." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:hackney_pools > :federation > :timeout" +msgid "Timeout while `hackney` will wait for response." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:hackney_pools > :media" +msgid "Settings for media pool." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:hackney_pools > :media > :max_connections" +msgid "Number workers in the pool." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:hackney_pools > :media > :timeout" +msgid "Timeout while `hackney` will wait for response." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:hackney_pools > :upload" +msgid "Settings for upload pool." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:hackney_pools > :upload > :max_connections" +msgid "Number workers in the pool." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:hackney_pools > :upload > :timeout" +msgid "Timeout while `hackney` will wait for response." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:http > :adapter" +msgid "Adapter specific options" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:http > :adapter > :ssl_options" +msgid "SSL options for HTTP adapter" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:http > :adapter > :ssl_options > :versions" +msgid "List of TLS version to use" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:http > :proxy_url" +msgid "Proxy URL" +msgstr "代理地址" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:http > :user_agent" +msgid "What user agent to use. Must be a string or an atom `:default`. Default value is `:default`." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:http_security > :ct_max_age" +msgid "The maximum age for the Expect-CT header if sent" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:http_security > :enabled" +msgid "Whether the managed content security policy is enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:http_security > :referrer_policy" +msgid "The referrer policy to use, either \"same-origin\" or \"no-referrer\"" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:http_security > :report_uri" +msgid "Adds the specified URL to report-uri and report-to group in CSP header" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:http_security > :sts" +msgid "Whether to additionally send a Strict-Transport-Security header" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:http_security > :sts_max_age" +msgid "The maximum age for the Strict-Transport-Security header if sent" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :account_activation_required" +msgid "Require users to confirm their emails before signing in" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :account_approval_required" +msgid "Require users to be manually approved by an admin before signing in" +msgstr "用户登陆需要管理员同意" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :account_field_name_length" +msgid "An account field name maximum length. Default: 512." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :account_field_value_length" +msgid "An account field value maximum length. Default: 2048." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :allow_relay" +msgid "Permits remote instances to subscribe to all public posts of your instance. (Important!) This may increase the visibility of your instance." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :allowed_post_formats" +msgid "MIME-type list of formats allowed to be posted (transformed into HTML)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :attachment_links" +msgid "Enable to automatically add attachment link text to statuses" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :autofollowed_nicknames" +msgid "Set to nicknames of (local) users that every new user should automatically follow" +msgstr "为一个会被新用户自动关注的(本地)用户设定昵称" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :autofollowing_nicknames" +msgid "Set to nicknames of (local) users that automatically follows every newly registered user" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :avatar_upload_limit" +msgid "File size limit of user's profile avatars" +msgstr "用户头像的文件大小上限" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :background_upload_limit" +msgid "File size limit of user's profile backgrounds" +msgstr "用户资料背景的文件大小上限" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :banner_upload_limit" +msgid "File size limit of user's profile banners" +msgstr "用户资料横幅的文件大小上限" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :birthday_min_age" +msgid "Minimum required age for users to create account. Only used if birthday is required." +msgstr "创建账户的最低年龄限制。只有当需要输入生日时才生效。" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :birthday_required" +msgid "Require users to enter their birthday." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :cleanup_attachments" +msgid "Enable to remove associated attachments when status is removed.\nThis will not affect duplicates and attachments without status.\nEnabling this will increase load to database when deleting statuses on larger instances.\n" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :description" +msgid "The instance's description. It can be seen in nodeinfo and `/api/v1/instance`" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :email" +msgid "Email used to reach an Administrator/Moderator of the instance" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :extended_nickname_format" +msgid "Enable to use extended local nicknames format (allows underscores/dashes). This will break federation with older software for theses nicknames." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :external_user_synchronization" +msgid "Enabling following/followers counters synchronization for external users" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :federating" +msgid "Enable federation with other instances" +msgstr "启用与其他实例的联邦互通" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :federation_incoming_replies_max_depth" +msgid "Max. depth of reply-to and reply activities fetching on incoming federation, to prevent out-of-memory situations while fetching very long threads. If set to `nil`, threads of any depth will be fetched. Lower this value if you experience out-of-memory crashes." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :federation_reachability_timeout_days" +msgid "Timeout (in days) of each external federation target being unreachable prior to pausing federating to it" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :healthcheck" +msgid "If enabled, system data will be shown on `/api/pleroma/healthcheck`" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :instance_thumbnail" +msgid "The instance thumbnail can be any image that represents your instance and is used by some apps or services when they display information about your instance." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :invites_enabled" +msgid "Enable user invitations for admins (depends on `registrations_open` being disabled)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :limit" +msgid "Posts character limit (CW/Subject included in the counter)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :limit_to_local_content" +msgid "Limit unauthenticated users to search for local statutes and users only. Default: `:unauthenticated`." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :max_account_fields" +msgid "The maximum number of custom fields in the user profile. Default: 10." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :max_endorsed_users" +msgid "The maximum number of recommended accounts. 0 will disable the feature." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :max_media_attachments" +msgid "Maximum number of post media attachments" +msgstr "最多可上传的媒体文件数量" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :max_pinned_statuses" +msgid "The maximum number of pinned statuses. 0 will disable the feature." +msgstr "可被置顶的状态数量上限。设定为0则关闭该功能。" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :max_remote_account_fields" +msgid "The maximum number of custom fields in the remote user profile. Default: 20." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :max_report_comment_size" +msgid "The maximum size of the report comment. Default: 1000." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication" +msgid "Multi-factor authentication settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :backup_codes" +msgid "MFA backup codes settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :backup_codes > :length" +msgid "Determines the length of backup one-time pass-codes, in characters. Defaults to 16 characters." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :backup_codes > :number" +msgid "Number of backup codes to generate." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :totp" +msgid "TOTP settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :totp > :digits" +msgid "Determines the length of a one-time pass-code, in characters. Defaults to 6 characters." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :totp > :period" +msgid "A period for which the TOTP code will be valid, in seconds. Defaults to 30 seconds." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :name" +msgid "Name of the instance" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :notify_email" +msgid "Envelope FROM address for mail sent via Pleroma" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :poll_limits" +msgid "A map with poll limits for local polls" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :poll_limits > :max_expiration" +msgid "Maximum expiration time (in seconds)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :poll_limits > :max_option_chars" +msgid "Maximum number of characters per option" +msgstr "单个选项的字符上限" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :poll_limits > :max_options" +msgid "Maximum number of options" +msgstr "选项数量上限" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :poll_limits > :min_expiration" +msgid "Minimum expiration time (in seconds)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :privileged_staff" +msgid "Let moderators access sensitive data (e.g. updating user credentials, get password reset token, delete users, index and read private statuses and chats)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :profile_directory" +msgid "Enable profile directory." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :public" +msgid "Makes the client API in authenticated mode-only except for user-profiles. Useful for disabling the Local Timeline and The Whole Known Network. Note: when setting to `false`, please also check `:restrict_unauthenticated` setting." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :quarantined_instances" +msgid "List of ActivityPub instances where private (DMs, followers-only) activities will not be sent and the reason for doing so" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :registration_reason_length" +msgid "Maximum registration reason length. Default: 500." +msgstr "注册申请理由的字符上限。默认为500。" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :registrations_open" +msgid "Enable registrations for anyone. Invitations require this setting to be disabled." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :remote_limit" +msgid "Hard character limit beyond which remote posts will be dropped" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :remote_post_retention_days" +msgid "The default amount of days to retain remote posts when pruning the database" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :safe_dm_mentions" +msgid "If enabled, only mentions at the beginning of a post will be used to address people in direct messages. This is to prevent accidental mentioning of people when talking about them (e.g. \"@admin please keep an eye on @bad_actor\"). Default: disabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :show_reactions" +msgid "Let favourites and emoji reactions be viewed through the API." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :skip_thread_containment" +msgid "Skip filtering out broken threads. Default: enabled." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :static_dir" +msgid "Instance static directory" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :upload_limit" +msgid "File size limit of uploads (except for avatar, background, banner)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :user_bio_length" +msgid "A user bio maximum length. Default: 5000." +msgstr "用户自传的字符上限。默认为5000。" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instance > :user_name_length" +msgid "A user name maximum length. Default: 100." +msgstr "用户名的字符上限。默认为100。" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:instances_favicons > :enabled" +msgid "Allow/disallow displaying and getting instances favicons" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:ldap > :base" +msgid "LDAP base, e.g. \"dc=example,dc=com\"" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:ldap > :enabled" +msgid "Enables LDAP authentication" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:ldap > :host" +msgid "LDAP server hostname" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:ldap > :port" +msgid "LDAP port, e.g. 389 or 636" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:ldap > :ssl" +msgid "Enable to use SSL, usually implies the port 636" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:ldap > :sslopts" +msgid "Additional SSL options" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:ldap > :sslopts > :cacertfile" +msgid "Path to file with PEM encoded cacerts" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:ldap > :sslopts > :verify" +msgid "Type of cert verification" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:ldap > :tls" +msgid "Enable to use STARTTLS, usually implies the port 389" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:ldap > :tlsopts" +msgid "Additional TLS options" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:ldap > :tlsopts > :cacertfile" +msgid "Path to file with PEM encoded cacerts" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:ldap > :tlsopts > :verify" +msgid "Type of cert verification" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:ldap > :uid" +msgid "LDAP attribute name to authenticate the user, e.g. when \"cn\", the filter will be \"cn=username,base\"" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:majic_pool > :size" +msgid "Number of majic workers to start." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:manifest > :background_color" +msgid "Describe the background color of the app" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:manifest > :icons" +msgid "Describe the icons of the app" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:manifest > :theme_color" +msgid "Describe the theme color of the app" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:markup > :scrub_policy" +msgid "Module names are shortened (removed leading `Pleroma.HTML.` part), but on adding custom module you need to use full name." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:media_preview_proxy > :enabled" +msgid "Enables proxying of remote media preview to the instance's proxy. Requires enabled media proxy." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:media_preview_proxy > :image_quality" +msgid "Quality of the output. Ranges from 0 (min quality) to 100 (max quality)." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:media_preview_proxy > :min_content_length" +msgid "Min content length (in bytes) to perform preview. Media smaller in size will be served without thumbnailing." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:media_preview_proxy > :thumbnail_max_height" +msgid "Max height of preview thumbnail for images (video preview always has original dimensions)." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:media_preview_proxy > :thumbnail_max_width" +msgid "Max width of preview thumbnail for images (video preview always has original dimensions)." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:media_proxy > :base_url" +msgid "The base URL to access a user-uploaded file. Useful when you want to proxy the media files via another host/CDN fronts." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:media_proxy > :enabled" +msgid "Enables proxying of remote media via the instance's proxy" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:media_proxy > :invalidation > :enabled" +msgid "Enables media cache object invalidation." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:media_proxy > :invalidation > :provider" +msgid "Module which will be used to purge objects from the cache." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:media_proxy > :proxy_opts" +msgid "Internal Pleroma.ReverseProxy settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:media_proxy > :proxy_opts > :max_body_length" +msgid "Maximum file size (in bytes) allowed through the Pleroma MediaProxy cache." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:media_proxy > :proxy_opts > :max_read_duration" +msgid "Timeout (in milliseconds) of GET request to the remote URI." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:media_proxy > :proxy_opts > :redirect_on_failure" +msgid "Redirects the client to the origin server upon encountering HTTP errors.\n\nNote that files larger than Max Body Length will trigger an error. (e.g., Peertube videos)\n\n\n**WARNING:** This setting will allow larger files to be accessed, but exposes the\n\nIP addresses of your users to the other servers, bypassing the MediaProxy.\n" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:media_proxy > :whitelist" +msgid "List of hosts with scheme to bypass the MediaProxy" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:modules > :runtime_dir" +msgid "A path to custom Elixir modules (such as MRF policies)." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf > :policies" +msgid "A list of MRF policies enabled. Module names are shortened (removed leading `Pleroma.Web.ActivityPub.MRF.` part), but on adding custom module you need to use full name." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf > :transparency" +msgid "Make the content of your Message Rewrite Facility settings public (via nodeinfo)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf > :transparency_exclusions" +msgid "Exclude specific instance names from MRF transparency. The use of the exclusions feature will be disclosed in nodeinfo as a boolean value. You can also provide a reason for excluding these instance names. The instances and reasons won't be publicly disclosed." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_activity_expiration > :days" +msgid "Default global expiration time for all local activities (in days)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_follow_bot > :follower_nickname" +msgid "The name of the bot account to use for following newly discovered users." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_hashtag > :federated_timeline_removal" +msgid "A list of hashtags which result in message being removed from federated timelines (a.k.a unlisted)." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_hashtag > :reject" +msgid "A list of hashtags which result in message being rejected." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_hashtag > :sensitive" +msgid "A list of hashtags which result in message being set as sensitive (a.k.a NSFW/R-18)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_hellthread > :delist_threshold" +msgid "Number of mentioned users after which the message gets removed from timelines anddisables notifications. Set to 0 to disable." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_hellthread > :reject_threshold" +msgid "Number of mentioned users after which the messaged gets rejected. Set to 0 to disable." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_keyword > :federated_timeline_removal" +msgid " A list of patterns which result in message being removed from federated timelines (a.k.a unlisted).\n\n Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`.\n" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_keyword > :reject" +msgid " A list of patterns which result in message being rejected.\n\n Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`.\n" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_keyword > :replace" +msgid " **Pattern**: a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`.\n\n **Replacement**: a string. Leaving the field empty is permitted.\n" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_mention > :actors" +msgid "A list of actors for which any post mentioning them will be dropped" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_object_age > :actions" +msgid "A list of actions to apply to the post. `:delist` removes the post from public timelines; `:strip_followers` removes followers from the ActivityPub recipient list ensuring they won't be delivered to home timelines; `:reject` rejects the message entirely" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_object_age > :threshold" +msgid "Required age (in seconds) of a post before actions are taken." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_rejectnonpublic > :allow_direct" +msgid "Whether to allow direct messages" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_rejectnonpublic > :allow_followersonly" +msgid "Whether to allow followers-only posts" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_simple > :accept" +msgid "List of instances to only accept activities from (except deletes) and the reason for doing so" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_simple > :avatar_removal" +msgid "List of instances to strip avatars from and the reason for doing so" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_simple > :banner_removal" +msgid "List of instances to strip banners from and the reason for doing so" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_simple > :federated_timeline_removal" +msgid "List of instances to remove from the Federated (aka The Whole Known Network) Timeline and the reason for doing so" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_simple > :followers_only" +msgid "Force posts from the given instances to be visible by followers only and the reason for doing so" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_simple > :media_nsfw" +msgid "List of instances to tag all media as NSFW (sensitive) from and the reason for doing so" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_simple > :media_removal" +msgid "List of instances to strip media attachments from and the reason for doing so" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_simple > :reject" +msgid "List of instances to reject activities from (except deletes) and the reason for doing so" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_simple > :reject_deletes" +msgid "List of instances to reject deletions from and the reason for doing so" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_simple > :report_removal" +msgid "List of instances to reject reports from and the reason for doing so" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_steal_emoji > :hosts" +msgid "List of hosts to steal emojis from" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_steal_emoji > :rejected_shortcodes" +msgid " A list of patterns or matches to reject shortcodes with.\n\n Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`.\n" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_steal_emoji > :size_limit" +msgid "File size limit (in bytes), checked before an emoji is saved to the disk" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_subchain > :match_actor" +msgid "Matches a series of regular expressions against the actor field" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_vocabulary > :accept" +msgid "A list of ActivityStreams terms to accept. If empty, all supported messages are accepted." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:mrf_vocabulary > :reject" +msgid "A list of ActivityStreams terms to reject. If empty, no messages are rejected." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:oauth2 > :clean_expired_tokens" +msgid "Enable a background job to clean expired OAuth tokens. Default: disabled." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:oauth2 > :issue_new_refresh_token" +msgid "Keeps old refresh token or generate new refresh token when to obtain an access token" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:oauth2 > :token_expires_in" +msgid "The lifetime in seconds of the access token" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:pools > :default" +msgid "Settings for default pool." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:pools > :default > :max_waiting" +msgid "Maximum number of requests waiting for other requests to finish. After this number is reached, the pool will start returning errrors when a new request is made" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:pools > :default > :recv_timeout" +msgid "Timeout for the pool while gun will wait for response" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:pools > :default > :size" +msgid "Maximum number of concurrent requests in the pool." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:pools > :federation" +msgid "Settings for federation pool." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:pools > :federation > :max_waiting" +msgid "Maximum number of requests waiting for other requests to finish. After this number is reached, the pool will start returning errrors when a new request is made" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:pools > :federation > :recv_timeout" +msgid "Timeout for the pool while gun will wait for response" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:pools > :federation > :size" +msgid "Maximum number of concurrent requests in the pool." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:pools > :media" +msgid "Settings for media pool." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:pools > :media > :max_waiting" +msgid "Maximum number of requests waiting for other requests to finish. After this number is reached, the pool will start returning errrors when a new request is made" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:pools > :media > :recv_timeout" +msgid "Timeout for the pool while gun will wait for response" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:pools > :media > :size" +msgid "Maximum number of concurrent requests in the pool." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:pools > :upload" +msgid "Settings for upload pool." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:pools > :upload > :max_waiting" +msgid "Maximum number of requests waiting for other requests to finish. After this number is reached, the pool will start returning errrors when a new request is made" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:pools > :upload > :recv_timeout" +msgid "Timeout for the pool while gun will wait for response" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:pools > :upload > :size" +msgid "Maximum number of concurrent requests in the pool." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:populate_hashtags_table > :fault_rate_allowance" +msgid "Max accepted rate of objects that failed in the migration. Any value from 0.0 which tolerates no errors to 1.0 which will enable the feature even if hashtags transfer failed for all records." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:populate_hashtags_table > :sleep_interval_ms" +msgid "Sleep interval between each chunk of processed records in order to decrease the load on the system (defaults to 0 and should be keep default on most instances)." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:rate_limit > :app_account_creation" +msgid "For registering user accounts from the same IP address" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:rate_limit > :authentication" +msgid "For authentication create / password check / user existence check requests" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:rate_limit > :relation_id_action" +msgid "For actions on relation with a specific user (follow, unfollow)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:rate_limit > :relations_actions" +msgid "For actions on relationships with all users (follow, unfollow)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:rate_limit > :search" +msgid "For the search requests (account & status search etc.)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:rate_limit > :status_id_action" +msgid "For fav / unfav or reblog / unreblog actions on the same status by the same user" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:rate_limit > :statuses_actions" +msgid "For create / delete / fav / unfav / reblog / unreblog actions on any statuses" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:rate_limit > :timeline" +msgid "For requests to timelines (each timeline has it's own limiter)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:restrict_unauthenticated > :activities" +msgid "Settings for statuses." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:restrict_unauthenticated > :activities > :local" +msgid "Disallow view local statuses." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:restrict_unauthenticated > :activities > :remote" +msgid "Disallow view remote statuses." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:restrict_unauthenticated > :profiles" +msgid "Settings for user profiles." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:restrict_unauthenticated > :profiles > :local" +msgid "Disallow view local user profiles." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:restrict_unauthenticated > :profiles > :remote" +msgid "Disallow view remote user profiles." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:restrict_unauthenticated > :timelines" +msgid "Settings for public and federated timelines." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:restrict_unauthenticated > :timelines > :federated" +msgid "Disallow view federated timeline." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:restrict_unauthenticated > :timelines > :local" +msgid "Disallow view public timeline." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:rich_media > :enabled" +msgid "Enables RichMedia parsing of URLs" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:rich_media > :failure_backoff" +msgid "Amount of milliseconds after request failure, during which the request will not be retried." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:rich_media > :ignore_hosts" +msgid "List of hosts which will be ignored by the metadata parser" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:rich_media > :ignore_tld" +msgid "List TLDs (top-level domains) which will ignore for parse metadata" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:rich_media > :parsers" +msgid "List of Rich Media parsers. Module names are shortened (removed leading `Pleroma.Web.RichMedia.Parsers.` part), but on adding custom module you need to use full name." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:rich_media > :ttl_setters" +msgid "List of rich media TTL setters. Module names are shortened (removed leading `Pleroma.Web.RichMedia.Parser.` part), but on adding custom module you need to use full name." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:shout > :enabled" +msgid "Enables the backend Shoutbox chat feature." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:shout > :limit" +msgid "Shout message character limit." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:static_fe > :enabled" +msgid "Enables the rendering of static HTML. Default: disabled." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:streamer > :overflow_workers" +msgid "Maximum number of workers created if pool is empty" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:streamer > :workers" +msgid "Number of workers to send notifications" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:uri_schemes > :valid_schemes" +msgid "List of the scheme part that is considered valid to be an URL" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:web_cache_ttl > :activity_pub" +msgid "Activity pub routes (except question activities). Default: `nil` (no expiration)." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:web_cache_ttl > :activity_pub_question" +msgid "Activity pub routes (question activities). Default: `30_000` (30 seconds)." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:welcome > :chat_message > :enabled" +msgid "Enables sending a chat message to newly registered users" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:welcome > :chat_message > :message" +msgid "A message that will be sent to newly registered users as a chat message" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:welcome > :chat_message > :sender_nickname" +msgid "The nickname of the local user that sends a welcome chat message" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:welcome > :direct_message > :enabled" +msgid "Enables sending a direct message to newly registered users" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:welcome > :direct_message > :message" +msgid "A message that will be sent to newly registered users" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:welcome > :direct_message > :sender_nickname" +msgid "The nickname of the local user that sends a welcome message" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:welcome > :email > :enabled" +msgid "Enables sending an email to newly registered users" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:welcome > :email > :html" +msgid "HTML content of the welcome email. EEX template with user and instance_name variables can be used." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:welcome > :email > :sender" +msgid "Email address and/or nickname that will be used to send the welcome email." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:welcome > :email > :subject" +msgid "Subject of the welcome email. EEX template with user and instance_name variables can be used." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:welcome > :email > :text" +msgid "Text content of the welcome email. EEX template with user and instance_name variables can be used." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-:workers > :retries" +msgid "Max retry attempts for failed jobs, per `Oban` queue" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy" +msgid "Concurrent limits configuration for MediaProxyWarmingPolicy." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy > :max_running" +msgid "Max running concurrently jobs." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy > :max_waiting" +msgid "Max waiting jobs." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers" +msgid "Concurrent limits configuration for getting RichMedia for activities." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers > :max_running" +msgid "Max running concurrently jobs." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers > :max_waiting" +msgid "Max waiting jobs." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Oban > :crontab" +msgid "Settings for cron background jobs" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Oban > :log" +msgid "Logs verbose mode" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Oban > :queues" +msgid "Background jobs queues (keys: queues, values: max numbers of concurrent jobs)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Oban > :queues > :activity_expiration" +msgid "Activity expiration queue" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Oban > :queues > :attachments_cleanup" +msgid "Attachment deletion queue" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Oban > :queues > :background" +msgid "Background queue" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Oban > :queues > :backup" +msgid "Backup queue" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Oban > :queues > :federator_incoming" +msgid "Incoming federation queue" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Oban > :queues > :federator_outgoing" +msgid "Outgoing federation queue" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Oban > :queues > :mailer" +msgid "Email sender queue, see Pleroma.Emails.Mailer" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Oban > :queues > :scheduled_activities" +msgid "Scheduled activities queue, see Pleroma.ScheduledActivities" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Oban > :queues > :transmogrifier" +msgid "Transmogrifier queue" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Oban > :queues > :web_push" +msgid "Web push notifications queue" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Captcha > :enabled" +msgid "Whether the captcha should be shown on registration" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Captcha > :method" +msgid "The method/service to use for captcha" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Captcha > :seconds_valid" +msgid "The time in seconds for which the captcha is valid" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Captcha.Kocaptcha > :endpoint" +msgid "The kocaptcha endpoint to use" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > :adapter" +msgid "One of the mail adapters listed in [Swoosh documentation](https://hexdocs.pm/swoosh/Swoosh.html#module-adapters)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:auth" +msgid "SMTP AUTH enforcement mode" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:password" +msgid "SMTP AUTH password" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:port" +msgid "SMTP port" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:relay" +msgid "Hostname or IP address" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:retries" +msgid "SMTP temporary (4xx) error retries" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:ssl" +msgid "Use Implicit SSL/TLS. e.g. port 465" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:tls" +msgid "Explicit TLS (STARTTLS) enforcement mode" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:username" +msgid "SMTP AUTH username" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Emails.NewUsersDigestEmail > :enabled" +msgid "Enables new users admin digest email when `true`" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Emails.UserEmail > :logo" +msgid "A path to a custom logo. Set it to `nil` to use the default Pleroma logo." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Emails.UserEmail > :styling" +msgid "A map with color settings for email templates." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Formatter > :class" +msgid "Specify the class to be added to the generated link. Disable to clear." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Formatter > :extra" +msgid "Link URLs with rarely used schemes (magnet, ipfs, irc, etc.)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Formatter > :new_window" +msgid "Link URLs will open in a new window/tab." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Formatter > :rel" +msgid "Override the rel attribute. Disable to clear." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Formatter > :strip_prefix" +msgid "Strip the scheme prefix." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Formatter > :truncate" +msgid "Set to a number to truncate URLs longer than the number. Truncated URLs will end in `...`" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Formatter > :validate_tld" +msgid "Set to false to disable TLD validation for URLs/emails. Can be set to :no_scheme to validate TLDs only for URLs without a scheme (e.g `example.com` will be validated, but `http://example.loki` won't)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.ScheduledActivity > :daily_user_limit" +msgid "The number of scheduled activities a user is allowed to create in a single day. Default: 25." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.ScheduledActivity > :enabled" +msgid "Whether scheduled activities are sent to the job queue to be executed" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.ScheduledActivity > :total_user_limit" +msgid "The number of scheduled activities a user is allowed to create in total. Default: 300." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Upload > :base_url" +msgid "Base URL for the uploads. Required if you use a CDN or host attachments under a different domain." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Upload > :filename_display_max_length" +msgid "Set max length of a filename to display. 0 = no limit. Default: 30" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Upload > :filters" +msgid "List of filter modules for uploads. Module names are shortened (removed leading `Pleroma.Upload.Filter.` part), but on adding custom module you need to use full name." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Upload > :link_name" +msgid "If enabled, a name parameter will be added to the URL of the upload. For example `https://instance.tld/media/imagehash.png?name=realname.png`." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Upload > :proxy_remote" +msgid "Proxy requests to the remote uploader.\n\nUseful if media upload endpoint is not internet accessible.\n" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Upload > :uploader" +msgid "Module which will be used for uploads" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Upload.Filter.AnonymizeFilename > :text" +msgid "Text to replace filenames in links. If no setting, {random}.extension will be used. You can get the original filename extension by using {extension}, for example custom-file-name.{extension}." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Upload.Filter.Mogrify > :args" +msgid "List of actions for the mogrify command. It's possible to add self-written settings as string. For example `auto-orient, strip, {\"resize\", \"3840x1080>\"}` value will be parsed into valid list of the settings." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Uploaders.Local > :uploads" +msgid "Path where user's uploads will be saved" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Uploaders.S3 > :bucket" +msgid "S3 bucket" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Uploaders.S3 > :bucket_namespace" +msgid "S3 bucket namespace" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Uploaders.S3 > :streaming_enabled" +msgid "Enable streaming uploads, when enabled the file will be sent to the server in chunks as it's being read. This may be unsupported by some providers, try disabling this if you have upload problems." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Uploaders.S3 > :truncated_namespace" +msgid "If you use S3 compatible service such as Digital Ocean Spaces or CDN, set folder name or \"\" etc. For example, when using CDN to S3 virtual host format, set \"\". At this time, write CNAME to CDN in Upload base_url." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.User > :email_blacklist" +msgid "List of email domains users may not register with." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.User > :restricted_nicknames" +msgid "List of nicknames users may not register with." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.User.Backup > :limit_days" +msgid "Limit user to export not more often than once per N days" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.User.Backup > :purge_after_days" +msgid "Remove backup achives after N days" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Web.ApiSpec.CastAndValidate > :strict" +msgid "Enables strict input validation (useful in development, not recommended in production)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :headers" +msgid "HTTP headers of request" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :method" +msgid "HTTP method of request. Default: :purge" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :options" +msgid "Request options" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :script_path" +msgid "Path to executable script which will purge cached items." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :url_format" +msgid "Optional URL format preprocessing. Only required for Apache's htcacheclean." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Web.Metadata > :providers" +msgid "List of metadata providers to enable" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Web.Metadata > :unfurl_nsfw" +msgid "When enabled NSFW attachments will be shown in previews" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp > :enabled" +msgid "Enable/disable the plug. Default: disabled." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp > :headers" +msgid " A list of strings naming the HTTP headers to use when deriving the true client IP. Default: `[\"x-forwarded-for\"]`.\n" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp > :proxies" +msgid "A list of upstream proxy IP subnets in CIDR notation from which we will parse the content of `headers`. Defaults to `[]`. IPv4 entries without a bitmask will be assumed to be /32 and IPv6 /128." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp > :reserved" +msgid " A list of reserved IP subnets in CIDR notation which should be ignored if found in `headers`. Defaults to `[\"127.0.0.0/8\", \"::1/128\", \"fc00::/7\", \"10.0.0.0/8\", \"172.16.0.0/12\", \"192.168.0.0/16\"]`\n" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Web.Preload > :providers" +msgid "List of preload providers to enable" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :enabled" +msgid "Enables expired activities addition & deletion" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :min_lifetime" +msgid "Minimum lifetime for ephemeral activity (in seconds)" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :auth" +msgid "Enables HTTP Basic Auth for app metrics endpoint." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :enabled" +msgid "[Pleroma extension] Enables app metrics endpoint." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :format" +msgid "App metrics endpoint output format." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :ip_whitelist" +msgid "Restrict access of app metrics endpoint to the specified IP addresses." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :path" +msgid "App metrics endpoint URI path." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :quack > :level" +msgid "Log level" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :quack > :meta" +msgid "Configure which metadata you want to report on" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :quack > :webhook_url" +msgid "Configure the Slack incoming webhook" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :web_push_encryption-:vapid_details > :private_key" +msgid "VAPID private key" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :web_push_encryption-:vapid_details > :public_key" +msgid "VAPID public key" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config description at :web_push_encryption-:vapid_details > :subject" +msgid "A mailto link for the administrative contact. It's best if this email is not a personal email address, but rather a group email to the instance moderation team." +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :cors_plug > :credentials" +msgid "Credentials" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :cors_plug > :expose" +msgid "Expose" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :cors_plug > :headers" +msgid "Headers" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :cors_plug > :max_age" +msgid "Max age" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :cors_plug > :methods" +msgid "Methods" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :esshd > :enabled" +msgid "Enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :esshd > :handler" +msgid "Handler" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :esshd > :password_authenticator" +msgid "Password authenticator" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :esshd > :port" +msgid "Port" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :esshd > :priv_dir" +msgid "Priv dir" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :ex_aws-:s3 > :access_key_id" +msgid "Access key" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :ex_aws-:s3 > :host" +msgid "Host" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :ex_aws-:s3 > :region" +msgid "Region" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :ex_aws-:s3 > :secret_access_key" +msgid "Secret access key" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :logger > :backends" +msgid "Backends" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :logger-:console > :format" +msgid "Format" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :logger-:console > :level" +msgid "Level" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :logger-:console > :metadata" +msgid "Metadata" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :logger-:ex_syslogger > :format" +msgid "Format" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :logger-:ex_syslogger > :ident" +msgid "Ident" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :logger-:ex_syslogger > :level" +msgid "Level" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :logger-:ex_syslogger > :metadata" +msgid "Metadata" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :mime > :types" +msgid "Types" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :mime > :types > application/activity+json" +msgid "\"application/activity+json\"" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :mime > :types > application/jrd+json" +msgid "\"application/jrd+json\"" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :mime > :types > application/ld+json" +msgid "\"application/ld+json\"" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :mime > :types > application/xml" +msgid "\"application/xml\"" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :mime > :types > application/xrd+xml" +msgid "\"application/xrd+xml\"" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma > :admin_token" +msgid "Admin token" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma > Pleroma.Web.Auth.Authenticator" +msgid "Pleroma.Web.Auth.Authenticator" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:activitypub > :blockers_visible" +msgid "Blockers visible" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:activitypub > :follow_handshake_timeout" +msgid "Follow handshake timeout" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:activitypub > :note_replies_output_limit" +msgid "Note replies output limit" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:activitypub > :outgoing_blocks" +msgid "Outgoing blocks" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:activitypub > :sign_object_fetches" +msgid "Sign object fetches" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:activitypub > :unfollow_blocked" +msgid "Unfollow blocked" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:assets > :default_mascot" +msgid "Default mascot" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:assets > :default_user_avatar" +msgid "Default user avatar" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:assets > :mascots" +msgid "Mascots" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:auth > :auth_template" +msgid "Auth template" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:auth > :enforce_oauth_admin_scope_usage" +msgid "Enforce OAuth admin scope usage" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:auth > :oauth_consumer_strategies" +msgid "OAuth consumer strategies" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:auth > :oauth_consumer_template" +msgid "OAuth consumer template" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:connections_pool > :connect_timeout" +msgid "Connect timeout" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:connections_pool > :connection_acquisition_retries" +msgid "Connection acquisition retries" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:connections_pool > :connection_acquisition_wait" +msgid "Connection acquisition wait" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:connections_pool > :max_connections" +msgid "Max connections" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:connections_pool > :reclaim_multiplier" +msgid "Reclaim multiplier" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:email_notifications > :digest" +msgid "Digest" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:email_notifications > :digest > :active" +msgid "Enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:email_notifications > :digest > :inactivity_threshold" +msgid "Inactivity threshold" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:email_notifications > :digest > :interval" +msgid "Interval" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:email_notifications > :digest > :schedule" +msgid "Schedule" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:emoji > :default_manifest" +msgid "Default manifest" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:emoji > :groups" +msgid "Groups" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:emoji > :pack_extensions" +msgid "Pack extensions" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:emoji > :shared_pack_cache_seconds_per_file" +msgid "Shared pack cache s/file" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:emoji > :shortcode_globs" +msgid "Shortcode globs" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:features > :improved_hashtag_timeline" +msgid "Improved hashtag timeline" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:feed > :post_title" +msgid "Post title" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:feed > :post_title > :max_length" +msgid "Max length" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:feed > :post_title > :omission" +msgid "Omission" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe" +msgid "Pleroma FE" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :alwaysShowSubjectInput" +msgid "Always show subject input" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :background" +msgid "Background" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :collapseMessageWithSubject" +msgid "Collapse message with subject" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :greentext" +msgid "Greentext" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hideFilteredStatuses" +msgid "Hide Filtered Statuses" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hideMutedPosts" +msgid "Hide Muted Posts" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hidePostStats" +msgid "Hide post stats" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hideSitename" +msgid "Hide Sitename" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hideUserStats" +msgid "Hide user stats" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :logo" +msgid "Logo" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :logoMargin" +msgid "Logo margin" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :logoMask" +msgid "Logo mask" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :minimalScopesMode" +msgid "Minimal scopes mode" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :nsfwCensorImage" +msgid "NSFW Censor Image" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :postContentType" +msgid "Post Content Type" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :redirectRootLogin" +msgid "Redirect root login" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :redirectRootNoLogin" +msgid "Redirect root no login" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :scopeCopy" +msgid "Scope copy" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :showFeaturesPanel" +msgid "Show instance features panel" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :showInstanceSpecificPanel" +msgid "Show instance specific panel" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :sidebarRight" +msgid "Sidebar on Right" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :subjectLineBehavior" +msgid "Subject line behavior" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :theme" +msgid "Theme" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontends > :admin" +msgid "Admin" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontends > :admin > name" +msgid "Name" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontends > :admin > ref" +msgid "Reference" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontends > :available" +msgid "Available" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontends > :available > build_dir" +msgid "Build directory" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontends > :available > build_url" +msgid "Build URL" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontends > :available > custom-http-headers" +msgid "Custom HTTP headers" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontends > :available > git" +msgid "Git Repository URL" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontends > :available > name" +msgid "Name" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontends > :available > ref" +msgid "Reference" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontends > :primary" +msgid "Primary" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontends > :primary > name" +msgid "Name" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:frontends > :primary > ref" +msgid "Reference" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:gopher > :dstport" +msgid "Dstport" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:gopher > :enabled" +msgid "Enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:gopher > :ip" +msgid "IP" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:gopher > :port" +msgid "Port" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:hackney_pools > :federation" +msgid "Federation" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:hackney_pools > :federation > :max_connections" +msgid "Max connections" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:hackney_pools > :federation > :timeout" +msgid "Timeout" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:hackney_pools > :media" +msgid "Media" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:hackney_pools > :media > :max_connections" +msgid "Max connections" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:hackney_pools > :media > :timeout" +msgid "Timeout" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:hackney_pools > :upload" +msgid "Upload" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:hackney_pools > :upload > :max_connections" +msgid "Max connections" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:hackney_pools > :upload > :timeout" +msgid "Timeout" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:http > :adapter" +msgid "Adapter" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:http > :adapter > :ssl_options" +msgid "SSL Options" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:http > :adapter > :ssl_options > :versions" +msgid "Versions" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:http > :proxy_url" +msgid "Proxy URL" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:http > :send_user_agent" +msgid "Send user agent" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:http > :user_agent" +msgid "User agent" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:http_security > :ct_max_age" +msgid "CT max age" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:http_security > :enabled" +msgid "Enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:http_security > :referrer_policy" +msgid "Referrer policy" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:http_security > :report_uri" +msgid "Report URI" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:http_security > :sts" +msgid "STS" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:http_security > :sts_max_age" +msgid "STS max age" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :account_activation_required" +msgid "Account activation required" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :account_approval_required" +msgid "Account approval required" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :account_field_name_length" +msgid "Account field name length" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :account_field_value_length" +msgid "Account field value length" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :allow_relay" +msgid "Allow relay" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :allowed_post_formats" +msgid "Allowed post formats" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :attachment_links" +msgid "Attachment links" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :autofollowed_nicknames" +msgid "Autofollowed nicknames" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :autofollowing_nicknames" +msgid "Autofollowing nicknames" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :avatar_upload_limit" +msgid "Avatar upload limit" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :background_upload_limit" +msgid "Background upload limit" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :banner_upload_limit" +msgid "Banner upload limit" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :birthday_min_age" +msgid "Birthday min age" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :birthday_required" +msgid "Birthday required" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :cleanup_attachments" +msgid "Cleanup attachments" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :description" +msgid "Description" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :email" +msgid "Admin Email Address" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :extended_nickname_format" +msgid "Extended nickname format" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :external_user_synchronization" +msgid "External user synchronization" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :federating" +msgid "Federating" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :federation_incoming_replies_max_depth" +msgid "Fed. incoming replies max depth" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :federation_reachability_timeout_days" +msgid "Fed. reachability timeout days" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :healthcheck" +msgid "Healthcheck" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :instance_thumbnail" +msgid "Instance thumbnail" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :invites_enabled" +msgid "Invites enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :limit" +msgid "Limit" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :limit_to_local_content" +msgid "Limit to local content" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :max_account_fields" +msgid "Max account fields" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :max_endorsed_users" +msgid "Max endorsed users" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :max_media_attachments" +msgid "Max media attachments" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :max_pinned_statuses" +msgid "Max pinned statuses" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :max_remote_account_fields" +msgid "Max remote account fields" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :max_report_comment_size" +msgid "Max report comment size" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication" +msgid "Multi factor authentication" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :backup_codes" +msgid "Backup codes" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :backup_codes > :length" +msgid "Length" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :backup_codes > :number" +msgid "Number" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :totp" +msgid "TOTP settings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :totp > :digits" +msgid "Digits" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :totp > :period" +msgid "Period" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :name" +msgid "Name" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :notify_email" +msgid "Sender Email Address" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :poll_limits" +msgid "Poll limits" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :poll_limits > :max_expiration" +msgid "Max expiration" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :poll_limits > :max_option_chars" +msgid "Max option chars" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :poll_limits > :max_options" +msgid "Max options" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :poll_limits > :min_expiration" +msgid "Min expiration" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :privileged_staff" +msgid "Privileged staff" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :profile_directory" +msgid "Profile directory" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :public" +msgid "Public" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :quarantined_instances" +msgid "Quarantined instances" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :registration_reason_length" +msgid "Registration reason length" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :registrations_open" +msgid "Registrations open" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :remote_limit" +msgid "Remote limit" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :remote_post_retention_days" +msgid "Remote post retention days" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :safe_dm_mentions" +msgid "Safe DM mentions" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :show_reactions" +msgid "Show reactions" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :skip_thread_containment" +msgid "Skip thread containment" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :static_dir" +msgid "Static dir" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :upload_limit" +msgid "Upload limit" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :user_bio_length" +msgid "User bio length" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instance > :user_name_length" +msgid "User name length" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:instances_favicons > :enabled" +msgid "Enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:ldap > :base" +msgid "Base" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:ldap > :enabled" +msgid "Enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:ldap > :host" +msgid "Host" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:ldap > :port" +msgid "Port" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:ldap > :ssl" +msgid "SSL" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:ldap > :sslopts" +msgid "SSL options" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:ldap > :sslopts > :cacertfile" +msgid "Cacertfile" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:ldap > :sslopts > :verify" +msgid "Verify" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:ldap > :tls" +msgid "TLS" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:ldap > :tlsopts" +msgid "TLS options" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:ldap > :tlsopts > :cacertfile" +msgid "Cacertfile" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:ldap > :tlsopts > :verify" +msgid "Verify" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:ldap > :uid" +msgid "UID" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:majic_pool > :size" +msgid "Size" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:manifest > :background_color" +msgid "Background color" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:manifest > :icons" +msgid "Icons" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:manifest > :theme_color" +msgid "Theme color" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:markup > :allow_fonts" +msgid "Allow fonts" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:markup > :allow_headings" +msgid "Allow headings" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:markup > :allow_inline_images" +msgid "Allow inline images" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:markup > :allow_tables" +msgid "Allow tables" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:markup > :scrub_policy" +msgid "Scrub policy" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:media_preview_proxy > :enabled" +msgid "Enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:media_preview_proxy > :image_quality" +msgid "Image quality" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:media_preview_proxy > :min_content_length" +msgid "Min content length" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:media_preview_proxy > :thumbnail_max_height" +msgid "Thumbnail max height" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:media_preview_proxy > :thumbnail_max_width" +msgid "Thumbnail max width" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:media_proxy > :base_url" +msgid "Base URL" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:media_proxy > :enabled" +msgid "Enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:media_proxy > :invalidation" +msgid "Invalidation" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:media_proxy > :invalidation > :enabled" +msgid "Enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:media_proxy > :invalidation > :provider" +msgid "Provider" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:media_proxy > :proxy_opts" +msgid "Advanced MediaProxy Options" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:media_proxy > :proxy_opts > :max_body_length" +msgid "Max body length" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:media_proxy > :proxy_opts > :max_read_duration" +msgid "Max read duration" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:media_proxy > :proxy_opts > :redirect_on_failure" +msgid "Redirect on failure" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:media_proxy > :whitelist" +msgid "Whitelist" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:modules > :runtime_dir" +msgid "Runtime dir" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf > :policies" +msgid "Policies" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf > :transparency" +msgid "MRF transparency" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf > :transparency_exclusions" +msgid "MRF transparency exclusions" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_activity_expiration > :days" +msgid "Days" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_follow_bot > :follower_nickname" +msgid "Follower nickname" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_hashtag > :federated_timeline_removal" +msgid "Federated timeline removal" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_hashtag > :reject" +msgid "Reject" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_hashtag > :sensitive" +msgid "Sensitive" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_hellthread > :delist_threshold" +msgid "Delist threshold" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_hellthread > :reject_threshold" +msgid "Reject threshold" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_keyword > :federated_timeline_removal" +msgid "Federated timeline removal" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_keyword > :reject" +msgid "Reject" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_keyword > :replace" +msgid "Replace" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_mention > :actors" +msgid "Actors" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_normalize_markup > :scrub_policy" +msgid "Scrub policy" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_object_age > :actions" +msgid "Actions" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_object_age > :threshold" +msgid "Threshold" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_rejectnonpublic > :allow_direct" +msgid "Allow direct" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_rejectnonpublic > :allow_followersonly" +msgid "Allow followers-only" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_simple > :accept" +msgid "Accept" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_simple > :avatar_removal" +msgid "Avatar removal" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_simple > :banner_removal" +msgid "Banner removal" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_simple > :federated_timeline_removal" +msgid "Federated timeline removal" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_simple > :followers_only" +msgid "Followers only" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_simple > :media_nsfw" +msgid "Media NSFW" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_simple > :media_removal" +msgid "Media removal" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_simple > :reject" +msgid "Reject" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_simple > :reject_deletes" +msgid "Reject deletes" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_simple > :report_removal" +msgid "Report removal" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_steal_emoji > :hosts" +msgid "Hosts" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_steal_emoji > :rejected_shortcodes" +msgid "Rejected shortcodes" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_steal_emoji > :size_limit" +msgid "Size limit" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_subchain > :match_actor" +msgid "Match actor" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_vocabulary > :accept" +msgid "Accept" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:mrf_vocabulary > :reject" +msgid "Reject" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:oauth2 > :clean_expired_tokens" +msgid "Clean expired tokens" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:oauth2 > :issue_new_refresh_token" +msgid "Issue new refresh token" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:oauth2 > :token_expires_in" +msgid "Token expires in" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:pools > :default" +msgid "Default" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:pools > :default > :max_waiting" +msgid "Max waiting" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:pools > :default > :recv_timeout" +msgid "Recv timeout" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:pools > :default > :size" +msgid "Size" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:pools > :federation" +msgid "Federation" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:pools > :federation > :max_waiting" +msgid "Max waiting" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:pools > :federation > :recv_timeout" +msgid "Recv timeout" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:pools > :federation > :size" +msgid "Size" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:pools > :media" +msgid "Media" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:pools > :media > :max_waiting" +msgid "Max waiting" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:pools > :media > :recv_timeout" +msgid "Recv timeout" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:pools > :media > :size" +msgid "Size" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:pools > :upload" +msgid "Upload" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:pools > :upload > :max_waiting" +msgid "Max waiting" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:pools > :upload > :recv_timeout" +msgid "Recv timeout" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:pools > :upload > :size" +msgid "Size" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:populate_hashtags_table > :fault_rate_allowance" +msgid "Fault rate allowance" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:populate_hashtags_table > :sleep_interval_ms" +msgid "Sleep interval ms" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:rate_limit > :app_account_creation" +msgid "App account creation" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:rate_limit > :authentication" +msgid "Authentication" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:rate_limit > :relation_id_action" +msgid "Relation ID action" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:rate_limit > :relations_actions" +msgid "Relations actions" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:rate_limit > :search" +msgid "Search" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:rate_limit > :status_id_action" +msgid "Status ID action" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:rate_limit > :statuses_actions" +msgid "Statuses actions" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:rate_limit > :timeline" +msgid "Timeline" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:restrict_unauthenticated > :activities" +msgid "Activities" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:restrict_unauthenticated > :activities > :local" +msgid "Local" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:restrict_unauthenticated > :activities > :remote" +msgid "Remote" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:restrict_unauthenticated > :profiles" +msgid "Profiles" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:restrict_unauthenticated > :profiles > :local" +msgid "Local" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:restrict_unauthenticated > :profiles > :remote" +msgid "Remote" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:restrict_unauthenticated > :timelines" +msgid "Timelines" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:restrict_unauthenticated > :timelines > :federated" +msgid "Federated" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:restrict_unauthenticated > :timelines > :local" +msgid "Local" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:rich_media > :enabled" +msgid "Enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:rich_media > :failure_backoff" +msgid "Failure backoff" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:rich_media > :ignore_hosts" +msgid "Ignore hosts" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:rich_media > :ignore_tld" +msgid "Ignore TLD" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:rich_media > :parsers" +msgid "Parsers" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:rich_media > :ttl_setters" +msgid "TTL setters" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:shout > :enabled" +msgid "Enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:shout > :limit" +msgid "Limit" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:static_fe > :enabled" +msgid "Enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:streamer > :overflow_workers" +msgid "Overflow workers" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:streamer > :workers" +msgid "Workers" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:uri_schemes > :valid_schemes" +msgid "Valid schemes" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:user > :deny_follow_blocked" +msgid "Deny follow blocked" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:web_cache_ttl > :activity_pub" +msgid "Activity pub" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:web_cache_ttl > :activity_pub_question" +msgid "Activity pub question" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:welcome > :chat_message" +msgid "Chat message" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:welcome > :chat_message > :enabled" +msgid "Enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:welcome > :chat_message > :message" +msgid "Message" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:welcome > :chat_message > :sender_nickname" +msgid "Sender nickname" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:welcome > :direct_message" +msgid "Direct message" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:welcome > :direct_message > :enabled" +msgid "Enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:welcome > :direct_message > :message" +msgid "Message" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:welcome > :direct_message > :sender_nickname" +msgid "Sender nickname" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:welcome > :email" +msgid "Email" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:welcome > :email > :enabled" +msgid "Enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:welcome > :email > :html" +msgid "Html" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:welcome > :email > :sender" +msgid "Sender" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:welcome > :email > :subject" +msgid "Subject" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:welcome > :email > :text" +msgid "Text" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-:workers > :retries" +msgid "Retries" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy" +msgid "Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy > :max_running" +msgid "Max running" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy > :max_waiting" +msgid "Max waiting" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers" +msgid "Pleroma.Web.RichMedia.Helpers" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers > :max_running" +msgid "Max running" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers > :max_waiting" +msgid "Max waiting" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Oban > :crontab" +msgid "Crontab" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Oban > :log" +msgid "Log" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Oban > :queues" +msgid "Queues" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Oban > :queues > :activity_expiration" +msgid "Activity expiration" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Oban > :queues > :attachments_cleanup" +msgid "Attachments cleanup" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Oban > :queues > :background" +msgid "Background" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Oban > :queues > :backup" +msgid "Backup" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Oban > :queues > :federator_incoming" +msgid "Federator incoming" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Oban > :queues > :federator_outgoing" +msgid "Federator outgoing" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Oban > :queues > :mailer" +msgid "Mailer" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Oban > :queues > :scheduled_activities" +msgid "Scheduled activities" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Oban > :queues > :transmogrifier" +msgid "Transmogrifier" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Oban > :queues > :web_push" +msgid "Web push" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Captcha > :enabled" +msgid "Enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Captcha > :method" +msgid "Method" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Captcha > :seconds_valid" +msgid "Seconds valid" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Captcha.Kocaptcha > :endpoint" +msgid "Endpoint" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > :adapter" +msgid "Adapter" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > :enabled" +msgid "Mailer Enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.AmazonSES-:access_key" +msgid "AWS Access Key" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.AmazonSES-:region" +msgid "AWS Region" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.AmazonSES-:secret" +msgid "AWS Secret Key" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Dyn-:api_key" +msgid "Dyn API Key" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Gmail-:access_token" +msgid "GMail API Access Token" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailgun-:api_key" +msgid "Mailgun API Key" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailgun-:domain" +msgid "Domain" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailjet-:api_key" +msgid "MailJet Public API Key" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailjet-:secret" +msgid "MailJet Private API Key" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mandrill-:api_key" +msgid "Mandrill API Key" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Postmark-:api_key" +msgid "Postmark API Key" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:auth" +msgid "AUTH Mode" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:password" +msgid "Password" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:port" +msgid "Port" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:relay" +msgid "Relay" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:retries" +msgid "Retries" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:ssl" +msgid "Use SSL" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:tls" +msgid "STARTTLS Mode" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:username" +msgid "Username" +msgstr "用户名" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendgrid-:api_key" +msgid "SendGrid API Key" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendmail-:cmd_args" +msgid "Cmd args" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendmail-:cmd_path" +msgid "Cmd path" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendmail-:qmail" +msgid "Qmail compat mode" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SocketLabs-:api_key" +msgid "SocketLabs API Key" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SocketLabs-:server_id" +msgid "Server ID" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SparkPost-:api_key" +msgid "SparkPost API key" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SparkPost-:endpoint" +msgid "Endpoint" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.NewUsersDigestEmail > :enabled" +msgid "Enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :logo" +msgid "Logo" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling" +msgid "Styling" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :background_color" +msgid "Background color" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :content_background_color" +msgid "Content background color" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :header_color" +msgid "Header color" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :link_color" +msgid "Link color" +msgstr "链接颜色" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :text_color" +msgid "Text color" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :text_muted_color" +msgid "Text muted color" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Formatter > :class" +msgid "Class" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Formatter > :extra" +msgid "Extra" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Formatter > :new_window" +msgid "New window" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Formatter > :rel" +msgid "Rel" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Formatter > :strip_prefix" +msgid "Strip prefix" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Formatter > :truncate" +msgid "Truncate" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Formatter > :validate_tld" +msgid "Validate tld" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.ScheduledActivity > :daily_user_limit" +msgid "Daily user limit" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.ScheduledActivity > :enabled" +msgid "Enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.ScheduledActivity > :total_user_limit" +msgid "Total user limit" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Upload > :base_url" +msgid "Base URL" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Upload > :filename_display_max_length" +msgid "Filename display max length" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Upload > :filters" +msgid "Filters" +msgstr "过滤器" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Upload > :link_name" +msgid "Link name" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Upload > :proxy_remote" +msgid "Proxy remote" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Upload > :uploader" +msgid "Uploader" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Upload.Filter.AnonymizeFilename > :text" +msgid "Text" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Upload.Filter.Mogrify > :args" +msgid "Args" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Uploaders.Local > :uploads" +msgid "Uploads" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Uploaders.S3 > :bucket" +msgid "Bucket" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Uploaders.S3 > :bucket_namespace" +msgid "Bucket namespace" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Uploaders.S3 > :streaming_enabled" +msgid "Streaming enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Uploaders.S3 > :truncated_namespace" +msgid "Truncated namespace" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.User > :email_blacklist" +msgid "Email blacklist" +msgstr "邮件黑名单" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.User > :restricted_nicknames" +msgid "Restricted nicknames" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.User.Backup > :limit_days" +msgid "Limit days" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.User.Backup > :purge_after_days" +msgid "Purge after days" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Web.ApiSpec.CastAndValidate > :strict" +msgid "Strict" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :headers" +msgid "Headers" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :method" +msgid "Method" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :options" +msgid "Options" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :options > :params" +msgid "Params" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :script_path" +msgid "Script path" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :url_format" +msgid "URL Format" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Web.Metadata > :providers" +msgid "Providers" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Web.Metadata > :unfurl_nsfw" +msgid "Unfurl NSFW" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp > :enabled" +msgid "Enabled" +msgstr "已启用" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp > :headers" +msgid "Headers" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp > :proxies" +msgid "Proxies" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp > :reserved" +msgid "Reserved" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Web.Preload > :providers" +msgid "Providers" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :enabled" +msgid "Enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :min_lifetime" +msgid "Min lifetime" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :auth" +msgid "Auth" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :enabled" +msgid "Enabled" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :format" +msgid "Format" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :ip_whitelist" +msgid "IP Whitelist" +msgstr "IP 白名单" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :path" +msgid "Path" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :quack > :level" +msgid "Level" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :quack > :meta" +msgid "Meta" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :quack > :webhook_url" +msgid "Webhook URL" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :web_push_encryption-:vapid_details > :private_key" +msgid "Private key" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :web_push_encryption-:vapid_details > :public_key" +msgid "Public key" +msgstr "" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format +msgctxt "config label at :web_push_encryption-:vapid_details > :subject" +msgid "Subject" +msgstr "" diff --git a/priv/gettext/zh_Hans/LC_MESSAGES/default.po b/priv/gettext/zh_Hans/LC_MESSAGES/default.po new file mode 100644 index 000000000..ed0d1576b --- /dev/null +++ b/priv/gettext/zh_Hans/LC_MESSAGES/default.po @@ -0,0 +1,193 @@ +## "msgid"s in this file come from POT (.pot) files. +## +## Do not add, change, or remove "msgid"s manually here as +## they're tied to the ones in the corresponding POT file +## (with the same domain). +## +## Use "mix gettext.extract --merge" or "mix gettext.merge" +## to merge POT files into PO files. +msgid "" +msgstr "" +"PO-Revision-Date: 2022-07-22 19:00+0000\n" +"Last-Translator: Yating Zhan \n" +"Language-Team: Chinese (Simplified) \n" +"Language: zh_Hans\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.13.1\n" + +#: lib/pleroma/web/api_spec/render_error.ex:122 +#, elixir-format +msgid "%{name} - %{count} is not a multiple of %{multiple}." +msgstr "%{name} - %{count} 不是 %{multiple} 的倍数。" + +#: lib/pleroma/web/api_spec/render_error.ex:131 +#, elixir-format +msgid "%{name} - %{value} is larger than exclusive maximum %{max}." +msgstr "%{name} - %{value} 大于排除性最大值 %{max}。" + +#: lib/pleroma/web/api_spec/render_error.ex:140 +#, elixir-format +msgid "%{name} - %{value} is larger than inclusive maximum %{max}." +msgstr "%{name} - %{value} 大于包括性最大值 %{max}。" + +#: lib/pleroma/web/api_spec/render_error.ex:149 +#, elixir-format +msgid "%{name} - %{value} is smaller than exclusive minimum %{min}." +msgstr "%{name} - %{value} 小于排除性最小值 %{min}。" + +#: lib/pleroma/web/api_spec/render_error.ex:158 +#, elixir-format +msgid "%{name} - %{value} is smaller than inclusive minimum %{min}." +msgstr "%{name} - %{value} 小于包括性最小值 %{min}。" + +#: lib/pleroma/web/api_spec/render_error.ex:102 +#, elixir-format +msgid "%{name} - Array items must be unique." +msgstr "%{name} - 数组项目必须唯一。" + +#: lib/pleroma/web/api_spec/render_error.ex:114 +#, elixir-format +msgid "%{name} - Array length %{length} is larger than maxItems: %{}." +msgstr "%{name} - 数组长度 %{length} 大于最大项目数: %{}。" + +#: lib/pleroma/web/api_spec/render_error.ex:106 +#, elixir-format +msgid "%{name} - Array length %{length} is smaller than minItems: %{min}." +msgstr "%{name} - 数组长度 %{length} 小于最小项目数: %{min}。" + +#: lib/pleroma/web/api_spec/render_error.ex:166 +#, elixir-format +msgid "%{name} - Invalid %{type}. Got: %{value}." +msgstr "%{name} - 不合法的 %{type}。得到的是:%{value}。" + +#: lib/pleroma/web/api_spec/render_error.ex:174 +#, elixir-format +msgid "%{name} - Invalid format. Expected %{format}." +msgstr "%{name} - 不合法的格式。预期是 %{format}。" + +#: lib/pleroma/web/api_spec/render_error.ex:51 +#, elixir-format +msgid "%{name} - Invalid schema.type. Got: %{type}." +msgstr "%{name} - 不合法的 schema.type。得到的是:%{type}。" + +#: lib/pleroma/web/api_spec/render_error.ex:178 +#, elixir-format +msgid "%{name} - Invalid value for enum." +msgstr "%{name} - 枚举值不合法。" + +#: lib/pleroma/web/api_spec/render_error.ex:95 +#, elixir-format +msgid "%{name} - String length is larger than maxLength: %{length}." +msgstr "%{name} - 字串长度大于最大长度:%{length}。" + +#: lib/pleroma/web/api_spec/render_error.ex:88 +#, elixir-format +msgid "%{name} - String length is smaller than minLength: %{length}." +msgstr "%{name} - 字串长度小于最小长度:%{length}。" + +#: lib/pleroma/web/api_spec/render_error.ex:63 +#, elixir-format +msgid "%{name} - null value where %{type} expected." +msgstr "%{name} - null 值,但是预期该是 %{type}。" + +#: lib/pleroma/web/api_spec/render_error.ex:60 +#, elixir-format +msgid "%{name} - null value." +msgstr "%{name} - null 值。" + +#: lib/pleroma/web/api_spec/render_error.ex:182 +#, elixir-format +msgid "Failed to cast to any schema in %{polymorphic_type}" +msgstr "转换到 %{polymorphic_type} 中的任一 schema 失败" + +#: lib/pleroma/web/api_spec/render_error.ex:71 +#, elixir-format +msgid "Failed to cast value as %{invalid_schema}. Value must be castable using `allOf` schemas listed." +msgstr "把值转换成 %{invalid_schema} 失败。值必须可以被转换成在列的「所有」schema。" + +#: lib/pleroma/web/api_spec/render_error.ex:84 +#, elixir-format +msgid "Failed to cast value to one of: %{failed_schemas}." +msgstr "转换值为 %{failed_schemas} 中的一个失败。" + +#: lib/pleroma/web/api_spec/render_error.ex:78 +#, elixir-format +msgid "Failed to cast value using any of: %{failed_schemas}." +msgstr "转换值为 %{failed_schemas} 中的任意一个失败。" + +#: lib/pleroma/web/api_spec/render_error.ex:212 +#, elixir-format +msgid "Invalid value for header: %{name}." +msgstr "头 %{name} 的不合法的值。" + +#: lib/pleroma/web/api_spec/render_error.ex:204 +#, elixir-format +msgid "Missing field: %{name}." +msgstr "缺少字段:%{name}。" + +#: lib/pleroma/web/api_spec/render_error.ex:208 +#, elixir-format +msgid "Missing header: %{name}." +msgstr "缺少头:%{name}。" + +#: lib/pleroma/web/api_spec/render_error.ex:196 +#, elixir-format +msgid "No value provided for required discriminator `%{field}`." +msgstr "" + +#: lib/pleroma/web/api_spec/render_error.ex:216 +#, elixir-format +msgid "Object property count %{property_count} is greater than maxProperties: %{max_properties}." +msgstr "" + +#: lib/pleroma/web/api_spec/render_error.ex:224 +#, elixir-format +msgid "Object property count %{property_count} is less than minProperties: %{min_properties}" +msgstr "" + +#: lib/pleroma/web/templates/static_fe/static_fe/error.html.eex:2 +#, elixir-format +msgid "Oops" +msgstr "嗨呀" + +#: lib/pleroma/web/api_spec/render_error.ex:188 +#, elixir-format +msgid "Unexpected field: %{name}." +msgstr "超出预期的字段:%{name}。" + +#: lib/pleroma/web/api_spec/render_error.ex:200 +#, elixir-format +msgid "Unknown schema: %{name}." +msgstr "未知的 schema:%{name}。" + +#: lib/pleroma/web/api_spec/render_error.ex:192 +#, elixir-format +msgid "Value used as discriminator for `%{field}` matches no schemas." +msgstr "" + +#: lib/pleroma/web/templates/embed/show.html.eex:43 +#: lib/pleroma/web/templates/static_fe/static_fe/_notice.html.eex:37 +#, elixir-format +msgid "announces" +msgstr "传播" + +#: lib/pleroma/web/templates/embed/show.html.eex:44 +#: lib/pleroma/web/templates/static_fe/static_fe/_notice.html.eex:38 +#, elixir-format +msgid "likes" +msgstr "喜欢" + +#: lib/pleroma/web/templates/embed/show.html.eex:42 +#: lib/pleroma/web/templates/static_fe/static_fe/_notice.html.eex:36 +#, elixir-format +msgid "replies" +msgstr "回复" + +#: lib/pleroma/web/templates/embed/show.html.eex:27 +#: lib/pleroma/web/templates/static_fe/static_fe/_notice.html.eex:22 +#, elixir-format +msgid "sensitive media" +msgstr "敏感媒体" diff --git a/priv/gettext/zh_Hans/LC_MESSAGES/errors.po b/priv/gettext/zh_Hans/LC_MESSAGES/errors.po index ecf1dab6b..4431445e3 100644 --- a/priv/gettext/zh_Hans/LC_MESSAGES/errors.po +++ b/priv/gettext/zh_Hans/LC_MESSAGES/errors.po @@ -3,16 +3,16 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-09-20 13:18+0000\n" -"PO-Revision-Date: 2020-12-14 06:00+0000\n" -"Last-Translator: shironeko \n" -"Language-Team: Chinese (Simplified) \n" +"PO-Revision-Date: 2022-07-22 19:00+0000\n" +"Last-Translator: Yating Zhan \n" +"Language-Team: Chinese (Simplified) \n" "Language: zh_Hans\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.0.4\n" +"X-Generator: Weblate 4.13.1\n" ## This file is a PO Template file. ## @@ -65,7 +65,7 @@ msgstr[0] "应为 %{count} 个字符" msgid "should have %{count} item(s)" msgid_plural "should have %{count} item(s)" -msgstr[0] "应有 %{item} 项" +msgstr[0] "应有 %{count} 项" msgid "should be at least %{count} character(s)" msgid_plural "should be at least %{count} character(s)" @@ -99,121 +99,101 @@ msgstr "必须大于等于 %{number}" msgid "must be equal to %{number}" msgstr "必须等于 %{number}" -#: lib/pleroma/web/common_api/common_api.ex:505 +#: lib/pleroma/web/common_api.ex:523 #, elixir-format msgid "Account not found" msgstr "未找到账号" -#: lib/pleroma/web/common_api/common_api.ex:339 +#: lib/pleroma/web/common_api.ex:316 #, elixir-format msgid "Already voted" msgstr "已经进行了投票" -#: lib/pleroma/web/oauth/oauth_controller.ex:359 +#: lib/pleroma/web/o_auth/o_auth_controller.ex:402 #, elixir-format msgid "Bad request" msgstr "不正确的请求" -#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:426 -#, elixir-format -msgid "Can't delete object" -msgstr "不能删除对象" - -#: lib/pleroma/web/controller_helper.ex:105 -#: lib/pleroma/web/controller_helper.ex:111 +#: lib/pleroma/web/controller_helper.ex:97 +#: lib/pleroma/web/controller_helper.ex:103 #, elixir-format msgid "Can't display this activity" msgstr "不能显示该活动" -#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:285 +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:324 #, elixir-format msgid "Can't find user" msgstr "找不到用户" -#: lib/pleroma/web/pleroma_api/controllers/account_controller.ex:61 +#: lib/pleroma/web/pleroma_api/controllers/account_controller.ex:80 #, elixir-format msgid "Can't get favorites" msgstr "不能获取收藏" -#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:438 -#, elixir-format -msgid "Can't like object" -msgstr "不能喜欢对象" - -#: lib/pleroma/web/common_api/utils.ex:563 +#: lib/pleroma/web/common_api/utils.ex:482 #, elixir-format msgid "Cannot post an empty status without attachments" msgstr "无法发送空白且不包含附件的状态" -#: lib/pleroma/web/common_api/utils.ex:511 -#, elixir-format, fuzzy +#: lib/pleroma/web/common_api/utils.ex:441 +#, elixir-format msgid "Comment must be up to %{max_size} characters" msgstr "评论最多可使用 %{max_size} 字符" -#: lib/pleroma/config/config_db.ex:191 +#: lib/pleroma/config_db.ex:200 #, elixir-format msgid "Config with params %{params} not found" msgstr "无法找到包含参数 %{params} 的配置" -#: lib/pleroma/web/common_api/common_api.ex:181 -#: lib/pleroma/web/common_api/common_api.ex:185 +#: lib/pleroma/web/common_api.ex:167 +#: lib/pleroma/web/common_api.ex:171 #, elixir-format msgid "Could not delete" msgstr "无法删除" -#: lib/pleroma/web/common_api/common_api.ex:231 +#: lib/pleroma/web/common_api.ex:217 #, elixir-format msgid "Could not favorite" msgstr "无法收藏" -#: lib/pleroma/web/common_api/common_api.ex:453 -#, elixir-format -msgid "Could not pin" -msgstr "无法置顶" - -#: lib/pleroma/web/common_api/common_api.ex:278 +#: lib/pleroma/web/common_api.ex:254 #, elixir-format msgid "Could not unfavorite" msgstr "无法取消收藏" -#: lib/pleroma/web/common_api/common_api.ex:463 -#, elixir-format -msgid "Could not unpin" -msgstr "无法取消置顶" - -#: lib/pleroma/web/common_api/common_api.ex:216 +#: lib/pleroma/web/common_api.ex:202 #, elixir-format msgid "Could not unrepeat" msgstr "无法取消转发" -#: lib/pleroma/web/common_api/common_api.ex:512 -#: lib/pleroma/web/common_api/common_api.ex:521 +#: lib/pleroma/web/common_api.ex:530 +#: lib/pleroma/web/common_api.ex:539 #, elixir-format msgid "Could not update state" msgstr "无法更新状态" -#: lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex:207 +#: lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex:205 #, elixir-format msgid "Error." msgstr "错误。" -#: lib/pleroma/web/twitter_api/twitter_api.ex:106 +#: lib/pleroma/web/twitter_api/twitter_api.ex:99 #, elixir-format msgid "Invalid CAPTCHA" msgstr "无效的验证码" -#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:116 -#: lib/pleroma/web/oauth/oauth_controller.ex:568 +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:144 +#: lib/pleroma/web/o_auth/o_auth_controller.ex:631 #, elixir-format msgid "Invalid credentials" msgstr "无效的凭据" -#: lib/pleroma/plugs/ensure_authenticated_plug.ex:38 +#: lib/pleroma/web/plugs/ensure_authenticated_plug.ex:42 #, elixir-format msgid "Invalid credentials." msgstr "无效的凭据。" -#: lib/pleroma/web/common_api/common_api.ex:355 +#: lib/pleroma/web/common_api.ex:337 #, elixir-format msgid "Invalid indices" msgstr "无效的索引" @@ -223,343 +203,362 @@ msgstr "无效的索引" msgid "Invalid parameters" msgstr "无效的参数" -#: lib/pleroma/web/common_api/utils.ex:414 +#: lib/pleroma/web/common_api/utils.ex:349 #, elixir-format msgid "Invalid password." msgstr "无效的密码。" -#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:220 +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:254 #, elixir-format msgid "Invalid request" msgstr "无效的请求" -#: lib/pleroma/web/twitter_api/twitter_api.ex:109 +#: lib/pleroma/web/twitter_api/twitter_api.ex:102 #, elixir-format msgid "Kocaptcha service unavailable" msgstr "Kocaptcha 服务不可用" -#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:112 +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:140 #, elixir-format msgid "Missing parameters" msgstr "缺少参数" -#: lib/pleroma/web/common_api/utils.ex:547 +#: lib/pleroma/web/common_api/utils.ex:477 #, elixir-format msgid "No such conversation" msgstr "没有该对话" -#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:388 -#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:414 lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:456 -#, elixir-format, fuzzy +#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:171 +#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:197 +#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:239 +#, elixir-format msgid "No such permission_group" msgstr "没有该权限组" -#: lib/pleroma/plugs/uploaded_media.ex:84 -#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:486 lib/pleroma/web/admin_api/controllers/fallback_controller.ex:11 -#: lib/pleroma/web/feed/user_controller.ex:71 lib/pleroma/web/ostatus/ostatus_controller.ex:143 +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:504 +#: lib/pleroma/web/admin_api/controllers/fallback_controller.ex:11 +#: lib/pleroma/web/feed/tag_controller.ex:16 +#: lib/pleroma/web/feed/user_controller.ex:69 +#: lib/pleroma/web/o_status/o_status_controller.ex:132 +#: lib/pleroma/web/plugs/uploaded_media.ex:84 #, elixir-format msgid "Not found" msgstr "未找到" -#: lib/pleroma/web/common_api/common_api.ex:331 +#: lib/pleroma/web/common_api.ex:308 #, elixir-format msgid "Poll's author can't vote" msgstr "投票的发起者不能投票" #: lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:20 -#: lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:37 lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:49 -#: lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:50 lib/pleroma/web/mastodon_api/controllers/status_controller.ex:306 +#: lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:39 +#: lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:51 +#: lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:52 +#: lib/pleroma/web/mastodon_api/controllers/status_controller.ex:326 #: lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex:71 #, elixir-format msgid "Record not found" msgstr "未找到该记录" #: lib/pleroma/web/admin_api/controllers/fallback_controller.ex:35 -#: lib/pleroma/web/feed/user_controller.ex:77 lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:36 -#: lib/pleroma/web/ostatus/ostatus_controller.ex:149 +#: lib/pleroma/web/feed/user_controller.ex:78 +#: lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:42 +#: lib/pleroma/web/o_status/o_status_controller.ex:138 #, elixir-format msgid "Something went wrong" msgstr "发生了一些错误" -#: lib/pleroma/web/common_api/activity_draft.ex:107 +#: lib/pleroma/web/common_api/activity_draft.ex:143 #, elixir-format msgid "The message visibility must be direct" msgstr "该消息必须为私信" -#: lib/pleroma/web/common_api/utils.ex:573 +#: lib/pleroma/web/common_api/utils.ex:492 #, elixir-format msgid "The status is over the character limit" msgstr "状态超过了字符数限制" -#: lib/pleroma/plugs/ensure_public_or_authenticated_plug.ex:31 +#: lib/pleroma/web/plugs/ensure_public_or_authenticated_plug.ex:36 #, elixir-format msgid "This resource requires authentication." msgstr "该资源需要认证。" -#: lib/pleroma/plugs/rate_limiter/rate_limiter.ex:206 -#, elixir-format, fuzzy +#: lib/pleroma/web/plugs/rate_limiter.ex:208 +#, elixir-format msgid "Throttled" -msgstr "节流了" +msgstr "限流了" -#: lib/pleroma/web/common_api/common_api.ex:356 +#: lib/pleroma/web/common_api.ex:338 #, elixir-format msgid "Too many choices" msgstr "太多选项" -#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:443 -#, elixir-format -msgid "Unhandled activity type" -msgstr "" - -#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:485 +#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:268 #, elixir-format msgid "You can't revoke your own admin status." msgstr "您不能撤消自己的管理员权限。" -#: lib/pleroma/web/oauth/oauth_controller.ex:221 -#: lib/pleroma/web/oauth/oauth_controller.ex:308 +#: lib/pleroma/web/o_auth/o_auth_controller.ex:243 +#: lib/pleroma/web/o_auth/o_auth_controller.ex:333 #, elixir-format msgid "Your account is currently disabled" msgstr "您的账户已被禁用" -#: lib/pleroma/web/oauth/oauth_controller.ex:183 -#: lib/pleroma/web/oauth/oauth_controller.ex:331 +#: lib/pleroma/web/o_auth/o_auth_controller.ex:205 +#: lib/pleroma/web/o_auth/o_auth_controller.ex:356 #, elixir-format msgid "Your login is missing a confirmed e-mail address" msgstr "您的账户缺少已认证的 e-mail 地址" -#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:390 +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:392 #, elixir-format msgid "can't read inbox of %{nickname} as %{as_nickname}" msgstr "无法以 %{as_nickname} 读取 %{nickname} 的收件箱" -#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:473 +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:491 #, elixir-format msgid "can't update outbox of %{nickname} as %{as_nickname}" msgstr "无法以 %{as_nickname} 更新 %{nickname} 的出件箱" -#: lib/pleroma/web/common_api/common_api.ex:471 +#: lib/pleroma/web/common_api.ex:475 #, elixir-format msgid "conversation is already muted" msgstr "对话已经被静音" -#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:314 -#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:492 +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:510 #, elixir-format msgid "error" msgstr "错误" -#: lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex:32 +#: lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex:34 #, elixir-format msgid "mascots can only be images" msgstr "吉祥物只能是图片" -#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:62 +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:63 #, elixir-format msgid "not found" msgstr "未找到" -#: lib/pleroma/web/oauth/oauth_controller.ex:394 +#: lib/pleroma/web/o_auth/o_auth_controller.ex:437 #, elixir-format msgid "Bad OAuth request." msgstr "错误的 OAuth 请求。" -#: lib/pleroma/web/twitter_api/twitter_api.ex:115 +#: lib/pleroma/web/twitter_api/twitter_api.ex:108 #, elixir-format msgid "CAPTCHA already used" msgstr "验证码已被使用" -#: lib/pleroma/web/twitter_api/twitter_api.ex:112 +#: lib/pleroma/web/twitter_api/twitter_api.ex:105 #, elixir-format msgid "CAPTCHA expired" msgstr "验证码已过期" -#: lib/pleroma/plugs/uploaded_media.ex:57 +#: lib/pleroma/web/plugs/uploaded_media.ex:57 #, elixir-format msgid "Failed" msgstr "失败" -#: lib/pleroma/web/oauth/oauth_controller.ex:410 -#, elixir-format, fuzzy +#: lib/pleroma/web/o_auth/o_auth_controller.ex:453 +#, elixir-format msgid "Failed to authenticate: %{message}." -msgstr "认证失败:%{message}。" +msgstr "鉴权失败:%{message}。" -#: lib/pleroma/web/oauth/oauth_controller.ex:441 +#: lib/pleroma/web/o_auth/o_auth_controller.ex:484 #, elixir-format msgid "Failed to set up user account." msgstr "建立用户帐号失败。" -#: lib/pleroma/plugs/oauth_scopes_plug.ex:38 +#: lib/pleroma/web/plugs/o_auth_scopes_plug.ex:37 #, elixir-format msgid "Insufficient permissions: %{permissions}." msgstr "权限不足:%{permissions}。" -#: lib/pleroma/plugs/uploaded_media.ex:104 +#: lib/pleroma/web/plugs/uploaded_media.ex:111 #, elixir-format msgid "Internal Error" msgstr "内部错误" -#: lib/pleroma/web/oauth/fallback_controller.ex:22 -#: lib/pleroma/web/oauth/fallback_controller.ex:29 +#: lib/pleroma/web/o_auth/fallback_controller.ex:22 +#: lib/pleroma/web/o_auth/fallback_controller.ex:29 #, elixir-format msgid "Invalid Username/Password" msgstr "无效的用户名/密码" -#: lib/pleroma/web/twitter_api/twitter_api.ex:118 -#, elixir-format, fuzzy +#: lib/pleroma/web/twitter_api/twitter_api.ex:111 +#, elixir-format msgid "Invalid answer data" msgstr "无效的回答数据" #: lib/pleroma/web/nodeinfo/nodeinfo_controller.ex:33 -#, elixir-format +#, elixir-format, fuzzy msgid "Nodeinfo schema version not handled" -msgstr "" +msgstr "Nodeinfo schema 版本没被处理" -#: lib/pleroma/web/oauth/oauth_controller.ex:172 +#: lib/pleroma/web/o_auth/o_auth_controller.ex:194 #, elixir-format msgid "This action is outside the authorized scopes" msgstr "此操作在许可范围以外" -#: lib/pleroma/web/oauth/fallback_controller.ex:14 +#: lib/pleroma/web/o_auth/fallback_controller.ex:14 #, elixir-format msgid "Unknown error, please check the details and try again." msgstr "未知错误,请检查并重试。" -#: lib/pleroma/web/oauth/oauth_controller.ex:119 -#: lib/pleroma/web/oauth/oauth_controller.ex:158 +#: lib/pleroma/web/o_auth/o_auth_controller.ex:136 +#: lib/pleroma/web/o_auth/o_auth_controller.ex:180 #, elixir-format msgid "Unlisted redirect_uri." -msgstr "" +msgstr "没被列出的重定向 URI(redirect_uri)。" -#: lib/pleroma/web/oauth/oauth_controller.ex:390 +#: lib/pleroma/web/o_auth/o_auth_controller.ex:433 #, elixir-format msgid "Unsupported OAuth provider: %{provider}." msgstr "不支持的 OAuth 提供者:%{provider}。" -#: lib/pleroma/uploaders/uploader.ex:72 -#, elixir-format, fuzzy +#: lib/pleroma/uploaders/uploader.ex:74 +#, elixir-format msgid "Uploader callback timeout" -msgstr "上传回复超时" +msgstr "上传器回调超时" #: lib/pleroma/web/uploader_controller.ex:23 #, elixir-format msgid "bad request" msgstr "错误的请求" -#: lib/pleroma/web/twitter_api/twitter_api.ex:103 +#: lib/pleroma/web/twitter_api/twitter_api.ex:96 #, elixir-format msgid "CAPTCHA Error" msgstr "验证码错误" -#: lib/pleroma/web/common_api/common_api.ex:290 -#, elixir-format, fuzzy +#: lib/pleroma/web/common_api.ex:266 +#, elixir-format msgid "Could not add reaction emoji" msgstr "无法添加表情反应" -#: lib/pleroma/web/common_api/common_api.ex:301 +#: lib/pleroma/web/common_api.ex:277 #, elixir-format msgid "Could not remove reaction emoji" msgstr "无法移除表情反应" -#: lib/pleroma/web/twitter_api/twitter_api.ex:129 +#: lib/pleroma/web/twitter_api/twitter_api.ex:122 #, elixir-format msgid "Invalid CAPTCHA (Missing parameter: %{name})" msgstr "无效的验证码(缺少参数:%{name})" -#: lib/pleroma/web/mastodon_api/controllers/list_controller.ex:92 +#: lib/pleroma/web/mastodon_api/controllers/list_controller.ex:96 #, elixir-format msgid "List not found" msgstr "未找到列表" -#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:123 +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:151 #, elixir-format msgid "Missing parameter: %{name}" msgstr "缺少参数:%{name}" -#: lib/pleroma/web/oauth/oauth_controller.ex:210 -#: lib/pleroma/web/oauth/oauth_controller.ex:321 +#: lib/pleroma/web/o_auth/o_auth_controller.ex:232 +#: lib/pleroma/web/o_auth/o_auth_controller.ex:346 #, elixir-format msgid "Password reset is required" msgstr "需要重置密码" #: lib/pleroma/tests/auth_test_controller.ex:9 -#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:6 lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:6 -#: lib/pleroma/web/admin_api/controllers/config_controller.ex:6 lib/pleroma/web/admin_api/controllers/fallback_controller.ex:6 -#: lib/pleroma/web/admin_api/controllers/invite_controller.ex:6 lib/pleroma/web/admin_api/controllers/media_proxy_cache_controller.ex:6 -#: lib/pleroma/web/admin_api/controllers/oauth_app_controller.ex:6 lib/pleroma/web/admin_api/controllers/relay_controller.ex:6 -#: lib/pleroma/web/admin_api/controllers/report_controller.ex:6 lib/pleroma/web/admin_api/controllers/status_controller.ex:6 -#: lib/pleroma/web/controller_helper.ex:6 lib/pleroma/web/embed_controller.ex:6 -#: lib/pleroma/web/fallback_redirect_controller.ex:6 lib/pleroma/web/feed/tag_controller.ex:6 -#: lib/pleroma/web/feed/user_controller.ex:6 lib/pleroma/web/mailer/subscription_controller.ex:2 -#: lib/pleroma/web/masto_fe_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/account_controller.ex:6 -#: lib/pleroma/web/mastodon_api/controllers/app_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/auth_controller.ex:6 -#: lib/pleroma/web/mastodon_api/controllers/conversation_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/custom_emoji_controller.ex:6 -#: lib/pleroma/web/mastodon_api/controllers/domain_block_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:6 -#: lib/pleroma/web/mastodon_api/controllers/filter_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/follow_request_controller.ex:6 -#: lib/pleroma/web/mastodon_api/controllers/instance_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/list_controller.ex:6 -#: lib/pleroma/web/mastodon_api/controllers/marker_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/mastodon_api_controller.ex:14 -#: lib/pleroma/web/mastodon_api/controllers/media_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/notification_controller.ex:6 -#: lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/report_controller.ex:8 -#: lib/pleroma/web/mastodon_api/controllers/scheduled_activity_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/search_controller.ex:6 -#: lib/pleroma/web/mastodon_api/controllers/status_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex:7 -#: lib/pleroma/web/mastodon_api/controllers/suggestion_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex:6 -#: lib/pleroma/web/media_proxy/media_proxy_controller.ex:6 lib/pleroma/web/mongooseim/mongoose_im_controller.ex:6 -#: lib/pleroma/web/nodeinfo/nodeinfo_controller.ex:6 lib/pleroma/web/oauth/fallback_controller.ex:6 -#: lib/pleroma/web/oauth/mfa_controller.ex:10 lib/pleroma/web/oauth/oauth_controller.ex:6 -#: lib/pleroma/web/ostatus/ostatus_controller.ex:6 lib/pleroma/web/pleroma_api/controllers/account_controller.ex:6 -#: lib/pleroma/web/pleroma_api/controllers/chat_controller.ex:5 lib/pleroma/web/pleroma_api/controllers/conversation_controller.ex:6 -#: lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex:2 lib/pleroma/web/pleroma_api/controllers/emoji_reaction_controller.ex:6 -#: lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex:6 lib/pleroma/web/pleroma_api/controllers/notification_controller.ex:6 +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/chat_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/config_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/fallback_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/frontend_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/instance_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/instance_document_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/invite_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/media_proxy_cache_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/o_auth_app_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/relay_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/report_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/status_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/user_controller.ex:6 +#: lib/pleroma/web/controller_helper.ex:6 +#: lib/pleroma/web/embed_controller.ex:6 +#: lib/pleroma/web/fallback/redirect_controller.ex:6 +#: lib/pleroma/web/feed/tag_controller.ex:6 +#: lib/pleroma/web/feed/user_controller.ex:6 +#: lib/pleroma/web/mailer/subscription_controller.ex:6 +#: lib/pleroma/web/manifest_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/app_controller.ex:11 +#: lib/pleroma/web/mastodon_api/controllers/auth_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/conversation_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/custom_emoji_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/directory_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/domain_block_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/filter_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/follow_request_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/instance_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/list_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/marker_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/mastodon_api_controller.ex:14 +#: lib/pleroma/web/mastodon_api/controllers/media_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/notification_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/report_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/scheduled_activity_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/search_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/status_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex:7 +#: lib/pleroma/web/mastodon_api/controllers/suggestion_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex:6 +#: lib/pleroma/web/media_proxy/media_proxy_controller.ex:6 +#: lib/pleroma/web/mongoose_im/mongoose_im_controller.ex:6 +#: lib/pleroma/web/nodeinfo/nodeinfo_controller.ex:6 +#: lib/pleroma/web/o_auth/fallback_controller.ex:6 +#: lib/pleroma/web/o_auth/mfa_controller.ex:10 +#: lib/pleroma/web/o_auth/o_auth_controller.ex:6 +#: lib/pleroma/web/o_status/o_status_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/account_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/app_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/backup_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/chat_controller.ex:5 +#: lib/pleroma/web/pleroma_api/controllers/conversation_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/emoji_file_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/emoji_reaction_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/instances_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/notification_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/report_controller.ex:6 #: lib/pleroma/web/pleroma_api/controllers/scrobble_controller.ex:6 -#: lib/pleroma/web/pleroma_api/controllers/two_factor_authentication_controller.ex:7 lib/pleroma/web/static_fe/static_fe_controller.ex:6 -#: lib/pleroma/web/twitter_api/controllers/password_controller.ex:10 lib/pleroma/web/twitter_api/controllers/remote_follow_controller.ex:6 -#: lib/pleroma/web/twitter_api/controllers/util_controller.ex:6 lib/pleroma/web/twitter_api/twitter_api_controller.ex:6 -#: lib/pleroma/web/uploader_controller.ex:6 lib/pleroma/web/web_finger/web_finger_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/two_factor_authentication_controller.ex:7 +#: lib/pleroma/web/pleroma_api/controllers/user_import_controller.ex:6 +#: lib/pleroma/web/static_fe/static_fe_controller.ex:6 +#: lib/pleroma/web/twitter_api/controller.ex:6 +#: lib/pleroma/web/twitter_api/controllers/password_controller.ex:10 +#: lib/pleroma/web/twitter_api/controllers/remote_follow_controller.ex:6 +#: lib/pleroma/web/twitter_api/controllers/util_controller.ex:6 +#: lib/pleroma/web/uploader_controller.ex:6 +#: lib/pleroma/web/web_finger/web_finger_controller.ex:6 #, elixir-format msgid "Security violation: OAuth scopes check was neither handled nor explicitly skipped." -msgstr "" +msgstr "安全违例:OAuth 域检查既没处理也没显式跳过。" -#: lib/pleroma/plugs/ensure_authenticated_plug.ex:28 -#, elixir-format, fuzzy +#: lib/pleroma/web/plugs/ensure_authenticated_plug.ex:32 +#, elixir-format msgid "Two-factor authentication enabled, you must use a access token." -msgstr "已启用两因素验证,您需要使用访问令牌。" - -#: lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex:210 -#, elixir-format -msgid "Unexpected error occurred while adding file to pack." -msgstr "向表情包添加文件时发生了没有预料到的错误。" - -#: lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex:138 -#, elixir-format -msgid "Unexpected error occurred while creating pack." -msgstr "创建表情包时发生了没有预料到的错误。" - -#: lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex:278 -#, elixir-format -msgid "Unexpected error occurred while removing file from pack." -msgstr "从表情包移除文件时发生了没有预料到的错误。" - -#: lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex:250 -#, elixir-format -msgid "Unexpected error occurred while updating file in pack." -msgstr "更新表情包内的文件时发生了没有预料到的错误。" - -#: lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex:179 -#, elixir-format -msgid "Unexpected error occurred while updating pack metadata." -msgstr "更新表情包元数据时发生了没有预料到的错误。" +msgstr "已启用两因素鉴权,您需要使用访问令牌。" #: lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex:61 -#, elixir-format, fuzzy +#, elixir-format msgid "Web push subscription is disabled on this Pleroma instance" msgstr "此 Pleroma 实例禁用了网页推送订阅" -#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:451 +#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:234 #, elixir-format msgid "You can't revoke your own admin/moderator status." msgstr "您不能撤消自己的管理员权限。" -#: lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex:126 +#: lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex:129 #, elixir-format msgid "authorization required for timeline view" msgstr "浏览时间线需要认证" @@ -569,12 +568,50 @@ msgstr "浏览时间线需要认证" msgid "Access denied" msgstr "拒绝访问" -#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:282 +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:321 #, elixir-format msgid "This API requires an authenticated user" msgstr "此 API 需要已认证的用户" -#: lib/pleroma/plugs/user_is_admin_plug.ex:21 +#: lib/pleroma/web/plugs/ensure_staff_privileged_plug.ex:26 +#: lib/pleroma/web/plugs/user_is_admin_plug.ex:21 #, elixir-format msgid "User is not an admin." msgstr "该用户不是管理员。" + +#: lib/pleroma/user/backup.ex:75 +#, elixir-format +msgid "Last export was less than a day ago" +msgid_plural "Last export was less than %{days} days ago" +msgstr[0] "上次导出还不到 %{days} 天前" + +#: lib/pleroma/user/backup.ex:93 +#, elixir-format +msgid "Backups require enabled email" +msgstr "备份要求开启邮件" + +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:423 +#, elixir-format +msgid "Character limit (%{limit} characters) exceeded, contains %{length} characters" +msgstr "超过字符限制(%{limit} 个字符),包含了 %{length} 个字符" + +#: lib/pleroma/user/backup.ex:98 +#, elixir-format +msgid "Email is required" +msgstr "需要邮箱" + +#: lib/pleroma/web/common_api/utils.ex:507 +#, elixir-format +msgid "Too many attachments" +msgstr "太多附件" + +#: lib/pleroma/web/plugs/ensure_staff_privileged_plug.ex:33 +#: lib/pleroma/web/plugs/user_is_staff_plug.ex:20 +#, elixir-format +msgid "User is not a staff member." +msgstr "该用户不是运营成员。" + +#: lib/pleroma/web/o_auth/o_auth_controller.ex:366 +#, elixir-format +msgid "Your account is awaiting approval." +msgstr "你的账号正等待批准。" diff --git a/priv/gettext/zh_Hans/LC_MESSAGES/posix_errors.po b/priv/gettext/zh_Hans/LC_MESSAGES/posix_errors.po new file mode 100644 index 000000000..c486a5486 --- /dev/null +++ b/priv/gettext/zh_Hans/LC_MESSAGES/posix_errors.po @@ -0,0 +1,160 @@ +## "msgid"s in this file come from POT (.pot) files. +## +## Do not add, change, or remove "msgid"s manually here as +## they're tied to the ones in the corresponding POT file +## (with the same domain). +## +## Use "mix gettext.extract --merge" or "mix gettext.merge" +## to merge POT files into PO files. +msgid "" +msgstr "" +"PO-Revision-Date: 2022-07-22 19:00+0000\n" +"Last-Translator: Yating Zhan \n" +"Language-Team: Chinese (Simplified) \n" +"Language: zh_Hans\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.13.1\n" + +msgid "eperm" +msgstr "不允许的操作" + +msgid "eacces" +msgstr "权限不够" + +msgid "eagain" +msgstr "资源暂时不可用" + +msgid "ebadf" +msgstr "坏的文件描述符" + +msgid "ebadmsg" +msgstr "坏讯息" + +msgid "ebusy" +msgstr "设备或资源忙" + +msgid "edeadlk" +msgstr "避免了资源死锁" + +msgid "edeadlock" +msgstr "避免了资源死锁" + +msgid "edquot" +msgstr "超出了磁盘配额" + +msgid "eexist" +msgstr "文件存在" + +msgid "efault" +msgstr "坏地址" + +msgid "efbig" +msgstr "文件太大" + +msgid "eftype" +msgstr "不合适的文件类型或格式" + +msgid "eintr" +msgstr "系统调用被中断" + +msgid "einval" +msgstr "不合法的参数" + +msgid "eio" +msgstr "输入/输出错误" + +msgid "eisdir" +msgstr "在目录上非法操作" + +msgid "eloop" +msgstr "太多层符号链接" + +msgid "emfile" +msgstr "太多打开的文件" + +msgid "emlink" +msgstr "太多链接" + +msgid "emultihop" +msgstr "" + +msgid "enametoolong" +msgstr "文件名太长" + +msgid "enfile" +msgstr "系统里太多打开的文件" + +msgid "enobufs" +msgstr "没有可用的缓冲空间" + +msgid "enodev" +msgstr "没这设备" + +msgid "enolck" +msgstr "没有可用的锁" + +msgid "enolink" +msgstr "链接被切断了" + +msgid "enoent" +msgstr "没这文件或目录" + +msgid "enomem" +msgstr "不能分配内存" + +msgid "enospc" +msgstr "设备上没剩余空间" + +msgid "enosr" +msgstr "" + +msgid "enostr" +msgstr "设备不是流" + +msgid "enosys" +msgstr "功能没实现" + +msgid "enotblk" +msgstr "" + +msgid "enotdir" +msgstr "" + +msgid "enotsup" +msgstr "不受支持的操作" + +msgid "enxio" +msgstr "该设备或路径不存在" + +msgid "eopnotsupp" +msgstr "不受支持的操作" + +msgid "eoverflow" +msgstr "请为给定类型的数据指定较小的数值" + +msgid "epipe" +msgstr "" + +msgid "erange" +msgstr "" + +msgid "erofs" +msgstr "只读权限文件系统" + +msgid "espipe" +msgstr "" + +msgid "esrch" +msgstr "具体进程不存在" + +msgid "estale" +msgstr "" + +msgid "etxtbsy" +msgstr "文本文件忙碌" + +msgid "exdev" +msgstr "该多设备链接不可用" diff --git a/priv/gettext/zh_Hans/LC_MESSAGES/static_pages.po b/priv/gettext/zh_Hans/LC_MESSAGES/static_pages.po new file mode 100644 index 000000000..cbd6feb60 --- /dev/null +++ b/priv/gettext/zh_Hans/LC_MESSAGES/static_pages.po @@ -0,0 +1,552 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Free Software Foundation, Inc. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2022-07-21 23:35+0000\n" +"Last-Translator: tusooa \n" +"Language-Team: Chinese (Simplified) \n" +"Language: zh_Hans\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.13.1\n" + +## "msgid"s in this file come from POT (.pot) files. +## +## Do not add, change, or remove "msgid"s manually here as +## they're tied to the ones in the corresponding POT file +## (with the same domain). +## +## Use "mix gettext.extract --merge" or "mix gettext.merge" +## to merge POT files into PO files. +#~ msgid "" +#~ msgstr "" +#~ "Language: zh_Hans\n" +#~ "Plural-Forms: nplurals=1\n" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow.html.eex:9 +#, elixir-format +msgctxt "remote follow authorization button" +msgid "Authorize" +msgstr "授权" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow.html.eex:2 +#, elixir-format +msgctxt "remote follow error" +msgid "Error fetching user" +msgstr "获取用户时出错" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow.html.eex:4 +#, elixir-format +msgctxt "remote follow header" +msgid "Remote follow" +msgstr "远程关注" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex:8 +#, elixir-format +msgctxt "placeholder text for auth code entry" +msgid "Authentication code" +msgstr "授权代码" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:10 +#, elixir-format +msgctxt "placeholder text for password entry" +msgid "Password" +msgstr "密码" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:8 +#, elixir-format +msgctxt "placeholder text for username entry" +msgid "Username" +msgstr "用户名" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:13 +#, elixir-format +msgctxt "remote follow authorization button for login" +msgid "Authorize" +msgstr "授权" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex:12 +#, elixir-format +msgctxt "remote follow authorization button for mfa" +msgid "Authorize" +msgstr "授权" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/followed.html.eex:2 +#, elixir-format +msgctxt "remote follow error" +msgid "Error following account" +msgstr "关注用户时出错" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:4 +#, elixir-format +msgctxt "remote follow header, need login" +msgid "Log in to follow" +msgstr "登录以关注" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex:4 +#, elixir-format +msgctxt "remote follow mfa header" +msgid "Two-factor authentication" +msgstr "两步鉴权" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/followed.html.eex:4 +#, elixir-format +msgctxt "remote follow success" +msgid "Account followed!" +msgstr "已经关注了账号!" + +#: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:7 +#, elixir-format +msgctxt "placeholder text for account id" +msgid "Your account ID, e.g. lain@quitter.se" +msgstr "你的账户 ID,如 lain@quitter.se" + +#: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:8 +#, elixir-format +msgctxt "remote follow authorization button for following with a remote account" +msgid "Follow" +msgstr "关注" + +#: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:2 +#, elixir-format +msgctxt "remote follow error" +msgid "Error: %{error}" +msgstr "错误:%{error}" + +#: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:4 +#, elixir-format +msgctxt "remote follow header" +msgid "Remotely follow %{nickname}" +msgstr "远程关注 %{nickname}" + +#: lib/pleroma/web/templates/twitter_api/password/reset.html.eex:12 +#, elixir-format +msgctxt "password reset button" +msgid "Reset" +msgstr "重置" + +#: lib/pleroma/web/templates/twitter_api/password/reset_failed.html.eex:4 +#, elixir-format +msgctxt "password reset failed homepage link" +msgid "Homepage" +msgstr "回主页" + +#: lib/pleroma/web/templates/twitter_api/password/reset_failed.html.eex:1 +#, elixir-format +msgctxt "password reset failed message" +msgid "Password reset failed" +msgstr "密码重置失败" + +#: lib/pleroma/web/templates/twitter_api/password/reset.html.eex:8 +#, elixir-format +msgctxt "password reset form confirm password prompt" +msgid "Confirmation" +msgstr "确认密码" + +#: lib/pleroma/web/templates/twitter_api/password/reset.html.eex:4 +#, elixir-format +msgctxt "password reset form password prompt" +msgid "Password" +msgstr "密码" + +#: lib/pleroma/web/templates/twitter_api/password/invalid_token.html.eex:1 +#, elixir-format +msgctxt "password reset invalid token message" +msgid "Invalid Token" +msgstr "无效的令牌" + +#: lib/pleroma/web/templates/twitter_api/password/reset_success.html.eex:2 +#, elixir-format +msgctxt "password reset successful homepage link" +msgid "Homepage" +msgstr "回主页" + +#: lib/pleroma/web/templates/twitter_api/password/reset_success.html.eex:1 +#, elixir-format +msgctxt "password reset successful message" +msgid "Password changed!" +msgstr "密码已经修改了!" + +#: lib/pleroma/web/templates/feed/feed/tag.atom.eex:15 +#: lib/pleroma/web/templates/feed/feed/tag.rss.eex:7 +#, elixir-format +msgctxt "tag feed description" +msgid "These are public toots tagged with #%{tag}. You can interact with them if you have an account anywhere in the fediverse." +msgstr "这些是标了 #%{tag} 签的公开文章。你要是在联邦宇宙的任何地方有账号,就能和它们互动。" + +#: lib/pleroma/web/templates/o_auth/o_auth/oob_token_exists.html.eex:1 +#, elixir-format +msgctxt "oauth authorization exists page title" +msgid "Authorization exists" +msgstr "授权已经存在" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:32 +#, elixir-format +msgctxt "oauth authorize approve button" +msgid "Approve" +msgstr "批准" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:30 +#, elixir-format +msgctxt "oauth authorize cancel button" +msgid "Cancel" +msgstr "取消" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:23 +#, elixir-format +msgctxt "oauth authorize message" +msgid "Application %{client_name} is requesting access to your account." +msgstr "应用程序 %{client_name} 在请求访问你的账号。" + +#: lib/pleroma/web/templates/o_auth/o_auth/oob_authorization_created.html.eex:1 +#, elixir-format +msgctxt "oauth authorized page title" +msgid "Successfully authorized" +msgstr "成功授权" + +#: lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex:1 +#, elixir-format +msgctxt "oauth external provider page title" +msgid "Sign in with external provider" +msgstr "通过外部提供者登录" + +#: lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex:13 +#, elixir-format +msgctxt "oauth external provider sign in button" +msgid "Sign in with %{strategy}" +msgstr "通过 %{strategy} 登录" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:54 +#, elixir-format +msgctxt "oauth login button" +msgid "Log In" +msgstr "登录" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:51 +#, elixir-format +msgctxt "oauth login password prompt" +msgid "Password" +msgstr "密码" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:47 +#, elixir-format +msgctxt "oauth login username prompt" +msgid "Username" +msgstr "用户名" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:39 +#, elixir-format +msgctxt "oauth register nickname prompt" +msgid "Pleroma Handle" +msgstr "Pleroma 用户名" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:37 +#, elixir-format +msgctxt "oauth register nickname unchangeable warning" +msgid "Choose carefully! You won't be able to change this later. You will be able to change your display name, though." +msgstr "选仔细了!你之后就不能改它了。但是你可以改显示名。" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:18 +#, elixir-format +msgctxt "oauth register page email prompt" +msgid "Email" +msgstr "邮箱" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:10 +#, elixir-format +msgctxt "oauth register page fill form prompt" +msgid "If you'd like to register a new account, please provide the details below." +msgstr "如果你想注册新账号,请提供如下信息。" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:35 +#, elixir-format +msgctxt "oauth register page login button" +msgid "Proceed as existing user" +msgstr "以已有用户继续" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:31 +#, elixir-format +msgctxt "oauth register page login password prompt" +msgid "Password" +msgstr "密码" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:24 +#, elixir-format +msgctxt "oauth register page login prompt" +msgid "Alternatively, sign in to connect to existing account." +msgstr "或者,登录到已有账号。" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:27 +#, elixir-format +msgctxt "oauth register page login username prompt" +msgid "Name or email" +msgstr "名字或邮箱" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:14 +#, elixir-format +msgctxt "oauth register page nickname prompt" +msgid "Nickname" +msgstr "昵称" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:22 +#, elixir-format +msgctxt "oauth register page register button" +msgid "Proceed as new user" +msgstr "以新用户继续" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:8 +#, elixir-format +msgctxt "oauth register page title" +msgid "Registration Details" +msgstr "注册详情" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:36 +#, elixir-format +msgctxt "oauth register page title" +msgid "This is the first time you visit! Please enter your Pleroma handle." +msgstr "这是你第一次访问。请输入 Pleroma 用户名。" + +#: lib/pleroma/web/templates/o_auth/o_auth/_scopes.html.eex:2 +#, elixir-format +msgctxt "oauth scopes message" +msgid "The following permissions will be granted" +msgstr "将要允许如下权限" + +#: lib/pleroma/web/templates/o_auth/o_auth/oob_authorization_created.html.eex:2 +#: lib/pleroma/web/templates/o_auth/o_auth/oob_token_exists.html.eex:2 +#, elixir-format +msgctxt "oauth token code message" +msgid "Token code is
%{token}" +msgstr "令牌代码是
%{token}" + +#: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:12 +#, elixir-format +msgctxt "mfa auth code prompt" +msgid "Authentication code" +msgstr "鉴权代码" + +#: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:8 +#, elixir-format +msgctxt "mfa auth page title" +msgid "Two-factor authentication" +msgstr "两步鉴权" + +#: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:23 +#, elixir-format +msgctxt "mfa auth page use recovery code link" +msgid "Enter a two-factor recovery code" +msgstr "输入两步恢复码" + +#: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:20 +#, elixir-format +msgctxt "mfa auth verify code button" +msgid "Verify" +msgstr "验证" + +#: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:8 +#, elixir-format +msgctxt "mfa recover page title" +msgid "Two-factor recovery" +msgstr "两步恢复" + +#: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:12 +#, elixir-format +msgctxt "mfa recover recovery code prompt" +msgid "Recovery code" +msgstr "恢复码" + +#: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:23 +#, elixir-format +msgctxt "mfa recover use 2fa code link" +msgid "Enter a two-factor code" +msgstr "输入鉴权码" + +#: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:20 +#, elixir-format +msgctxt "mfa recover verify recovery code button" +msgid "Verify" +msgstr "验证" + +#: lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex:8 +#, elixir-format +msgctxt "static fe profile page remote follow button" +msgid "Remote follow" +msgstr "远程关注" + +#: lib/pleroma/web/templates/email/digest.html.eex:163 +#, elixir-format +msgctxt "digest email header line" +msgid "Hey %{nickname}, here is what you've missed!" +msgstr "早 %{nickname},你刚错过这些!" + +#: lib/pleroma/web/templates/email/digest.html.eex:544 +#, elixir-format +msgctxt "digest email receiver address" +msgid "The email address you are subscribed as is %{email}. " +msgstr "" +"你订阅的邮箱地址是 %{email}。 " + +#: lib/pleroma/web/templates/email/digest.html.eex:538 +#, elixir-format +msgctxt "digest email sending reason" +msgid "You have received this email because you have signed up to receive digest emails from %{instance} Pleroma instance." +msgstr "因为你选择了收取来自 %{instance} 的摘要邮件,所以你会收到这封邮件。" + +#: lib/pleroma/web/templates/email/digest.html.eex:547 +#, elixir-format +msgctxt "digest email unsubscribe action" +msgid "To unsubscribe, please go %{here}." +msgstr "要取消订阅,请去%{here}。" + +#: lib/pleroma/web/templates/email/digest.html.eex:547 +#, elixir-format +msgctxt "digest email unsubscribe action link text" +msgid "here" +msgstr "此处" + +#: lib/pleroma/web/templates/mailer/subscription/unsubscribe_failure.html.eex:1 +#, elixir-format +msgctxt "mailer unsubscribe failed message" +msgid "UNSUBSCRIBE FAILURE" +msgstr "取消订阅失败" + +#: lib/pleroma/web/templates/mailer/subscription/unsubscribe_success.html.eex:1 +#, elixir-format +msgctxt "mailer unsubscribe successful message" +msgid "UNSUBSCRIBE SUCCESSFUL" +msgstr "取消订阅成功" + +#: lib/pleroma/web/templates/email/digest.html.eex:385 +#, elixir-format +msgctxt "new followers count header" +msgid "%{count} New Follower" +msgid_plural "%{count} New Followers" +msgstr[0] "%{count} 个新关注者" + +#: lib/pleroma/emails/user_email.ex:356 +#, elixir-format +msgctxt "account archive email body - self-requested" +msgid "

You requested a full backup of your Pleroma account. It's ready for download:

\n

%{download_url}

\n" +msgstr "" +"

你之前要了一份你的 Pleroma 账号的完整备份。现在可以下载了:

\n" +"

%{download_url}

\n" + +#: lib/pleroma/emails/user_email.ex:384 +#, elixir-format +msgctxt "account archive email subject" +msgid "Your account archive is ready" +msgstr "你的账号存档准备好了" + +#: lib/pleroma/emails/user_email.ex:188 +#, elixir-format +msgctxt "approval pending email body" +msgid "

Awaiting Approval

\n

Your account at %{instance_name} is being reviewed by staff. You will receive another email once your account is approved.

\n" +msgstr "" +"

等待批准

\n" +"

管理人员正在审核你在 %{instance_name} 的账号。等账号批准之后你会收到另一封邮件。

\n" + +#: lib/pleroma/emails/user_email.ex:202 +#, elixir-format +msgctxt "approval pending email subject" +msgid "Your account is awaiting approval" +msgstr "你的账号在等待批准" + +#: lib/pleroma/emails/user_email.ex:158 +#, elixir-format +msgctxt "confirmation email body" +msgid "

Thank you for registering on %{instance_name}

\n

Email confirmation is required to activate the account.

\n

Please click the following link to activate your account.

\n" +msgstr "" +"

感谢注册 %{instance_name}

\n" +"

要激活账号,必须验证邮箱。

\n" +"

请点如下链接来激活账号

\n" + +#: lib/pleroma/emails/user_email.ex:174 +#, elixir-format +msgctxt "confirmation email subject" +msgid "%{instance_name} account confirmation" +msgstr "%{instance_name} 账号激活" + +#: lib/pleroma/emails/user_email.ex:310 +#, elixir-format +msgctxt "digest email subject" +msgid "Your digest from %{instance_name}" +msgstr "来自 %{instance_name} 的摘要" + +#: lib/pleroma/emails/user_email.ex:81 +#, elixir-format +msgctxt "password reset email body" +msgid "

Reset your password at %{instance_name}

\n

Someone has requested password change for your account at %{instance_name}.

\n

If it was you, visit the following link to proceed: reset password.

\n

If it was someone else, nothing to worry about: your data is secure and your password has not been changed.

\n" +msgstr "" +"

重置你在 %{instance_name} 的密码

\n" +"

有人请求了重置你在 %{instance_name} 的账号的密码。

\n" +"

如果那是你,访问如下链接以继续:重置密码

\n" +"

如果是别人,不必担心:你的数据很安全,密码也没变。

\n" + +#: lib/pleroma/emails/user_email.ex:98 +#, elixir-format +msgctxt "password reset email subject" +msgid "Password reset" +msgstr "密码重置" + +#: lib/pleroma/emails/user_email.ex:215 +#, elixir-format +msgctxt "successful registration email body" +msgid "

Hello @%{nickname},

\n

Your account at %{instance_name} has been registered successfully.

\n

No further action is required to activate your account.

\n" +msgstr "" +"

早 @%{nickname},

\n" +"

你在 %{instance_name} 上的账号已经成功注册了。

\n" +"

你的账号已经激活,无需再做任何操作。

\n" + +#: lib/pleroma/emails/user_email.ex:231 +#, elixir-format +msgctxt "successful registration email subject" +msgid "Account registered on %{instance_name}" +msgstr "在 %{instance_name} 上注册了账号" + +#: lib/pleroma/emails/user_email.ex:119 +#, elixir-format +msgctxt "user invitation email body" +msgid "

You are invited to %{instance_name}

\n

%{inviter_name} invites you to join %{instance_name}, an instance of Pleroma federated social networking platform.

\n

Click the following link to register: accept invitation.

\n" +msgstr "" +"

有人邀请你去 %{instance_name}

\n" +"

%{inviter_name} 邀请你去 %{instance_name}。这是社交网络平台 Pleroma 的一个实例。

\n" +"

点如下链接以注册:接受邀请

\n" + +#: lib/pleroma/emails/user_email.ex:136 +#, elixir-format +msgctxt "user invitation email subject" +msgid "Invitation to %{instance_name}" +msgstr "去 %{instance_name} 的邀请" + +#: lib/pleroma/emails/user_email.ex:53 +#, elixir-format +msgctxt "welcome email html body" +msgid "Welcome to %{instance_name}!" +msgstr "欢迎来到 %{instance_name}!" + +#: lib/pleroma/emails/user_email.ex:41 +#, elixir-format +msgctxt "welcome email subject" +msgid "Welcome to %{instance_name}!" +msgstr "欢迎来到 %{instance_name}!" + +#: lib/pleroma/emails/user_email.ex:65 +#, elixir-format +msgctxt "welcome email text body" +msgid "Welcome to %{instance_name}!" +msgstr "欢迎来到 %{instance_name}!" + +#: lib/pleroma/emails/user_email.ex:368 +#, elixir-format +msgctxt "account archive email body - admin requested" +msgid "

Admin @%{admin_nickname} requested a full backup of your Pleroma account. It's ready for download:

\n

%{download_url}

\n" +msgstr "" +"

管理员 @%{admin_nickname} 之前要了一份你的 Pleroma 账号的完整备份。现在可以下载了:

\n" +"

%{download_url}

\n" diff --git a/priv/repo/migrations/20170320193800_create_user.exs b/priv/repo/migrations/20170320193800_create_user.exs index e5f6ac52e..6592ada28 100644 --- a/priv/repo/migrations/20170320193800_create_user.exs +++ b/priv/repo/migrations/20170320193800_create_user.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.CreatePleroma.User do use Ecto.Migration diff --git a/priv/repo/migrations/20170321074828_create_activity.exs b/priv/repo/migrations/20170321074828_create_activity.exs index ab00a47c3..2f62a6e0c 100644 --- a/priv/repo/migrations/20170321074828_create_activity.exs +++ b/priv/repo/migrations/20170321074828_create_activity.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.CreatePleroma.Activity do use Ecto.Migration diff --git a/priv/repo/migrations/20170321074832_create_object.exs b/priv/repo/migrations/20170321074832_create_object.exs index c5a59ecba..68678e601 100644 --- a/priv/repo/migrations/20170321074832_create_object.exs +++ b/priv/repo/migrations/20170321074832_create_object.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.CreatePleroma.Object do use Ecto.Migration diff --git a/priv/repo/migrations/20170321133335_add_following_list_to_users.exs b/priv/repo/migrations/20170321133335_add_following_list_to_users.exs index 8dd83c3f8..fba4fb2f1 100644 --- a/priv/repo/migrations/20170321133335_add_following_list_to_users.exs +++ b/priv/repo/migrations/20170321133335_add_following_list_to_users.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddFollowingListToUsers do use Ecto.Migration diff --git a/priv/repo/migrations/20170321143152_add_ap_id_to_users.exs b/priv/repo/migrations/20170321143152_add_ap_id_to_users.exs index 38ceb87fd..1afb50d59 100644 --- a/priv/repo/migrations/20170321143152_add_ap_id_to_users.exs +++ b/priv/repo/migrations/20170321143152_add_ap_id_to_users.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddApIdToUsers do use Ecto.Migration diff --git a/priv/repo/migrations/20170330153447_add_index_to_objects.exs b/priv/repo/migrations/20170330153447_add_index_to_objects.exs index 93198b462..b568f3e23 100644 --- a/priv/repo/migrations/20170330153447_add_index_to_objects.exs +++ b/priv/repo/migrations/20170330153447_add_index_to_objects.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddIndexToObjects do use Ecto.Migration diff --git a/priv/repo/migrations/20170415141210_add_unique_index_to_email_and_nickname.exs b/priv/repo/migrations/20170415141210_add_unique_index_to_email_and_nickname.exs index b18c67dcb..9a606af3a 100644 --- a/priv/repo/migrations/20170415141210_add_unique_index_to_email_and_nickname.exs +++ b/priv/repo/migrations/20170415141210_add_unique_index_to_email_and_nickname.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddUniqueIndexToEmailAndNickname do use Ecto.Migration diff --git a/priv/repo/migrations/20170416122418_add_avatar_object_to_users.exs b/priv/repo/migrations/20170416122418_add_avatar_object_to_users.exs index e88752c30..e99076f4b 100644 --- a/priv/repo/migrations/20170416122418_add_avatar_object_to_users.exs +++ b/priv/repo/migrations/20170416122418_add_avatar_object_to_users.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddAvatarObjectToUsers do use Ecto.Migration diff --git a/priv/repo/migrations/20170418200143_create_webssub_server_subscription.exs b/priv/repo/migrations/20170418200143_create_webssub_server_subscription.exs index 3d94e4ee7..042aaa8e1 100644 --- a/priv/repo/migrations/20170418200143_create_webssub_server_subscription.exs +++ b/priv/repo/migrations/20170418200143_create_webssub_server_subscription.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.CreateWebsubServerSubscription do use Ecto.Migration diff --git a/priv/repo/migrations/20170423154511_add_fields_to_users.exs b/priv/repo/migrations/20170423154511_add_fields_to_users.exs index a079c73bd..b553381b9 100644 --- a/priv/repo/migrations/20170423154511_add_fields_to_users.exs +++ b/priv/repo/migrations/20170423154511_add_fields_to_users.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddFieldsToUsers do use Ecto.Migration diff --git a/priv/repo/migrations/20170426154155_create_websub_client_subscription.exs b/priv/repo/migrations/20170426154155_create_websub_client_subscription.exs index d020614e1..13a293c85 100644 --- a/priv/repo/migrations/20170426154155_create_websub_client_subscription.exs +++ b/priv/repo/migrations/20170426154155_create_websub_client_subscription.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.CreateWebsubClientSubscription do use Ecto.Migration diff --git a/priv/repo/migrations/20170427054757_add_user_and_hub.exs b/priv/repo/migrations/20170427054757_add_user_and_hub.exs index f33a8572f..801437606 100644 --- a/priv/repo/migrations/20170427054757_add_user_and_hub.exs +++ b/priv/repo/migrations/20170427054757_add_user_and_hub.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddUserAndHub do use Ecto.Migration diff --git a/priv/repo/migrations/20170501124823_add_id_contraints_to_activities_and_objects.exs b/priv/repo/migrations/20170501124823_add_id_contraints_to_activities_and_objects.exs index cebaa7c4e..361efbd5d 100644 --- a/priv/repo/migrations/20170501124823_add_id_contraints_to_activities_and_objects.exs +++ b/priv/repo/migrations/20170501124823_add_id_contraints_to_activities_and_objects.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddIdContraintsToActivitiesAndObjects do use Ecto.Migration diff --git a/priv/repo/migrations/20170501133231_add_id_contraints_to_activities_and_objects_part_two.exs b/priv/repo/migrations/20170501133231_add_id_contraints_to_activities_and_objects_part_two.exs index ecc7c23cc..d83ea881e 100644 --- a/priv/repo/migrations/20170501133231_add_id_contraints_to_activities_and_objects_part_two.exs +++ b/priv/repo/migrations/20170501133231_add_id_contraints_to_activities_and_objects_part_two.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddIdContraintsToActivitiesAndObjectsPartTwo do use Ecto.Migration diff --git a/priv/repo/migrations/20170502083023_add_local_field_to_activities.exs b/priv/repo/migrations/20170502083023_add_local_field_to_activities.exs index 6b61bd464..97f51bc1f 100644 --- a/priv/repo/migrations/20170502083023_add_local_field_to_activities.exs +++ b/priv/repo/migrations/20170502083023_add_local_field_to_activities.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddLocalFieldToActivities do use Ecto.Migration diff --git a/priv/repo/migrations/20170506222027_add_unique_index_to_apid.exs b/priv/repo/migrations/20170506222027_add_unique_index_to_apid.exs index 80f50029a..21e1989b9 100644 --- a/priv/repo/migrations/20170506222027_add_unique_index_to_apid.exs +++ b/priv/repo/migrations/20170506222027_add_unique_index_to_apid.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddUniqueIndexToAPID do use Ecto.Migration diff --git a/priv/repo/migrations/20170522160642_case_insensivtivity.exs b/priv/repo/migrations/20170522160642_case_insensivtivity.exs index 9a67727e9..70f8dc63d 100644 --- a/priv/repo/migrations/20170522160642_case_insensivtivity.exs +++ b/priv/repo/migrations/20170522160642_case_insensivtivity.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.CaseInsensivtivity do use Ecto.Migration diff --git a/priv/repo/migrations/20170529093232_longer_bios.exs b/priv/repo/migrations/20170529093232_longer_bios.exs index e25e5e144..029bc4a8d 100644 --- a/priv/repo/migrations/20170529093232_longer_bios.exs +++ b/priv/repo/migrations/20170529093232_longer_bios.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.LongerBios do use Ecto.Migration diff --git a/priv/repo/migrations/20170620095947_remove_activities_index.exs b/priv/repo/migrations/20170620095947_remove_activities_index.exs index ea3d4a509..899b537f5 100644 --- a/priv/repo/migrations/20170620095947_remove_activities_index.exs +++ b/priv/repo/migrations/20170620095947_remove_activities_index.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.RemoveActivitiesIndex do use Ecto.Migration diff --git a/priv/repo/migrations/20170620133028_add_object_activity_index.exs b/priv/repo/migrations/20170620133028_add_object_activity_index.exs index 5c312b8f4..d9d66d29e 100644 --- a/priv/repo/migrations/20170620133028_add_object_activity_index.exs +++ b/priv/repo/migrations/20170620133028_add_object_activity_index.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddObjectActivityIndex do use Ecto.Migration diff --git a/priv/repo/migrations/20170620142420_add_object_activity_index_part_two.exs b/priv/repo/migrations/20170620142420_add_object_activity_index_part_two.exs index c015afbe1..c67a191e3 100644 --- a/priv/repo/migrations/20170620142420_add_object_activity_index_part_two.exs +++ b/priv/repo/migrations/20170620142420_add_object_activity_index_part_two.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddObjectActivityIndexPartTwo do use Ecto.Migration diff --git a/priv/repo/migrations/20170701142005_add_actor_index_to_activity.exs b/priv/repo/migrations/20170701142005_add_actor_index_to_activity.exs index 220c48abd..e50a1cf25 100644 --- a/priv/repo/migrations/20170701142005_add_actor_index_to_activity.exs +++ b/priv/repo/migrations/20170701142005_add_actor_index_to_activity.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddActorIndexToActivity do use Ecto.Migration diff --git a/priv/repo/migrations/20170719152213_add_follower_address_to_user.exs b/priv/repo/migrations/20170719152213_add_follower_address_to_user.exs index be5eca36c..92bb46cf7 100644 --- a/priv/repo/migrations/20170719152213_add_follower_address_to_user.exs +++ b/priv/repo/migrations/20170719152213_add_follower_address_to_user.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddFollowerAddressToUser do use Ecto.Migration diff --git a/priv/repo/migrations/20170906120646_add_mastodon_apps.exs b/priv/repo/migrations/20170906120646_add_mastodon_apps.exs index 0e01625ff..6782f0aa4 100644 --- a/priv/repo/migrations/20170906120646_add_mastodon_apps.exs +++ b/priv/repo/migrations/20170906120646_add_mastodon_apps.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddMastodonApps do use Ecto.Migration diff --git a/priv/repo/migrations/20170906143140_create_o_auth_authorizations.exs b/priv/repo/migrations/20170906143140_create_o_auth_authorizations.exs index 9af8315a8..cc0d106e2 100644 --- a/priv/repo/migrations/20170906143140_create_o_auth_authorizations.exs +++ b/priv/repo/migrations/20170906143140_create_o_auth_authorizations.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.CreateOAuthAuthorizations do use Ecto.Migration diff --git a/priv/repo/migrations/20170906152508_create_o_auth_token.exs b/priv/repo/migrations/20170906152508_create_o_auth_token.exs index bfad98b76..14ce55b5a 100644 --- a/priv/repo/migrations/20170906152508_create_o_auth_token.exs +++ b/priv/repo/migrations/20170906152508_create_o_auth_token.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.CreateOAuthToken do use Ecto.Migration diff --git a/priv/repo/migrations/20170911123607_create_notifications.exs b/priv/repo/migrations/20170911123607_create_notifications.exs index 36facc5a0..615b56081 100644 --- a/priv/repo/migrations/20170911123607_create_notifications.exs +++ b/priv/repo/migrations/20170911123607_create_notifications.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.CreateNotifications do use Ecto.Migration diff --git a/priv/repo/migrations/20170912114248_add_context_index.exs b/priv/repo/migrations/20170912114248_add_context_index.exs index 400a432ff..710b71100 100644 --- a/priv/repo/migrations/20170912114248_add_context_index.exs +++ b/priv/repo/migrations/20170912114248_add_context_index.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddContextIndex do use Ecto.Migration @disable_ddl_transaction true diff --git a/priv/repo/migrations/20170916090107_add_fts_index_to_activities.exs b/priv/repo/migrations/20170916090107_add_fts_index_to_activities.exs index 717e25412..df62d8f61 100644 --- a/priv/repo/migrations/20170916090107_add_fts_index_to_activities.exs +++ b/priv/repo/migrations/20170916090107_add_fts_index_to_activities.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddFTSIndexToActivities do use Ecto.Migration @disable_ddl_transaction true diff --git a/priv/repo/migrations/20170917120416_add_tag_index.exs b/priv/repo/migrations/20170917120416_add_tag_index.exs index c69e0ef8f..2739f0a3c 100644 --- a/priv/repo/migrations/20170917120416_add_tag_index.exs +++ b/priv/repo/migrations/20170917120416_add_tag_index.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddTagIndex do use Ecto.Migration diff --git a/priv/repo/migrations/20171019141706_create_password_reset_tokens.exs b/priv/repo/migrations/20171019141706_create_password_reset_tokens.exs index 2be50d15e..142af0ff0 100644 --- a/priv/repo/migrations/20171019141706_create_password_reset_tokens.exs +++ b/priv/repo/migrations/20171019141706_create_password_reset_tokens.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.CreatePasswordResetTokens do use Ecto.Migration diff --git a/priv/repo/migrations/20171023155035_add_second_object_index_to_activty.exs b/priv/repo/migrations/20171023155035_add_second_object_index_to_activty.exs index 261940a96..0bbdd8ccf 100644 --- a/priv/repo/migrations/20171023155035_add_second_object_index_to_activty.exs +++ b/priv/repo/migrations/20171023155035_add_second_object_index_to_activty.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddSecondObjectIndexToActivty do use Ecto.Migration diff --git a/priv/repo/migrations/20171024090137_drop_object_index.exs b/priv/repo/migrations/20171024090137_drop_object_index.exs index d417577ae..0aa75b4af 100644 --- a/priv/repo/migrations/20171024090137_drop_object_index.exs +++ b/priv/repo/migrations/20171024090137_drop_object_index.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.DropObjectIndex do use Ecto.Migration diff --git a/priv/repo/migrations/20171024121413_add_object_actor_index.exs b/priv/repo/migrations/20171024121413_add_object_actor_index.exs index 78084536c..27b47bbb7 100644 --- a/priv/repo/migrations/20171024121413_add_object_actor_index.exs +++ b/priv/repo/migrations/20171024121413_add_object_actor_index.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddObjectActorIndex do use Ecto.Migration diff --git a/priv/repo/migrations/20171109091239_add_actor_to_activity.exs b/priv/repo/migrations/20171109091239_add_actor_to_activity.exs index 91348f5c3..999f87e3b 100644 --- a/priv/repo/migrations/20171109091239_add_actor_to_activity.exs +++ b/priv/repo/migrations/20171109091239_add_actor_to_activity.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddActorToActivity do use Ecto.Migration diff --git a/priv/repo/migrations/20171109114020_fill_actor_field.exs b/priv/repo/migrations/20171109114020_fill_actor_field.exs index fb7eca692..3e2b4c21e 100644 --- a/priv/repo/migrations/20171109114020_fill_actor_field.exs +++ b/priv/repo/migrations/20171109114020_fill_actor_field.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.FillActorField do use Ecto.Migration diff --git a/priv/repo/migrations/20171109141309_add_sort_index_to_activities.exs b/priv/repo/migrations/20171109141309_add_sort_index_to_activities.exs index 37fb2ce32..e7f0ebae2 100644 --- a/priv/repo/migrations/20171109141309_add_sort_index_to_activities.exs +++ b/priv/repo/migrations/20171109141309_add_sort_index_to_activities.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddSortIndexToActivities do use Ecto.Migration @disable_ddl_transaction true diff --git a/priv/repo/migrations/20171130135819_add_local_index_to_user.exs b/priv/repo/migrations/20171130135819_add_local_index_to_user.exs index 76bf9584e..32d159299 100644 --- a/priv/repo/migrations/20171130135819_add_local_index_to_user.exs +++ b/priv/repo/migrations/20171130135819_add_local_index_to_user.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddLocalIndexToUser do use Ecto.Migration diff --git a/priv/repo/migrations/20171212163643_add_recipients_to_activities.exs b/priv/repo/migrations/20171212163643_add_recipients_to_activities.exs index 6344fbeee..81556fbb7 100644 --- a/priv/repo/migrations/20171212163643_add_recipients_to_activities.exs +++ b/priv/repo/migrations/20171212163643_add_recipients_to_activities.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddRecipientsToActivities do use Ecto.Migration diff --git a/priv/repo/migrations/20171212164525_fill_recipients_in_activities.exs b/priv/repo/migrations/20171212164525_fill_recipients_in_activities.exs index 77a09781c..db5cc2d30 100644 --- a/priv/repo/migrations/20171212164525_fill_recipients_in_activities.exs +++ b/priv/repo/migrations/20171212164525_fill_recipients_in_activities.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.FillRecipientsInActivities do use Ecto.Migration alias Pleroma.{Repo, Activity} diff --git a/priv/repo/migrations/20180221210540_make_following_postgres_array.exs b/priv/repo/migrations/20180221210540_make_following_postgres_array.exs index 34e94fdc8..7e8032c4d 100644 --- a/priv/repo/migrations/20180221210540_make_following_postgres_array.exs +++ b/priv/repo/migrations/20180221210540_make_following_postgres_array.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.MakeFollowingPostgresArray do use Ecto.Migration diff --git a/priv/repo/migrations/20180325172351_add_follower_address_index_to_users.exs b/priv/repo/migrations/20180325172351_add_follower_address_index_to_users.exs index 18b54411c..2aeb778ae 100644 --- a/priv/repo/migrations/20180325172351_add_follower_address_index_to_users.exs +++ b/priv/repo/migrations/20180325172351_add_follower_address_index_to_users.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddFollowerAddressIndexToUsers do use Ecto.Migration diff --git a/priv/repo/migrations/20180327174350_drop_local_index_on_activities.exs b/priv/repo/migrations/20180327174350_drop_local_index_on_activities.exs index 1574e0e00..010792cc8 100644 --- a/priv/repo/migrations/20180327174350_drop_local_index_on_activities.exs +++ b/priv/repo/migrations/20180327174350_drop_local_index_on_activities.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.DropLocalIndexOnActivities do use Ecto.Migration diff --git a/priv/repo/migrations/20180327175831_actually_drop_local_index.exs b/priv/repo/migrations/20180327175831_actually_drop_local_index.exs index 3d52c7c80..eec5c741b 100644 --- a/priv/repo/migrations/20180327175831_actually_drop_local_index.exs +++ b/priv/repo/migrations/20180327175831_actually_drop_local_index.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.ActuallyDropLocalIndex do use Ecto.Migration diff --git a/priv/repo/migrations/20180429094642_create_lists.exs b/priv/repo/migrations/20180429094642_create_lists.exs index e1eb7e426..eb5101829 100644 --- a/priv/repo/migrations/20180429094642_create_lists.exs +++ b/priv/repo/migrations/20180429094642_create_lists.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.CreateLists do use Ecto.Migration diff --git a/priv/repo/migrations/20180513104714_modify_activity_index.exs b/priv/repo/migrations/20180513104714_modify_activity_index.exs index ec0efa238..9bae44a36 100644 --- a/priv/repo/migrations/20180513104714_modify_activity_index.exs +++ b/priv/repo/migrations/20180513104714_modify_activity_index.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.ModifyActivityIndex do use Ecto.Migration @disable_ddl_transaction true diff --git a/priv/repo/migrations/20180516144508_add_trigram_extension.exs b/priv/repo/migrations/20180516144508_add_trigram_extension.exs index ff0710f84..b14104cc4 100644 --- a/priv/repo/migrations/20180516144508_add_trigram_extension.exs +++ b/priv/repo/migrations/20180516144508_add_trigram_extension.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddTrigramExtension do use Ecto.Migration require Logger diff --git a/priv/repo/migrations/20180516154905_create_user_trigram_index.exs b/priv/repo/migrations/20180516154905_create_user_trigram_index.exs index 0713a7297..68878e1e2 100644 --- a/priv/repo/migrations/20180516154905_create_user_trigram_index.exs +++ b/priv/repo/migrations/20180516154905_create_user_trigram_index.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.CreateUserTrigramIndex do use Ecto.Migration diff --git a/priv/repo/migrations/20180530123448_add_list_follow_index.exs b/priv/repo/migrations/20180530123448_add_list_follow_index.exs index 57f8d478f..8b49501a5 100644 --- a/priv/repo/migrations/20180530123448_add_list_follow_index.exs +++ b/priv/repo/migrations/20180530123448_add_list_follow_index.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddListFollowIndex do use Ecto.Migration diff --git a/priv/repo/migrations/20180606173637_create_apid_host_extraction_index.exs b/priv/repo/migrations/20180606173637_create_apid_host_extraction_index.exs index 07b3f2875..6bc935536 100644 --- a/priv/repo/migrations/20180606173637_create_apid_host_extraction_index.exs +++ b/priv/repo/migrations/20180606173637_create_apid_host_extraction_index.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.CreateApidHostExtractionIndex do use Ecto.Migration @disable_ddl_transaction true diff --git a/priv/repo/migrations/20180612110515_create_user_invite_tokens.exs b/priv/repo/migrations/20180612110515_create_user_invite_tokens.exs index a75ff2a51..1291e27f3 100644 --- a/priv/repo/migrations/20180612110515_create_user_invite_tokens.exs +++ b/priv/repo/migrations/20180612110515_create_user_invite_tokens.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.CreateUserInviteTokens do use Ecto.Migration diff --git a/priv/repo/migrations/20180617221540_create_activities_in_reply_to_index.exs b/priv/repo/migrations/20180617221540_create_activities_in_reply_to_index.exs index c8a0e60a0..64908a015 100644 --- a/priv/repo/migrations/20180617221540_create_activities_in_reply_to_index.exs +++ b/priv/repo/migrations/20180617221540_create_activities_in_reply_to_index.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.CreateActivitiesInReplyToIndex do use Ecto.Migration @disable_ddl_transaction true diff --git a/priv/repo/migrations/20180813003722_create_filters.exs b/priv/repo/migrations/20180813003722_create_filters.exs index 7803558df..0867b7e48 100644 --- a/priv/repo/migrations/20180813003722_create_filters.exs +++ b/priv/repo/migrations/20180813003722_create_filters.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.CreateFilters do use Ecto.Migration diff --git a/priv/repo/migrations/20180829082446_add_recipients_to_and_cc_fields_to_activities.exs b/priv/repo/migrations/20180829082446_add_recipients_to_and_cc_fields_to_activities.exs index 481986039..a57168557 100644 --- a/priv/repo/migrations/20180829082446_add_recipients_to_and_cc_fields_to_activities.exs +++ b/priv/repo/migrations/20180829082446_add_recipients_to_and_cc_fields_to_activities.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddRecipientsToAndCcFieldsToActivities do use Ecto.Migration diff --git a/priv/repo/migrations/20180829182612_activities_add_to_cc_indices.exs b/priv/repo/migrations/20180829182612_activities_add_to_cc_indices.exs index 1f9f97861..7900e26e5 100644 --- a/priv/repo/migrations/20180829182612_activities_add_to_cc_indices.exs +++ b/priv/repo/migrations/20180829182612_activities_add_to_cc_indices.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.ActivitiesAddToCcIndices do use Ecto.Migration diff --git a/priv/repo/migrations/20180829183529_remove_recipients_to_and_cc_fields_from_activities.exs b/priv/repo/migrations/20180829183529_remove_recipients_to_and_cc_fields_from_activities.exs index 65576b8d5..6115f08c5 100644 --- a/priv/repo/migrations/20180829183529_remove_recipients_to_and_cc_fields_from_activities.exs +++ b/priv/repo/migrations/20180829183529_remove_recipients_to_and_cc_fields_from_activities.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.RemoveRecipientsToAndCcFieldsFromActivities do use Ecto.Migration diff --git a/priv/repo/migrations/20180903114437_users_add_is_moderator_index.exs b/priv/repo/migrations/20180903114437_users_add_is_moderator_index.exs index cbe79de05..2f6ecf59a 100644 --- a/priv/repo/migrations/20180903114437_users_add_is_moderator_index.exs +++ b/priv/repo/migrations/20180903114437_users_add_is_moderator_index.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.UsersAddIsModeratorIndex do use Ecto.Migration diff --git a/priv/repo/migrations/20180918182427_create_push_subscriptions.exs b/priv/repo/migrations/20180918182427_create_push_subscriptions.exs index c1b55d018..1e31bbe80 100644 --- a/priv/repo/migrations/20180918182427_create_push_subscriptions.exs +++ b/priv/repo/migrations/20180918182427_create_push_subscriptions.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.CreatePushSubscriptions do use Ecto.Migration diff --git a/priv/repo/migrations/20180919060348_users_add_last_refreshed_at.exs b/priv/repo/migrations/20180919060348_users_add_last_refreshed_at.exs index 16605cf7b..64d43a58c 100644 --- a/priv/repo/migrations/20180919060348_users_add_last_refreshed_at.exs +++ b/priv/repo/migrations/20180919060348_users_add_last_refreshed_at.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.UsersAddLastRefreshedAt do use Ecto.Migration diff --git a/priv/repo/migrations/20181201104428_add_uuid_extension.exs b/priv/repo/migrations/20181201104428_add_uuid_extension.exs index 99fcb957c..553565bc7 100644 --- a/priv/repo/migrations/20181201104428_add_uuid_extension.exs +++ b/priv/repo/migrations/20181201104428_add_uuid_extension.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddUUIDExtension do use Ecto.Migration diff --git a/priv/repo/migrations/20181201105617_add_uui_ds_to_user_info.exs b/priv/repo/migrations/20181201105617_add_uui_ds_to_user_info.exs index 964383668..83dac7992 100644 --- a/priv/repo/migrations/20181201105617_add_uui_ds_to_user_info.exs +++ b/priv/repo/migrations/20181201105617_add_uui_ds_to_user_info.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddUUIDsToUserInfo do use Ecto.Migration diff --git a/priv/repo/migrations/20181206125616_add_tags_to_users.exs b/priv/repo/migrations/20181206125616_add_tags_to_users.exs index a46c0fc35..056cae0ae 100644 --- a/priv/repo/migrations/20181206125616_add_tags_to_users.exs +++ b/priv/repo/migrations/20181206125616_add_tags_to_users.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddTagsToUsers do use Ecto.Migration diff --git a/priv/repo/migrations/20181214121049_add_bookmarks_to_users.exs b/priv/repo/migrations/20181214121049_add_bookmarks_to_users.exs index 6228f1bad..75e9a532c 100644 --- a/priv/repo/migrations/20181214121049_add_bookmarks_to_users.exs +++ b/priv/repo/migrations/20181214121049_add_bookmarks_to_users.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddBookmarksToUsers do use Ecto.Migration diff --git a/priv/repo/migrations/20181218172826_users_and_activities_flake_id.exs b/priv/repo/migrations/20181218172826_users_and_activities_flake_id.exs index c58d829af..ef2b7257b 100644 --- a/priv/repo/migrations/20181218172826_users_and_activities_flake_id.exs +++ b/priv/repo/migrations/20181218172826_users_and_activities_flake_id.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.UsersAndActivitiesFlakeId do use Ecto.Migration alias Pleroma.Clippy diff --git a/priv/repo/migrations/20190109152453_add_visibility_function.exs b/priv/repo/migrations/20190109152453_add_visibility_function.exs index 43d1074aa..8339de5fd 100644 --- a/priv/repo/migrations/20190109152453_add_visibility_function.exs +++ b/priv/repo/migrations/20190109152453_add_visibility_function.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddVisibilityFunction do use Ecto.Migration @disable_ddl_transaction true diff --git a/priv/repo/migrations/20190115085500_create_user_fts_index.exs b/priv/repo/migrations/20190115085500_create_user_fts_index.exs index 0c0c512d3..02b3fb53f 100644 --- a/priv/repo/migrations/20190115085500_create_user_fts_index.exs +++ b/priv/repo/migrations/20190115085500_create_user_fts_index.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.CreateUserFtsIndex do use Ecto.Migration diff --git a/priv/repo/migrations/20190118074940_fix_user_trigram_index.exs b/priv/repo/migrations/20190118074940_fix_user_trigram_index.exs index b0d272802..b0f5238a0 100644 --- a/priv/repo/migrations/20190118074940_fix_user_trigram_index.exs +++ b/priv/repo/migrations/20190118074940_fix_user_trigram_index.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.FixUserTrigramIndex do use Ecto.Migration diff --git a/priv/repo/migrations/20190122153157_update_activity_visibility.exs b/priv/repo/migrations/20190122153157_update_activity_visibility.exs index 9e29571ee..2bddbe9bd 100644 --- a/priv/repo/migrations/20190122153157_update_activity_visibility.exs +++ b/priv/repo/migrations/20190122153157_update_activity_visibility.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.UpdateActivityVisibility do use Ecto.Migration @disable_ddl_transaction true diff --git a/priv/repo/migrations/20190123092341_users_add_is_admin_index.exs b/priv/repo/migrations/20190123092341_users_add_is_admin_index.exs index f42d46427..a6449c61a 100644 --- a/priv/repo/migrations/20190123092341_users_add_is_admin_index.exs +++ b/priv/repo/migrations/20190123092341_users_add_is_admin_index.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.UsersAddIsAdminIndex do use Ecto.Migration diff --git a/priv/repo/migrations/20190123125546_create_instances.exs b/priv/repo/migrations/20190123125546_create_instances.exs index 9438736ba..e3dca393c 100644 --- a/priv/repo/migrations/20190123125546_create_instances.exs +++ b/priv/repo/migrations/20190123125546_create_instances.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.CreateInstances do use Ecto.Migration diff --git a/priv/repo/migrations/20190123125839_fix_info_ids.exs b/priv/repo/migrations/20190123125839_fix_info_ids.exs index 5b263b3b3..f943e181e 100644 --- a/priv/repo/migrations/20190123125839_fix_info_ids.exs +++ b/priv/repo/migrations/20190123125839_fix_info_ids.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.FixInfoIds do use Ecto.Migration diff --git a/priv/repo/migrations/20190124131141_update_activity_visibility_again.exs b/priv/repo/migrations/20190124131141_update_activity_visibility_again.exs index a42e4cad9..8567c8363 100644 --- a/priv/repo/migrations/20190124131141_update_activity_visibility_again.exs +++ b/priv/repo/migrations/20190124131141_update_activity_visibility_again.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.UpdateActivityVisibilityAgain do use Ecto.Migration @disable_ddl_transaction true diff --git a/priv/repo/migrations/20190126160540_change_push_subscriptions_varchar.exs b/priv/repo/migrations/20190126160540_change_push_subscriptions_varchar.exs index 8e1c0e630..adb345b8b 100644 --- a/priv/repo/migrations/20190126160540_change_push_subscriptions_varchar.exs +++ b/priv/repo/migrations/20190126160540_change_push_subscriptions_varchar.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.ChangePushSubscriptionsVarchar do use Ecto.Migration diff --git a/priv/repo/migrations/20190127151220_add_activities_likes_index.exs b/priv/repo/migrations/20190127151220_add_activities_likes_index.exs index 115b12491..d21ab95b8 100644 --- a/priv/repo/migrations/20190127151220_add_activities_likes_index.exs +++ b/priv/repo/migrations/20190127151220_add_activities_likes_index.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddActivitiesLikesIndex do use Ecto.Migration @disable_ddl_transaction true diff --git a/priv/repo/migrations/20190203185340_split_hide_network.exs b/priv/repo/migrations/20190203185340_split_hide_network.exs index fb677f68a..fbba31c83 100644 --- a/priv/repo/migrations/20190203185340_split_hide_network.exs +++ b/priv/repo/migrations/20190203185340_split_hide_network.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.SplitHideNetwork do use Ecto.Migration diff --git a/priv/repo/migrations/20190204200237_add_correct_dm_index.exs b/priv/repo/migrations/20190204200237_add_correct_dm_index.exs index 1facb37b8..a9beb97e0 100644 --- a/priv/repo/migrations/20190204200237_add_correct_dm_index.exs +++ b/priv/repo/migrations/20190204200237_add_correct_dm_index.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddCorrectDMIndex do use Ecto.Migration @disable_ddl_transaction true diff --git a/priv/repo/migrations/20190205114625_create_thread_mutes.exs b/priv/repo/migrations/20190205114625_create_thread_mutes.exs index df9eb7677..8d18f25d0 100644 --- a/priv/repo/migrations/20190205114625_create_thread_mutes.exs +++ b/priv/repo/migrations/20190205114625_create_thread_mutes.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.CreateThreadMutes do use Ecto.Migration diff --git a/priv/repo/migrations/20190208131753_add_scopes_to_o_auth_entities.exs b/priv/repo/migrations/20190208131753_add_scopes_to_o_auth_entities.exs index ad93bfce2..c52a5fdd2 100644 --- a/priv/repo/migrations/20190208131753_add_scopes_to_o_auth_entities.exs +++ b/priv/repo/migrations/20190208131753_add_scopes_to_o_auth_entities.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddScopeSToOAuthEntities do use Ecto.Migration diff --git a/priv/repo/migrations/20190213185503_change_apps_scopes_to_varchar_array.exs b/priv/repo/migrations/20190213185503_change_apps_scopes_to_varchar_array.exs index eb6fcb012..15a0192e2 100644 --- a/priv/repo/migrations/20190213185503_change_apps_scopes_to_varchar_array.exs +++ b/priv/repo/migrations/20190213185503_change_apps_scopes_to_varchar_array.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.ChangeAppsScopesToVarcharArray do use Ecto.Migration diff --git a/priv/repo/migrations/20190213185600_data_migration_populate_o_auth_scopes.exs b/priv/repo/migrations/20190213185600_data_migration_populate_o_auth_scopes.exs index ef5b35125..2f225438f 100644 --- a/priv/repo/migrations/20190213185600_data_migration_populate_o_auth_scopes.exs +++ b/priv/repo/migrations/20190213185600_data_migration_populate_o_auth_scopes.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.DataMigrationPopulateOAuthScopes do use Ecto.Migration diff --git a/priv/repo/migrations/20190222104808_data_migration_normalize_scopes.exs b/priv/repo/migrations/20190222104808_data_migration_normalize_scopes.exs index 92ab9bd2c..9807cdbf9 100644 --- a/priv/repo/migrations/20190222104808_data_migration_normalize_scopes.exs +++ b/priv/repo/migrations/20190222104808_data_migration_normalize_scopes.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.DataMigrationNormalizeScopes do use Ecto.Migration diff --git a/priv/repo/migrations/20190301101154_add_default_tags_to_user.exs b/priv/repo/migrations/20190301101154_add_default_tags_to_user.exs index ea0947852..fb75ebfb7 100644 --- a/priv/repo/migrations/20190301101154_add_default_tags_to_user.exs +++ b/priv/repo/migrations/20190301101154_add_default_tags_to_user.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddDefaultTagsToUser do use Ecto.Migration diff --git a/priv/repo/migrations/20190303120636_update_user_note_counters.exs b/priv/repo/migrations/20190303120636_update_user_note_counters.exs index 95dbd012f..f0a950dd9 100644 --- a/priv/repo/migrations/20190303120636_update_user_note_counters.exs +++ b/priv/repo/migrations/20190303120636_update_user_note_counters.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.UpdateUserNoteCounters do use Ecto.Migration diff --git a/priv/repo/migrations/20190315101315_create_registrations.exs b/priv/repo/migrations/20190315101315_create_registrations.exs index d705a499e..930d339a8 100644 --- a/priv/repo/migrations/20190315101315_create_registrations.exs +++ b/priv/repo/migrations/20190315101315_create_registrations.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.CreateRegistrations do use Ecto.Migration diff --git a/priv/repo/migrations/20190325185009_create_notification_id_index.exs b/priv/repo/migrations/20190325185009_create_notification_id_index.exs index 7209c16a9..b558880a7 100644 --- a/priv/repo/migrations/20190325185009_create_notification_id_index.exs +++ b/priv/repo/migrations/20190325185009_create_notification_id_index.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.CreateNotificationIdIndex do use Ecto.Migration diff --git a/priv/repo/migrations/20190328053912_create_scheduled_activities.exs b/priv/repo/migrations/20190328053912_create_scheduled_activities.exs index 8a01bbdb1..6030d4bb9 100644 --- a/priv/repo/migrations/20190328053912_create_scheduled_activities.exs +++ b/priv/repo/migrations/20190328053912_create_scheduled_activities.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.CreateScheduledActivities do use Ecto.Migration diff --git a/priv/repo/migrations/20190403131720_add_oauth_token_indexes.exs b/priv/repo/migrations/20190403131720_add_oauth_token_indexes.exs index ab1bf2165..40f30a459 100644 --- a/priv/repo/migrations/20190403131720_add_oauth_token_indexes.exs +++ b/priv/repo/migrations/20190403131720_add_oauth_token_indexes.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddOauthTokenIndexes do use Ecto.Migration diff --git a/priv/repo/migrations/20190404050946_add_fields_to_user_invite_tokens.exs b/priv/repo/migrations/20190404050946_add_fields_to_user_invite_tokens.exs index 211a14135..1f4ad2d42 100644 --- a/priv/repo/migrations/20190404050946_add_fields_to_user_invite_tokens.exs +++ b/priv/repo/migrations/20190404050946_add_fields_to_user_invite_tokens.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddFieldsToUserInviteTokens do use Ecto.Migration diff --git a/priv/repo/migrations/20190405160700_add_index_on_subscribers.exs b/priv/repo/migrations/20190405160700_add_index_on_subscribers.exs index bbf47f72c..4a43f5a3a 100644 --- a/priv/repo/migrations/20190405160700_add_index_on_subscribers.exs +++ b/priv/repo/migrations/20190405160700_add_index_on_subscribers.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddIndexOnSubscribers do use Ecto.Migration diff --git a/priv/repo/migrations/20190408123347_create_conversations.exs b/priv/repo/migrations/20190408123347_create_conversations.exs index aab6cf802..81556cff7 100644 --- a/priv/repo/migrations/20190408123347_create_conversations.exs +++ b/priv/repo/migrations/20190408123347_create_conversations.exs @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Repo.Migrations.CreateConversations do diff --git a/priv/repo/migrations/20190410152859_add_participation_updated_at_index.exs b/priv/repo/migrations/20190410152859_add_participation_updated_at_index.exs index e22c6e57d..e6fae8203 100644 --- a/priv/repo/migrations/20190410152859_add_participation_updated_at_index.exs +++ b/priv/repo/migrations/20190410152859_add_participation_updated_at_index.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddParticipationUpdatedAtIndex do use Ecto.Migration diff --git a/priv/repo/migrations/20190411094120_add_index_on_user_info_deactivated.exs b/priv/repo/migrations/20190411094120_add_index_on_user_info_deactivated.exs index 374e2323d..09d6a4499 100644 --- a/priv/repo/migrations/20190411094120_add_index_on_user_info_deactivated.exs +++ b/priv/repo/migrations/20190411094120_add_index_on_user_info_deactivated.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddIndexOnUserInfoDeactivated do use Ecto.Migration diff --git a/priv/repo/migrations/20190412052952_add_user_info_fields.exs b/priv/repo/migrations/20190412052952_add_user_info_fields.exs index 646c91f32..3ec31dc15 100644 --- a/priv/repo/migrations/20190412052952_add_user_info_fields.exs +++ b/priv/repo/migrations/20190412052952_add_user_info_fields.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddEmailNotificationsToUserInfo do use Ecto.Migration diff --git a/priv/repo/migrations/20190413082658_create_bookmarks.exs b/priv/repo/migrations/20190413082658_create_bookmarks.exs index cfd025fc5..9f2b1eccf 100644 --- a/priv/repo/migrations/20190413082658_create_bookmarks.exs +++ b/priv/repo/migrations/20190413082658_create_bookmarks.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.CreateBookmarks do use Ecto.Migration diff --git a/priv/repo/migrations/20190413085040_add_signin_and_last_digest_dates_to_user.exs b/priv/repo/migrations/20190413085040_add_signin_and_last_digest_dates_to_user.exs index 4312b171f..b53504e07 100644 --- a/priv/repo/migrations/20190413085040_add_signin_and_last_digest_dates_to_user.exs +++ b/priv/repo/migrations/20190413085040_add_signin_and_last_digest_dates_to_user.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddSigninAndLastDigestDatesToUser do use Ecto.Migration diff --git a/priv/repo/migrations/20190414125034_migrate_old_bookmarks.exs b/priv/repo/migrations/20190414125034_migrate_old_bookmarks.exs index b6f0ac66b..4fb759199 100644 --- a/priv/repo/migrations/20190414125034_migrate_old_bookmarks.exs +++ b/priv/repo/migrations/20190414125034_migrate_old_bookmarks.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.MigrateOldBookmarks do use Ecto.Migration import Ecto.Query diff --git a/priv/repo/migrations/20190501125843_add_fts_index_to_objects.exs b/priv/repo/migrations/20190501125843_add_fts_index_to_objects.exs index 41630bace..e0284d01a 100644 --- a/priv/repo/migrations/20190501125843_add_fts_index_to_objects.exs +++ b/priv/repo/migrations/20190501125843_add_fts_index_to_objects.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddFTSIndexToObjects do use Ecto.Migration diff --git a/priv/repo/migrations/20190501133552_add_refresh_token_index_to_token.exs b/priv/repo/migrations/20190501133552_add_refresh_token_index_to_token.exs index 44a266985..7439af4b9 100644 --- a/priv/repo/migrations/20190501133552_add_refresh_token_index_to_token.exs +++ b/priv/repo/migrations/20190501133552_add_refresh_token_index_to_token.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddRefreshTokenIndexToToken do use Ecto.Migration diff --git a/priv/repo/migrations/20190506054542_add_multi_factor_authentication_settings_to_user.exs b/priv/repo/migrations/20190506054542_add_multi_factor_authentication_settings_to_user.exs index 8b653c61f..99df69ab6 100644 --- a/priv/repo/migrations/20190506054542_add_multi_factor_authentication_settings_to_user.exs +++ b/priv/repo/migrations/20190506054542_add_multi_factor_authentication_settings_to_user.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddMultiFactorAuthenticationSettingsToUser do use Ecto.Migration diff --git a/priv/repo/migrations/20190508193213_create_mfa_tokens.exs b/priv/repo/migrations/20190508193213_create_mfa_tokens.exs index da9f8fabe..e49874de9 100644 --- a/priv/repo/migrations/20190508193213_create_mfa_tokens.exs +++ b/priv/repo/migrations/20190508193213_create_mfa_tokens.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.CreateMfaTokens do use Ecto.Migration diff --git a/priv/repo/migrations/20190511191044_set_default_state_to_reports.exs b/priv/repo/migrations/20190511191044_set_default_state_to_reports.exs index ab1351d56..376b455e7 100644 --- a/priv/repo/migrations/20190511191044_set_default_state_to_reports.exs +++ b/priv/repo/migrations/20190511191044_set_default_state_to_reports.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.SetDefaultStateToReports do use Ecto.Migration diff --git a/priv/repo/migrations/20190513175809_change_hide_column_in_filter_table.exs b/priv/repo/migrations/20190513175809_change_hide_column_in_filter_table.exs index 8135ab178..43a4c0be2 100644 --- a/priv/repo/migrations/20190513175809_change_hide_column_in_filter_table.exs +++ b/priv/repo/migrations/20190513175809_change_hide_column_in_filter_table.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.ChangeHideColumnInFilterTable do use Ecto.Migration diff --git a/priv/repo/migrations/20190515222404_add_thread_visibility_function.exs b/priv/repo/migrations/20190515222404_add_thread_visibility_function.exs index 5184c0c48..2126d82b3 100644 --- a/priv/repo/migrations/20190515222404_add_thread_visibility_function.exs +++ b/priv/repo/migrations/20190515222404_add_thread_visibility_function.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddThreadVisibilityFunction do use Ecto.Migration @disable_ddl_transaction true diff --git a/priv/repo/migrations/20190516112144_add_ap_id_to_lists.exs b/priv/repo/migrations/20190516112144_add_ap_id_to_lists.exs index 3c32bc355..db973ea1c 100644 --- a/priv/repo/migrations/20190516112144_add_ap_id_to_lists.exs +++ b/priv/repo/migrations/20190516112144_add_ap_id_to_lists.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddApIdToLists do use Ecto.Migration diff --git a/priv/repo/migrations/20190518032627_create_config.exs b/priv/repo/migrations/20190518032627_create_config.exs index cb65f3939..b14a49c33 100644 --- a/priv/repo/migrations/20190518032627_create_config.exs +++ b/priv/repo/migrations/20190518032627_create_config.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.CreateConfig do use Ecto.Migration diff --git a/priv/repo/migrations/20190525071417_add_non_follows_and_non_followers_fields_to_notification_settings.exs b/priv/repo/migrations/20190525071417_add_non_follows_and_non_followers_fields_to_notification_settings.exs index 505f0acb2..1c949bc97 100644 --- a/priv/repo/migrations/20190525071417_add_non_follows_and_non_followers_fields_to_notification_settings.exs +++ b/priv/repo/migrations/20190525071417_add_non_follows_and_non_followers_fields_to_notification_settings.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddNonFollowsAndNonFollowersFieldsToNotificationSettings do use Ecto.Migration diff --git a/priv/repo/migrations/20190603115238_add_index_on_activities_local.exs b/priv/repo/migrations/20190603115238_add_index_on_activities_local.exs index 7e6643497..42ea93d1f 100644 --- a/priv/repo/migrations/20190603115238_add_index_on_activities_local.exs +++ b/priv/repo/migrations/20190603115238_add_index_on_activities_local.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddIndexOnActivitiesLocal do use Ecto.Migration diff --git a/priv/repo/migrations/20190603162018_add_object_in_reply_to_index.exs b/priv/repo/migrations/20190603162018_add_object_in_reply_to_index.exs index faed5e31b..e884112cf 100644 --- a/priv/repo/migrations/20190603162018_add_object_in_reply_to_index.exs +++ b/priv/repo/migrations/20190603162018_add_object_in_reply_to_index.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddObjectInReplyToIndex do use Ecto.Migration diff --git a/priv/repo/migrations/20190603173419_add_tag_index_to_objects.exs b/priv/repo/migrations/20190603173419_add_tag_index_to_objects.exs index 9ba95917c..00c71e95f 100644 --- a/priv/repo/migrations/20190603173419_add_tag_index_to_objects.exs +++ b/priv/repo/migrations/20190603173419_add_tag_index_to_objects.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddTagIndexToObjects do use Ecto.Migration diff --git a/priv/repo/migrations/20190622151019_add_group_key_to_config.exs b/priv/repo/migrations/20190622151019_add_group_key_to_config.exs index 867dafaf3..1a04266b4 100644 --- a/priv/repo/migrations/20190622151019_add_group_key_to_config.exs +++ b/priv/repo/migrations/20190622151019_add_group_key_to_config.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddGroupKeyToConfig do use Ecto.Migration diff --git a/priv/repo/migrations/20190710115833_add_following_address_to_user.exs b/priv/repo/migrations/20190710115833_add_following_address_to_user.exs index fe30472a1..048cbfbff 100644 --- a/priv/repo/migrations/20190710115833_add_following_address_to_user.exs +++ b/priv/repo/migrations/20190710115833_add_following_address_to_user.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddFollowingAddressToUser do use Ecto.Migration diff --git a/priv/repo/migrations/20190710125051_add_following_address_index_to_user.exs b/priv/repo/migrations/20190710125051_add_following_address_index_to_user.exs index 0cbfb71f4..8acfadc86 100644 --- a/priv/repo/migrations/20190710125051_add_following_address_index_to_user.exs +++ b/priv/repo/migrations/20190710125051_add_following_address_index_to_user.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddFollowingAddressIndexToUser do use Ecto.Migration diff --git a/priv/repo/migrations/20190710125158_add_following_address_from_source_data.exs b/priv/repo/migrations/20190710125158_add_following_address_from_source_data.exs index 44f9891b1..44a3d6d2d 100644 --- a/priv/repo/migrations/20190710125158_add_following_address_from_source_data.exs +++ b/priv/repo/migrations/20190710125158_add_following_address_from_source_data.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddFollowingAddressFromSourceData do alias Pleroma.User import Ecto.Query diff --git a/priv/repo/migrations/20190711042021_create_safe_jsonb_set.exs b/priv/repo/migrations/20190711042021_create_safe_jsonb_set.exs index bfac09f9e..c1edb7cfc 100644 --- a/priv/repo/migrations/20190711042021_create_safe_jsonb_set.exs +++ b/priv/repo/migrations/20190711042021_create_safe_jsonb_set.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.CreateSafeJsonbSet do use Ecto.Migration diff --git a/priv/repo/migrations/20190711042024_copy_muted_to_muted_notifications.exs b/priv/repo/migrations/20190711042024_copy_muted_to_muted_notifications.exs index bbd502044..257c2b7c6 100644 --- a/priv/repo/migrations/20190711042024_copy_muted_to_muted_notifications.exs +++ b/priv/repo/migrations/20190711042024_copy_muted_to_muted_notifications.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.CopyMutedToMutedNotifications do use Ecto.Migration diff --git a/priv/repo/migrations/20190716100804_add_expirations_table.exs b/priv/repo/migrations/20190716100804_add_expirations_table.exs index fbde8f9d6..f9acdc9c4 100644 --- a/priv/repo/migrations/20190716100804_add_expirations_table.exs +++ b/priv/repo/migrations/20190716100804_add_expirations_table.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddExpirationsTable do use Ecto.Migration diff --git a/priv/repo/migrations/20190730055101_add_oban_jobs_table.exs b/priv/repo/migrations/20190730055101_add_oban_jobs_table.exs index 5214d59cb..a1cc0cbdc 100644 --- a/priv/repo/migrations/20190730055101_add_oban_jobs_table.exs +++ b/priv/repo/migrations/20190730055101_add_oban_jobs_table.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddObanJobsTable do use Ecto.Migration diff --git a/priv/repo/migrations/20190801154554_create_conversation_participation_recipient_ships.exs b/priv/repo/migrations/20190801154554_create_conversation_participation_recipient_ships.exs index 59cbe25ad..75e4b181a 100644 --- a/priv/repo/migrations/20190801154554_create_conversation_participation_recipient_ships.exs +++ b/priv/repo/migrations/20190801154554_create_conversation_participation_recipient_ships.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.CreateConversationParticipationRecipientShips do use Ecto.Migration diff --git a/priv/repo/migrations/20190818124341_create_moderation_log.exs b/priv/repo/migrations/20190818124341_create_moderation_log.exs index cef6636f3..a812a42f4 100644 --- a/priv/repo/migrations/20190818124341_create_moderation_log.exs +++ b/priv/repo/migrations/20190818124341_create_moderation_log.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.CreateModerationLog do use Ecto.Migration diff --git a/priv/repo/migrations/20190823000549_add_likes_index_to_objects.exs b/priv/repo/migrations/20190823000549_add_likes_index_to_objects.exs index c410dcdc2..ccdcb8d81 100644 --- a/priv/repo/migrations/20190823000549_add_likes_index_to_objects.exs +++ b/priv/repo/migrations/20190823000549_add_likes_index_to_objects.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddLikesIndexToObjects do use Ecto.Migration diff --git a/priv/repo/migrations/20190912065617_create_deliveries.exs b/priv/repo/migrations/20190912065617_create_deliveries.exs index ac2832a77..5a43c3716 100644 --- a/priv/repo/migrations/20190912065617_create_deliveries.exs +++ b/priv/repo/migrations/20190912065617_create_deliveries.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.CreateDeliveries do use Ecto.Migration diff --git a/priv/repo/migrations/20190917100019_update_oban.exs b/priv/repo/migrations/20190917100019_update_oban.exs index f673675de..dc25bd95a 100644 --- a/priv/repo/migrations/20190917100019_update_oban.exs +++ b/priv/repo/migrations/20190917100019_update_oban.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.UpdateOban do use Ecto.Migration diff --git a/priv/repo/migrations/20190929201536_drop_subscription_if_exists.exs b/priv/repo/migrations/20190929201536_drop_subscription_if_exists.exs index 8bd2a98bb..9cd4710f7 100644 --- a/priv/repo/migrations/20190929201536_drop_subscription_if_exists.exs +++ b/priv/repo/migrations/20190929201536_drop_subscription_if_exists.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.DropSubscriptionIfExists do use Ecto.Migration diff --git a/priv/repo/migrations/20191005165212_add_unread_conversation_count_to_user_info.exs b/priv/repo/migrations/20191005165212_add_unread_conversation_count_to_user_info.exs index 2aa1a012c..0280d18ff 100644 --- a/priv/repo/migrations/20191005165212_add_unread_conversation_count_to_user_info.exs +++ b/priv/repo/migrations/20191005165212_add_unread_conversation_count_to_user_info.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddUnreadConversationCountToUserInfo do use Ecto.Migration diff --git a/priv/repo/migrations/20191006123824_add_keys_column.exs b/priv/repo/migrations/20191006123824_add_keys_column.exs index 4114ba416..d9843d09d 100644 --- a/priv/repo/migrations/20191006123824_add_keys_column.exs +++ b/priv/repo/migrations/20191006123824_add_keys_column.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddKeysColumn do use Ecto.Migration diff --git a/priv/repo/migrations/20191006135457_move_keys_to_separate_column.exs b/priv/repo/migrations/20191006135457_move_keys_to_separate_column.exs index cb8d4ae9e..137e98230 100644 --- a/priv/repo/migrations/20191006135457_move_keys_to_separate_column.exs +++ b/priv/repo/migrations/20191006135457_move_keys_to_separate_column.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.MoveKeysToSeparateColumn do use Ecto.Migration diff --git a/priv/repo/migrations/20191007073319_create_following_relationships.exs b/priv/repo/migrations/20191007073319_create_following_relationships.exs index d49e24ee4..ea812bca9 100644 --- a/priv/repo/migrations/20191007073319_create_following_relationships.exs +++ b/priv/repo/migrations/20191007073319_create_following_relationships.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.CreateFollowingRelationships do use Ecto.Migration diff --git a/priv/repo/migrations/20191008132217_migrate_following_relationships.exs b/priv/repo/migrations/20191008132217_migrate_following_relationships.exs index 9d5c2648f..1d4b0bea3 100644 --- a/priv/repo/migrations/20191008132217_migrate_following_relationships.exs +++ b/priv/repo/migrations/20191008132217_migrate_following_relationships.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.MigrateFollowingRelationships do use Ecto.Migration diff --git a/priv/repo/migrations/20191008132427_drop_users_following.exs b/priv/repo/migrations/20191008132427_drop_users_following.exs index 21c0af9f4..5bfb3a194 100644 --- a/priv/repo/migrations/20191008132427_drop_users_following.exs +++ b/priv/repo/migrations/20191008132427_drop_users_following.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.DropUsersFollowing do use Ecto.Migration diff --git a/priv/repo/migrations/20191009154606_add_user_info_columns.exs b/priv/repo/migrations/20191009154606_add_user_info_columns.exs index 22a5a377f..36ded62ae 100644 --- a/priv/repo/migrations/20191009154606_add_user_info_columns.exs +++ b/priv/repo/migrations/20191009154606_add_user_info_columns.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddUsersInfoColumns do use Ecto.Migration diff --git a/priv/repo/migrations/20191009154608_copy_users_info_fields_to_users.exs b/priv/repo/migrations/20191009154608_copy_users_info_fields_to_users.exs index cc5ae6920..502b82c8b 100644 --- a/priv/repo/migrations/20191009154608_copy_users_info_fields_to_users.exs +++ b/priv/repo/migrations/20191009154608_copy_users_info_fields_to_users.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.CopyUsersInfoFieldsToUsers do use Ecto.Migration diff --git a/priv/repo/migrations/20191014181019_create_markers.exs b/priv/repo/migrations/20191014181019_create_markers.exs index c717831ba..13a25e75c 100644 --- a/priv/repo/migrations/20191014181019_create_markers.exs +++ b/priv/repo/migrations/20191014181019_create_markers.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.CreateMarkers do use Ecto.Migration diff --git a/priv/repo/migrations/20191017225002_drop_websub_tables.exs b/priv/repo/migrations/20191017225002_drop_websub_tables.exs index 4cf67a59c..83eefda8f 100644 --- a/priv/repo/migrations/20191017225002_drop_websub_tables.exs +++ b/priv/repo/migrations/20191017225002_drop_websub_tables.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.DropWebsubTables do use Ecto.Migration diff --git a/priv/repo/migrations/20191025081729_add_move_support_to_users.exs b/priv/repo/migrations/20191025081729_add_move_support_to_users.exs index 580b9eb0f..bfb75c50b 100644 --- a/priv/repo/migrations/20191025081729_add_move_support_to_users.exs +++ b/priv/repo/migrations/20191025081729_add_move_support_to_users.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddMoveSupportToUsers do use Ecto.Migration diff --git a/priv/repo/migrations/20191025143434_add_defaults_to_tables.exs b/priv/repo/migrations/20191025143434_add_defaults_to_tables.exs index a5bc82335..b2ba103a1 100644 --- a/priv/repo/migrations/20191025143434_add_defaults_to_tables.exs +++ b/priv/repo/migrations/20191025143434_add_defaults_to_tables.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddDefaultsToTables do use Ecto.Migration diff --git a/priv/repo/migrations/20191026190317_set_not_null_for_activities.exs b/priv/repo/migrations/20191026190317_set_not_null_for_activities.exs index 9b66f3cff..6403840c1 100644 --- a/priv/repo/migrations/20191026190317_set_not_null_for_activities.exs +++ b/priv/repo/migrations/20191026190317_set_not_null_for_activities.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.SetNotNullForActivities do use Ecto.Migration diff --git a/priv/repo/migrations/20191026190415_set_not_null_for_activity_expirations.exs b/priv/repo/migrations/20191026190415_set_not_null_for_activity_expirations.exs index e41c69e4c..b15e51cdb 100644 --- a/priv/repo/migrations/20191026190415_set_not_null_for_activity_expirations.exs +++ b/priv/repo/migrations/20191026190415_set_not_null_for_activity_expirations.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.SetNotNullForActivityExpirations do use Ecto.Migration diff --git a/priv/repo/migrations/20191026190500_set_not_null_for_apps.exs b/priv/repo/migrations/20191026190500_set_not_null_for_apps.exs index a6a44ddfe..d43f185ae 100644 --- a/priv/repo/migrations/20191026190500_set_not_null_for_apps.exs +++ b/priv/repo/migrations/20191026190500_set_not_null_for_apps.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.SetNotNullForApps do use Ecto.Migration diff --git a/priv/repo/migrations/20191026190533_set_not_null_for_bookmarks.exs b/priv/repo/migrations/20191026190533_set_not_null_for_bookmarks.exs index 5f3224003..bf193dcc6 100644 --- a/priv/repo/migrations/20191026190533_set_not_null_for_bookmarks.exs +++ b/priv/repo/migrations/20191026190533_set_not_null_for_bookmarks.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.SetNotNullForBookmarks do use Ecto.Migration diff --git a/priv/repo/migrations/20191026190622_set_not_null_for_config.exs b/priv/repo/migrations/20191026190622_set_not_null_for_config.exs index 204272442..780697817 100644 --- a/priv/repo/migrations/20191026190622_set_not_null_for_config.exs +++ b/priv/repo/migrations/20191026190622_set_not_null_for_config.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.SetNotNullForConfig do use Ecto.Migration diff --git a/priv/repo/migrations/20191026190712_set_not_null_for_conversation_participation_recipient_ships.exs b/priv/repo/migrations/20191026190712_set_not_null_for_conversation_participation_recipient_ships.exs index a5ab1d3c9..a01291f89 100644 --- a/priv/repo/migrations/20191026190712_set_not_null_for_conversation_participation_recipient_ships.exs +++ b/priv/repo/migrations/20191026190712_set_not_null_for_conversation_participation_recipient_ships.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.SetNotNullForConversationParticipationRecipientShips do use Ecto.Migration diff --git a/priv/repo/migrations/20191026190759_set_not_null_for_conversation_participations.exs b/priv/repo/migrations/20191026190759_set_not_null_for_conversation_participations.exs index cabb1f29f..fe14eae7b 100644 --- a/priv/repo/migrations/20191026190759_set_not_null_for_conversation_participations.exs +++ b/priv/repo/migrations/20191026190759_set_not_null_for_conversation_participations.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.SetNotNullForConversationParticipations do use Ecto.Migration diff --git a/priv/repo/migrations/20191026190841_set_not_null_for_filters.exs b/priv/repo/migrations/20191026190841_set_not_null_for_filters.exs index 52d7e687a..9efa2f934 100644 --- a/priv/repo/migrations/20191026190841_set_not_null_for_filters.exs +++ b/priv/repo/migrations/20191026190841_set_not_null_for_filters.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.SetNotNullForFilters do use Ecto.Migration diff --git a/priv/repo/migrations/20191026191023_set_not_null_for_instances.exs b/priv/repo/migrations/20191026191023_set_not_null_for_instances.exs index 4c2560da5..955b774e2 100644 --- a/priv/repo/migrations/20191026191023_set_not_null_for_instances.exs +++ b/priv/repo/migrations/20191026191023_set_not_null_for_instances.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.SetNotNullForInstances do use Ecto.Migration diff --git a/priv/repo/migrations/20191026191100_set_not_null_for_lists.exs b/priv/repo/migrations/20191026191100_set_not_null_for_lists.exs index 40b8b136a..f9f7ef682 100644 --- a/priv/repo/migrations/20191026191100_set_not_null_for_lists.exs +++ b/priv/repo/migrations/20191026191100_set_not_null_for_lists.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.SetNotNullForLists do use Ecto.Migration diff --git a/priv/repo/migrations/20191026191134_set_not_null_for_markers.exs b/priv/repo/migrations/20191026191134_set_not_null_for_markers.exs index 7d7b73e7b..ac2d0a542 100644 --- a/priv/repo/migrations/20191026191134_set_not_null_for_markers.exs +++ b/priv/repo/migrations/20191026191134_set_not_null_for_markers.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.SetNotNullForMarkers do use Ecto.Migration diff --git a/priv/repo/migrations/20191026191218_set_not_null_for_moderation_log.exs b/priv/repo/migrations/20191026191218_set_not_null_for_moderation_log.exs index 7238ca7f5..073945499 100644 --- a/priv/repo/migrations/20191026191218_set_not_null_for_moderation_log.exs +++ b/priv/repo/migrations/20191026191218_set_not_null_for_moderation_log.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.SetNotNullForModerationLog do use Ecto.Migration diff --git a/priv/repo/migrations/20191026191249_set_not_null_for_notifications.exs b/priv/repo/migrations/20191026191249_set_not_null_for_notifications.exs index 7e2976bab..8538426ec 100644 --- a/priv/repo/migrations/20191026191249_set_not_null_for_notifications.exs +++ b/priv/repo/migrations/20191026191249_set_not_null_for_notifications.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.SetNotNullForNotifications do use Ecto.Migration diff --git a/priv/repo/migrations/20191026191328_set_not_null_for_oauth_authorizations.exs b/priv/repo/migrations/20191026191328_set_not_null_for_oauth_authorizations.exs index bc6b36e69..a7b301540 100644 --- a/priv/repo/migrations/20191026191328_set_not_null_for_oauth_authorizations.exs +++ b/priv/repo/migrations/20191026191328_set_not_null_for_oauth_authorizations.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.SetNotNullForOauthAuthorizations do use Ecto.Migration diff --git a/priv/repo/migrations/20191026191401_set_not_null_for_oauth_tokens.exs b/priv/repo/migrations/20191026191401_set_not_null_for_oauth_tokens.exs index fe67db8cc..2cd35cc07 100644 --- a/priv/repo/migrations/20191026191401_set_not_null_for_oauth_tokens.exs +++ b/priv/repo/migrations/20191026191401_set_not_null_for_oauth_tokens.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.SetNotNullForOauthTokens do use Ecto.Migration diff --git a/priv/repo/migrations/20191026191442_set_not_null_for_objects.exs b/priv/repo/migrations/20191026191442_set_not_null_for_objects.exs index 59e89d6da..24c791ce7 100644 --- a/priv/repo/migrations/20191026191442_set_not_null_for_objects.exs +++ b/priv/repo/migrations/20191026191442_set_not_null_for_objects.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.SetNotNullForObjects do use Ecto.Migration diff --git a/priv/repo/migrations/20191026191524_set_not_null_for_password_reset_tokens.exs b/priv/repo/migrations/20191026191524_set_not_null_for_password_reset_tokens.exs index 51efadbd3..2d058a715 100644 --- a/priv/repo/migrations/20191026191524_set_not_null_for_password_reset_tokens.exs +++ b/priv/repo/migrations/20191026191524_set_not_null_for_password_reset_tokens.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.SetNotNullForPasswordResetTokens do use Ecto.Migration diff --git a/priv/repo/migrations/20191026191603_set_not_null_for_push_subscriptions.exs b/priv/repo/migrations/20191026191603_set_not_null_for_push_subscriptions.exs index 0f3a73067..4692c61c8 100644 --- a/priv/repo/migrations/20191026191603_set_not_null_for_push_subscriptions.exs +++ b/priv/repo/migrations/20191026191603_set_not_null_for_push_subscriptions.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.SetNotNullForPushSubscriptions do use Ecto.Migration diff --git a/priv/repo/migrations/20191026191635_set_not_null_for_registrations.exs b/priv/repo/migrations/20191026191635_set_not_null_for_registrations.exs index ddfbf4c5e..a517fdc0b 100644 --- a/priv/repo/migrations/20191026191635_set_not_null_for_registrations.exs +++ b/priv/repo/migrations/20191026191635_set_not_null_for_registrations.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.SetNotNullForRegistrations do use Ecto.Migration diff --git a/priv/repo/migrations/20191026191711_set_not_null_for_scheduled_activities.exs b/priv/repo/migrations/20191026191711_set_not_null_for_scheduled_activities.exs index f1830c8c3..5d70dcf82 100644 --- a/priv/repo/migrations/20191026191711_set_not_null_for_scheduled_activities.exs +++ b/priv/repo/migrations/20191026191711_set_not_null_for_scheduled_activities.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.SetNotNullForScheduledActivities do use Ecto.Migration diff --git a/priv/repo/migrations/20191026191753_set_not_null_for_thread_mutes.exs b/priv/repo/migrations/20191026191753_set_not_null_for_thread_mutes.exs index daa7ce314..f6b470aec 100644 --- a/priv/repo/migrations/20191026191753_set_not_null_for_thread_mutes.exs +++ b/priv/repo/migrations/20191026191753_set_not_null_for_thread_mutes.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.SetNotNullForThreadMutes do use Ecto.Migration diff --git a/priv/repo/migrations/20191026191826_set_not_null_for_user_invite_tokens.exs b/priv/repo/migrations/20191026191826_set_not_null_for_user_invite_tokens.exs index 836544f7f..e8e5dc4e7 100644 --- a/priv/repo/migrations/20191026191826_set_not_null_for_user_invite_tokens.exs +++ b/priv/repo/migrations/20191026191826_set_not_null_for_user_invite_tokens.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.SetNotNullForUserInviteTokens do use Ecto.Migration diff --git a/priv/repo/migrations/20191026191910_set_not_null_for_users.exs b/priv/repo/migrations/20191026191910_set_not_null_for_users.exs index 9d8d0ccf8..1c116ad8a 100644 --- a/priv/repo/migrations/20191026191910_set_not_null_for_users.exs +++ b/priv/repo/migrations/20191026191910_set_not_null_for_users.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.SetNotNullForUsers do use Ecto.Migration diff --git a/priv/repo/migrations/20191029101340_migrate_missing_follow_requests.exs b/priv/repo/migrations/20191029101340_migrate_missing_follow_requests.exs index 90b18efc8..f24568acd 100644 --- a/priv/repo/migrations/20191029101340_migrate_missing_follow_requests.exs +++ b/priv/repo/migrations/20191029101340_migrate_missing_follow_requests.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.MigrateMissingFollowingRelationships do use Ecto.Migration diff --git a/priv/repo/migrations/20191029172832_fix_blocked_follows.exs b/priv/repo/migrations/20191029172832_fix_blocked_follows.exs index 71f8f1330..a8d1d7270 100644 --- a/priv/repo/migrations/20191029172832_fix_blocked_follows.exs +++ b/priv/repo/migrations/20191029172832_fix_blocked_follows.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.FixBlockedFollows do use Ecto.Migration diff --git a/priv/repo/migrations/20191104133100_set_visible_service_actors.exs b/priv/repo/migrations/20191104133100_set_visible_service_actors.exs index 62907093c..0b35fa438 100644 --- a/priv/repo/migrations/20191104133100_set_visible_service_actors.exs +++ b/priv/repo/migrations/20191104133100_set_visible_service_actors.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.SetVisibleServiceActors do use Ecto.Migration import Ecto.Query diff --git a/priv/repo/migrations/20191118084425_create_user_relationships.exs b/priv/repo/migrations/20191118084425_create_user_relationships.exs index c281f887d..04268082d 100644 --- a/priv/repo/migrations/20191118084425_create_user_relationships.exs +++ b/priv/repo/migrations/20191118084425_create_user_relationships.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.CreateUserRelationships do use Ecto.Migration diff --git a/priv/repo/migrations/20191118084500_data_migration_populate_user_relationships.exs b/priv/repo/migrations/20191118084500_data_migration_populate_user_relationships.exs index 990e9f3b8..571a75160 100644 --- a/priv/repo/migrations/20191118084500_data_migration_populate_user_relationships.exs +++ b/priv/repo/migrations/20191118084500_data_migration_populate_user_relationships.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.DataMigrationPopulateUserRelationships do use Ecto.Migration diff --git a/priv/repo/migrations/20191123030554_add_activitypub_actor_type.exs b/priv/repo/migrations/20191123030554_add_activitypub_actor_type.exs index 76d3b32c4..02c327608 100644 --- a/priv/repo/migrations/20191123030554_add_activitypub_actor_type.exs +++ b/priv/repo/migrations/20191123030554_add_activitypub_actor_type.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddActivitypubActorType do use Ecto.Migration diff --git a/priv/repo/migrations/20191123103423_remove_info_from_users.exs b/priv/repo/migrations/20191123103423_remove_info_from_users.exs index b251255ea..32b982cc9 100644 --- a/priv/repo/migrations/20191123103423_remove_info_from_users.exs +++ b/priv/repo/migrations/20191123103423_remove_info_from_users.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.RemoveInfoFromUsers do use Ecto.Migration diff --git a/priv/repo/migrations/20191128153944_fix_missing_following_count.exs b/priv/repo/migrations/20191128153944_fix_missing_following_count.exs index 3236de7a4..b305ebc9a 100644 --- a/priv/repo/migrations/20191128153944_fix_missing_following_count.exs +++ b/priv/repo/migrations/20191128153944_fix_missing_following_count.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.FixMissingFollowingCount do use Ecto.Migration diff --git a/priv/repo/migrations/20191203043610_create_report_notes.exs b/priv/repo/migrations/20191203043610_create_report_notes.exs index a4f8c096d..7e193f4a4 100644 --- a/priv/repo/migrations/20191203043610_create_report_notes.exs +++ b/priv/repo/migrations/20191203043610_create_report_notes.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.CreateReportNotes do use Ecto.Migration diff --git a/priv/repo/migrations/20191220174645_add_scopes_to_pleroma_feo_auth_records.exs b/priv/repo/migrations/20191220174645_add_scopes_to_pleroma_feo_auth_records.exs index 6b160ad16..e99d51c26 100644 --- a/priv/repo/migrations/20191220174645_add_scopes_to_pleroma_feo_auth_records.exs +++ b/priv/repo/migrations/20191220174645_add_scopes_to_pleroma_feo_auth_records.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddScopesToPleromaFEOAuthRecords do use Ecto.Migration diff --git a/priv/repo/migrations/20200109123126_add_counter_cache_table.exs b/priv/repo/migrations/20200109123126_add_counter_cache_table.exs index df9e21193..368bc9874 100644 --- a/priv/repo/migrations/20200109123126_add_counter_cache_table.exs +++ b/priv/repo/migrations/20200109123126_add_counter_cache_table.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddCounterCacheTable do use Ecto.Migration diff --git a/priv/repo/migrations/20200227122417_add_trusted_to_apps.exs b/priv/repo/migrations/20200227122417_add_trusted_to_apps.exs index 4e2a62af0..8e61871a6 100644 --- a/priv/repo/migrations/20200227122417_add_trusted_to_apps.exs +++ b/priv/repo/migrations/20200227122417_add_trusted_to_apps.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddTrustedToApps do use Ecto.Migration diff --git a/priv/repo/migrations/20200307103755_fix_moderation_log_subjects.exs b/priv/repo/migrations/20200307103755_fix_moderation_log_subjects.exs index d1c8539e1..986ab6cba 100644 --- a/priv/repo/migrations/20200307103755_fix_moderation_log_subjects.exs +++ b/priv/repo/migrations/20200307103755_fix_moderation_log_subjects.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.FixModerationLogSubjects do use Ecto.Migration diff --git a/priv/repo/migrations/20200309123730_create_chats.exs b/priv/repo/migrations/20200309123730_create_chats.exs index 715d798ea..f7214bfe6 100644 --- a/priv/repo/migrations/20200309123730_create_chats.exs +++ b/priv/repo/migrations/20200309123730_create_chats.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.CreateChats do use Ecto.Migration diff --git a/priv/repo/migrations/20200314123607_config_remove_fetch_initial_posts.exs b/priv/repo/migrations/20200314123607_config_remove_fetch_initial_posts.exs index 392f531e8..a0930c1c4 100644 --- a/priv/repo/migrations/20200314123607_config_remove_fetch_initial_posts.exs +++ b/priv/repo/migrations/20200314123607_config_remove_fetch_initial_posts.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.ConfigRemoveFetchInitialPosts do use Ecto.Migration diff --git a/priv/repo/migrations/20200315125756_delete_fetch_initial_posts_jobs.exs b/priv/repo/migrations/20200315125756_delete_fetch_initial_posts_jobs.exs index 5b8e3ab91..f145d2d25 100644 --- a/priv/repo/migrations/20200315125756_delete_fetch_initial_posts_jobs.exs +++ b/priv/repo/migrations/20200315125756_delete_fetch_initial_posts_jobs.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.DeleteFetchInitialPostsJobs do use Ecto.Migration diff --git a/priv/repo/migrations/20200322174133_user_raw_bio.exs b/priv/repo/migrations/20200322174133_user_raw_bio.exs index ddf9be4f5..58d39b0ae 100644 --- a/priv/repo/migrations/20200322174133_user_raw_bio.exs +++ b/priv/repo/migrations/20200322174133_user_raw_bio.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.UserRawBio do use Ecto.Migration diff --git a/priv/repo/migrations/20200323122421_mrf_config_move_from_instance_namespace.exs b/priv/repo/migrations/20200323122421_mrf_config_move_from_instance_namespace.exs index ef36c4eb7..9d8926ad5 100644 --- a/priv/repo/migrations/20200323122421_mrf_config_move_from_instance_namespace.exs +++ b/priv/repo/migrations/20200323122421_mrf_config_move_from_instance_namespace.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.MrfConfigMoveFromInstanceNamespace do use Ecto.Migration diff --git a/priv/repo/migrations/20200328124805_change_following_relationships_state_to_integer.exs b/priv/repo/migrations/20200328124805_change_following_relationships_state_to_integer.exs index 2b0820f3f..7729f8a9f 100644 --- a/priv/repo/migrations/20200328124805_change_following_relationships_state_to_integer.exs +++ b/priv/repo/migrations/20200328124805_change_following_relationships_state_to_integer.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.ChangeFollowingRelationshipsStateToInteger do use Ecto.Migration diff --git a/priv/repo/migrations/20200328130139_add_following_relationships_following_id_index.exs b/priv/repo/migrations/20200328130139_add_following_relationships_following_id_index.exs index 884832f84..fcf0e31bc 100644 --- a/priv/repo/migrations/20200328130139_add_following_relationships_following_id_index.exs +++ b/priv/repo/migrations/20200328130139_add_following_relationships_following_id_index.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddFollowingRelationshipsFollowingIdIndex do use Ecto.Migration diff --git a/priv/repo/migrations/20200328193433_populate_user_raw_bio.exs b/priv/repo/migrations/20200328193433_populate_user_raw_bio.exs index cb35db3f5..5cf0f4725 100644 --- a/priv/repo/migrations/20200328193433_populate_user_raw_bio.exs +++ b/priv/repo/migrations/20200328193433_populate_user_raw_bio.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.PopulateUserRawBio do use Ecto.Migration import Ecto.Query diff --git a/priv/repo/migrations/20200401030751_users_add_public_key.exs b/priv/repo/migrations/20200401030751_users_add_public_key.exs index 04e5ad1e2..91ff371b1 100644 --- a/priv/repo/migrations/20200401030751_users_add_public_key.exs +++ b/priv/repo/migrations/20200401030751_users_add_public_key.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.UsersAddPublicKey do use Ecto.Migration diff --git a/priv/repo/migrations/20200401072456_users_add_inboxes.exs b/priv/repo/migrations/20200401072456_users_add_inboxes.exs index 0947f0ab2..41849bfb9 100644 --- a/priv/repo/migrations/20200401072456_users_add_inboxes.exs +++ b/priv/repo/migrations/20200401072456_users_add_inboxes.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.UsersAddInboxes do use Ecto.Migration diff --git a/priv/repo/migrations/20200402063221_update_oban_jobs_table.exs b/priv/repo/migrations/20200402063221_update_oban_jobs_table.exs index ca6856798..731a21cc1 100644 --- a/priv/repo/migrations/20200402063221_update_oban_jobs_table.exs +++ b/priv/repo/migrations/20200402063221_update_oban_jobs_table.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.UpdateObanJobsTable do use Ecto.Migration diff --git a/priv/repo/migrations/20200406100225_users_add_emoji.exs b/priv/repo/migrations/20200406100225_users_add_emoji.exs index f248108de..2e355d411 100644 --- a/priv/repo/migrations/20200406100225_users_add_emoji.exs +++ b/priv/repo/migrations/20200406100225_users_add_emoji.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.UsersPopulateEmoji do use Ecto.Migration diff --git a/priv/repo/migrations/20200406105422_users_remove_source_data.exs b/priv/repo/migrations/20200406105422_users_remove_source_data.exs index 9812d480f..3ba362b44 100644 --- a/priv/repo/migrations/20200406105422_users_remove_source_data.exs +++ b/priv/repo/migrations/20200406105422_users_remove_source_data.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.UsersRemoveSourceData do use Ecto.Migration diff --git a/priv/repo/migrations/20200415181818_update_markers.exs b/priv/repo/migrations/20200415181818_update_markers.exs index bb9d8e860..8e9756098 100644 --- a/priv/repo/migrations/20200415181818_update_markers.exs +++ b/priv/repo/migrations/20200415181818_update_markers.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.UpdateMarkers do use Ecto.Migration import Ecto.Query diff --git a/priv/repo/migrations/20200428221338_insert_skeletons_for_deleted_users.exs b/priv/repo/migrations/20200428221338_insert_skeletons_for_deleted_users.exs index 81f941198..6e5c9489c 100644 --- a/priv/repo/migrations/20200428221338_insert_skeletons_for_deleted_users.exs +++ b/priv/repo/migrations/20200428221338_insert_skeletons_for_deleted_users.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.InsertSkeletonsForDeletedUsers do use Ecto.Migration diff --git a/priv/repo/migrations/20200505072231_remove_magic_key_field.exs b/priv/repo/migrations/20200505072231_remove_magic_key_field.exs index 2635e671b..d36946c6e 100644 --- a/priv/repo/migrations/20200505072231_remove_magic_key_field.exs +++ b/priv/repo/migrations/20200505072231_remove_magic_key_field.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.RemoveMagicKeyField do use Ecto.Migration diff --git a/priv/repo/migrations/20200508092434_update_counter_cache_table.exs b/priv/repo/migrations/20200508092434_update_counter_cache_table.exs index 738344868..db4f25687 100644 --- a/priv/repo/migrations/20200508092434_update_counter_cache_table.exs +++ b/priv/repo/migrations/20200508092434_update_counter_cache_table.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.UpdateCounterCacheTable do use Ecto.Migration diff --git a/priv/repo/migrations/20200520155351_add_recipients_contain_blocked_domains_function.exs b/priv/repo/migrations/20200520155351_add_recipients_contain_blocked_domains_function.exs index 14e873125..b63ade558 100644 --- a/priv/repo/migrations/20200520155351_add_recipients_contain_blocked_domains_function.exs +++ b/priv/repo/migrations/20200520155351_add_recipients_contain_blocked_domains_function.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddRecipientsContainBlockedDomainsFunction do use Ecto.Migration @disable_ddl_transaction true diff --git a/priv/repo/migrations/20200526144426_add_apps_indexes.exs b/priv/repo/migrations/20200526144426_add_apps_indexes.exs index 5cb6a0473..ae0541859 100644 --- a/priv/repo/migrations/20200526144426_add_apps_indexes.exs +++ b/priv/repo/migrations/20200526144426_add_apps_indexes.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddAppsIndexes do use Ecto.Migration diff --git a/priv/repo/migrations/20200527104138_change_notification_user_index.exs b/priv/repo/migrations/20200527104138_change_notification_user_index.exs index 4dcfe6de9..3c8cb1a3a 100644 --- a/priv/repo/migrations/20200527104138_change_notification_user_index.exs +++ b/priv/repo/migrations/20200527104138_change_notification_user_index.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.ChangeNotificationUserIndex do use Ecto.Migration diff --git a/priv/repo/migrations/20200527163635_delete_notifications_from_invisible_users.exs b/priv/repo/migrations/20200527163635_delete_notifications_from_invisible_users.exs index 9e95a8111..ac213c78e 100644 --- a/priv/repo/migrations/20200527163635_delete_notifications_from_invisible_users.exs +++ b/priv/repo/migrations/20200527163635_delete_notifications_from_invisible_users.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.DeleteNotificationsFromInvisibleUsers do use Ecto.Migration diff --git a/priv/repo/migrations/20200602094828_add_type_to_notifications.exs b/priv/repo/migrations/20200602094828_add_type_to_notifications.exs index 19c733628..b02f1a827 100644 --- a/priv/repo/migrations/20200602094828_add_type_to_notifications.exs +++ b/priv/repo/migrations/20200602094828_add_type_to_notifications.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddTypeToNotifications do use Ecto.Migration diff --git a/priv/repo/migrations/20200602125218_backfill_notification_types.exs b/priv/repo/migrations/20200602125218_backfill_notification_types.exs index 996d721ee..4b03ca12e 100644 --- a/priv/repo/migrations/20200602125218_backfill_notification_types.exs +++ b/priv/repo/migrations/20200602125218_backfill_notification_types.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.BackfillNotificationTypes do use Ecto.Migration diff --git a/priv/repo/migrations/20200602150528_create_chat_message_reference.exs b/priv/repo/migrations/20200602150528_create_chat_message_reference.exs index 5e57cddcf..6df314910 100644 --- a/priv/repo/migrations/20200602150528_create_chat_message_reference.exs +++ b/priv/repo/migrations/20200602150528_create_chat_message_reference.exs @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Repo.Migrations.CreateChatMessageReference do diff --git a/priv/repo/migrations/20200603105113_add_unique_index_to_chat_message_references.exs b/priv/repo/migrations/20200603105113_add_unique_index_to_chat_message_references.exs index fdf85132e..ea4f19aec 100644 --- a/priv/repo/migrations/20200603105113_add_unique_index_to_chat_message_references.exs +++ b/priv/repo/migrations/20200603105113_add_unique_index_to_chat_message_references.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddUniqueIndexToChatMessageReferences do use Ecto.Migration diff --git a/priv/repo/migrations/20200603120448_remove_unread_from_chats.exs b/priv/repo/migrations/20200603120448_remove_unread_from_chats.exs index 6322137d5..074ea777b 100644 --- a/priv/repo/migrations/20200603120448_remove_unread_from_chats.exs +++ b/priv/repo/migrations/20200603120448_remove_unread_from_chats.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.RemoveUnreadFromChats do use Ecto.Migration diff --git a/priv/repo/migrations/20200603122732_add_seen_index_to_chat_message_references.exs b/priv/repo/migrations/20200603122732_add_seen_index_to_chat_message_references.exs index a5065d612..68efb9cd9 100644 --- a/priv/repo/migrations/20200603122732_add_seen_index_to_chat_message_references.exs +++ b/priv/repo/migrations/20200603122732_add_seen_index_to_chat_message_references.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddSeenIndexToChatMessageReferences do use Ecto.Migration diff --git a/priv/repo/migrations/20200604150318_migrate_seen_to_unread_in_chat_message_references.exs b/priv/repo/migrations/20200604150318_migrate_seen_to_unread_in_chat_message_references.exs index fd6bc7bc7..6ffc6181e 100644 --- a/priv/repo/migrations/20200604150318_migrate_seen_to_unread_in_chat_message_references.exs +++ b/priv/repo/migrations/20200604150318_migrate_seen_to_unread_in_chat_message_references.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.MigrateSeenToUnreadInChatMessageReferences do use Ecto.Migration diff --git a/priv/repo/migrations/20200606105430_change_type_to_enum_for_notifications.exs b/priv/repo/migrations/20200606105430_change_type_to_enum_for_notifications.exs index 9ea34436b..ac8914993 100644 --- a/priv/repo/migrations/20200606105430_change_type_to_enum_for_notifications.exs +++ b/priv/repo/migrations/20200606105430_change_type_to_enum_for_notifications.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.ChangeTypeToEnumForNotifications do use Ecto.Migration diff --git a/priv/repo/migrations/20200607112923_change_chat_id_to_flake.exs b/priv/repo/migrations/20200607112923_change_chat_id_to_flake.exs index f14e269ca..bde9bba22 100644 --- a/priv/repo/migrations/20200607112923_change_chat_id_to_flake.exs +++ b/priv/repo/migrations/20200607112923_change_chat_id_to_flake.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.ChangeChatIdToFlake do use Ecto.Migration diff --git a/priv/repo/migrations/20200626163359_rename_notification_privacy_option.exs b/priv/repo/migrations/20200626163359_rename_notification_privacy_option.exs index 06d7f7272..dfe22191b 100644 --- a/priv/repo/migrations/20200626163359_rename_notification_privacy_option.exs +++ b/priv/repo/migrations/20200626163359_rename_notification_privacy_option.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.RenameNotificationPrivacyOption do use Ecto.Migration diff --git a/priv/repo/migrations/20200630162024_rename_user_settings_col.exs b/priv/repo/migrations/20200630162024_rename_user_settings_col.exs index 2355eb681..7393a015a 100644 --- a/priv/repo/migrations/20200630162024_rename_user_settings_col.exs +++ b/priv/repo/migrations/20200630162024_rename_user_settings_col.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.RenameUserSettingsCol do use Ecto.Migration diff --git a/priv/repo/migrations/20200703101031_add_chat_acceptance_to_users.exs b/priv/repo/migrations/20200703101031_add_chat_acceptance_to_users.exs index 8dfda89f1..4a372a842 100644 --- a/priv/repo/migrations/20200703101031_add_chat_acceptance_to_users.exs +++ b/priv/repo/migrations/20200703101031_add_chat_acceptance_to_users.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddChatAcceptanceToUsers do use Ecto.Migration diff --git a/priv/repo/migrations/20200706060258_remove_tesla_from_config.exs b/priv/repo/migrations/20200706060258_remove_tesla_from_config.exs index 798687f8a..85ab68487 100644 --- a/priv/repo/migrations/20200706060258_remove_tesla_from_config.exs +++ b/priv/repo/migrations/20200706060258_remove_tesla_from_config.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.RemoveTeslaFromConfig do use Ecto.Migration diff --git a/priv/repo/migrations/20200707112859_instances_add_favicon.exs b/priv/repo/migrations/20200707112859_instances_add_favicon.exs index 5538749dc..6eccad5ff 100644 --- a/priv/repo/migrations/20200707112859_instances_add_favicon.exs +++ b/priv/repo/migrations/20200707112859_instances_add_favicon.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.InstancesAddFavicon do use Ecto.Migration diff --git a/priv/repo/migrations/20200708193702_drop_user_trigram_index.exs b/priv/repo/migrations/20200708193702_drop_user_trigram_index.exs index 94efe323a..c319fefb7 100644 --- a/priv/repo/migrations/20200708193702_drop_user_trigram_index.exs +++ b/priv/repo/migrations/20200708193702_drop_user_trigram_index.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.DropUserTrigramIndex do @moduledoc "Drops unused trigram index on `users` (FTS index is being used instead)" diff --git a/priv/repo/migrations/20200712234852_add_approval_fields_to_users.exs b/priv/repo/migrations/20200712234852_add_approval_fields_to_users.exs index 43f741a5b..38068b528 100644 --- a/priv/repo/migrations/20200712234852_add_approval_fields_to_users.exs +++ b/priv/repo/migrations/20200712234852_add_approval_fields_to_users.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddApprovalFieldsToUsers do use Ecto.Migration diff --git a/priv/repo/migrations/20200714081657_oban_2_0_config_changes.exs b/priv/repo/migrations/20200714081657_oban_2_0_config_changes.exs index c54bb2511..625422d0c 100644 --- a/priv/repo/migrations/20200714081657_oban_2_0_config_changes.exs +++ b/priv/repo/migrations/20200714081657_oban_2_0_config_changes.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Elixir.Pleroma.Repo.Migrations.Oban20ConfigChanges do use Ecto.Migration import Ecto.Query diff --git a/priv/repo/migrations/20200716195806_autolinker_to_linkify.exs b/priv/repo/migrations/20200716195806_autolinker_to_linkify.exs index 570acba84..5c9da2154 100644 --- a/priv/repo/migrations/20200716195806_autolinker_to_linkify.exs +++ b/priv/repo/migrations/20200716195806_autolinker_to_linkify.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AutolinkerToLinkify do use Ecto.Migration alias Pleroma.ConfigDB diff --git a/priv/repo/migrations/20200722185515_fix_malformed_formatter_config.exs b/priv/repo/migrations/20200722185515_fix_malformed_formatter_config.exs index 77b760825..2b0938f03 100644 --- a/priv/repo/migrations/20200722185515_fix_malformed_formatter_config.exs +++ b/priv/repo/migrations/20200722185515_fix_malformed_formatter_config.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.FixMalformedFormatterConfig do use Ecto.Migration alias Pleroma.ConfigDB diff --git a/priv/repo/migrations/20200724133313_move_welcome_settings.exs b/priv/repo/migrations/20200724133313_move_welcome_settings.exs index 323a8fcee..f2defb323 100644 --- a/priv/repo/migrations/20200724133313_move_welcome_settings.exs +++ b/priv/repo/migrations/20200724133313_move_welcome_settings.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.MoveWelcomeSettings do use Ecto.Migration diff --git a/priv/repo/migrations/20200802170532_fix_legacy_tags.exs b/priv/repo/migrations/20200802170532_fix_legacy_tags.exs index ca82fac42..72c62d16c 100644 --- a/priv/repo/migrations/20200802170532_fix_legacy_tags.exs +++ b/priv/repo/migrations/20200802170532_fix_legacy_tags.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + # Fix legacy tags set by AdminFE that don't align with TagPolicy MRF defmodule Pleroma.Repo.Migrations.FixLegacyTags do diff --git a/priv/repo/migrations/20200804180322_remove_nonlocal_expirations.exs b/priv/repo/migrations/20200804180322_remove_nonlocal_expirations.exs index 389935f0d..c8b5433b0 100644 --- a/priv/repo/migrations/20200804180322_remove_nonlocal_expirations.exs +++ b/priv/repo/migrations/20200804180322_remove_nonlocal_expirations.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.RemoveNonlocalExpirations do use Ecto.Migration diff --git a/priv/repo/migrations/20200804183107_add_unique_index_to_app_client_id.exs b/priv/repo/migrations/20200804183107_add_unique_index_to_app_client_id.exs index 83de18096..ee42c4638 100644 --- a/priv/repo/migrations/20200804183107_add_unique_index_to_app_client_id.exs +++ b/priv/repo/migrations/20200804183107_add_unique_index_to_app_client_id.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddUniqueIndexToAppClientId do use Ecto.Migration diff --git a/priv/repo/migrations/20200806175913_rename_instance_chat.exs b/priv/repo/migrations/20200806175913_rename_instance_chat.exs index 31585efe8..47c568db7 100644 --- a/priv/repo/migrations/20200806175913_rename_instance_chat.exs +++ b/priv/repo/migrations/20200806175913_rename_instance_chat.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.RenameInstanceChat do use Ecto.Migration diff --git a/priv/repo/migrations/20200808173046_only_expire_creates.exs b/priv/repo/migrations/20200808173046_only_expire_creates.exs index 9df52956f..5e8fd4eff 100644 --- a/priv/repo/migrations/20200808173046_only_expire_creates.exs +++ b/priv/repo/migrations/20200808173046_only_expire_creates.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.OnlyExpireCreates do use Ecto.Migration diff --git a/priv/repo/migrations/20200811125613_set_defaults_to_user_approval_pending.exs b/priv/repo/migrations/20200811125613_set_defaults_to_user_approval_pending.exs index eec7da03f..38be1a1cb 100644 --- a/priv/repo/migrations/20200811125613_set_defaults_to_user_approval_pending.exs +++ b/priv/repo/migrations/20200811125613_set_defaults_to_user_approval_pending.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.SetDefaultsToUserApprovalPending do use Ecto.Migration diff --git a/priv/repo/migrations/20200811143147_ap_id_not_null.exs b/priv/repo/migrations/20200811143147_ap_id_not_null.exs index df649c7ca..a160daef4 100644 --- a/priv/repo/migrations/20200811143147_ap_id_not_null.exs +++ b/priv/repo/migrations/20200811143147_ap_id_not_null.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.ApIdNotNull do use Ecto.Migration diff --git a/priv/repo/migrations/20200817120935_add_invisible_index_to_users.exs b/priv/repo/migrations/20200817120935_add_invisible_index_to_users.exs index 2417d366e..8132bb01a 100644 --- a/priv/repo/migrations/20200817120935_add_invisible_index_to_users.exs +++ b/priv/repo/migrations/20200817120935_add_invisible_index_to_users.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddInvisibleIndexToUsers do use Ecto.Migration diff --git a/priv/repo/migrations/20200824115541_rename_activity_expiration_setting.exs b/priv/repo/migrations/20200824115541_rename_activity_expiration_setting.exs index 241882ef6..f4a79066c 100644 --- a/priv/repo/migrations/20200824115541_rename_activity_expiration_setting.exs +++ b/priv/repo/migrations/20200824115541_rename_activity_expiration_setting.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.RenameActivityExpirationSetting do use Ecto.Migration diff --git a/priv/repo/migrations/20200825061316_move_activity_expirations_to_oban.exs b/priv/repo/migrations/20200825061316_move_activity_expirations_to_oban.exs index 096ab4ce5..f15876180 100644 --- a/priv/repo/migrations/20200825061316_move_activity_expirations_to_oban.exs +++ b/priv/repo/migrations/20200825061316_move_activity_expirations_to_oban.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.MoveActivityExpirationsToOban do use Ecto.Migration diff --git a/priv/repo/migrations/20200825093037_drop_activity_expirations_table.exs b/priv/repo/migrations/20200825093037_drop_activity_expirations_table.exs index 11c461427..fb3ed6804 100644 --- a/priv/repo/migrations/20200825093037_drop_activity_expirations_table.exs +++ b/priv/repo/migrations/20200825093037_drop_activity_expirations_table.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.DropActivityExpirationsTable do use Ecto.Migration diff --git a/priv/repo/migrations/20200831114918_remove_unread_conversation_count_from_user.exs b/priv/repo/migrations/20200831114918_remove_unread_conversation_count_from_user.exs index b7bdb9166..cf8f80de7 100644 --- a/priv/repo/migrations/20200831114918_remove_unread_conversation_count_from_user.exs +++ b/priv/repo/migrations/20200831114918_remove_unread_conversation_count_from_user.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.RemoveUnreadConversationCountFromUser do use Ecto.Migration import Ecto.Query diff --git a/priv/repo/migrations/20200831115854_add_unread_index_to_conversation_participation.exs b/priv/repo/migrations/20200831115854_add_unread_index_to_conversation_participation.exs index 68771c655..fb4081387 100644 --- a/priv/repo/migrations/20200831115854_add_unread_index_to_conversation_participation.exs +++ b/priv/repo/migrations/20200831115854_add_unread_index_to_conversation_participation.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddUnreadIndexToConversationParticipation do use Ecto.Migration diff --git a/priv/repo/migrations/20200831142509_chat_constraints.exs b/priv/repo/migrations/20200831142509_chat_constraints.exs index 868a40a45..207f3cf18 100644 --- a/priv/repo/migrations/20200831142509_chat_constraints.exs +++ b/priv/repo/migrations/20200831142509_chat_constraints.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.ChatConstraints do use Ecto.Migration diff --git a/priv/repo/migrations/20200831152600_add_pleroma_report_to_enum_for_notifications.exs b/priv/repo/migrations/20200831152600_add_pleroma_report_to_enum_for_notifications.exs index 01fb90459..3c1b16bad 100644 --- a/priv/repo/migrations/20200831152600_add_pleroma_report_to_enum_for_notifications.exs +++ b/priv/repo/migrations/20200831152600_add_pleroma_report_to_enum_for_notifications.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddPleromaReportTypeToEnumForNotifications do use Ecto.Migration diff --git a/priv/repo/migrations/20200831192323_create_backups.exs b/priv/repo/migrations/20200831192323_create_backups.exs index 3ac5889e2..e3102f764 100644 --- a/priv/repo/migrations/20200831192323_create_backups.exs +++ b/priv/repo/migrations/20200831192323_create_backups.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.CreateBackups do use Ecto.Migration diff --git a/priv/repo/migrations/20200901061256_ensure_bio_is_string.exs b/priv/repo/migrations/20200901061256_ensure_bio_is_string.exs index 0e3bb3c81..c614e6fbe 100644 --- a/priv/repo/migrations/20200901061256_ensure_bio_is_string.exs +++ b/priv/repo/migrations/20200901061256_ensure_bio_is_string.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.EnsureBioIsString do use Ecto.Migration diff --git a/priv/repo/migrations/20200901061637_bio_set_not_null.exs b/priv/repo/migrations/20200901061637_bio_set_not_null.exs index e3a67d4e7..eed983c01 100644 --- a/priv/repo/migrations/20200901061637_bio_set_not_null.exs +++ b/priv/repo/migrations/20200901061637_bio_set_not_null.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.BioSetNotNull do use Ecto.Migration diff --git a/priv/repo/migrations/20200905082737_rename_await_up_timeout_in_connections_pool.exs b/priv/repo/migrations/20200905082737_rename_await_up_timeout_in_connections_pool.exs index 22c40663c..08f1e50e8 100644 --- a/priv/repo/migrations/20200905082737_rename_await_up_timeout_in_connections_pool.exs +++ b/priv/repo/migrations/20200905082737_rename_await_up_timeout_in_connections_pool.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.RenameAwaitUpTimeoutInConnectionsPool do use Ecto.Migration diff --git a/priv/repo/migrations/20200905091427_rename_timeout_in_pools.exs b/priv/repo/migrations/20200905091427_rename_timeout_in_pools.exs index bb2f50ecc..026f7956c 100644 --- a/priv/repo/migrations/20200905091427_rename_timeout_in_pools.exs +++ b/priv/repo/migrations/20200905091427_rename_timeout_in_pools.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.RenameTimeoutInPools do use Ecto.Migration diff --git a/priv/repo/migrations/20200906072147_remove_cron_stats_worker_from_oban_config.exs b/priv/repo/migrations/20200906072147_remove_cron_stats_worker_from_oban_config.exs index 022f21dc7..8b6501c4e 100644 --- a/priv/repo/migrations/20200906072147_remove_cron_stats_worker_from_oban_config.exs +++ b/priv/repo/migrations/20200906072147_remove_cron_stats_worker_from_oban_config.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.RemoveCronStatsWorkerFromObanConfig do use Ecto.Migration diff --git a/priv/repo/migrations/20200907084956_remove_cron_clear_oauth_token_worker_from_oban_config.exs b/priv/repo/migrations/20200907084956_remove_cron_clear_oauth_token_worker_from_oban_config.exs index b5a0a0ff6..278bd3331 100644 --- a/priv/repo/migrations/20200907084956_remove_cron_clear_oauth_token_worker_from_oban_config.exs +++ b/priv/repo/migrations/20200907084956_remove_cron_clear_oauth_token_worker_from_oban_config.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.RemoveCronClearOauthTokenWorkerFromObanConfig do use Ecto.Migration diff --git a/priv/repo/migrations/20200907092050_move_tokens_expiration_into_oban.exs b/priv/repo/migrations/20200907092050_move_tokens_expiration_into_oban.exs index 725c5ab0b..c140bc66a 100644 --- a/priv/repo/migrations/20200907092050_move_tokens_expiration_into_oban.exs +++ b/priv/repo/migrations/20200907092050_move_tokens_expiration_into_oban.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.MoveTokensExpirationIntoOban do use Ecto.Migration diff --git a/priv/repo/migrations/20200910113106_remove_managed_config_from_db.exs b/priv/repo/migrations/20200910113106_remove_managed_config_from_db.exs index e27a9ae48..d81f31860 100644 --- a/priv/repo/migrations/20200910113106_remove_managed_config_from_db.exs +++ b/priv/repo/migrations/20200910113106_remove_managed_config_from_db.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.RemoveManagedConfigFromDb do use Ecto.Migration import Ecto.Query diff --git a/priv/repo/migrations/20200911055909_remove_cron_jobs.exs b/priv/repo/migrations/20200911055909_remove_cron_jobs.exs index 33897d128..3885453c2 100644 --- a/priv/repo/migrations/20200911055909_remove_cron_jobs.exs +++ b/priv/repo/migrations/20200911055909_remove_cron_jobs.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.RemoveCronJobs do use Ecto.Migration diff --git a/priv/repo/migrations/20200914105638_delete_notification_without_activity.exs b/priv/repo/migrations/20200914105638_delete_notification_without_activity.exs index 9333fc5a1..9ff4fcff6 100644 --- a/priv/repo/migrations/20200914105638_delete_notification_without_activity.exs +++ b/priv/repo/migrations/20200914105638_delete_notification_without_activity.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.DeleteNotificationWithoutActivity do use Ecto.Migration diff --git a/priv/repo/migrations/20200914105800_add_notification_constraints.exs b/priv/repo/migrations/20200914105800_add_notification_constraints.exs index a65c35fd0..d2f88bc62 100644 --- a/priv/repo/migrations/20200914105800_add_notification_constraints.exs +++ b/priv/repo/migrations/20200914105800_add_notification_constraints.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddNotificationConstraints do use Ecto.Migration diff --git a/priv/repo/migrations/20200915095704_remove_background_jobs.exs b/priv/repo/migrations/20200915095704_remove_background_jobs.exs index 9785bfb8a..0881aa3a0 100644 --- a/priv/repo/migrations/20200915095704_remove_background_jobs.exs +++ b/priv/repo/migrations/20200915095704_remove_background_jobs.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.RemoveBackgroundJobs do use Ecto.Migration diff --git a/priv/repo/migrations/20200919182636_remoteip_plug_rename.exs b/priv/repo/migrations/20200919182636_remoteip_plug_rename.exs index 77c3b6db1..b9a8fd0e1 100644 --- a/priv/repo/migrations/20200919182636_remoteip_plug_rename.exs +++ b/priv/repo/migrations/20200919182636_remoteip_plug_rename.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.RemoteipPlugRename do use Ecto.Migration diff --git a/priv/repo/migrations/20200925065249_make_user_ids_ci.exs b/priv/repo/migrations/20200925065249_make_user_ids_ci.exs index 8ea0f2cf1..dc5cbd4e2 100644 --- a/priv/repo/migrations/20200925065249_make_user_ids_ci.exs +++ b/priv/repo/migrations/20200925065249_make_user_ids_ci.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.MakeUserIdsCI do use Ecto.Migration diff --git a/priv/repo/migrations/20200928145912_revert_citext_change.exs b/priv/repo/migrations/20200928145912_revert_citext_change.exs index 685a98533..98a8dc9fa 100644 --- a/priv/repo/migrations/20200928145912_revert_citext_change.exs +++ b/priv/repo/migrations/20200928145912_revert_citext_change.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.RevertCitextChange do use Ecto.Migration diff --git a/priv/repo/migrations/20200930082320_user_ur_is_index_part_three.exs b/priv/repo/migrations/20200930082320_user_ur_is_index_part_three.exs index 816c6526e..42060caee 100644 --- a/priv/repo/migrations/20200930082320_user_ur_is_index_part_three.exs +++ b/priv/repo/migrations/20200930082320_user_ur_is_index_part_three.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.UserURIsIndexPartThree do use Ecto.Migration diff --git a/priv/repo/migrations/20201005123100_simple_policy_string_to_tuple.exs b/priv/repo/migrations/20201005123100_simple_policy_string_to_tuple.exs index 77a4a7311..4c6b09da6 100644 --- a/priv/repo/migrations/20201005123100_simple_policy_string_to_tuple.exs +++ b/priv/repo/migrations/20201005123100_simple_policy_string_to_tuple.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.SimplePolicyStringToTuple do use Ecto.Migration diff --git a/priv/repo/migrations/20201005124600_quarantained_policy_string_to_tuple.exs b/priv/repo/migrations/20201005124600_quarantained_policy_string_to_tuple.exs index b924e4638..9478227bc 100644 --- a/priv/repo/migrations/20201005124600_quarantained_policy_string_to_tuple.exs +++ b/priv/repo/migrations/20201005124600_quarantained_policy_string_to_tuple.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.QuarantainedStringToTuple do use Ecto.Migration diff --git a/priv/repo/migrations/20201005132900_transparency_exclusions_string_to_tuple.exs b/priv/repo/migrations/20201005132900_transparency_exclusions_string_to_tuple.exs index 6516083a7..53b73ea2f 100644 --- a/priv/repo/migrations/20201005132900_transparency_exclusions_string_to_tuple.exs +++ b/priv/repo/migrations/20201005132900_transparency_exclusions_string_to_tuple.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.TransparencyExclusionsStringToTuple do use Ecto.Migration diff --git a/priv/repo/migrations/20201012173004_refactor_deactivated_user_field.exs b/priv/repo/migrations/20201012173004_refactor_deactivated_user_field.exs index 58b75b436..55adafd2a 100644 --- a/priv/repo/migrations/20201012173004_refactor_deactivated_user_field.exs +++ b/priv/repo/migrations/20201012173004_refactor_deactivated_user_field.exs @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Repo.Migrations.RefactorDeactivatedUserField do diff --git a/priv/repo/migrations/20201013141127_refactor_locked_user_field.exs b/priv/repo/migrations/20201013141127_refactor_locked_user_field.exs index 3fb643372..473287f94 100644 --- a/priv/repo/migrations/20201013141127_refactor_locked_user_field.exs +++ b/priv/repo/migrations/20201013141127_refactor_locked_user_field.exs @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Repo.Migrations.RefactorLockedUserField do diff --git a/priv/repo/migrations/20201013144052_refactor_discoverable_user_field.exs b/priv/repo/migrations/20201013144052_refactor_discoverable_user_field.exs index 6d6738e90..aeb6f24aa 100644 --- a/priv/repo/migrations/20201013144052_refactor_discoverable_user_field.exs +++ b/priv/repo/migrations/20201013144052_refactor_discoverable_user_field.exs @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Repo.Migrations.RefactorDiscoverableUserField do diff --git a/priv/repo/migrations/20201013184200_refactor_confirmation_pending_user_field.exs b/priv/repo/migrations/20201013184200_refactor_confirmation_pending_user_field.exs index d0dc42827..922d75430 100644 --- a/priv/repo/migrations/20201013184200_refactor_confirmation_pending_user_field.exs +++ b/priv/repo/migrations/20201013184200_refactor_confirmation_pending_user_field.exs @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Repo.Migrations.RefactorConfirmationPendingUserField do diff --git a/priv/repo/migrations/20201016205220_refactor_approval_pending_user_field.exs b/priv/repo/migrations/20201016205220_refactor_approval_pending_user_field.exs index 944dcf8de..f49f60067 100644 --- a/priv/repo/migrations/20201016205220_refactor_approval_pending_user_field.exs +++ b/priv/repo/migrations/20201016205220_refactor_approval_pending_user_field.exs @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Repo.Migrations.RefactorApprovalPendingUserField do diff --git a/priv/repo/migrations/20201113060459_remove_purge_expired_activity_worker_from_oban_config.exs b/priv/repo/migrations/20201113060459_remove_purge_expired_activity_worker_from_oban_config.exs index fe31f4442..4fbefd296 100644 --- a/priv/repo/migrations/20201113060459_remove_purge_expired_activity_worker_from_oban_config.exs +++ b/priv/repo/migrations/20201113060459_remove_purge_expired_activity_worker_from_oban_config.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.RemovePurgeExpiredActivityWorkerFromObanConfig do use Ecto.Migration diff --git a/priv/repo/migrations/20201217172858_data_migration_prolong_o_auth_tokens_valid_until.exs b/priv/repo/migrations/20201217172858_data_migration_prolong_o_auth_tokens_valid_until.exs index 560cc7447..0c7773a58 100644 --- a/priv/repo/migrations/20201217172858_data_migration_prolong_o_auth_tokens_valid_until.exs +++ b/priv/repo/migrations/20201217172858_data_migration_prolong_o_auth_tokens_valid_until.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.DataMigrationProlongOAuthTokensValidUntil do use Ecto.Migration diff --git a/priv/repo/migrations/20201221202251_create_hashtags.exs b/priv/repo/migrations/20201221202251_create_hashtags.exs index 8d2e9ae66..93bcfde53 100644 --- a/priv/repo/migrations/20201221202251_create_hashtags.exs +++ b/priv/repo/migrations/20201221202251_create_hashtags.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.CreateHashtags do use Ecto.Migration diff --git a/priv/repo/migrations/20201221202252_remove_data_from_hashtags.exs b/priv/repo/migrations/20201221202252_remove_data_from_hashtags.exs index 0442c3b87..e3d9edef5 100644 --- a/priv/repo/migrations/20201221202252_remove_data_from_hashtags.exs +++ b/priv/repo/migrations/20201221202252_remove_data_from_hashtags.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.RemoveDataFromHashtags do use Ecto.Migration diff --git a/priv/repo/migrations/20201221203824_create_hashtags_objects.exs b/priv/repo/migrations/20201221203824_create_hashtags_objects.exs index 581f32b3c..34049549f 100644 --- a/priv/repo/migrations/20201221203824_create_hashtags_objects.exs +++ b/priv/repo/migrations/20201221203824_create_hashtags_objects.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.CreateHashtagsObjects do use Ecto.Migration diff --git a/priv/repo/migrations/20201231185546_confirm_logged_in_users.exs b/priv/repo/migrations/20201231185546_confirm_logged_in_users.exs index b9656c17b..6dc3435ed 100644 --- a/priv/repo/migrations/20201231185546_confirm_logged_in_users.exs +++ b/priv/repo/migrations/20201231185546_confirm_logged_in_users.exs @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Repo.Migrations.ConfirmLoggedInUsers do diff --git a/priv/repo/migrations/20210105195018_create_data_migrations.exs b/priv/repo/migrations/20210105195018_create_data_migrations.exs index 5f2e8d96c..622daf483 100644 --- a/priv/repo/migrations/20210105195018_create_data_migrations.exs +++ b/priv/repo/migrations/20210105195018_create_data_migrations.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.CreateDataMigrations do use Ecto.Migration diff --git a/priv/repo/migrations/20210106183301_data_migration_create_populate_hashtags_table.exs b/priv/repo/migrations/20210106183301_data_migration_create_populate_hashtags_table.exs index cf3cf26a0..f858cca13 100644 --- a/priv/repo/migrations/20210106183301_data_migration_create_populate_hashtags_table.exs +++ b/priv/repo/migrations/20210106183301_data_migration_create_populate_hashtags_table.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.DataMigrationCreatePopulateHashtagsTable do use Ecto.Migration diff --git a/priv/repo/migrations/20210111172254_create_data_migration_failed_ids.exs b/priv/repo/migrations/20210111172254_create_data_migration_failed_ids.exs index 18afa74ac..dda31436c 100644 --- a/priv/repo/migrations/20210111172254_create_data_migration_failed_ids.exs +++ b/priv/repo/migrations/20210111172254_create_data_migration_failed_ids.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.CreateDataMigrationFailedIds do use Ecto.Migration diff --git a/priv/repo/migrations/20210113225652_deprecate_public_endpoint.exs b/priv/repo/migrations/20210113225652_deprecate_public_endpoint.exs index 6f470a459..a15b05d0a 100644 --- a/priv/repo/migrations/20210113225652_deprecate_public_endpoint.exs +++ b/priv/repo/migrations/20210113225652_deprecate_public_endpoint.exs @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Repo.Migrations.DeprecatePublicEndpoint do diff --git a/priv/repo/migrations/20210115205649_upgrade_oban_jobs_to_v9.exs b/priv/repo/migrations/20210115205649_upgrade_oban_jobs_to_v9.exs index bfb405579..e7f138e3f 100644 --- a/priv/repo/migrations/20210115205649_upgrade_oban_jobs_to_v9.exs +++ b/priv/repo/migrations/20210115205649_upgrade_oban_jobs_to_v9.exs @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Repo.Migrations.UpgradeObanJobsToV9 do diff --git a/priv/repo/migrations/20210121080964_add_default_text_search_config.exs b/priv/repo/migrations/20210121080964_add_default_text_search_config.exs index 27f600b70..31133845a 100644 --- a/priv/repo/migrations/20210121080964_add_default_text_search_config.exs +++ b/priv/repo/migrations/20210121080964_add_default_text_search_config.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddDefaultTextSearchConfig do use Ecto.Migration diff --git a/priv/repo/migrations/20210122151424_add_last_active_at_to_users.exs b/priv/repo/migrations/20210122151424_add_last_active_at_to_users.exs index 9671e495b..8c1f7f4b6 100644 --- a/priv/repo/migrations/20210122151424_add_last_active_at_to_users.exs +++ b/priv/repo/migrations/20210122151424_add_last_active_at_to_users.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddLastActiveAtToUsers do use Ecto.Migration diff --git a/priv/repo/migrations/20210128092834_remove_duplicates_from_activity_expiration_queue.exs b/priv/repo/migrations/20210128092834_remove_duplicates_from_activity_expiration_queue.exs index 309009205..a666d5cd4 100644 --- a/priv/repo/migrations/20210128092834_remove_duplicates_from_activity_expiration_queue.exs +++ b/priv/repo/migrations/20210128092834_remove_duplicates_from_activity_expiration_queue.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.RemoveDuplicatesFromActivityExpirationQueue do use Ecto.Migration diff --git a/priv/repo/migrations/20210202110641_add_pinned_objects_to_users.exs b/priv/repo/migrations/20210202110641_add_pinned_objects_to_users.exs index 644527246..58396612b 100644 --- a/priv/repo/migrations/20210202110641_add_pinned_objects_to_users.exs +++ b/priv/repo/migrations/20210202110641_add_pinned_objects_to_users.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddPinnedObjectsToUsers do use Ecto.Migration diff --git a/priv/repo/migrations/20210203141144_add_featured_address_to_users.exs b/priv/repo/migrations/20210203141144_add_featured_address_to_users.exs index 0f6a21611..082166237 100644 --- a/priv/repo/migrations/20210203141144_add_featured_address_to_users.exs +++ b/priv/repo/migrations/20210203141144_add_featured_address_to_users.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddFeaturedAddressToUsers do use Ecto.Migration diff --git a/priv/repo/migrations/20210205145000_move_pinned_activities_into_pinned_objects.exs b/priv/repo/migrations/20210205145000_move_pinned_activities_into_pinned_objects.exs index 9aee545e3..cf42729d3 100644 --- a/priv/repo/migrations/20210205145000_move_pinned_activities_into_pinned_objects.exs +++ b/priv/repo/migrations/20210205145000_move_pinned_activities_into_pinned_objects.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.MovePinnedActivitiesIntoPinnedObjects do use Ecto.Migration diff --git a/priv/repo/migrations/20210206045221_remove_pinned_activities_from_users.exs b/priv/repo/migrations/20210206045221_remove_pinned_activities_from_users.exs index a3ee93f48..9636068af 100644 --- a/priv/repo/migrations/20210206045221_remove_pinned_activities_from_users.exs +++ b/priv/repo/migrations/20210206045221_remove_pinned_activities_from_users.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.RemovePinnedActivitiesFromUsers do use Ecto.Migration diff --git a/priv/repo/migrations/20210218223811_add_disclose_client_to_users.exs b/priv/repo/migrations/20210218223811_add_disclose_client_to_users.exs index 37c5776ff..1c80b6a86 100644 --- a/priv/repo/migrations/20210218223811_add_disclose_client_to_users.exs +++ b/priv/repo/migrations/20210218223811_add_disclose_client_to_users.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddDiscloseClientToUsers do use Ecto.Migration diff --git a/priv/repo/migrations/20210222183840_remove_hashtags_objects_duplicate_index.exs b/priv/repo/migrations/20210222183840_remove_hashtags_objects_duplicate_index.exs index 6c4a2dfdc..4ea7ebe30 100644 --- a/priv/repo/migrations/20210222183840_remove_hashtags_objects_duplicate_index.exs +++ b/priv/repo/migrations/20210222183840_remove_hashtags_objects_duplicate_index.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.RemoveHashtagsObjectsDuplicateIndex do use Ecto.Migration diff --git a/priv/repo/migrations/20210222184616_change_hashtags_name_to_text.exs b/priv/repo/migrations/20210222184616_change_hashtags_name_to_text.exs index 8940b6ca3..e8c474f6a 100644 --- a/priv/repo/migrations/20210222184616_change_hashtags_name_to_text.exs +++ b/priv/repo/migrations/20210222184616_change_hashtags_name_to_text.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.ChangeHashtagsNameToText do use Ecto.Migration diff --git a/priv/repo/migrations/20210401143153_user_notification_settings_fix.exs b/priv/repo/migrations/20210401143153_user_notification_settings_fix.exs index cf68f1be6..3fd325789 100644 --- a/priv/repo/migrations/20210401143153_user_notification_settings_fix.exs +++ b/priv/repo/migrations/20210401143153_user_notification_settings_fix.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.UserNotificationSettingsFix do use Ecto.Migration diff --git a/priv/repo/migrations/20210416051708_remove_mastofe_settings_from_users.exs b/priv/repo/migrations/20210416051708_remove_mastofe_settings_from_users.exs index a8d7306bd..4f6a43524 100644 --- a/priv/repo/migrations/20210416051708_remove_mastofe_settings_from_users.exs +++ b/priv/repo/migrations/20210416051708_remove_mastofe_settings_from_users.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.RemoveMastofeSettingsFromUsers do use Ecto.Migration diff --git a/priv/repo/migrations/20210420204354_delete_hashtags_objects_cascade.exs b/priv/repo/migrations/20210420204354_delete_hashtags_objects_cascade.exs index f4ebf53d6..195b60a4c 100644 --- a/priv/repo/migrations/20210420204354_delete_hashtags_objects_cascade.exs +++ b/priv/repo/migrations/20210420204354_delete_hashtags_objects_cascade.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.DeleteHashtagsObjectsCascade do use Ecto.Migration diff --git a/priv/repo/migrations/20210717000000_add_poll_to_notifications_enum.exs b/priv/repo/migrations/20210717000000_add_poll_to_notifications_enum.exs index 9abf40b3d..3b3abf5cf 100644 --- a/priv/repo/migrations/20210717000000_add_poll_to_notifications_enum.exs +++ b/priv/repo/migrations/20210717000000_add_poll_to_notifications_enum.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddPollToNotificationsEnum do use Ecto.Migration diff --git a/priv/repo/migrations/20210818023112_add_user_id_to_apps.exs b/priv/repo/migrations/20210818023112_add_user_id_to_apps.exs new file mode 100644 index 000000000..b423cfd29 --- /dev/null +++ b/priv/repo/migrations/20210818023112_add_user_id_to_apps.exs @@ -0,0 +1,15 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Repo.Migrations.AddUserIdToApps do + use Ecto.Migration + + def change do + alter table(:apps) do + add(:user_id, references(:users, type: :uuid, on_delete: :delete_all)) + end + + create_if_not_exists(index(:apps, [:user_id])) + end +end diff --git a/priv/repo/migrations/20211121000000_create_user_notes.exs b/priv/repo/migrations/20211121000000_create_user_notes.exs index b75e11695..925007bd5 100644 --- a/priv/repo/migrations/20211121000000_create_user_notes.exs +++ b/priv/repo/migrations/20211121000000_create_user_notes.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.CreateUserNotes do use Ecto.Migration diff --git a/priv/repo/migrations/20211125110126_force_pinned_objects_to_exist.exs b/priv/repo/migrations/20211125110126_force_pinned_objects_to_exist.exs index 1fe9271f0..8749c3e13 100644 --- a/priv/repo/migrations/20211125110126_force_pinned_objects_to_exist.exs +++ b/priv/repo/migrations/20211125110126_force_pinned_objects_to_exist.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.ForcePinnedObjectsToExist do use Ecto.Migration diff --git a/priv/repo/migrations/20211126191138_add_suggestions.exs b/priv/repo/migrations/20211126191138_add_suggestions.exs index 7cc67d8ef..2be497b97 100644 --- a/priv/repo/migrations/20211126191138_add_suggestions.exs +++ b/priv/repo/migrations/20211126191138_add_suggestions.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddSuggestions do use Ecto.Migration diff --git a/priv/repo/migrations/20211222165256_add_last_status_at_to_users.exs b/priv/repo/migrations/20211222165256_add_last_status_at_to_users.exs index 906178216..2c956926b 100644 --- a/priv/repo/migrations/20211222165256_add_last_status_at_to_users.exs +++ b/priv/repo/migrations/20211222165256_add_last_status_at_to_users.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddLastStatusAtToUsers do use Ecto.Migration diff --git a/priv/repo/migrations/20211225154802_add_is_discoverable_index_to_users.exs b/priv/repo/migrations/20211225154802_add_is_discoverable_index_to_users.exs index 9f8f52b65..b1ca6e9ae 100644 --- a/priv/repo/migrations/20211225154802_add_is_discoverable_index_to_users.exs +++ b/priv/repo/migrations/20211225154802_add_is_discoverable_index_to_users.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddIsDiscoverableIndexToUsers do use Ecto.Migration diff --git a/priv/repo/migrations/20211229075801_user_relationships_target_id_relationship_type_index.exs b/priv/repo/migrations/20211229075801_user_relationships_target_id_relationship_type_index.exs new file mode 100644 index 000000000..f2290c5a6 --- /dev/null +++ b/priv/repo/migrations/20211229075801_user_relationships_target_id_relationship_type_index.exs @@ -0,0 +1,11 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Repo.Migrations.UserRelationshipsTargetIdRelationshipTypeIndex do + use Ecto.Migration + + def change do + create_if_not_exists(index(:user_relationships, [:target_id, :relationship_type])) + end +end diff --git a/priv/repo/migrations/20220116183110_add_birthday_to_users.exs b/priv/repo/migrations/20220116183110_add_birthday_to_users.exs new file mode 100644 index 000000000..46cf7947f --- /dev/null +++ b/priv/repo/migrations/20220116183110_add_birthday_to_users.exs @@ -0,0 +1,16 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Repo.Migrations.AddBirthdayToUsers do + use Ecto.Migration + + def change do + alter table(:users) do + add_if_not_exists(:birthday, :date) + add_if_not_exists(:show_birthday, :boolean, default: false, null: false) + end + + create_if_not_exists(index(:users, [:show_birthday])) + end +end diff --git a/priv/repo/migrations/20220125104429_add_birthday_month_day_index_to_users.exs b/priv/repo/migrations/20220125104429_add_birthday_month_day_index_to_users.exs new file mode 100644 index 000000000..e14c69ed0 --- /dev/null +++ b/priv/repo/migrations/20220125104429_add_birthday_month_day_index_to_users.exs @@ -0,0 +1,15 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Repo.Migrations.AddBirthdayMonthDayIndexToUsers do + use Ecto.Migration + + def change do + create( + index(:users, ["date_part('month', birthday)", "date_part('day', birthday)"], + name: :users_birthday_month_day_index + ) + ) + end +end diff --git a/priv/repo/migrations/20220220135625_upload_filter_exiftool_to_exiftool_strip_location.exs b/priv/repo/migrations/20220220135625_upload_filter_exiftool_to_exiftool_strip_location.exs new file mode 100644 index 000000000..0878b9699 --- /dev/null +++ b/priv/repo/migrations/20220220135625_upload_filter_exiftool_to_exiftool_strip_location.exs @@ -0,0 +1,37 @@ +defmodule Pleroma.Repo.Migrations.UploadFilterExiftoolToExiftoolStripLocation do + use Ecto.Migration + + alias Pleroma.ConfigDB + + def up, + do: + ConfigDB.get_by_params(%{group: :pleroma, key: Pleroma.Upload}) + |> update_filtername( + Pleroma.Upload.Filter.Exiftool, + Pleroma.Upload.Filter.Exiftool.StripLocation + ) + + def down, + do: + ConfigDB.get_by_params(%{group: :pleroma, key: Pleroma.Upload}) + |> update_filtername( + Pleroma.Upload.Filter.Exiftool.StripLocation, + Pleroma.Upload.Filter.Exiftool + ) + + defp update_filtername(%{value: value}, from_filtername, to_filtername) do + new_value = + value + |> Keyword.update(:filters, [], fn filters -> + filters + |> Enum.map(fn + ^from_filtername -> to_filtername + filter -> filter + end) + end) + + ConfigDB.update_or_create(%{group: :pleroma, key: Pleroma.Upload, value: new_value}) + end + + defp update_filtername(_, _, _), do: nil +end diff --git a/priv/repo/migrations/20220302013920_add_language_to_users.exs b/priv/repo/migrations/20220302013920_add_language_to_users.exs new file mode 100644 index 000000000..7a63c36aa --- /dev/null +++ b/priv/repo/migrations/20220302013920_add_language_to_users.exs @@ -0,0 +1,9 @@ +defmodule Pleroma.Repo.Migrations.AddLanguageToUsers do + use Ecto.Migration + + def change do + alter table(:users) do + add_if_not_exists(:language, :string) + end + end +end diff --git a/priv/repo/migrations/20220308012601_create_announcements.exs b/priv/repo/migrations/20220308012601_create_announcements.exs new file mode 100644 index 000000000..01c9ce041 --- /dev/null +++ b/priv/repo/migrations/20220308012601_create_announcements.exs @@ -0,0 +1,26 @@ +defmodule Pleroma.Repo.Migrations.CreateAnnouncements do + use Ecto.Migration + + def change do + create_if_not_exists table(:announcements, primary_key: false) do + add(:id, :uuid, primary_key: true) + add(:data, :map) + add(:starts_at, :naive_datetime) + add(:ends_at, :naive_datetime) + add(:rendered, :map) + + timestamps() + end + + create_if_not_exists table(:announcement_read_relationships) do + add(:user_id, references(:users, type: :uuid, on_delete: :delete_all)) + add(:announcement_id, references(:announcements, type: :uuid, on_delete: :delete_all)) + + timestamps(updated_at: false) + end + + create_if_not_exists( + unique_index(:announcement_read_relationships, [:user_id, :announcement_id]) + ) + end +end diff --git a/priv/repo/migrations/20220506175506_add_index_hotspots.exs b/priv/repo/migrations/20220506175506_add_index_hotspots.exs new file mode 100644 index 000000000..e1f59bbac --- /dev/null +++ b/priv/repo/migrations/20220506175506_add_index_hotspots.exs @@ -0,0 +1,17 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Repo.Migrations.AddIndexHotspots do + use Ecto.Migration + + def change do + # Stop inserts into activities from doing a full-table scan of users: + create_if_not_exists(index(:users, [:ap_id, "COALESCE(follower_address, '')"])) + + # Change two indexes and a filter recheck into one index scan: + create_if_not_exists(index(:following_relationships, [:follower_id, :state])) + + create_if_not_exists(index(:notifications, [:user_id, :seen])) + end +end diff --git a/priv/repo/migrations/20220602052233_change_report_notes_content_to_text.exs b/priv/repo/migrations/20220602052233_change_report_notes_content_to_text.exs new file mode 100644 index 000000000..9343373fc --- /dev/null +++ b/priv/repo/migrations/20220602052233_change_report_notes_content_to_text.exs @@ -0,0 +1,16 @@ +defmodule Pleroma.Repo.Migrations.ChangeReportNotesContentToText do + use Ecto.Migration + + def up do + alter table(:report_notes) do + modify(:content, :text) + end + end + + # 20191203043610_create_report_notes.exs + def down do + alter table(:report_notes) do + modify(:content, :string) + end + end +end diff --git a/priv/repo/migrations/20220616163503_add_expires_at_to_user_relationships.exs b/priv/repo/migrations/20220616163503_add_expires_at_to_user_relationships.exs new file mode 100644 index 000000000..9e117e376 --- /dev/null +++ b/priv/repo/migrations/20220616163503_add_expires_at_to_user_relationships.exs @@ -0,0 +1,13 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Repo.Migrations.AddExpiresAtToUserRelationships do + use Ecto.Migration + + def change do + alter table(:user_relationships) do + add_if_not_exists(:expires_at, :utc_datetime) + end + end +end diff --git a/priv/repo/optional_migrations/rum_indexing/20190510135645_add_fts_index_to_objects_two.exs b/priv/repo/optional_migrations/rum_indexing/20190510135645_add_fts_index_to_objects_two.exs index 88476fb57..c95b97721 100644 --- a/priv/repo/optional_migrations/rum_indexing/20190510135645_add_fts_index_to_objects_two.exs +++ b/priv/repo/optional_migrations/rum_indexing/20190510135645_add_fts_index_to_objects_two.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Repo.Migrations.AddFtsIndexToObjectsTwo do use Ecto.Migration diff --git a/priv/repo/seeds.exs b/priv/repo/seeds.exs index 1ab36cedc..cf3510208 100644 --- a/priv/repo/seeds.exs +++ b/priv/repo/seeds.exs @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + # Script for populating the database. You can run it as: # # mix run priv/repo/seeds.exs diff --git a/priv/scrubbers/default.ex b/priv/scrubbers/default.ex index 4694a92a5..79fa6dcdf 100644 --- a/priv/scrubbers/default.ex +++ b/priv/scrubbers/default.ex @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.HTML.Scrubber.Default do @doc "The default HTML scrubbing policy: no " @@ -56,7 +60,7 @@ defmodule Pleroma.HTML.Scrubber.Default do Meta.allow_tag_with_these_attributes(:u, []) Meta.allow_tag_with_these_attributes(:ul, []) - Meta.allow_tag_with_this_attribute_values(:span, "class", ["h-card"]) + Meta.allow_tag_with_this_attribute_values(:span, "class", ["h-card", "recipients-inline"]) Meta.allow_tag_with_these_attributes(:span, []) Meta.allow_tag_with_this_attribute_values(:code, "class", ["inline"]) diff --git a/priv/scrubbers/links_only.ex b/priv/scrubbers/links_only.ex index b30a00589..7f434fb25 100644 --- a/priv/scrubbers/links_only.ex +++ b/priv/scrubbers/links_only.ex @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.HTML.Scrubber.LinksOnly do @moduledoc """ An HTML scrubbing policy which limits to links only. diff --git a/priv/scrubbers/media_proxy.ex b/priv/scrubbers/media_proxy.ex index 5dbe57666..9935b3829 100644 --- a/priv/scrubbers/media_proxy.ex +++ b/priv/scrubbers/media_proxy.ex @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.HTML.Transform.MediaProxy do @moduledoc "Transforms inline image URIs to use MediaProxy." diff --git a/priv/scrubbers/twitter_text.ex b/priv/scrubbers/twitter_text.ex index c4e796cad..a121a8209 100644 --- a/priv/scrubbers/twitter_text.ex +++ b/priv/scrubbers/twitter_text.ex @@ -1,3 +1,7 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.HTML.Scrubber.TwitterText do @moduledoc """ An HTML scrubbing policy which limits to twitter-style text. Only diff --git a/priv/static/index.html b/priv/static/index.html index 9ef3ad6e4..b1455c184 100644 --- a/priv/static/index.html +++ b/priv/static/index.html @@ -1 +1 @@ -
\ No newline at end of file +
\ No newline at end of file diff --git a/priv/static/schemas/litepub-0.1.jsonld b/priv/static/schemas/litepub-0.1.jsonld index e7722cf72..946099a6e 100644 --- a/priv/static/schemas/litepub-0.1.jsonld +++ b/priv/static/schemas/litepub-0.1.jsonld @@ -35,7 +35,8 @@ "alsoKnownAs": { "@id": "as:alsoKnownAs", "@type": "@id" - } + }, + "vcard": "http://www.w3.org/2006/vcard/ns#" } ] } diff --git a/priv/static/static/css/app.9a4c5ede37b2f0230836.css b/priv/static/static/css/app.7d2d223f75c3a14b0991.css similarity index 85% rename from priv/static/static/css/app.9a4c5ede37b2f0230836.css rename to priv/static/static/css/app.7d2d223f75c3a14b0991.css index 22b9fdbe7..d79cf910f 100644 --- a/priv/static/static/css/app.9a4c5ede37b2f0230836.css +++ b/priv/static/static/css/app.7d2d223f75c3a14b0991.css @@ -1,3 +1,55 @@ +.RichContent blockquote { + margin: 0.2em 0 0.2em 2em; + font-style: italic; +} +.RichContent pre { + overflow: auto; +} +.RichContent code, +.RichContent samp, +.RichContent kbd, +.RichContent var, +.RichContent pre { + font-family: var(--postCodeFont, monospace); +} +.RichContent p { + margin: 0 0 1em 0; +} +.RichContent p:last-child { + margin: 0 0 0 0; +} +.RichContent h1 { + font-size: 1.1em; + line-height: 1.2em; + margin: 1.4em 0; +} +.RichContent h2 { + font-size: 1.1em; + margin: 1em 0; +} +.RichContent h3 { + font-size: 1em; + margin: 1.2em 0; +} +.RichContent h4 { + margin: 1.1em 0; +} +.RichContent .img { + display: inline-block; +} +.RichContent .emoji { + display: inline-block; + width: var(--emoji-size, 32px); + height: var(--emoji-size, 32px); +} +.RichContent .img, +.RichContent video { + max-width: 100%; + max-height: 400px; + vertical-align: middle; + -o-object-fit: contain; + object-fit: contain; +} .tab-switcher { display: -ms-flexbox; display: flex; @@ -243,4 +295,4 @@ cursor: pointer; } -/*# sourceMappingURL=app.9a4c5ede37b2f0230836.css.map*/ \ No newline at end of file +/*# sourceMappingURL=app.7d2d223f75c3a14b0991.css.map*/ \ No newline at end of file diff --git a/priv/static/static/css/app.7d2d223f75c3a14b0991.css.map b/priv/static/static/css/app.7d2d223f75c3a14b0991.css.map new file mode 100644 index 000000000..ce9a6fa12 --- /dev/null +++ b/priv/static/static/css/app.7d2d223f75c3a14b0991.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///./src/components/rich_content/rich_content.scss","webpack:///./src/components/tab_switcher/tab_switcher.scss","webpack:///./src/hocs/with_load_more/with_load_more.scss"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,C;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,C;ACtOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,C","file":"static/css/app.7d2d223f75c3a14b0991.css","sourcesContent":[".RichContent blockquote {\n margin: 0.2em 0 0.2em 2em;\n font-style: italic;\n}\n.RichContent pre {\n overflow: auto;\n}\n.RichContent code,\n.RichContent samp,\n.RichContent kbd,\n.RichContent var,\n.RichContent pre {\n font-family: var(--postCodeFont, monospace);\n}\n.RichContent p {\n margin: 0 0 1em 0;\n}\n.RichContent p:last-child {\n margin: 0 0 0 0;\n}\n.RichContent h1 {\n font-size: 1.1em;\n line-height: 1.2em;\n margin: 1.4em 0;\n}\n.RichContent h2 {\n font-size: 1.1em;\n margin: 1em 0;\n}\n.RichContent h3 {\n font-size: 1em;\n margin: 1.2em 0;\n}\n.RichContent h4 {\n margin: 1.1em 0;\n}\n.RichContent .img {\n display: inline-block;\n}\n.RichContent .emoji {\n display: inline-block;\n width: var(--emoji-size, 32px);\n height: var(--emoji-size, 32px);\n}\n.RichContent .img,\n.RichContent video {\n max-width: 100%;\n max-height: 400px;\n vertical-align: middle;\n -o-object-fit: contain;\n object-fit: contain;\n}",".tab-switcher {\n display: -ms-flexbox;\n display: flex;\n}\n.tab-switcher .tab-icon {\n margin: 0.2em auto;\n display: block;\n}\n.tab-switcher.top-tabs {\n -ms-flex-direction: column;\n flex-direction: column;\n}\n.tab-switcher.top-tabs > .tabs {\n width: 100%;\n overflow-y: hidden;\n overflow-x: auto;\n padding-top: 5px;\n -ms-flex-direction: row;\n flex-direction: row;\n}\n.tab-switcher.top-tabs > .tabs::after, .tab-switcher.top-tabs > .tabs::before {\n content: \"\";\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n border-bottom: 1px solid;\n border-bottom-color: #222;\n border-bottom-color: var(--border, #222);\n}\n.tab-switcher.top-tabs > .tabs .tab-wrapper {\n height: 28px;\n}\n.tab-switcher.top-tabs > .tabs .tab-wrapper:not(.active)::after {\n left: 0;\n right: 0;\n bottom: 0;\n border-bottom: 1px solid;\n border-bottom-color: #222;\n border-bottom-color: var(--border, #222);\n}\n.tab-switcher.top-tabs > .tabs .tab {\n width: 100%;\n min-width: 1px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n padding-bottom: 99px;\n margin-bottom: -93px;\n}\n.tab-switcher.top-tabs .contents.scrollable-tabs {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n}\n.tab-switcher.side-tabs {\n -ms-flex-direction: row;\n flex-direction: row;\n}\n@media all and (max-width: 800px) {\n .tab-switcher.side-tabs {\n overflow-x: auto;\n }\n}\n.tab-switcher.side-tabs > .contents {\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n}\n.tab-switcher.side-tabs > .tabs {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n overflow-y: auto;\n overflow-x: hidden;\n -ms-flex-direction: column;\n flex-direction: column;\n}\n.tab-switcher.side-tabs > .tabs::after, .tab-switcher.side-tabs > .tabs::before {\n -ms-flex-negative: 0;\n flex-shrink: 0;\n -ms-flex-preferred-size: 0.5em;\n flex-basis: 0.5em;\n content: \"\";\n border-right: 1px solid;\n border-right-color: #222;\n border-right-color: var(--border, #222);\n}\n.tab-switcher.side-tabs > .tabs::after {\n -ms-flex-positive: 1;\n flex-grow: 1;\n}\n.tab-switcher.side-tabs > .tabs::before {\n -ms-flex-positive: 0;\n flex-grow: 0;\n}\n.tab-switcher.side-tabs > .tabs .tab-wrapper {\n min-width: 10em;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n}\n@media all and (max-width: 800px) {\n .tab-switcher.side-tabs > .tabs .tab-wrapper {\n min-width: 4em;\n }\n}\n.tab-switcher.side-tabs > .tabs .tab-wrapper:not(.active)::after {\n top: 0;\n right: 0;\n bottom: 0;\n border-right: 1px solid;\n border-right-color: #222;\n border-right-color: var(--border, #222);\n}\n.tab-switcher.side-tabs > .tabs .tab-wrapper::before {\n -ms-flex: 0 0 6px;\n flex: 0 0 6px;\n content: \"\";\n border-right: 1px solid;\n border-right-color: #222;\n border-right-color: var(--border, #222);\n}\n.tab-switcher.side-tabs > .tabs .tab-wrapper:last-child .tab {\n margin-bottom: 0;\n}\n.tab-switcher.side-tabs > .tabs .tab {\n -ms-flex: 1;\n flex: 1;\n box-sizing: content-box;\n min-width: 10em;\n min-width: 1px;\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n padding-left: 1em;\n padding-right: calc(1em + 200px);\n margin-right: -200px;\n margin-left: 1em;\n}\n@media all and (max-width: 800px) {\n .tab-switcher.side-tabs > .tabs .tab {\n padding-left: 0.25em;\n padding-right: calc(.25em + 200px);\n margin-right: calc(.25em - 200px);\n margin-left: 0.25em;\n }\n .tab-switcher.side-tabs > .tabs .tab .text {\n display: none;\n }\n}\n.tab-switcher .contents {\n -ms-flex: 1 0 auto;\n flex: 1 0 auto;\n min-height: 0px;\n}\n.tab-switcher .contents .hidden {\n display: none;\n}\n.tab-switcher .contents .full-height:not(.hidden) {\n height: 100%;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n}\n.tab-switcher .contents .full-height:not(.hidden) > *:not(.mobile-label) {\n -ms-flex: 1;\n flex: 1;\n}\n.tab-switcher .contents.scrollable-tabs {\n overflow-y: auto;\n}\n.tab-switcher .tab {\n position: relative;\n white-space: nowrap;\n padding: 6px 1em;\n background-color: #182230;\n background-color: var(--tab, #182230);\n}\n.tab-switcher .tab, .tab-switcher .tab:active .tab-icon {\n color: #b9b9ba;\n color: var(--tabText, #b9b9ba);\n}\n.tab-switcher .tab:not(.active) {\n z-index: 4;\n}\n.tab-switcher .tab:not(.active):hover {\n z-index: 6;\n}\n.tab-switcher .tab.active {\n background: transparent;\n z-index: 5;\n color: #b9b9ba;\n color: var(--tabActiveText, #b9b9ba);\n}\n.tab-switcher .tab img {\n max-height: 26px;\n vertical-align: top;\n margin-top: -5px;\n}\n.tab-switcher .tabs {\n display: -ms-flexbox;\n display: flex;\n position: relative;\n box-sizing: border-box;\n}\n.tab-switcher .tabs::after, .tab-switcher .tabs::before {\n display: block;\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n}\n.tab-switcher .tab-wrapper {\n position: relative;\n display: -ms-flexbox;\n display: flex;\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n}\n.tab-switcher .tab-wrapper:not(.active)::after {\n content: \"\";\n position: absolute;\n z-index: 7;\n}\n.tab-switcher .mobile-label {\n padding-left: 0.3em;\n padding-bottom: 0.25em;\n margin-top: 0.5em;\n margin-left: 0.2em;\n margin-bottom: 0.25em;\n border-bottom: 1px solid var(--border, #222);\n}\n@media all and (min-width: 800px) {\n .tab-switcher .mobile-label {\n display: none;\n }\n}",".with-load-more-footer {\n padding: 10px;\n text-align: center;\n border-top: 1px solid;\n border-top-color: #222;\n border-top-color: var(--border, #222);\n}\n.with-load-more-footer .error {\n font-size: 14px;\n}\n.with-load-more-footer a {\n cursor: pointer;\n}"],"sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/css/app.9a4c5ede37b2f0230836.css.map b/priv/static/static/css/app.9a4c5ede37b2f0230836.css.map deleted file mode 100644 index f54bd9ee6..000000000 --- a/priv/static/static/css/app.9a4c5ede37b2f0230836.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///./src/components/tab_switcher/tab_switcher.scss","webpack:///./src/hocs/with_load_more/with_load_more.scss"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,C;ACtOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,C","file":"static/css/app.9a4c5ede37b2f0230836.css","sourcesContent":[".tab-switcher {\n display: -ms-flexbox;\n display: flex;\n}\n.tab-switcher .tab-icon {\n margin: 0.2em auto;\n display: block;\n}\n.tab-switcher.top-tabs {\n -ms-flex-direction: column;\n flex-direction: column;\n}\n.tab-switcher.top-tabs > .tabs {\n width: 100%;\n overflow-y: hidden;\n overflow-x: auto;\n padding-top: 5px;\n -ms-flex-direction: row;\n flex-direction: row;\n}\n.tab-switcher.top-tabs > .tabs::after, .tab-switcher.top-tabs > .tabs::before {\n content: \"\";\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n border-bottom: 1px solid;\n border-bottom-color: #222;\n border-bottom-color: var(--border, #222);\n}\n.tab-switcher.top-tabs > .tabs .tab-wrapper {\n height: 28px;\n}\n.tab-switcher.top-tabs > .tabs .tab-wrapper:not(.active)::after {\n left: 0;\n right: 0;\n bottom: 0;\n border-bottom: 1px solid;\n border-bottom-color: #222;\n border-bottom-color: var(--border, #222);\n}\n.tab-switcher.top-tabs > .tabs .tab {\n width: 100%;\n min-width: 1px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n padding-bottom: 99px;\n margin-bottom: -93px;\n}\n.tab-switcher.top-tabs .contents.scrollable-tabs {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n}\n.tab-switcher.side-tabs {\n -ms-flex-direction: row;\n flex-direction: row;\n}\n@media all and (max-width: 800px) {\n .tab-switcher.side-tabs {\n overflow-x: auto;\n }\n}\n.tab-switcher.side-tabs > .contents {\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n}\n.tab-switcher.side-tabs > .tabs {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n overflow-y: auto;\n overflow-x: hidden;\n -ms-flex-direction: column;\n flex-direction: column;\n}\n.tab-switcher.side-tabs > .tabs::after, .tab-switcher.side-tabs > .tabs::before {\n -ms-flex-negative: 0;\n flex-shrink: 0;\n -ms-flex-preferred-size: 0.5em;\n flex-basis: 0.5em;\n content: \"\";\n border-right: 1px solid;\n border-right-color: #222;\n border-right-color: var(--border, #222);\n}\n.tab-switcher.side-tabs > .tabs::after {\n -ms-flex-positive: 1;\n flex-grow: 1;\n}\n.tab-switcher.side-tabs > .tabs::before {\n -ms-flex-positive: 0;\n flex-grow: 0;\n}\n.tab-switcher.side-tabs > .tabs .tab-wrapper {\n min-width: 10em;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n}\n@media all and (max-width: 800px) {\n .tab-switcher.side-tabs > .tabs .tab-wrapper {\n min-width: 4em;\n }\n}\n.tab-switcher.side-tabs > .tabs .tab-wrapper:not(.active)::after {\n top: 0;\n right: 0;\n bottom: 0;\n border-right: 1px solid;\n border-right-color: #222;\n border-right-color: var(--border, #222);\n}\n.tab-switcher.side-tabs > .tabs .tab-wrapper::before {\n -ms-flex: 0 0 6px;\n flex: 0 0 6px;\n content: \"\";\n border-right: 1px solid;\n border-right-color: #222;\n border-right-color: var(--border, #222);\n}\n.tab-switcher.side-tabs > .tabs .tab-wrapper:last-child .tab {\n margin-bottom: 0;\n}\n.tab-switcher.side-tabs > .tabs .tab {\n -ms-flex: 1;\n flex: 1;\n box-sizing: content-box;\n min-width: 10em;\n min-width: 1px;\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n padding-left: 1em;\n padding-right: calc(1em + 200px);\n margin-right: -200px;\n margin-left: 1em;\n}\n@media all and (max-width: 800px) {\n .tab-switcher.side-tabs > .tabs .tab {\n padding-left: 0.25em;\n padding-right: calc(.25em + 200px);\n margin-right: calc(.25em - 200px);\n margin-left: 0.25em;\n }\n .tab-switcher.side-tabs > .tabs .tab .text {\n display: none;\n }\n}\n.tab-switcher .contents {\n -ms-flex: 1 0 auto;\n flex: 1 0 auto;\n min-height: 0px;\n}\n.tab-switcher .contents .hidden {\n display: none;\n}\n.tab-switcher .contents .full-height:not(.hidden) {\n height: 100%;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n}\n.tab-switcher .contents .full-height:not(.hidden) > *:not(.mobile-label) {\n -ms-flex: 1;\n flex: 1;\n}\n.tab-switcher .contents.scrollable-tabs {\n overflow-y: auto;\n}\n.tab-switcher .tab {\n position: relative;\n white-space: nowrap;\n padding: 6px 1em;\n background-color: #182230;\n background-color: var(--tab, #182230);\n}\n.tab-switcher .tab, .tab-switcher .tab:active .tab-icon {\n color: #b9b9ba;\n color: var(--tabText, #b9b9ba);\n}\n.tab-switcher .tab:not(.active) {\n z-index: 4;\n}\n.tab-switcher .tab:not(.active):hover {\n z-index: 6;\n}\n.tab-switcher .tab.active {\n background: transparent;\n z-index: 5;\n color: #b9b9ba;\n color: var(--tabActiveText, #b9b9ba);\n}\n.tab-switcher .tab img {\n max-height: 26px;\n vertical-align: top;\n margin-top: -5px;\n}\n.tab-switcher .tabs {\n display: -ms-flexbox;\n display: flex;\n position: relative;\n box-sizing: border-box;\n}\n.tab-switcher .tabs::after, .tab-switcher .tabs::before {\n display: block;\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n}\n.tab-switcher .tab-wrapper {\n position: relative;\n display: -ms-flexbox;\n display: flex;\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n}\n.tab-switcher .tab-wrapper:not(.active)::after {\n content: \"\";\n position: absolute;\n z-index: 7;\n}\n.tab-switcher .mobile-label {\n padding-left: 0.3em;\n padding-bottom: 0.25em;\n margin-top: 0.5em;\n margin-left: 0.2em;\n margin-bottom: 0.25em;\n border-bottom: 1px solid var(--border, #222);\n}\n@media all and (min-width: 800px) {\n .tab-switcher .mobile-label {\n display: none;\n }\n}",".with-load-more-footer {\n padding: 10px;\n text-align: center;\n border-top: 1px solid;\n border-top-color: #222;\n border-top-color: var(--border, #222);\n}\n.with-load-more-footer .error {\n font-size: 14px;\n}\n.with-load-more-footer a {\n cursor: pointer;\n}"],"sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/10.02ffbc25214f297f720f.js b/priv/static/static/js/10.02ffbc25214f297f720f.js new file mode 100644 index 000000000..fbe426710 --- /dev/null +++ b/priv/static/static/js/10.02ffbc25214f297f720f.js @@ -0,0 +1,2 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[10],{603:function(e){e.exports=JSON.parse('{"chat":{"title":"Chat"},"exporter":{"export":"Exportar","processing":"Procesando. Pronto se te pedirá que descargues tu archivo"},"features_panel":{"chat":"Chat","gopher":"Gopher","media_proxy":"Proxy de medios","scope_options":"Opciones del alcance de la visibilidad","text_limit":"Límite de caracteres","title":"Características","who_to_follow":"A quién seguir","pleroma_chat_messages":"Chat de Pleroma","upload_limit":"Límite de subida"},"finder":{"error_fetching_user":"Error al buscar usuario","find_user":"Encontrar usuario"},"general":{"apply":"Aplicar","submit":"Enviar","more":"Más","generic_error":"Ha ocurrido un error","optional":"opcional","show_more":"Mostrar más","show_less":"Mostrar menos","cancel":"Cancelar","disable":"Inhabilitar","enable":"Habilitar","confirm":"Confirmar","verify":"Verificar","peek":"Previsualizar","close":"Cerrar","dismiss":"Descartar","retry":"Inténtalo de nuevo","error_retry":"Por favor, inténtalo de nuevo","loading":"Cargando…","role":{"admin":"Administrador/a","moderator":"Moderador/a"},"flash_content":"Haga clic para mostrar contenido Flash usando Ruffle (experimental, puede que no funcione).","flash_security":"Tenga en cuenta que esto puede ser potencialmente peligroso ya que el contenido Flash sigue siendo código arbitrario.","flash_fail":"No se pudo cargar el contenido flash, consulte la consola para obtener más detalles."},"image_cropper":{"crop_picture":"Recortar la foto","save":"Guardar","save_without_cropping":"Guardar sin recortar","cancel":"Cancelar"},"importer":{"submit":"Enviar","success":"Importado con éxito.","error":"Se ha producido un error al importar el archivo."},"login":{"login":"Identificarse","description":"Identificarse con OAuth","logout":"Cerrar sesión","password":"Contraseña","placeholder":"p.ej. lain","register":"Registrarse","username":"Usuario","hint":"Inicia sesión para unirte a la discusión","authentication_code":"Código de autenticación","enter_recovery_code":"Inserta el código de recuperación","enter_two_factor_code":"Inserta el código de dos factores","recovery_code":"Código de recuperación","heading":{"totp":"Autenticación de dos factores","recovery":"Recuperación de dos factores"}},"media_modal":{"previous":"Anterior","next":"Siguiente"},"nav":{"about":"Acerca de","administration":"Administración","back":"Volver","chat":"Chat Local","friend_requests":"Solicitudes de seguimiento","mentions":"Menciones","interactions":"Interacciones","dms":"Mensajes directos","public_tl":"Línea temporal pública","timeline":"Línea Temporal","twkn":"Red Conocida","user_search":"Búsqueda de Usuarios","search":"Buscar","who_to_follow":"A quién seguir","preferences":"Preferencias","chats":"Chats","timelines":"Líneas de Tiempo","bookmarks":"Marcadores","home_timeline":"Línea temporal personal"},"notifications":{"broken_favorite":"Estado desconocido, buscándolo…","favorited_you":"le gusta tu estado","followed_you":"empezó a seguirte","load_older":"Cargar notificaciones antiguas","notifications":"Notificaciones","read":"¡Leído!","repeated_you":"repitió tu estado","no_more_notifications":"No hay más notificaciones","reacted_with":"reaccionó con {0}","migrated_to":"migrado a","follow_request":"quiere seguirte","error":"Error obteniendo notificaciones:{0}"},"polls":{"add_poll":"Añadir encuesta","add_option":"Añadir opción","option":"Opción","votes":"votos","vote":"Votar","type":"Tipo de encuesta","single_choice":"Elección única","multiple_choices":"Elección múltiple","expiry":"Tiempo de vida de la encuesta","expires_in":"La encuesta termina en {0}","expired":"La encuesta terminó hace {0}","not_enough_options":"Muy pocas opciones únicas en la encuesta","people_voted_count":"{count} persona votó | {count} personas votaron","votes_count":"{count} voto | {count} votos"},"emoji":{"stickers":"Pegatinas","emoji":"Emoji","keep_open":"Mantener el selector abierto","search_emoji":"Buscar un emoji","add_emoji":"Insertar un emoji","custom":"Emojis personalizados","unicode":"Emojis unicode","load_all":"Cargando todos los {emojiAmount} emoji","load_all_hint":"Cargado el primer emoji {saneAmount}, cargar todos los emoji puede causar problemas de rendimiento."},"stickers":{"add_sticker":"Añadir Pegatina"},"interactions":{"favs_repeats":"Favoritos y repetidos","follows":"Nuevos seguidores","load_older":"Cargar interacciones más antiguas","moves":"Usuario migrado"},"post_status":{"new_status":"Publicar un nuevo estado","account_not_locked_warning":"Tu cuenta no está {0}. Cualquiera puede seguirte y leer las publicaciones para Solo-Seguidores.","account_not_locked_warning_link":"bloqueada","attachments_sensitive":"Contenido sensible","content_type":{"text/plain":"Texto Plano","text/html":"HTML","text/markdown":"Markdown","text/bbcode":"BBCode"},"content_warning":"Tema (opcional)","default":"Acabo de aterrizar en L.A.","direct_warning_to_all":"Esta publicación será visible para todos los usuarios mencionados.","direct_warning_to_first_only":"Esta publicación solo será visible para los usuarios mencionados al comienzo del mensaje.","posting":"Publicando","scope_notice":{"public":"Esta publicación será visible para todo el mundo","private":"Esta publicación solo será visible para tus seguidores","unlisted":"Esta publicación no será visible en la Línea Temporal Pública ni en Toda La Red Conocida"},"scope":{"direct":"Directo - solo para los usuarios mencionados","private":"Solo-seguidores - solo tus seguidores leerán la publicación","public":"Público - publicaciones visibles en las líneas temporales públicas","unlisted":"Sin listar -publicaciones no visibles en las líneas temporales públicas"},"media_description_error":"Error al actualizar el archivo, inténtalo de nuevo","empty_status_error":"No se puede publicar un estado vacío y sin archivos adjuntos","preview_empty":"Vacío","preview":"Vista previa","media_description":"Descripción multimedia","post":"Publicar"},"registration":{"bio":"Biografía","email":"Correo electrónico","fullname":"Nombre a mostrar","password_confirm":"Confirmar contraseña","registration":"Registro","token":"Token de invitación","captcha":"CAPTCHA","new_captcha":"Haz click en la imagen para obtener un nuevo captcha","username_placeholder":"p.ej. lain","fullname_placeholder":"p.ej. Lain Iwakura","bio_placeholder":"e.g.\\nHola, soy un ejemplo.\\nAquí puedes poner algo representativo tuyo... o no.","validations":{"username_required":"no puede estar vacío","fullname_required":"no puede estar vacío","email_required":"no puede estar vacío","password_required":"no puede estar vacío","password_confirmation_required":"no puede estar vacío","password_confirmation_match":"la contraseña no coincide"},"reason_placeholder":"Los registros de esta instancia son aprobados manualmente.\\nComéntanos por qué quieres registrarte aquí.","reason":"Razón para registrarse","register":"Registrarse"},"selectable_list":{"select_all":"Seleccionar todo"},"settings":{"app_name":"Nombre de la aplicación","security":"Seguridad","enter_current_password_to_confirm":"Introduce la contraseña actual para confirmar tu identidad","mfa":{"otp":"OTP","setup_otp":"Configurar OTP","wait_pre_setup_otp":"preconfiguración OTP","confirm_and_enable":"Confirmar y habilitar OTP","title":"Autentificación de dos factores","generate_new_recovery_codes":"Generar códigos de recuperación nuevos","warning_of_generate_new_codes":"Cuando generas nuevos códigos de recuperación, los antiguos dejarán de funcionar.","recovery_codes":"Códigos de recuperación.","waiting_a_recovery_codes":"Recibiendo códigos de respaldo…","recovery_codes_warning":"Anote los códigos o guárdelos en un lugar seguro, de lo contrario no los volverá a ver. Si pierde el acceso a su aplicación 2FA y los códigos de recuperación, su cuenta quedará bloqueada.","authentication_methods":"Métodos de autentificación","scan":{"title":"Escanear","desc":"Usando su aplicación de dos factores, escanee este código QR o ingrese la clave de texto:","secret_code":"Clave"},"verify":{"desc":"Para habilitar la autenticación de dos factores, ingrese el código de su aplicación 2FA:"}},"attachmentRadius":"Adjuntos","attachments":"Adjuntos","avatar":"Avatar","avatarAltRadius":"Avatares (notificaciones)","avatarRadius":"Avatares","background":"Fondo","bio":"Biografía","block_export":"Exportar usuarios bloqueados","block_export_button":"Exporta la lista de tus usuarios bloqueados a un archivo csv","block_import":"Importar usuarios bloqueados","block_import_error":"Error importando la lista de usuarios bloqueados","blocks_imported":"¡Lista de usuarios bloqueados importada! El procesado puede tardar un poco.","blocks_tab":"Bloqueados","btnRadius":"Botones","cBlue":"Azul (Responder, seguir)","cGreen":"Verde (Retweet)","cOrange":"Naranja (Favorito)","cRed":"Rojo (Cancelar)","change_password":"Cambiar contraseña","change_password_error":"Hubo un problema cambiando la contraseña.","changed_password":"¡Contraseña cambiada correctamente!","collapse_subject":"Colapsar publicaciones con tema","composing":"Redactando","confirm_new_password":"Confirmar la nueva contraseña","current_avatar":"Tu avatar actual","current_password":"Contraseña actual","current_profile_banner":"Tu cabecera actual","data_import_export_tab":"Importar / Exportar datos","default_vis":"Alcance de visibilidad por defecto","delete_account":"Eliminar la cuenta","discoverable":"Permitir la aparición de esta cuenta en los resultados de búsqueda y otros servicios","delete_account_description":"Eliminar para siempre los datos y desactivar la cuenta.","pad_emoji":"Rellenar con espacios al agregar emojis desde el selector","delete_account_error":"Hubo un error al eliminar tu cuenta. Si el fallo persiste, ponte en contacto con el/la administrador/a de tu instancia.","delete_account_instructions":"Escribe tu contraseña para confirmar la eliminación de tu cuenta.","avatar_size_instruction":"El tamaño mínimo recomendado para el avatar es de 150X150 píxeles.","export_theme":"Exportar tema","filtering":"Filtrado","filtering_explanation":"Todos los estados que contengan estas palabras serán silenciados, una por línea","follow_export":"Exportar personas que tú sigues","follow_export_button":"Exporta tus seguidores a un fichero csv","follow_import":"Importar personas que tú sigues","follow_import_error":"Error al importar el fichero","follows_imported":"¡Importado! Procesarlos llevará tiempo.","foreground":"Primer plano","general":"General","hide_attachments_in_convo":"Ocultar adjuntos en las conversaciones","hide_attachments_in_tl":"Ocultar adjuntos en la línea temporal","hide_muted_posts":"Ocultar las publicaciones de los usuarios silenciados","max_thumbnails":"Cantidad máxima de miniaturas por publicación","hide_isp":"Ocultar el panel específico de la instancia","preload_images":"Precargar las imágenes","use_one_click_nsfw":"Abrir los adjuntos NSFW con un solo click","hide_post_stats":"Ocultar las estadísticas de las publicaciones (p.ej. el número de favoritos)","hide_user_stats":"Ocultar las estadísticas del usuario (p.ej. el número de seguidores)","hide_filtered_statuses":"Ocultar estados filtrados","import_blocks_from_a_csv_file":"Importar lista de usuarios bloqueados dese un archivo csv","import_followers_from_a_csv_file":"Importar personas que tú sigues a partir de un archivo csv","import_theme":"Importar tema","inputRadius":"Campos de entrada","checkboxRadius":"Casillas de verificación","instance_default":"(por defecto: {value})","instance_default_simple":"(por defecto)","interface":"Interfaz","interfaceLanguage":"Idioma","invalid_theme_imported":"El archivo importado no es un tema válido de Pleroma. No se han realizado cambios.","limited_availability":"No disponible en tu navegador","links":"Enlaces","lock_account_description":"Restringir el acceso a tu cuenta solo a seguidores admitidos","loop_video":"Vídeos en bucle","loop_video_silent_only":"Bucle solo en vídeos sin sonido (p.ej. \\"gifs\\" de Mastodon)","mutes_tab":"Silenciados","play_videos_in_modal":"Reproducir los vídeos en un marco emergente","use_contain_fit":"No recortar los adjuntos en miniaturas","name":"Nombre","name_bio":"Nombre y biografía","new_password":"Nueva contraseña","notification_visibility":"Tipos de notificaciones a mostrar","notification_visibility_follows":"Nuevos seguidores","notification_visibility_likes":"Favoritos","notification_visibility_mentions":"Menciones","notification_visibility_repeats":"Repeticiones (Repeats)","no_rich_text_description":"Eliminar el formato de texto enriquecido de todas las publicaciones","no_blocks":"No hay usuarios bloqueados","no_mutes":"No hay usuarios silenciados","hide_follows_description":"No mostrar a quién sigo","hide_followers_description":"No mostrar quién me sigue","hide_follows_count_description":"No mostrar el número de cuentas que sigo","hide_followers_count_description":"No mostrar el número de cuentas que me siguen","show_admin_badge":"Mostrar la insignia de \\"Administrador/a\\" en mi perfil","show_moderator_badge":"Mostrar la insignia de \\"Moderador/a\\" en mi perfil","nsfw_clickthrough":"Habilitar la ocultación de la imagen de vista previa del enlace y el adjunto para los estados NSFW por defecto","oauth_tokens":"Tokens de OAuth","token":"Token","refresh_token":"Actualizar el token","valid_until":"Válido hasta","revoke_token":"Revocar","panelRadius":"Paneles","pause_on_unfocused":"Parar la transmisión cuando no estés en foco","presets":"Por defecto","profile_background":"Imagen de fondo del perfil","profile_banner":"Imagen de cabecera del perfil","profile_tab":"Perfil","radii_help":"Establezca el redondeo de las esquinas de la interfaz (en píxeles)","replies_in_timeline":"Réplicas en la línea temporal","reply_visibility_all":"Mostrar todas las réplicas","reply_visibility_following":"Solo mostrar réplicas para mí o usuarios a los que sigo","reply_visibility_self":"Solo mostrar réplicas para mí","autohide_floating_post_button":"Ocultar automáticamente el botón \'Nueva Publicación\' (para móviles)","saving_err":"Error al guardar los ajustes","saving_ok":"Ajustes guardados","search_user_to_block":"Buscar usuarios a bloquear","search_user_to_mute":"Buscar usuarios a silenciar","security_tab":"Seguridad","scope_copy":"Copiar la visibilidad de la publicación cuando contestamos (En los mensajes directos (MDs) siempre se copia)","minimal_scopes_mode":"Minimizar las opciones de publicación","set_new_avatar":"Cambiar avatar","set_new_profile_background":"Cambiar el fondo del perfil","set_new_profile_banner":"Cambiar la cabecera del perfil","settings":"Ajustes","subject_input_always_show":"Mostrar siempre el campo del tema","subject_line_behavior":"Copiar el tema en las respuestas","subject_line_email":"Como email: \\"re: tema\\"","subject_line_mastodon":"Como mastodon: copiar como es","subject_line_noop":"No copiar","post_status_content_type":"Formato de publicación","stop_gifs":"Iniciar GIFs al pasar el ratón","streaming":"Habilitar la transmisión automática de nuevas publicaciones cuando se desplaza hacia la parte superior","text":"Texto","theme":"Tema","theme_help":"Use códigos de color hexadecimales (#rrggbb) para personalizar su tema de colores.","theme_help_v2_1":"También puede invalidar los colores y la opacidad de ciertos componentes si activa la casilla de verificación. Use el botón \\"Borrar todo\\" para deshacer los cambios.","theme_help_v2_2":"Los iconos debajo de algunas publicaciones son indicadores de contraste de fondo/texto, desplace el ratón por encima para obtener información más detallada. Tenga en cuenta que cuando se utilizan indicadores de contraste de transparencia se muestra el peor caso posible.","tooltipRadius":"Información/alertas","upload_a_photo":"Subir una foto","user_settings":"Ajustes del Usuario","values":{"false":"no","true":"sí"},"notifications":"Notificaciones","notification_mutes":"Para dejar de recibir notificaciones de un usuario específico, siléncialo.","notification_blocks":"El bloqueo de un usuario detiene todas las notificaciones y también las cancela.","enable_web_push_notifications":"Habilitar las notificiaciones en el navegador","style":{"switcher":{"keep_color":"Mantener colores","keep_shadows":"Mantener sombras","keep_opacity":"Mantener opacidad","keep_roundness":"Mantener redondeces","keep_fonts":"Mantener fuentes","save_load_hint":"Las opciones \\"Mantener\\" conservan las opciones configuradas actualmente al seleccionar o cargar temas, también almacena dichas opciones al exportar un tema. Cuando se desactiven todas las casillas de verificación, el tema de exportación lo guardará todo.","reset":"Reiniciar","clear_all":"Limpiar todo","clear_opacity":"Limpiar opacidad","help":{"snapshot_source_mismatch":"Conflicto de versiones: lo más probable es que el frontend se haya revertido y actualizado nuevamente, si cambió el tema con una versión anterior del frontend, lo más probable es que desee usar la versión anterior; de lo contrario, use la nueva versión.","migration_napshot_gone":"Por alguna razón, faltaba la instantánea, algunas cosas podrían verse diferentes de lo que recuerdas.","migration_snapshot_ok":"Solo para estar seguro, se cargó la instantánea del tema. Puede intentar cargar los datos del tema.","fe_downgraded":"Versión de PleromaFE revertida.","fe_upgraded":"El creador de temas de PleromaFE se actualizó después de la actualización de la versión.","snapshot_missing":"No había ninguna instantánea del tema en el archivo, por lo que podría verse diferente de lo previsto originalmente.","snapshot_present":"Se ha cargado una instantánea del tema, por lo que todos los valores se sobrescriben. De lo contrario, puede cargar el tema por completo.","older_version_imported":"El archivo que ha importado se creó en una versión anterior del frontend actual.","v2_imported":"El archivo que ha importado fue creado para un frontend más antiguo. Intentamos maximizar la compatibilidad, pero aún podría haber inconsistencias.","future_version_imported":"El archivo que ha importado se creó para una versión más reciente del frontend.","upgraded_from_v2":"PleromaFE se ha actualizado, el tema podría verse un poco diferente de lo que recuerdas."},"use_source":"Nueva versión","use_snapshot":"Versión antigua","keep_as_is":"Mantener como está","load_theme":"Cargar tema"},"common":{"color":"Color","opacity":"Opacidad","contrast":{"hint":"El ratio de contraste es {ratio}. {level} {context}","level":{"aa":"Cumple con la pauta de nivel AA (mínimo)","aaa":"Cumple con la pauta de nivel AAA (recomendado)","bad":"No cumple con las pautas de accesibilidad"},"context":{"18pt":"para textos grandes (+18pt)","text":"para textos"}}},"common_colors":{"_tab_label":"Común","main":"Colores comunes","foreground_hint":"Vea la pestaña \\"Avanzado\\" para un control más detallado","rgbo":"Iconos, acentos, insignias"},"advanced_colors":{"_tab_label":"Avanzado","alert":"Fondo de Alertas","alert_error":"Error","badge":"Fondo de Insignias","badge_notification":"Notificaciones","panel_header":"Cabecera del panel","top_bar":"Barra superior","borders":"Bordes","buttons":"Botones","inputs":"Campos de entrada","faint_text":"Texto desvanecido","alert_neutral":"Neutral","chat":{"border":"Borde","outgoing":"Salientes","incoming":"Entrantes"},"tabs":"Pestañas","toggled":"Intercambiado","disabled":"Deshabilitado","selectedMenu":"Elemento del menú seleccionado","selectedPost":"Publicación seleccionada","pressed":"Presionado","highlight":"Elementos destacados","icons":"Iconos","poll":"Gráfico de la encuesta","underlay":"Subrayado","popover":"Sugerencias, menús, superposiciones","post":"Publicaciones/Biografías de Usuarios","alert_warning":"Precaución","wallpaper":"Fondo de pantalla"},"radii":{"_tab_label":"Redondez"},"shadows":{"_tab_label":"Sombra e iluminación","component":"Componente","override":"Sobreescribir","shadow_id":"Sombra #{value}","blur":"Difuminar","spread":"Cantidad","inset":"Sombra interior","hint":"Para las sombras, también puede usar --variable como un valor de color para usar las variables CSS3. Tenga en cuenta que establecer la opacidad no funcionará en este caso.","filter_hint":{"always_drop_shadow":"Advertencia, esta sombra siempre usa {0} cuando el navegador lo soporta.","drop_shadow_syntax":"{0} no soporta el parámetro {1} y la palabra clave {2}.","avatar_inset":"Tenga en cuenta que la combinación de sombras interiores como no-interiores en los avatares, puede dar resultados inesperados con los avatares transparentes.","spread_zero":"Sombras con una cantidad > 0 aparecerá como si estuviera puesto a cero","inset_classic":"Las sombras interiores estarán usando {0}"},"components":{"panel":"Panel","panelHeader":"Cabecera del panel","topBar":"Barra superior","avatar":"Avatar del usuario (en la vista del perfil)","avatarStatus":"Avatar del usuario (en la vista de la publicación)","popup":"Ventanas y textos emergentes (popups & tooltips)","button":"Botones","buttonHover":"Botón (encima)","buttonPressed":"Botón (presionado)","buttonPressedHover":"Botón (presionado+encima)","input":"Campo de entrada"},"hintV3":"Para las sombras, también puede usar la notación {0} para usar otro espacio de color."},"fonts":{"_tab_label":"Fuentes","help":"Seleccione la fuente a utilizar para los elementos de la interfaz de usuario. Para \\"personalizar\\", debe ingresar el nombre exacto de la fuente tal como aparece en el sistema.","components":{"interface":"Interfaz","input":"Campos de entrada","post":"Texto de publicaciones","postCode":"Texto monoespaciado en publicación (texto enriquecido)"},"family":"Nombre de la fuente","size":"Tamaño (en px)","weight":"Peso (negrita)","custom":"Personalizado"},"preview":{"header":"Vista previa","content":"Contenido","error":"Ejemplo de error","button":"Botón","text":"Un montón de {0} y {1}","mono":"contenido","input":"Acaba de aterrizar en L.A.","faint_link":"manual útil","fine_print":"¡Lea nuestro {0} para aprender nada útil!","header_faint":"Esto está bien","checkbox":"He revisado los términos y condiciones","link":"un bonito enlace"}},"version":{"title":"Versión","backend_version":"Versión del backend","frontend_version":"Versión del frontend"},"notification_visibility_moves":"Usuario Migrado","greentext":"Texto verde (meme arrows)","notification_setting_hide_notification_contents":"Ocultar el remitente y el contenido de las notificaciones push","notification_setting_privacy":"Privacidad","notification_setting_block_from_strangers":"Bloquea las notificaciones de los usuarios que no sigues","notification_setting_filters":"Filtros","fun":"Divertido","type_domains_to_mute":"Buscar dominios para silenciar","useStreamingApiWarning":"(no recomendado, experimental, puede omitir publicaciones)","useStreamingApi":"Recibir publicaciones y notificaciones en tiempo real","user_mutes":"Usuarios","reset_profile_background":"Restablecer el fondo de pantalla","reset_background_confirm":"¿Estás seguro de restablecer el fondo de pantalla?","reset_banner_confirm":"¿Estás seguro de restablecer la imagen del banner?","reset_avatar_confirm":"¿Estás seguro de restablecer la imagen de avatar?","reset_profile_banner":"Restabler imagen del banner del perfil","reset_avatar":"Restablecer avatar","notification_visibility_emoji_reactions":"Reacciones","new_email":"Nuevo correo electrónico","profile_fields":{"value":"Contenido","name":"Etiqueta","add_field":"Añadir un campo","label":"Metadatos del perfil"},"accent":"Acento","emoji_reactions_on_timeline":"Mostrar las reacciones de emoji en la línea de tiempo","domain_mutes":"Dominios","mutes_and_blocks":"Silenciado y Bloqueados","chatMessageRadius":"Mensaje de chat","changed_email":"¡Correo electrónico modificado correctamente!","change_email_error":"Ha ocurrido un error al intentar modificar tu correo electrónico.","change_email":"Modificar el correo electrónico","bot":"Esta cuenta es un bot","allow_following_move":"Permitir el seguimiento automático, cuando la cuenta que sigues se traslada a otra instancia","virtual_scrolling":"Optimizar la representación de la linea temporal","import_mutes_from_a_csv_file":"Importar silenciados desde un archivo csv","mutes_imported":"¡Silenciados importados! Procesarlos llevará un tiempo.","mute_import_error":"Error al importar los silenciados","mute_import":"Importar silenciados","mute_export_button":"Exportar los silenciados a un archivo csv","mute_export":"Exportar silenciados","hide_wallpaper":"Ocultar el fondo de pantalla de la instancia","setting_changed":"La configuración es diferente a la predeterminada","hide_all_muted_posts":"Ocultar las publicaciones silenciadas","more_settings":"Más opciones","sensitive_by_default":"Identificar las publicaciones como sensibles de forma predeterminada","reply_visibility_self_short":"Mostrar respuestas solo a uno mismo","reply_visibility_following_short":"Mostrar las réplicas a mis seguidores","hide_media_previews":"Ocultar la vista previa multimedia","word_filter":"Filtro de palabras","save":"Guardar los cambios","file_export_import":{"errors":{"invalid_file":"El archivo seleccionado no es válido como copia de seguridad de Pleroma. No se han realizado cambios.","file_too_new":"Versión principal incompatible: {fileMajor}, este \\"FrontEnd\\" de Pleroma (versión de configuración {feMajor}) es demasiado antiguo para manejarlo","file_too_old":"Versión principal incompatible: {fileMajor}, la versión del archivo es demasiado antigua y no es compatible (versión mínima {FeMajor})","file_slightly_new":"La versión secundaria del archivo es diferente, es posible que algunas configuraciones no se carguen"},"restore_settings":"Restaurar ajustes desde archivo","backup_settings_theme":"Descargar la copia de seguridad de la configuración y del tema","backup_settings":"Descargar la copia de seguridad de la configuración","backup_restore":"Copia de seguridad de la configuración"},"hide_shoutbox":"Ocultar cuadro de diálogo de la instancia","right_sidebar":"Mostrar la barra lateral a la derecha"},"time":{"day":"{0} día","days":"{0} días","day_short":"{0}d","days_short":"{0}d","hour":"{0} hora","hours":"{0} horas","hour_short":"{0}h","hours_short":"{0}h","in_future":"en {0}","in_past":"hace {0}","minute":"{0} minuto","minutes":"{0} minutos","minute_short":"{0}min","minutes_short":"{0}min","month":"{0} mes","months":"{0} meses","month_short":"{0}m","months_short":"{0}m","now":"justo ahora","now_short":"ahora","second":"{0} segundo","seconds":"{0} segundos","second_short":"{0}s","seconds_short":"{0}s","week":"{0} semana","weeks":"{0} semanas","week_short":"{0}sem","weeks_short":"{0}sem","year":"{0} año","years":"{0} años","year_short":"{0}a","years_short":"{0}a"},"timeline":{"collapse":"Colapsar","conversation":"Conversación","error_fetching":"Error al cargar las actualizaciones","load_older":"Cargar actualizaciones anteriores","no_retweet_hint":"La publicación está marcada como solo para seguidores o directa y no se puede repetir","repeated":"repetida","show_new":"Mostrar lo nuevo","up_to_date":"Actualizado","no_more_statuses":"No hay más estados","no_statuses":"Sin estados","reload":"Recargar","error":"Error obteniendo la linea de tiempo:{0}","socket_broke":"Conexión en timpo real perdida: código del motivo {0}","socket_reconnected":"Establecida la conexión en tiempo real"},"status":{"favorites":"Favoritos","repeats":"Repetidos","delete":"Eliminar publicación","pin":"Fijar en tu perfil","unpin":"Desclavar de tu perfil","pinned":"Fijado","delete_confirm":"¿Realmente quieres borrar la publicación?","reply_to":"Respondiendo a","replies_list":"Respuestas:","mute_conversation":"Silenciar la conversación","unmute_conversation":"Mostrar la conversación","hide_content":"Ocultar el contenido","show_content":"Mostrar el contenido","hide_full_subject":"Ocultar el tema completo","show_full_subject":"Mostrar el tema completo","thread_muted_and_words":", contiene:","thread_muted":"Conversación silenciada","copy_link":"Copiar el enlace al estado","status_unavailable":"Estado no disponible","bookmark":"Marcar","unbookmark":"Desmarcar","status_deleted":"Esta publicación ha sido eliminada","nsfw":"NSFW (No apropiado para el trabajo)","expand":"Expandir","external_source":"Fuente externa"},"user_card":{"approve":"Aprobar","block":"Bloquear","blocked":"¡Bloqueado!","deny":"Denegar","favorites":"Favoritos","follow":"Seguir","follow_sent":"¡Solicitud enviada!","follow_progress":"Solicitando…","follow_unfollow":"Dejar de seguir","followees":"Siguiendo","followers":"Seguidores","following":"¡Siguiendo!","follows_you":"¡Te sigue!","its_you":"¡Eres tú!","media":"Media","mention":"Mencionar","mute":"Silenciar","muted":"Silenciado","per_day":"por día","remote_follow":"Seguir","report":"Reportar","statuses":"Estados","subscribe":"Suscribirse","unsubscribe":"Desuscribirse","unblock":"Desbloquear","unblock_progress":"Desbloqueando…","block_progress":"Bloqueando…","unmute":"Dejar de silenciar","unmute_progress":"Quitando silencio…","mute_progress":"Silenciando…","admin_menu":{"moderation":"Moderación","grant_admin":"Conceder permisos de Administrador/a","revoke_admin":"Revocar permisos de Administrador/a","grant_moderator":"Conceder permisos de Moderador/a","revoke_moderator":"Revocar permisos de Moderador/a","activate_account":"Activar cuenta","deactivate_account":"Desactivar cuenta","delete_account":"Eliminar cuenta","force_nsfw":"Marcar todas las publicaciones como NSFW (no es seguro/apropiado para el trabajo)","strip_media":"Eliminar archivos multimedia de las publicaciones","force_unlisted":"Forzar que se publique en el modo -Sin Listar-","sandbox":"Forzar que se publique solo para tus seguidores","disable_remote_subscription":"No permitir que usuarios de instancias remotas te siga","disable_any_subscription":"No permitir que ningún usuario te siga","quarantine":"No permitir publicaciones de usuarios de instancias remotas","delete_user":"Eliminar usuario","delete_user_confirmation":"¿Estás completamente seguro? Esta acción no se puede deshacer."},"show_repeats":"Mostrar repetidos","hide_repeats":"Ocultar repetidos","message":"Mensaje","hidden":"Oculto","roles":{"moderator":"Moderador","admin":"Administrador"},"highlight":{"striped":"Fondo rayado","side":"Raya lateral","solid":"Fondo sólido","disabled":"Sin resaltado"},"bot":"Bot","edit_profile":"Edita el perfil"},"user_profile":{"timeline_title":"Línea temporal del usuario","profile_does_not_exist":"Lo sentimos, este perfil no existe.","profile_loading_error":"Lo sentimos, hubo un error al cargar este perfil."},"user_reporting":{"title":"Reportando a {0}","add_comment_description":"El informe será enviado a los/las moderadores/as de su instancia. Puedes proporcionar una explicación de por qué estás reportando esta cuenta a continuación:","additional_comments":"Comentarios adicionales","forward_description":"La cuenta es de otro servidor. ¿Enviar una copia del informe allí también?","forward_to":"Reenviar a {0}","submit":"Enviar","generic_error":"Se produjo un error al procesar la solicitud."},"who_to_follow":{"more":"Más","who_to_follow":"A quién seguir"},"tool_tip":{"media_upload":"Subir multimedia","repeat":"Repetir","reply":"Contestar","favorite":"Favorito","user_settings":"Ajustes de usuario","bookmark":"Marcador","reject_follow_request":"Rechazar la solicitud de seguimiento","accept_follow_request":"Aceptar la solicitud de seguimiento","add_reaction":"Añadir Reacción"},"upload":{"error":{"base":"Subida fallida.","file_too_big":"Archivo demasiado grande [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]","default":"Inténtalo más tarde","message":"Error de subida: {0}"},"file_size_units":{"B":"B","KiB":"KiB","MiB":"MiB","GiB":"GiB","TiB":"TiB"}},"search":{"people":"Personas","hashtags":"Etiquetas","person_talking":"{count} personas hablando","people_talking":"{count} gente hablando","no_results":"Sin resultados"},"password_reset":{"forgot_password":"¿Contraseña olvidada?","password_reset":"Restablecer la contraseña","instruction":"Ingrese su dirección de correo electrónico o nombre de usuario. Le enviaremos un enlace para restablecer su contraseña.","placeholder":"Su correo electrónico o nombre de usuario","check_email":"Revise su correo electrónico para obtener un enlace para restablecer su contraseña.","return_home":"Volver a la página de inicio","too_many_requests":"Has alcanzado el límite de intentos, vuelve a intentarlo más tarde.","password_reset_disabled":"El restablecimiento de contraseñas está deshabilitado. Póngase en contacto con el administrador de su instancia.","password_reset_required_but_mailer_is_disabled":"Debes restablecer la contraseña, pero el restablecimiento de contraseñas está deshabilitado. Por favor contacta con el administrador de la instancia.","password_reset_required":"Debes restablecer la contraseña para iniciar sesión."},"errors":{"storage_unavailable":"Pleroma no pudo acceder al almacenamiento del navegador. Su inicio de sesión o su configuración local no se guardarán y puede encontrar problemas inesperados. Intente habilitar las cookies."},"domain_mute_card":{"unmute_progress":"Quitando silencio…","unmute":"Dejar de silenciar","mute_progress":"Silenciando…","mute":"Silenciar"},"about":{"mrf":{"simple":{"accept_desc":"Esta instancia solo acepta mensajes de las siguientes instancias:","media_nsfw_desc":"Esta instancia obliga a que los archivos multimedia se establezcan como sensibles en las publicaciones de las siguientes instancias:","media_nsfw":"Forzar contenido multimedia como sensible","media_removal_desc":"Esta instancia elimina los archivos multimedia de las publicaciones de las siguientes instancias:","media_removal":"Eliminar Multimedia","quarantine":"Cuarentena","ftl_removal_desc":"Esta instancia elimina las siguientes instancias de la línea de tiempo \\"Red Conocida\\":","ftl_removal":"Eliminar de la línea de tiempo \\"Red Conocida\\"","quarantine_desc":"Esta instancia enviará solo publicaciones públicas a las siguientes instancias:","simple_policies":"Políticas específicas de la instancia","reject_desc":"Esta instancia no aceptará mensajes de las siguientes instancias:","reject":"Rechazar","accept":"Aceptar"},"mrf_policies_desc":"Las políticas MRF manipulan la federación de esta instancia con el resto del fediverso. Las siguientes políticas están habilitadas:","mrf_policies":"Habilitar políticas MRF","keyword":{"ftl_removal":"Eliminar de la línea de tiempo \\"Toda La Red Conocida\\"","keyword_policies":"Política de Palabras Clave","is_replaced_by":"→","replace":"Reemplazar","reject":"Rechazar"},"federation":"Federación"},"staff":"Equipo"},"shoutbox":{"title":"Jaula de Grillos"},"remote_user_resolver":{"remote_user_resolver":"Resolución de usuario remoto","error":"No encontrado.","searching_for":"Buscando"},"chats":{"chats":"Chats","empty_chat_list_placeholder":"Aún no tienes ninguna conversación. ¡Inicia una nueva conversación!","error_sending_message":"Algo salió mal al enviar el mensaje.","error_loading_chat":"Algo salió mal al cargar el chat.","delete_confirm":"¿Realmente quieres borrar este mensaje?","more":"Más","empty_message_error":"No puedes publicar un mensaje vacío","new":"Nueva conversación","delete":"Borrar","message_user":"Mensaje de {nickname}","you":"Tú:"},"display_date":{"today":"Hoy"},"file_type":{"file":"Archivo","image":"Imagen","video":"Vídeo","audio":"Audio"}}')}}]); +//# sourceMappingURL=10.02ffbc25214f297f720f.js.map \ No newline at end of file diff --git a/priv/static/static/js/10.fdbf093cc5602ca4f2e1.js.map b/priv/static/static/js/10.02ffbc25214f297f720f.js.map similarity index 56% rename from priv/static/static/js/10.fdbf093cc5602ca4f2e1.js.map rename to priv/static/static/js/10.02ffbc25214f297f720f.js.map index 978f9e54d..6b230613d 100644 --- a/priv/static/static/js/10.fdbf093cc5602ca4f2e1.js.map +++ b/priv/static/static/js/10.02ffbc25214f297f720f.js.map @@ -1 +1 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/10.fdbf093cc5602ca4f2e1.js","sourceRoot":""} \ No newline at end of file +{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/10.02ffbc25214f297f720f.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/10.fdbf093cc5602ca4f2e1.js b/priv/static/static/js/10.fdbf093cc5602ca4f2e1.js deleted file mode 100644 index 966332053..000000000 --- a/priv/static/static/js/10.fdbf093cc5602ca4f2e1.js +++ /dev/null @@ -1,2 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[10],{590:function(e){e.exports=JSON.parse('{"chat":{"title":"Chat"},"exporter":{"export":"Exportar","processing":"Procesando. Pronto se te pedirá que descargues tu archivo"},"features_panel":{"chat":"Chat","gopher":"Gopher","media_proxy":"Proxy de medios","scope_options":"Opciones del alcance de la visibilidad","text_limit":"Límite de caracteres","title":"Características","who_to_follow":"A quién seguir","pleroma_chat_messages":"Chat de Pleroma","upload_limit":"Límite de subida"},"finder":{"error_fetching_user":"Error al buscar usuario","find_user":"Encontrar usuario"},"general":{"apply":"Aplicar","submit":"Enviar","more":"Más","generic_error":"Ha ocurrido un error","optional":"opcional","show_more":"Mostrar más","show_less":"Mostrar menos","cancel":"Cancelar","disable":"Inhabilitar","enable":"Habilitar","confirm":"Confirmar","verify":"Verificar","peek":"Previsualizar","close":"Cerrar","dismiss":"Descartar","retry":"Inténtalo de nuevo","error_retry":"Por favor, inténtalo de nuevo","loading":"Cargando…","role":{"admin":"Administrador/a","moderator":"Moderador/a"}},"image_cropper":{"crop_picture":"Recortar la foto","save":"Guardar","save_without_cropping":"Guardar sin recortar","cancel":"Cancelar"},"importer":{"submit":"Enviar","success":"Importado con éxito.","error":"Se ha producido un error al importar el archivo."},"login":{"login":"Identificarse","description":"Identificarse con OAuth","logout":"Cerrar sesión","password":"Contraseña","placeholder":"p.ej. lain","register":"Registrarse","username":"Usuario","hint":"Inicia sesión para unirte a la discusión","authentication_code":"Código de autenticación","enter_recovery_code":"Inserta el código de recuperación","enter_two_factor_code":"Inserta el código de dos factores","recovery_code":"Código de recuperación","heading":{"totp":"Autenticación de dos factores","recovery":"Recuperación de dos factores"}},"media_modal":{"previous":"Anterior","next":"Siguiente"},"nav":{"about":"Acerca de","administration":"Administración","back":"Volver","chat":"Chat Local","friend_requests":"Solicitudes de seguimiento","mentions":"Menciones","interactions":"Interacciones","dms":"Mensajes directos","public_tl":"Línea temporal pública","timeline":"Línea Temporal","twkn":"Red Conocida","user_search":"Búsqueda de Usuarios","search":"Buscar","who_to_follow":"A quién seguir","preferences":"Preferencias","chats":"Chats","timelines":"Líneas de Tiempo","bookmarks":"Marcadores","home_timeline":"Línea temporal personal"},"notifications":{"broken_favorite":"Estado desconocido, buscándolo…","favorited_you":"le gusta tu estado","followed_you":"empezó a seguirte","load_older":"Cargar notificaciones antiguas","notifications":"Notificaciones","read":"¡Leído!","repeated_you":"repitió tu estado","no_more_notifications":"No hay más notificaciones","reacted_with":"reaccionó con {0}","migrated_to":"migrado a","follow_request":"quiere seguirte","error":"Error obteniendo notificaciones:{0}"},"polls":{"add_poll":"Añadir encuesta","add_option":"Añadir opción","option":"Opción","votes":"votos","vote":"Votar","type":"Tipo de encuesta","single_choice":"Elección única","multiple_choices":"Elección múltiple","expiry":"Tiempo de vida de la encuesta","expires_in":"La encuesta termina en {0}","expired":"La encuesta terminó hace {0}","not_enough_options":"Muy pocas opciones únicas en la encuesta","people_voted_count":"{count} persona votó | {count} personas votaron","votes_count":"{count} voto | {count} votos"},"emoji":{"stickers":"Pegatinas","emoji":"Emoji","keep_open":"Mantener el selector abierto","search_emoji":"Buscar un emoji","add_emoji":"Insertar un emoji","custom":"Emojis personalizados","unicode":"Emojis unicode","load_all":"Cargando todos los {emojiAmount} emoji","load_all_hint":"Cargado el primer emoji {saneAmount}, cargar todos los emoji puede causar problemas de rendimiento."},"stickers":{"add_sticker":"Añadir Pegatina"},"interactions":{"favs_repeats":"Favoritos y repetidos","follows":"Nuevos seguidores","load_older":"Cargar interacciones más antiguas","moves":"Usuario Migrado"},"post_status":{"new_status":"Publicar un nuevo estado","account_not_locked_warning":"Tu cuenta no está {0}. Cualquiera puede seguirte y leer las publicaciones para Solo-Seguidores.","account_not_locked_warning_link":"bloqueada","attachments_sensitive":"Contenido sensible","content_type":{"text/plain":"Texto Plano","text/html":"HTML","text/markdown":"Markdown","text/bbcode":"BBCode"},"content_warning":"Tema (opcional)","default":"Acabo de aterrizar en L.A.","direct_warning_to_all":"Esta publicación será visible para todos los usuarios mencionados.","direct_warning_to_first_only":"Esta publicación solo será visible para los usuarios mencionados al comienzo del mensaje.","posting":"Publicando","scope_notice":{"public":"Esta publicación será visible para todo el mundo","private":"Esta publicación solo será visible para tus seguidores","unlisted":"Esta publicación no será visible en la Línea Temporal Pública ni en Toda La Red Conocida"},"scope":{"direct":"Directo - solo para los usuarios mencionados","private":"Solo-seguidores - solo tus seguidores leerán la publicación","public":"Público - publicaciones visibles en las líneas temporales públicas","unlisted":"Sin listar -publicaciones no visibles en las líneas temporales públicas"},"media_description_error":"Error al actualizar el archivo, inténtalo de nuevo","empty_status_error":"No se puede publicar un estado vacío y sin archivos adjuntos","preview_empty":"Vacío","preview":"Vista previa","media_description":"Descripción multimedia","post":"Publicación"},"registration":{"bio":"Biografía","email":"Correo electrónico","fullname":"Nombre a mostrar","password_confirm":"Confirmar contraseña","registration":"Registro","token":"Token de invitación","captcha":"CAPTCHA","new_captcha":"Haz click en la imagen para obtener un nuevo captcha","username_placeholder":"p.ej. lain","fullname_placeholder":"p.ej. Lain Iwakura","bio_placeholder":"e.g.\\nHola, soy un ejemplo.\\nAquí puedes poner algo representativo tuyo... o no.","validations":{"username_required":"no puede estar vacío","fullname_required":"no puede estar vacío","email_required":"no puede estar vacío","password_required":"no puede estar vacío","password_confirmation_required":"no puede estar vacío","password_confirmation_match":"la contraseña no coincide"},"reason_placeholder":"Los registros de esta instancia son aprobados manualmente.\\nComéntanos por qué quieres registrarte aquí.","reason":"Razón para registrarse","register":"Registrarse"},"selectable_list":{"select_all":"Seleccionar todo"},"settings":{"app_name":"Nombre de la aplicación","security":"Seguridad","enter_current_password_to_confirm":"Introduce la contraseña actual para confirmar tu identidad","mfa":{"otp":"OTP","setup_otp":"Configurar OTP","wait_pre_setup_otp":"preconfiguración OTP","confirm_and_enable":"Confirmar y habilitar OTP","title":"Autentificación de dos factores","generate_new_recovery_codes":"Generar códigos de recuperación nuevos","warning_of_generate_new_codes":"Cuando generas nuevos códigos de recuperación, los antiguos dejarán de funcionar.","recovery_codes":"Códigos de recuperación.","waiting_a_recovery_codes":"Recibiendo códigos de respaldo…","recovery_codes_warning":"Anote los códigos o guárdelos en un lugar seguro, de lo contrario no los volverá a ver. Si pierde el acceso a su aplicación 2FA y los códigos de recuperación, su cuenta quedará bloqueada.","authentication_methods":"Métodos de autentificación","scan":{"title":"Escanear","desc":"Usando su aplicación de dos factores, escanee este código QR o ingrese la clave de texto:","secret_code":"Clave"},"verify":{"desc":"Para habilitar la autenticación de dos factores, ingrese el código de su aplicación 2FA:"}},"attachmentRadius":"Adjuntos","attachments":"Adjuntos","avatar":"Avatar","avatarAltRadius":"Avatares (notificaciones)","avatarRadius":"Avatares","background":"Fondo","bio":"Biografía","block_export":"Exportar usuarios bloqueados","block_export_button":"Exporta la lista de tus usuarios bloqueados a un archivo csv","block_import":"Importar usuarios bloqueados","block_import_error":"Error importando la lista de usuarios bloqueados","blocks_imported":"¡Lista de usuarios bloqueados importada! El procesado puede tardar un poco.","blocks_tab":"Bloqueados","btnRadius":"Botones","cBlue":"Azul (Responder, seguir)","cGreen":"Verde (Retweet)","cOrange":"Naranja (Favorito)","cRed":"Rojo (Cancelar)","change_password":"Cambiar contraseña","change_password_error":"Hubo un problema cambiando la contraseña.","changed_password":"¡Contraseña cambiada correctamente!","collapse_subject":"Colapsar publicaciones con tema","composing":"Redactando","confirm_new_password":"Confirmar la nueva contraseña","current_avatar":"Tu avatar actual","current_password":"Contraseña actual","current_profile_banner":"Tu cabecera actual","data_import_export_tab":"Importar / Exportar datos","default_vis":"Alcance de visibilidad por defecto","delete_account":"Eliminar la cuenta","discoverable":"Permitir la aparición de esta cuenta en los resultados de búsqueda y otros servicios","delete_account_description":"Eliminar para siempre los datos y desactivar la cuenta.","pad_emoji":"Rellenar con espacios al agregar emojis desde el selector","delete_account_error":"Hubo un error al eliminar tu cuenta. Si el fallo persiste, ponte en contacto con el/la administrador/a de tu instancia.","delete_account_instructions":"Escribe tu contraseña para confirmar la eliminación de tu cuenta.","avatar_size_instruction":"El tamaño mínimo recomendado para el avatar es de 150X150 píxeles.","export_theme":"Exportar tema","filtering":"Filtrado","filtering_explanation":"Todos los estados que contengan estas palabras serán silenciados, una por línea","follow_export":"Exportar personas que tú sigues","follow_export_button":"Exporta tus seguidores a un fichero csv","follow_import":"Importar personas que tú sigues","follow_import_error":"Error al importar el fichero","follows_imported":"¡Importado! Procesarlos llevará tiempo.","foreground":"Primer plano","general":"General","hide_attachments_in_convo":"Ocultar adjuntos en las conversaciones","hide_attachments_in_tl":"Ocultar adjuntos en la línea temporal","hide_muted_posts":"Ocultar las publicaciones de los usuarios silenciados","max_thumbnails":"Cantidad máxima de miniaturas por publicación","hide_isp":"Ocultar el panel específico de la instancia","preload_images":"Precargar las imágenes","use_one_click_nsfw":"Abrir los adjuntos NSFW con un solo click","hide_post_stats":"Ocultar las estadísticas de las publicaciones (p.ej. el número de favoritos)","hide_user_stats":"Ocultar las estadísticas del usuario (p.ej. el número de seguidores)","hide_filtered_statuses":"Ocultar estados filtrados","import_blocks_from_a_csv_file":"Importar lista de usuarios bloqueados dese un archivo csv","import_followers_from_a_csv_file":"Importar personas que tú sigues a partir de un archivo csv","import_theme":"Importar tema","inputRadius":"Campos de entrada","checkboxRadius":"Casillas de verificación","instance_default":"(por defecto: {value})","instance_default_simple":"(por defecto)","interface":"Interfaz","interfaceLanguage":"Idioma","invalid_theme_imported":"El archivo importado no es un tema válido de Pleroma. No se han realizado cambios.","limited_availability":"No disponible en tu navegador","links":"Enlaces","lock_account_description":"Restringir el acceso a tu cuenta solo a seguidores admitidos","loop_video":"Vídeos en bucle","loop_video_silent_only":"Bucle solo en vídeos sin sonido (p.ej. \\"gifs\\" de Mastodon)","mutes_tab":"Silenciados","play_videos_in_modal":"Reproducir los vídeos en un marco emergente","use_contain_fit":"No recortar los adjuntos en miniaturas","name":"Nombre","name_bio":"Nombre y biografía","new_password":"Nueva contraseña","notification_visibility":"Tipos de notificaciones a mostrar","notification_visibility_follows":"Nuevos seguidores","notification_visibility_likes":"Favoritos","notification_visibility_mentions":"Menciones","notification_visibility_repeats":"Repeticiones (Repeats)","no_rich_text_description":"Eliminar el formato de texto enriquecido de todas las publicaciones","no_blocks":"No hay usuarios bloqueados","no_mutes":"No hay usuarios silenciados","hide_follows_description":"No mostrar a quién sigo","hide_followers_description":"No mostrar quién me sigue","hide_follows_count_description":"No mostrar el número de cuentas que sigo","hide_followers_count_description":"No mostrar el número de cuentas que me siguen","show_admin_badge":"Mostrar la insignia de \\"Administrador/a\\" en mi perfil","show_moderator_badge":"Mostrar la insignia de \\"Moderador/a\\" en mi perfil","nsfw_clickthrough":"Habilitar la ocultación de la imagen de vista previa del enlace y el adjunto para los estados NSFW por defecto","oauth_tokens":"Tokens de OAuth","token":"Token","refresh_token":"Actualizar el token","valid_until":"Válido hasta","revoke_token":"Revocar","panelRadius":"Paneles","pause_on_unfocused":"Parar la transmisión cuando no estés en foco","presets":"Por defecto","profile_background":"Imagen de fondo del perfil","profile_banner":"Imagen de cabecera del perfil","profile_tab":"Perfil","radii_help":"Establezca el redondeo de las esquinas de la interfaz (en píxeles)","replies_in_timeline":"Réplicas en la línea temporal","reply_visibility_all":"Mostrar todas las réplicas","reply_visibility_following":"Solo mostrar réplicas para mí o usuarios a los que sigo","reply_visibility_self":"Solo mostrar réplicas para mí","autohide_floating_post_button":"Ocultar automáticamente el botón \'Nueva Publicación\' (para móviles)","saving_err":"Error al guardar los ajustes","saving_ok":"Ajustes guardados","search_user_to_block":"Buscar usuarios a bloquear","search_user_to_mute":"Buscar usuarios a silenciar","security_tab":"Seguridad","scope_copy":"Copiar la visibilidad de la publicación cuando contestamos (En los mensajes directos (MDs) siempre se copia)","minimal_scopes_mode":"Minimizar las opciones de publicación","set_new_avatar":"Cambiar avatar","set_new_profile_background":"Cambiar el fondo del perfil","set_new_profile_banner":"Cambiar la cabecera del perfil","settings":"Ajustes","subject_input_always_show":"Mostrar siempre el campo del tema","subject_line_behavior":"Copiar el tema en las respuestas","subject_line_email":"Como email: \\"re: tema\\"","subject_line_mastodon":"Como mastodon: copiar como es","subject_line_noop":"No copiar","post_status_content_type":"Formato de publicación","stop_gifs":"Iniciar GIFs al pasar el ratón","streaming":"Habilitar la transmisión automática de nuevas publicaciones cuando se desplaza hacia la parte superior","text":"Texto","theme":"Tema","theme_help":"Use códigos de color hexadecimales (#rrggbb) para personalizar su tema de colores.","theme_help_v2_1":"También puede invalidar los colores y la opacidad de ciertos componentes si activa la casilla de verificación. Use el botón \\"Borrar todo\\" para deshacer los cambios.","theme_help_v2_2":"Los iconos debajo de algunas publicaciones son indicadores de contraste de fondo/texto, desplace el ratón por encima para obtener información más detallada. Tenga en cuenta que cuando se utilizan indicadores de contraste de transparencia se muestra el peor caso posible.","tooltipRadius":"Información/alertas","upload_a_photo":"Subir una foto","user_settings":"Ajustes del Usuario","values":{"false":"no","true":"sí"},"notifications":"Notificaciones","notification_mutes":"Para dejar de recibir notificaciones de un usuario específico, siléncialo.","notification_blocks":"El bloqueo de un usuario detiene todas las notificaciones y también las cancela.","enable_web_push_notifications":"Habilitar las notificiaciones en el navegador","style":{"switcher":{"keep_color":"Mantener colores","keep_shadows":"Mantener sombras","keep_opacity":"Mantener opacidad","keep_roundness":"Mantener redondeces","keep_fonts":"Mantener fuentes","save_load_hint":"Las opciones \\"Mantener\\" conservan las opciones configuradas actualmente al seleccionar o cargar temas, también almacena dichas opciones al exportar un tema. Cuando se desactiven todas las casillas de verificación, el tema de exportación lo guardará todo.","reset":"Reiniciar","clear_all":"Limpiar todo","clear_opacity":"Limpiar opacidad","help":{"snapshot_source_mismatch":"Conflicto de versiones: lo más probable es que el frontend se haya revertido y actualizado nuevamente, si cambió el tema con una versión anterior del frontend, lo más probable es que desee usar la versión anterior; de lo contrario, use la nueva versión.","migration_napshot_gone":"Por alguna razón, faltaba la instantánea, algunas cosas podrían verse diferentes de lo que recuerdas.","migration_snapshot_ok":"Solo para estar seguro, se cargó la instantánea del tema. Puede intentar cargar los datos del tema.","fe_downgraded":"Versión de PleromaFE revertida.","fe_upgraded":"El creador de temas de PleromaFE se actualizó después de la actualización de la versión.","snapshot_missing":"No había ninguna instantánea del tema en el archivo, por lo que podría verse diferente de lo previsto originalmente.","snapshot_present":"Se ha cargado una instantánea del tema, por lo que todos los valores se sobrescriben. De lo contrario, puede cargar el tema por completo.","older_version_imported":"El archivo que ha importado se creó en una versión anterior del frontend actual.","v2_imported":"El archivo que ha importado fue creado para un frontend más antiguo. Intentamos maximizar la compatibilidad, pero aún podría haber inconsistencias.","future_version_imported":"El archivo que ha importado se creó para una versión más reciente del frontend.","upgraded_from_v2":"PleromaFE se ha actualizado, el tema podría verse un poco diferente de lo que recuerdas."},"use_source":"Nueva versión","use_snapshot":"Versión antigua","keep_as_is":"Mantener como está","load_theme":"Cargar tema"},"common":{"color":"Color","opacity":"Opacidad","contrast":{"hint":"El ratio de contraste es {ratio}. {level} {context}","level":{"aa":"Cumple con la pauta de nivel AA (mínimo)","aaa":"Cumple con la pauta de nivel AAA (recomendado)","bad":"No cumple con las pautas de accesibilidad"},"context":{"18pt":"para textos grandes (+18pt)","text":"para textos"}}},"common_colors":{"_tab_label":"Común","main":"Colores comunes","foreground_hint":"Vea la pestaña \\"Avanzado\\" para un control más detallado","rgbo":"Iconos, acentos, insignias"},"advanced_colors":{"_tab_label":"Avanzado","alert":"Fondo de Alertas","alert_error":"Error","badge":"Fondo de Insignias","badge_notification":"Notificaciones","panel_header":"Cabecera del panel","top_bar":"Barra superior","borders":"Bordes","buttons":"Botones","inputs":"Campos de entrada","faint_text":"Texto desvanecido","alert_neutral":"Neutral","chat":{"border":"Borde","outgoing":"Salientes","incoming":"Entrantes"},"tabs":"Pestañas","toggled":"Intercambiado","disabled":"Deshabilitado","selectedMenu":"Elemento del menú seleccionado","selectedPost":"Publicación seleccionada","pressed":"Presionado","highlight":"Elementos destacados","icons":"Iconos","poll":"Gráfico de la encuesta","underlay":"Subrayado","popover":"Sugerencias, menús, superposiciones","post":"Publicaciones/Biografías de Usuarios","alert_warning":"Precaución","wallpaper":"Fondo de pantalla"},"radii":{"_tab_label":"Redondez"},"shadows":{"_tab_label":"Sombra e iluminación","component":"Componente","override":"Sobreescribir","shadow_id":"Sombra #{value}","blur":"Difuminar","spread":"Cantidad","inset":"Sombra interior","hint":"Para las sombras, también puede usar --variable como un valor de color para usar las variables CSS3. Tenga en cuenta que establecer la opacidad no funcionará en este caso.","filter_hint":{"always_drop_shadow":"Advertencia, esta sombra siempre usa {0} cuando el navegador lo soporta.","drop_shadow_syntax":"{0} no soporta el parámetro {1} y la palabra clave {2}.","avatar_inset":"Tenga en cuenta que la combinación de sombras interiores como no-interiores en los avatares, puede dar resultados inesperados con los avatares transparentes.","spread_zero":"Sombras con una cantidad > 0 aparecerá como si estuviera puesto a cero","inset_classic":"Las sombras interiores estarán usando {0}"},"components":{"panel":"Panel","panelHeader":"Cabecera del panel","topBar":"Barra superior","avatar":"Avatar del usuario (en la vista del perfil)","avatarStatus":"Avatar del usuario (en la vista de la publicación)","popup":"Ventanas y textos emergentes (popups & tooltips)","button":"Botones","buttonHover":"Botón (encima)","buttonPressed":"Botón (presionado)","buttonPressedHover":"Botón (presionado+encima)","input":"Campo de entrada"},"hintV3":"Para las sombras, también puede usar la notación {0} para usar otro espacio de color."},"fonts":{"_tab_label":"Fuentes","help":"Seleccione la fuente a utilizar para los elementos de la interfaz de usuario. Para \\"personalizar\\", debe ingresar el nombre exacto de la fuente tal como aparece en el sistema.","components":{"interface":"Interfaz","input":"Campos de entrada","post":"Texto de publicaciones","postCode":"Texto monoespaciado en publicación (texto enriquecido)"},"family":"Nombre de la fuente","size":"Tamaño (en px)","weight":"Peso (negrita)","custom":"Personalizado"},"preview":{"header":"Vista previa","content":"Contenido","error":"Ejemplo de error","button":"Botón","text":"Un montón de {0} y {1}","mono":"contenido","input":"Acaba de aterrizar en L.A.","faint_link":"manual útil","fine_print":"¡Lea nuestro {0} para aprender nada útil!","header_faint":"Esto está bien","checkbox":"He revisado los términos y condiciones","link":"un bonito enlace"}},"version":{"title":"Versión","backend_version":"Versión del backend","frontend_version":"Versión del frontend"},"notification_visibility_moves":"Usuario Migrado","greentext":"Texto verde (meme arrows)","notification_setting_hide_notification_contents":"Ocultar el remitente y el contenido de las notificaciones push","notification_setting_privacy":"Privacidad","notification_setting_block_from_strangers":"Bloquea las notificaciones de los usuarios que no sigues","notification_setting_filters":"Filtros","fun":"Divertido","type_domains_to_mute":"Buscar dominios para silenciar","useStreamingApiWarning":"(no recomendado, experimental, puede omitir publicaciones)","useStreamingApi":"Recibir publicaciones y notificaciones en tiempo real","user_mutes":"Usuarios","reset_profile_background":"Restablecer el fondo de pantalla","reset_background_confirm":"¿Estás seguro de restablecer el fondo de pantalla?","reset_banner_confirm":"¿Estás seguro de restablecer la imagen del banner?","reset_avatar_confirm":"¿Estás seguro de restablecer la imagen de avatar?","reset_profile_banner":"Restabler imagen del banner del perfil","reset_avatar":"Restablecer avatar","notification_visibility_emoji_reactions":"Reacciones","new_email":"Nuevo correo electrónico","profile_fields":{"value":"Contenido","name":"Etiqueta","add_field":"Añadir un campo","label":"Metadatos del perfil"},"accent":"Acento","emoji_reactions_on_timeline":"Mostrar las reacciones de emoji en la línea de tiempo","domain_mutes":"Dominios","mutes_and_blocks":"Silenciado y Bloqueados","chatMessageRadius":"Mensaje de chat","changed_email":"¡Correo electrónico modificado correctamente!","change_email_error":"Ha ocurrido un error al intentar modificar tu correo electrónico.","change_email":"Modificar el correo electrónico","bot":"Esta cuenta es un bot","allow_following_move":"Permitir el seguimiento automático, cuando la cuenta que sigues se traslada a otra instancia","virtual_scrolling":"Optimizar la representación de la linea temporal","import_mutes_from_a_csv_file":"Importar silenciados desde un archivo csv","mutes_imported":"¡Silenciados importados! Procesarlos llevará un tiempo.","mute_import_error":"Error al importar los silenciados","mute_import":"Importar silenciados","mute_export_button":"Exportar los silenciados a un archivo csv","mute_export":"Exportar silenciados","hide_wallpaper":"Ocultar el fondo de pantalla de la instancia","setting_changed":"La configuración es diferente a la predeterminada","hide_all_muted_posts":"Ocultar las publicaciones silenciadas","more_settings":"Más opciones","sensitive_by_default":"Identificar las publicaciones como sensibles de forma predeterminada","reply_visibility_self_short":"Mostrar respuestas solo a uno mismo","reply_visibility_following_short":"Mostrar las réplicas a mis seguidores","hide_media_previews":"Ocultar la vista previa multimedia","word_filter":"Filtro de palabras","save":"Guardar los cambios","file_export_import":{"errors":{"invalid_file":"El archivo seleccionado no es válido como copia de seguridad de Pleroma. No se han realizado cambios."},"restore_settings":"Restaurar ajustes desde archivo","backup_settings_theme":"Copia de seguridad de la configuración y tema a archivo","backup_settings":"Copia de seguridad de la configuración a archivo","backup_restore":"Copia de seguridad de la configuración"}},"time":{"day":"{0} día","days":"{0} días","day_short":"{0}d","days_short":"{0}d","hour":"{0} hora","hours":"{0} horas","hour_short":"{0}h","hours_short":"{0}h","in_future":"en {0}","in_past":"hace {0}","minute":"{0} minuto","minutes":"{0} minutos","minute_short":"{0}min","minutes_short":"{0}min","month":"{0} mes","months":"{0} meses","month_short":"{0}m","months_short":"{0}m","now":"justo ahora","now_short":"ahora","second":"{0} segundo","seconds":"{0} segundos","second_short":"{0}s","seconds_short":"{0}s","week":"{0} semana","weeks":"{0} semanas","week_short":"{0}sem","weeks_short":"{0}sem","year":"{0} año","years":"{0} años","year_short":"{0}a","years_short":"{0}a"},"timeline":{"collapse":"Colapsar","conversation":"Conversación","error_fetching":"Error al cargar las actualizaciones","load_older":"Cargar actualizaciones anteriores","no_retweet_hint":"La publicación está marcada como solo para seguidores o directa y no se puede repetir","repeated":"repetida","show_new":"Mostrar lo nuevo","up_to_date":"Actualizado","no_more_statuses":"No hay más estados","no_statuses":"Sin estados","reload":"Recargar","error":"Error obteniendo la linea de tiempo:{0}","socket_broke":"Conexión en timpo real perdida: código del motivo {0}","socket_reconnected":"Establecida la conexión en tiempo real"},"status":{"favorites":"Favoritos","repeats":"Repetidos","delete":"Eliminar publicación","pin":"Fijar en tu perfil","unpin":"Desclavar de tu perfil","pinned":"Fijado","delete_confirm":"¿Realmente quieres borrar la publicación?","reply_to":"Respondiendo a","replies_list":"Respuestas:","mute_conversation":"Silenciar la conversación","unmute_conversation":"Mostrar la conversación","hide_content":"Ocultar el contenido","show_content":"Mostrar el contenido","hide_full_subject":"Ocultar el tema completo","show_full_subject":"Mostrar el tema completo","thread_muted_and_words":", contiene:","thread_muted":"Conversación silenciada","copy_link":"Copiar el enlace al estado","status_unavailable":"Estado no disponible","bookmark":"Marcar","unbookmark":"Desmarcar","status_deleted":"Esta publicación ha sido eliminada","nsfw":"NSFW (No apropiado para el trabajo)","expand":"Expandir","external_source":"Fuente externa"},"user_card":{"approve":"Aprobar","block":"Bloquear","blocked":"¡Bloqueado!","deny":"Denegar","favorites":"Favoritos","follow":"Seguir","follow_sent":"¡Solicitud enviada!","follow_progress":"Solicitando…","follow_again":"¿Enviar solicitud de nuevo?","follow_unfollow":"Dejar de seguir","followees":"Siguiendo","followers":"Seguidores","following":"¡Siguiendo!","follows_you":"¡Te sigue!","its_you":"¡Eres tú!","media":"Media","mention":"Mencionar","mute":"Silenciar","muted":"Silenciado","per_day":"por día","remote_follow":"Seguir","report":"Reportar","statuses":"Estados","subscribe":"Suscribirse","unsubscribe":"Desuscribirse","unblock":"Desbloquear","unblock_progress":"Desbloqueando…","block_progress":"Bloqueando…","unmute":"Dejar de silenciar","unmute_progress":"Quitando silencio…","mute_progress":"Silenciando…","admin_menu":{"moderation":"Moderación","grant_admin":"Conceder permisos de Administrador/a","revoke_admin":"Revocar permisos de Administrador/a","grant_moderator":"Conceder permisos de Moderador/a","revoke_moderator":"Revocar permisos de Moderador/a","activate_account":"Activar cuenta","deactivate_account":"Desactivar cuenta","delete_account":"Eliminar cuenta","force_nsfw":"Marcar todas las publicaciones como NSFW (no es seguro/apropiado para el trabajo)","strip_media":"Eliminar archivos multimedia de las publicaciones","force_unlisted":"Forzar que se publique en el modo -Sin Listar-","sandbox":"Forzar que se publique solo para tus seguidores","disable_remote_subscription":"No permitir que usuarios de instancias remotas te siga","disable_any_subscription":"No permitir que ningún usuario te siga","quarantine":"No permitir publicaciones de usuarios de instancias remotas","delete_user":"Eliminar usuario","delete_user_confirmation":"¿Estás completamente seguro? Esta acción no se puede deshacer."},"show_repeats":"Mostrar repetidos","hide_repeats":"Ocultar repetidos","message":"Mensaje","hidden":"Oculto","roles":{"moderator":"Moderador","admin":"Administrador"},"highlight":{"striped":"Fondo rayado","side":"Raya lateral","solid":"Fondo sólido","disabled":"Sin resaltado"},"bot":"Bot"},"user_profile":{"timeline_title":"Línea temporal del usuario","profile_does_not_exist":"Lo sentimos, este perfil no existe.","profile_loading_error":"Lo sentimos, hubo un error al cargar este perfil."},"user_reporting":{"title":"Reportando a {0}","add_comment_description":"El informe será enviado a los/las moderadores/as de su instancia. Puedes proporcionar una explicación de por qué estás reportando esta cuenta a continuación:","additional_comments":"Comentarios adicionales","forward_description":"La cuenta es de otro servidor. ¿Enviar una copia del informe allí también?","forward_to":"Reenviar a {0}","submit":"Enviar","generic_error":"Se produjo un error al procesar la solicitud."},"who_to_follow":{"more":"Más","who_to_follow":"A quién seguir"},"tool_tip":{"media_upload":"Subir multimedia","repeat":"Repetir","reply":"Contestar","favorite":"Favorito","user_settings":"Ajustes de usuario","bookmark":"Marcador","reject_follow_request":"Rechazar la solicitud de seguimiento","accept_follow_request":"Aceptar la solicitud de seguimiento","add_reaction":"Añadir Reacción"},"upload":{"error":{"base":"Subida fallida.","file_too_big":"Archivo demasiado grande [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]","default":"Inténtalo más tarde","message":"Error de subida: {0}"},"file_size_units":{"B":"B","KiB":"KiB","MiB":"MiB","GiB":"GiB","TiB":"TiB"}},"search":{"people":"Personas","hashtags":"Etiquetas","person_talking":"{count} personas hablando","people_talking":"{count} gente hablando","no_results":"Sin resultados"},"password_reset":{"forgot_password":"¿Contraseña olvidada?","password_reset":"Restablecer la contraseña","instruction":"Ingrese su dirección de correo electrónico o nombre de usuario. Le enviaremos un enlace para restablecer su contraseña.","placeholder":"Su correo electrónico o nombre de usuario","check_email":"Revise su correo electrónico para obtener un enlace para restablecer su contraseña.","return_home":"Volver a la página de inicio","too_many_requests":"Has alcanzado el límite de intentos, vuelve a intentarlo más tarde.","password_reset_disabled":"El restablecimiento de contraseñas está deshabilitado. Póngase en contacto con el administrador de su instancia.","password_reset_required_but_mailer_is_disabled":"Debes restablecer la contraseña, pero el restablecimiento de contraseñas está deshabilitado. Por favor contacta con el administrador de la instancia.","password_reset_required":"Debes restablecer la contraseña para iniciar sesión."},"errors":{"storage_unavailable":"Pleroma no pudo acceder al almacenamiento del navegador. Su inicio de sesión o su configuración local no se guardarán y puede encontrar problemas inesperados. Intente habilitar las cookies."},"domain_mute_card":{"unmute_progress":"Quitando silencio…","unmute":"Dejar de silenciar","mute_progress":"Silenciando…","mute":"Silenciar"},"about":{"mrf":{"simple":{"accept_desc":"Esta instancia solo acepta mensajes de las siguientes instancias:","media_nsfw_desc":"Esta instancia obliga a que los archivos multimedia se establezcan como sensibles en las publicaciones de las siguientes instancias:","media_nsfw":"Forzar contenido multimedia como sensible","media_removal_desc":"Esta instancia elimina los archivos multimedia de las publicaciones de las siguientes instancias:","media_removal":"Eliminar Multimedia","quarantine":"Cuarentena","ftl_removal_desc":"Esta instancia elimina las siguientes instancias de la línea de tiempo \\"Red Conocida\\":","ftl_removal":"Eliminar de la línea de tiempo \\"Red Conocida\\"","quarantine_desc":"Esta instancia enviará solo publicaciones públicas a las siguientes instancias:","simple_policies":"Políticas específicas de la instancia","reject_desc":"Esta instancia no aceptará mensajes de las siguientes instancias:","reject":"Rechazar","accept":"Aceptar"},"mrf_policies_desc":"Las políticas MRF manipulan la federación de esta instancia con el resto del fediverso. Las siguientes políticas están habilitadas:","mrf_policies":"Habilitar políticas MRF","keyword":{"ftl_removal":"Eliminar de la línea de tiempo \\"Toda La Red Conocida\\"","keyword_policies":"Política de Palabras Clave","is_replaced_by":"→","replace":"Reemplazar","reject":"Rechazar"},"federation":"Federación"},"staff":"Equipo"},"shoutbox":{"title":"Jaula de Grillos"},"remote_user_resolver":{"remote_user_resolver":"Resolución de usuario remoto","error":"No encontrado.","searching_for":"Buscando"},"chats":{"chats":"Chats","empty_chat_list_placeholder":"Aún no tienes ninguna conversación. ¡Inicia una nueva conversación!","error_sending_message":"Algo salió mal al enviar el mensaje.","error_loading_chat":"Algo salió mal al cargar el chat.","delete_confirm":"¿Realmente quieres borrar este mensaje?","more":"Más","empty_message_error":"No puedes publicar un mensaje vacío","new":"Nueva conversación","delete":"Borrar","message_user":"Mensaje de {nickname}","you":"Tú:"},"display_date":{"today":"Hoy"},"file_type":{"file":"Archivo","image":"Imagen","video":"Vídeo","audio":"Audio"}}')}}]); -//# sourceMappingURL=10.fdbf093cc5602ca4f2e1.js.map \ No newline at end of file diff --git a/priv/static/static/js/11.7b11fd75fe61d6e10ac6.js b/priv/static/static/js/11.c173c6036fb3af5581b3.js similarity index 99% rename from priv/static/static/js/11.7b11fd75fe61d6e10ac6.js rename to priv/static/static/js/11.c173c6036fb3af5581b3.js index 2e39538d0..b693d4c53 100644 --- a/priv/static/static/js/11.7b11fd75fe61d6e10ac6.js +++ b/priv/static/static/js/11.c173c6036fb3af5581b3.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[11],{591:function(e){e.exports=JSON.parse('{"finder":{"error_fetching_user":"Viga kasutaja leidmisel","find_user":"Otsi kasutajaid"},"general":{"submit":"Postita","verify":"Kinnita","confirm":"Kinnita","enable":"Luba","disable":"Keela","cancel":"Tühista","dismiss":"Olgu","show_less":"Kuva vähem","show_more":"Kuva rohkem","optional":"valikuline","generic_error":"Esines viga","more":"Rohkem","apply":"Rakenda"},"login":{"login":"Logi sisse","logout":"Logi välja","password":"Parool","placeholder":"nt lain","register":"Registreeru","username":"Kasutajanimi","heading":{"recovery":"Kaheastmelise autentimise taaste","totp":"Kaheastmeline autentimine"},"recovery_code":"Taastekood","enter_two_factor_code":"Sisesta kaheastmelise autentimise kood","enter_recovery_code":"Sisesta taastekood","authentication_code":"Autentimiskood","hint":"Logi sisse, et liituda vestlusega","description":"Logi sisse OAuthiga"},"nav":{"mentions":"Mainimised","public_tl":"Avalik Ajajoon","timeline":"Ajajoon","twkn":"Kogu Teadaolev Võrgustik","preferences":"Eelistused","who_to_follow":"Keda jälgida","search":"Otsing","user_search":"Kasutajaotsing","dms":"Privaatsõnumid","interactions":"Interaktsioonid","friend_requests":"Jägimistaotlused","chat":"Kohalik vestlus","back":"Tagasi","administration":"Administreerimine","about":"Meist"},"notifications":{"followed_you":"alustas sinu jälgimist","notifications":"Teated","read":"Loe!","reacted_with":"reageeris {0}","migrated_to":"kolis","no_more_notifications":"Rohkem teateid ei ole","repeated_you":"taaspostitas su staatuse","load_older":"Laadi vanemad teated","follow_request":"soovib Teid jälgida","favorited_you":"lisas su staatuse lemmikuks","broken_favorite":"Tundmatu staatus, otsin…"},"post_status":{"default":"Just sõitsin elektrirongiga Tallinnast Pääskülla.","posting":"Postitan","scope":{"unlisted":"Peidetud - Ära postita avalikele ajajoontele","public":"Avalil - Postita avalikele ajajoontele","private":"Jälgijatele - Postita ainult jälgijatele","direct":"Privaatne - Postita ainult mainitud kasutajatele"},"scope_notice":{"unlisted":"See postitus ei ole nähtav avalikul ega kogu võrgu ajajoonel","private":"See postitus on nähtav ainult Teie jälgijatele","public":"See postitus on nähtav kõigile"},"direct_warning_to_first_only":"See postitus on nähtav ainult kirja alguses mainitud kasutajatele.","direct_warning_to_all":"See postitus on nähtav kõikidele mainitud kasutajatele.","content_warning":"Pealkiri (valikuline)","content_type":{"text/bbcode":"BBCode","text/markdown":"Markdown","text/html":"HTML","text/plain":"Lihttekst"},"attachments_sensitive":"Märgi manused sensitiivseks","account_not_locked_warning_link":"lukus","account_not_locked_warning":"Teie konto ei ole {0}. Kõik võivad Teid jälgida, et näha Teie ainult-jälgijatele postitusi.","new_status":"Postita uus staatus"},"registration":{"bio":"Bio","email":"E-post","fullname":"Kuvatav nimi","password_confirm":"Parooli kinnitamine","registration":"Registreerimine","validations":{"password_confirmation_match":"peaks olema sama kui salasõna","password_confirmation_required":"ei saa jätta tühjaks","password_required":"ei saa jätta tühjaks","email_required":"ei saa jätta tühjaks","fullname_required":"ei saa jätta tühjaks","username_required":"ei saa jätta tühjaks"},"fullname_placeholder":"Näiteks Lain Iwakura","username_placeholder":"Näiteks lain","new_captcha":"Vajuta pildile, et saada uus captcha","captcha":"CAPTCHA","token":"Kutse võti"},"settings":{"attachments":"Manused","avatar":"Profiilipilt","bio":"Bio","current_avatar":"Sinu praegune profiilipilt","current_profile_banner":"Praegune profiilibänner","filtering":"Sisu filtreerimine","filtering_explanation":"Kõiki staatuseid, mis sisaldavad neid sõnu, ei kuvata. Üks sõna reale","hide_attachments_in_convo":"Peida manused vastlustes","hide_attachments_in_tl":"Peida manused ajajoonel","name":"Nimi","name_bio":"Nimi ja Bio","nsfw_clickthrough":"Peida tööks-mittesobivad(NSFW) manuste hiireklõpsu taha","profile_background":"Profiilitaust","profile_banner":"Profiilibänner","set_new_avatar":"Vali uus profiilipilt","set_new_profile_background":"Vali uus profiilitaust","set_new_profile_banner":"Vali uus profiilibänner","settings":"Sätted","theme":"Teema","user_settings":"Kasutaja sätted","subject_line_noop":"Ära kopeeri","subject_line_mastodon":"Nagu mastodon: kopeeri nagu on","subject_line_email":"Nagu e-post: \\"vs: pealkiri\\"","subject_line_behavior":"Kopeeri pealkiri vastamisel","subject_input_always_show":"Alati kuva pealkirja välja","minimal_scopes_mode":"Peida postituse nähtavussätted","scope_copy":"Kopeeri nähtavussätted vastamisel (Privaatsed on alati kopeeritud)","security_tab":"Turvalisus","search_user_to_mute":"Otsi, keda soovid vaigistada","search_user_to_block":"Otsi, keda soovid blokeerida","saving_ok":"Sätted salvestatud","saving_err":"Sätete salvestamine ebaõnnestus","autohide_floating_post_button":"Automaatselt peida uue postituse nupp (mobiilil)","reply_visibility_self":"Näita ainult vastuseid, mis on suunatud mulle","reply_visibility_following":"Näita ainult vastuseid, mis on suunatud mulle või kasutajatele, keda jälgin","reply_visibility_all":"Näita kõiki vastuseid","replies_in_timeline":"Vastused ajajoonel","radii_help":"Liidese ümardamine (pikslites)","profile_tab":"Profiil","presets":"Salvestatud sätted","pause_on_unfocused":"Peata reaalajas voog kui leht pole fookuses","panelRadius":"Paneelid","revoke_token":"Keela","valid_until":"Kehtiv kuni","refresh_token":"Värskendustoken","token":"Token","oauth_tokens":"OAuth tokenid","show_moderator_badge":"Näita Moderaator silti mu profiilil","show_admin_badge":"Näita Admin silti mu profiilil","hide_followers_count_description":"Ära näita minu jälgijate arvu","hide_follows_count_description":"Ära näita minu jälgimiste arvu","hide_followers_description":"Ära näita minu jälgijaid","hide_follows_description":"Ära näita minu jälgimisi","no_mutes":"Vaigistusi pole","no_blocks":"Blokeeringuid pole","no_rich_text_description":"Muuda kõik postitused lihttekstiks","notification_visibility_emoji_reactions":"Reaktsioonid","notification_visibility_moves":"Kasutaja kolimised","notification_visibility_repeats":"Taaspostitused","notification_visibility_mentions":"Mainimised","notification_visibility_likes":"Lemmikud","notification_visibility_follows":"Jälgimised","notification_visibility":"Milliseid teateid kuvatakse","new_password":"Uus salasõna","new_email":"Uus e-post","use_contain_fit":"Näita eelvaadetes täis suuruses pilte","play_videos_in_modal":"Näita videoid eraldi raamis","mutes_tab":"Vaigistused","loop_video_silent_only":"Loop videod, millel pole heli (nt. Mastodoni \\"gifid\\")","loop_video":"Loop videod","lock_account_description":"Piira oma konto ainult lubatud jälgijatele","links":"Lingid","limited_availability":"Pole Teie veebilehitsejas saadaval","invalid_theme_imported":"Valitud fail ei ole Pleroma kujundus. Kujundusele muudatusi ei tehtud.","interfaceLanguage":"Liidese keel","interface":"Liides","instance_default_simple":"(vaikimisi)","instance_default":"(vaikimisi: {value})","checkboxRadius":"Märkeruudud","inputRadius":"Sisestuskastid","import_theme":"Lae sätted","import_followers_from_a_csv_file":"Impordi jälgimised csv failist","import_blocks_from_a_csv_file":"Impordi blokeeringud csv failist","hide_filtered_statuses":"Peida filtreeritud staatused","hide_user_stats":"Peida kasutaja statistika (nt. jälgijate arv)","hide_post_stats":"Peida postituse statistika (nt. lemmikute arv)","use_one_click_nsfw":"Ava NSFW manused ühe klikiga","preload_images":"Piltide eellaadimine","hide_isp":"Peida instantsipõhine paneel","max_thumbnails":"Maksimaalne lubatud eelvaadete arv postituste kohta","hide_muted_posts":"Peida vaigistatud kasutajate postitused","general":"Üldine","foreground":"Esiplaan","accent":"Rõhk","follows_imported":"Jälgimised imporditud! Nende töötlemine võtab natuke aega.","follow_import_error":"Jälgimiste importimisel tekkis viga","follow_import":"Impordi jälgimised","follow_export_button":"Ekspordi oma jälgimised csv failiks","follow_export":"Ekspordi jälgimised","export_theme":"Salvesta sätted","emoji_reactions_on_timeline":"Näita reaktsioone ajajoonel","pad_emoji":"Lisa emotikonidele tühikud ette ja järgi neid menüüst valides","avatar_size_instruction":"Profiilipildi soovitatud minimaalne suurus on 150x150 pikslit.","domain_mutes":"Domeenid","discoverable":"Luba selle konto ilmumine otsingutulemustes ning muudes teenustes","delete_account_instructions":"Konto kustutamise kinnitamiseks sisestage oma salasõna.","delete_account_error":"Teie konto kustutamisel tekkis viga. Kui see jätkub, palun võtke kontakti administraatoriga.","delete_account_description":"Jäädavalt kustuta oma andmed ja konto.","delete_account":"Kustuta konto","default_vis":"Vaikimisi nähtavus","data_import_export_tab":"Andmete import / eksport","current_password":"Praegune salasõna","confirm_new_password":"Kinnita uus salasõna","composing":"Koostamine","collapse_subject":"Peida postituste pealkirjad","changed_password":"Salasõna edukalt muudetud!","change_password_error":"Esines viga salasõna muutmisel.","change_password":"Muuda salasõna","changed_email":"E-post edukalt muudetud!","change_email_error":"Esines viga e-posti muutmisel.","change_email":"Muuda e-posti","cRed":"Punane (Tühista)","cOrange":"Oranž (Lisa lemmikuks)","cGreen":"Roheline (Taaspostita)","cBlue":"Sinine (Vasta, jälgi)","btnRadius":"Nupud","blocks_tab":"Blokeeringud","blocks_imported":"Blokeeringud imporditud! Nende töötlemine võtab natuke aega.","block_import_error":"Blokeeringute importimisel esines viga","block_import":"Blokeeringute import","block_export_button":"Ekspordi oma blokeeringud csv failiks","block_export":"Blokeeringute eksport","background":"Taust","avatarRadius":"Profiilipildid","avatarAltRadius":"Profiilipildid (Teated)","attachmentRadius":"Manused","allow_following_move":"Luba automaatjälgimine kui jälgitav konto kolib","mfa":{"verify":{"desc":"Et lubada kaheastmelist autentimist, sisestage kood oma äpist:"},"scan":{"desc":"Kasutades oma kaheastmelise autentimise äppi, skännige see QR kood või sisestage tekstiline võti:","secret_code":"Võti","title":"Skänni"},"authentication_methods":"Autentimismeetodid","recovery_codes_warning":"Kirjutage need koodid üles ning hoidke need kindlas kohas. Kui Te kaotate ligipääsu oma kaheastmelise autentimise äppile ning nendele koodidele, ei ole Teil võimalik oma kontosse sisse logida.","waiting_a_recovery_codes":"Laen taastekoode…","recovery_codes":"Taastekoodid.","warning_of_generate_new_codes":"Kui Te loote uued taastekoodid, Teie vanad koodid ei tööta enam.","generate_new_recovery_codes":"Loo uued taastekoodid","title":"Kaheastmeline autentimine","confirm_and_enable":"Kinnita & luba OTP","wait_pre_setup_otp":"sean üles OTP","setup_otp":"Sea üles OTP","otp":"OTP"},"enter_current_password_to_confirm":"Sisetage isiku tõestamiseks oma salasõna","security":"Turvalisus","app_name":"Rakenduse nimi","style":{"switcher":{"help":{"snapshot_present":"Kujunduse eelvaade on laetud, nii et kõik väärtused on üle kirjutatud. Te saate laadida ka kujunduse päris sisu.","older_version_imported":"Teie imporditud fail oli loodud vanemas versioonis.","future_version_imported":"Teie imporditud fail oli loodud uuemas versioonis.","v2_imported":"Teie imporditud fail oli vanema versiooni jaoks. Me üritame hoida ühilduvust, kuid ikkagi võib esineda erinevusi.","upgraded_from_v2":"PleromaFE-d uuendati, teie kujundus võib välja näha natuke erinev, kui mäletate."},"use_source":"Uus versioon","use_snapshot":"Vana versioon","keep_as_is":"Jäta nii, nagu on","load_theme":"Lae kujundus","clear_opacity":"Tühista läbipaistvus","clear_all":"Tühista kõik","reset":"Taasta algne","keep_fonts":"Jäta fondid","keep_roundness":"Jäta ümarus","keep_opacity":"Jäta läbipaistvus","keep_shadows":"Jäta varjud","keep_color":"Jäta värvid"}},"enable_web_push_notifications":"Luba veebipõhised push-teated","notification_blocks":"Kasutaja blokeerimisel ei tule neilt enam teateid ning nendele teilt ka mitte.","notification_setting_privacy_option":"Peida saatja ning sisu push-teadetelt","notifications":"Teated","notification_mutes":"Kui soovid mõnelt kasutajalt mitte teateid saada, kasuta vaigistust.","notification_setting_privacy":"Privaatsus","notification_setting_filters":"Filtrid","greentext":"Meemi nooled","fun":"Naljad","values":{"true":"jah","false":"ei"},"upload_a_photo":"Lae üles foto","type_domains_to_mute":"Trüki siia domeene, mida vaigistada","tooltipRadius":"Vihjed/hoiatused","theme_help_v2_1":"Te saate ka mõndade komponentide värvust ning läbipaistvust üle kirjutada vajutades ruudule. Kasuta \\"Tühista kõik\\" nuppu, et need tühistada.","theme_help":"Kasuta hex värvikoode (#rrggbb) oma kujunduse isikupärastamiseks.","text":"Tekst","useStreamingApiWarning":"(Pole soovituslik, eksperimentaalne, on teada, et jätab postitusi vahele)","useStreamingApi":"Saa postitusi ning teateid reaalajas","user_mutes":"Kasutajad","streaming":"Luba uute postituste automaatvoog kui oled lehekülje alguses","stop_gifs":"Mängi GIFid hiirega ületades","post_status_content_type":"Postituse sisutüüp"},"timeline":{"conversation":"Vestlus","error_fetching":"Viga uuenduste laadimisel","load_older":"Kuva vanemaid staatuseid","show_new":"Näita uusi","up_to_date":"Uuendatud"},"user_card":{"block":"Blokeeri","blocked":"Blokeeritud!","follow":"Jälgi","followees":"Jälgitavaid","followers":"Jälgijaid","following":"Jälgin!","follows_you":"Jälgib sind!","mute":"Vaigista","muted":"Vaigistatud","per_day":"päevas","statuses":"Staatuseid"},"about":{"mrf":{"mrf_policies_desc":"MRF poliitikad mõjutavad selle instansi föderatsiooni käitumist. Järgmised poliitikad on lubatud:","simple":{"media_nsfw_desc":"See instants määrab nendest instantsidest postituste meedia sensitiivseks:","media_nsfw":"Meedia määratakse sensitiivseks","media_removal_desc":"See instants eemaldab meedia postitustelt nendest instantsidest:","media_removal":"Meedia eemaldamine","ftl_removal_desc":"See instants eemaldab postitused nendelt instantsidest \\"Kogu teatud võrgu\\" ajajoonelt:","ftl_removal":"\\"Kogu teatud võrgu\\" ajajoonelt eemaldamine","quarantine_desc":"See instants saadab ainult avalikke postitusi järgmistele instantsidele:","quarantine":"Karantiini","reject_desc":"See instants ei luba sõnumeid nendest instantsidest:","reject":"Keela","accept_desc":"See instants lubab sõnumeid ainult nendest instantsidest:","accept":"Luba","simple_policies":"Instansi-omased poliitikad"},"mrf_policies":"Lubatud MRF poliitikad","keyword":{"is_replaced_by":"→","replace":"Vaheta","reject":"Lükka tagasi","ftl_removal":"\\"Kogu teatud võrgu\\" ajajoonelt eemaldamine","keyword_policies":"Võtmesõna poliitikad"},"federation":"Föderatsioon"},"staff":"Personal"},"selectable_list":{"select_all":"Vali kõik"},"remote_user_resolver":{"error":"Ei leitud.","searching_for":"Otsin","remote_user_resolver":"Kaugkasutaja leidja"},"interactions":{"load_older":"Laadi vanemad interaktsioonid","moves":"Kasutaja kolimised","follows":"Uued jälgimised","favs_repeats":"Taaspostitused ja lemmikud"},"emoji":{"load_all":"Laen kõik {emojiAmount} emotikoni","load_all_hint":"Laadisin esimesed {saneAmount} emotikoni, kõike laadides võib esineda probleeme jõudlusega.","unicode":"Unicode emotikonid","custom":"Kohandatud emotikonid","add_emoji":"Lisa emotikon","search_emoji":"Otsi emotikone","keep_open":"Hoia valija lahti","emoji":"Emotikonid","stickers":"Kleepsud"},"polls":{"not_enough_options":"Liiga vähe unikaalseid valikuid hääletuses","expired":"Hääletus lõppes {0} tagasi","expires_in":"Hääletus lõppeb {0}","expiry":"Hääletuse vanus","multiple_choices":"Mitu vastust","single_choice":"Üks vastus","type":"Hääletuse tüüp","vote":"Hääleta","votes":"häält","option":"Valik","add_option":"Lisa valik","add_poll":"Lisa küsitlus"},"media_modal":{"next":"Järgmine","previous":"Eelmine"},"importer":{"error":"Faili importimisel tekkis viga.","success":"Import õnnestus.","submit":"Esita"},"image_cropper":{"cancel":"Tühista","save_without_cropping":"Salvesta muudatusteta","save":"Salvesta","crop_picture":"Modifitseeri pilti"},"features_panel":{"who_to_follow":"Keda jälgida","title":"Featuurid","text_limit":"Tekstilimiit","scope_options":"Ulatuse valikud","media_proxy":"Meedia proksi","gopher":"Gopher","chat":"Vestlus"},"exporter":{"processing":"Töötlemine, Teilt küsitakse varsti faili allalaadimist","export":"Ekspordi"},"domain_mute_card":{"unmute_progress":"Eemaldan vaigistuse…","unmute":"Ära vaigista","mute_progress":"Vaigistan…","mute":"Vaigista"},"chat":{"title":"Vestlus"}}')}}]); -//# sourceMappingURL=11.7b11fd75fe61d6e10ac6.js.map \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[11],{604:function(e){e.exports=JSON.parse('{"finder":{"error_fetching_user":"Viga kasutaja leidmisel","find_user":"Otsi kasutajaid"},"general":{"submit":"Postita","verify":"Kinnita","confirm":"Kinnita","enable":"Luba","disable":"Keela","cancel":"Tühista","dismiss":"Olgu","show_less":"Kuva vähem","show_more":"Kuva rohkem","optional":"valikuline","generic_error":"Esines viga","more":"Rohkem","apply":"Rakenda"},"login":{"login":"Logi sisse","logout":"Logi välja","password":"Parool","placeholder":"nt lain","register":"Registreeru","username":"Kasutajanimi","heading":{"recovery":"Kaheastmelise autentimise taaste","totp":"Kaheastmeline autentimine"},"recovery_code":"Taastekood","enter_two_factor_code":"Sisesta kaheastmelise autentimise kood","enter_recovery_code":"Sisesta taastekood","authentication_code":"Autentimiskood","hint":"Logi sisse, et liituda vestlusega","description":"Logi sisse OAuthiga"},"nav":{"mentions":"Mainimised","public_tl":"Avalik Ajajoon","timeline":"Ajajoon","twkn":"Kogu Teadaolev Võrgustik","preferences":"Eelistused","who_to_follow":"Keda jälgida","search":"Otsing","user_search":"Kasutajaotsing","dms":"Privaatsõnumid","interactions":"Interaktsioonid","friend_requests":"Jägimistaotlused","chat":"Kohalik vestlus","back":"Tagasi","administration":"Administreerimine","about":"Meist"},"notifications":{"followed_you":"alustas sinu jälgimist","notifications":"Teated","read":"Loe!","reacted_with":"reageeris {0}","migrated_to":"kolis","no_more_notifications":"Rohkem teateid ei ole","repeated_you":"taaspostitas su staatuse","load_older":"Laadi vanemad teated","follow_request":"soovib Teid jälgida","favorited_you":"lisas su staatuse lemmikuks","broken_favorite":"Tundmatu staatus, otsin…"},"post_status":{"default":"Just sõitsin elektrirongiga Tallinnast Pääskülla.","posting":"Postitan","scope":{"unlisted":"Peidetud - Ära postita avalikele ajajoontele","public":"Avalil - Postita avalikele ajajoontele","private":"Jälgijatele - Postita ainult jälgijatele","direct":"Privaatne - Postita ainult mainitud kasutajatele"},"scope_notice":{"unlisted":"See postitus ei ole nähtav avalikul ega kogu võrgu ajajoonel","private":"See postitus on nähtav ainult Teie jälgijatele","public":"See postitus on nähtav kõigile"},"direct_warning_to_first_only":"See postitus on nähtav ainult kirja alguses mainitud kasutajatele.","direct_warning_to_all":"See postitus on nähtav kõikidele mainitud kasutajatele.","content_warning":"Pealkiri (valikuline)","content_type":{"text/bbcode":"BBCode","text/markdown":"Markdown","text/html":"HTML","text/plain":"Lihttekst"},"attachments_sensitive":"Märgi manused sensitiivseks","account_not_locked_warning_link":"lukus","account_not_locked_warning":"Teie konto ei ole {0}. Kõik võivad Teid jälgida, et näha Teie ainult-jälgijatele postitusi.","new_status":"Postita uus staatus"},"registration":{"bio":"Bio","email":"E-post","fullname":"Kuvatav nimi","password_confirm":"Parooli kinnitamine","registration":"Registreerimine","validations":{"password_confirmation_match":"peaks olema sama kui salasõna","password_confirmation_required":"ei saa jätta tühjaks","password_required":"ei saa jätta tühjaks","email_required":"ei saa jätta tühjaks","fullname_required":"ei saa jätta tühjaks","username_required":"ei saa jätta tühjaks"},"fullname_placeholder":"Näiteks Lain Iwakura","username_placeholder":"Näiteks lain","new_captcha":"Vajuta pildile, et saada uus captcha","captcha":"CAPTCHA","token":"Kutse võti"},"settings":{"attachments":"Manused","avatar":"Profiilipilt","bio":"Bio","current_avatar":"Sinu praegune profiilipilt","current_profile_banner":"Praegune profiilibänner","filtering":"Sisu filtreerimine","filtering_explanation":"Kõiki staatuseid, mis sisaldavad neid sõnu, ei kuvata. Üks sõna reale","hide_attachments_in_convo":"Peida manused vastlustes","hide_attachments_in_tl":"Peida manused ajajoonel","name":"Nimi","name_bio":"Nimi ja Bio","nsfw_clickthrough":"Peida tööks-mittesobivad(NSFW) manuste hiireklõpsu taha","profile_background":"Profiilitaust","profile_banner":"Profiilibänner","set_new_avatar":"Vali uus profiilipilt","set_new_profile_background":"Vali uus profiilitaust","set_new_profile_banner":"Vali uus profiilibänner","settings":"Sätted","theme":"Teema","user_settings":"Kasutaja sätted","subject_line_noop":"Ära kopeeri","subject_line_mastodon":"Nagu mastodon: kopeeri nagu on","subject_line_email":"Nagu e-post: \\"vs: pealkiri\\"","subject_line_behavior":"Kopeeri pealkiri vastamisel","subject_input_always_show":"Alati kuva pealkirja välja","minimal_scopes_mode":"Peida postituse nähtavussätted","scope_copy":"Kopeeri nähtavussätted vastamisel (Privaatsed on alati kopeeritud)","security_tab":"Turvalisus","search_user_to_mute":"Otsi, keda soovid vaigistada","search_user_to_block":"Otsi, keda soovid blokeerida","saving_ok":"Sätted salvestatud","saving_err":"Sätete salvestamine ebaõnnestus","autohide_floating_post_button":"Automaatselt peida uue postituse nupp (mobiilil)","reply_visibility_self":"Näita ainult vastuseid, mis on suunatud mulle","reply_visibility_following":"Näita ainult vastuseid, mis on suunatud mulle või kasutajatele, keda jälgin","reply_visibility_all":"Näita kõiki vastuseid","replies_in_timeline":"Vastused ajajoonel","radii_help":"Liidese ümardamine (pikslites)","profile_tab":"Profiil","presets":"Salvestatud sätted","pause_on_unfocused":"Peata reaalajas voog kui leht pole fookuses","panelRadius":"Paneelid","revoke_token":"Keela","valid_until":"Kehtiv kuni","refresh_token":"Värskendustoken","token":"Token","oauth_tokens":"OAuth tokenid","show_moderator_badge":"Näita Moderaator silti mu profiilil","show_admin_badge":"Näita Admin silti mu profiilil","hide_followers_count_description":"Ära näita minu jälgijate arvu","hide_follows_count_description":"Ära näita minu jälgimiste arvu","hide_followers_description":"Ära näita minu jälgijaid","hide_follows_description":"Ära näita minu jälgimisi","no_mutes":"Vaigistusi pole","no_blocks":"Blokeeringuid pole","no_rich_text_description":"Muuda kõik postitused lihttekstiks","notification_visibility_emoji_reactions":"Reaktsioonid","notification_visibility_moves":"Kasutaja kolimised","notification_visibility_repeats":"Taaspostitused","notification_visibility_mentions":"Mainimised","notification_visibility_likes":"Lemmikud","notification_visibility_follows":"Jälgimised","notification_visibility":"Milliseid teateid kuvatakse","new_password":"Uus salasõna","new_email":"Uus e-post","use_contain_fit":"Näita eelvaadetes täis suuruses pilte","play_videos_in_modal":"Näita videoid eraldi raamis","mutes_tab":"Vaigistused","loop_video_silent_only":"Loop videod, millel pole heli (nt. Mastodoni \\"gifid\\")","loop_video":"Loop videod","lock_account_description":"Piira oma konto ainult lubatud jälgijatele","links":"Lingid","limited_availability":"Pole Teie veebilehitsejas saadaval","invalid_theme_imported":"Valitud fail ei ole Pleroma kujundus. Kujundusele muudatusi ei tehtud.","interfaceLanguage":"Liidese keel","interface":"Liides","instance_default_simple":"(vaikimisi)","instance_default":"(vaikimisi: {value})","checkboxRadius":"Märkeruudud","inputRadius":"Sisestuskastid","import_theme":"Lae sätted","import_followers_from_a_csv_file":"Impordi jälgimised csv failist","import_blocks_from_a_csv_file":"Impordi blokeeringud csv failist","hide_filtered_statuses":"Peida filtreeritud staatused","hide_user_stats":"Peida kasutaja statistika (nt. jälgijate arv)","hide_post_stats":"Peida postituse statistika (nt. lemmikute arv)","use_one_click_nsfw":"Ava NSFW manused ühe klikiga","preload_images":"Piltide eellaadimine","hide_isp":"Peida instantsipõhine paneel","max_thumbnails":"Maksimaalne lubatud eelvaadete arv postituste kohta","hide_muted_posts":"Peida vaigistatud kasutajate postitused","general":"Üldine","foreground":"Esiplaan","accent":"Rõhk","follows_imported":"Jälgimised imporditud! Nende töötlemine võtab natuke aega.","follow_import_error":"Jälgimiste importimisel tekkis viga","follow_import":"Impordi jälgimised","follow_export_button":"Ekspordi oma jälgimised csv failiks","follow_export":"Ekspordi jälgimised","export_theme":"Salvesta sätted","emoji_reactions_on_timeline":"Näita reaktsioone ajajoonel","pad_emoji":"Lisa emotikonidele tühikud ette ja järgi neid menüüst valides","avatar_size_instruction":"Profiilipildi soovitatud minimaalne suurus on 150x150 pikslit.","domain_mutes":"Domeenid","discoverable":"Luba selle konto ilmumine otsingutulemustes ning muudes teenustes","delete_account_instructions":"Konto kustutamise kinnitamiseks sisestage oma salasõna.","delete_account_error":"Teie konto kustutamisel tekkis viga. Kui see jätkub, palun võtke kontakti administraatoriga.","delete_account_description":"Jäädavalt kustuta oma andmed ja konto.","delete_account":"Kustuta konto","default_vis":"Vaikimisi nähtavus","data_import_export_tab":"Andmete import / eksport","current_password":"Praegune salasõna","confirm_new_password":"Kinnita uus salasõna","composing":"Koostamine","collapse_subject":"Peida postituste pealkirjad","changed_password":"Salasõna edukalt muudetud!","change_password_error":"Esines viga salasõna muutmisel.","change_password":"Muuda salasõna","changed_email":"E-post edukalt muudetud!","change_email_error":"Esines viga e-posti muutmisel.","change_email":"Muuda e-posti","cRed":"Punane (Tühista)","cOrange":"Oranž (Lisa lemmikuks)","cGreen":"Roheline (Taaspostita)","cBlue":"Sinine (Vasta, jälgi)","btnRadius":"Nupud","blocks_tab":"Blokeeringud","blocks_imported":"Blokeeringud imporditud! Nende töötlemine võtab natuke aega.","block_import_error":"Blokeeringute importimisel esines viga","block_import":"Blokeeringute import","block_export_button":"Ekspordi oma blokeeringud csv failiks","block_export":"Blokeeringute eksport","background":"Taust","avatarRadius":"Profiilipildid","avatarAltRadius":"Profiilipildid (Teated)","attachmentRadius":"Manused","allow_following_move":"Luba automaatjälgimine kui jälgitav konto kolib","mfa":{"verify":{"desc":"Et lubada kaheastmelist autentimist, sisestage kood oma äpist:"},"scan":{"desc":"Kasutades oma kaheastmelise autentimise äppi, skännige see QR kood või sisestage tekstiline võti:","secret_code":"Võti","title":"Skänni"},"authentication_methods":"Autentimismeetodid","recovery_codes_warning":"Kirjutage need koodid üles ning hoidke need kindlas kohas. Kui Te kaotate ligipääsu oma kaheastmelise autentimise äppile ning nendele koodidele, ei ole Teil võimalik oma kontosse sisse logida.","waiting_a_recovery_codes":"Laen taastekoode…","recovery_codes":"Taastekoodid.","warning_of_generate_new_codes":"Kui Te loote uued taastekoodid, Teie vanad koodid ei tööta enam.","generate_new_recovery_codes":"Loo uued taastekoodid","title":"Kaheastmeline autentimine","confirm_and_enable":"Kinnita & luba OTP","wait_pre_setup_otp":"sean üles OTP","setup_otp":"Sea üles OTP","otp":"OTP"},"enter_current_password_to_confirm":"Sisetage isiku tõestamiseks oma salasõna","security":"Turvalisus","app_name":"Rakenduse nimi","style":{"switcher":{"help":{"snapshot_present":"Kujunduse eelvaade on laetud, nii et kõik väärtused on üle kirjutatud. Te saate laadida ka kujunduse päris sisu.","older_version_imported":"Teie imporditud fail oli loodud vanemas versioonis.","future_version_imported":"Teie imporditud fail oli loodud uuemas versioonis.","v2_imported":"Teie imporditud fail oli vanema versiooni jaoks. Me üritame hoida ühilduvust, kuid ikkagi võib esineda erinevusi.","upgraded_from_v2":"PleromaFE-d uuendati, teie kujundus võib välja näha natuke erinev, kui mäletate."},"use_source":"Uus versioon","use_snapshot":"Vana versioon","keep_as_is":"Jäta nii, nagu on","load_theme":"Lae kujundus","clear_opacity":"Tühista läbipaistvus","clear_all":"Tühista kõik","reset":"Taasta algne","keep_fonts":"Jäta fondid","keep_roundness":"Jäta ümarus","keep_opacity":"Jäta läbipaistvus","keep_shadows":"Jäta varjud","keep_color":"Jäta värvid"}},"enable_web_push_notifications":"Luba veebipõhised push-teated","notification_blocks":"Kasutaja blokeerimisel ei tule neilt enam teateid ning nendele teilt ka mitte.","notification_setting_privacy_option":"Peida saatja ning sisu push-teadetelt","notifications":"Teated","notification_mutes":"Kui soovid mõnelt kasutajalt mitte teateid saada, kasuta vaigistust.","notification_setting_privacy":"Privaatsus","notification_setting_filters":"Filtrid","greentext":"Meemi nooled","fun":"Naljad","values":{"true":"jah","false":"ei"},"upload_a_photo":"Lae üles foto","type_domains_to_mute":"Trüki siia domeene, mida vaigistada","tooltipRadius":"Vihjed/hoiatused","theme_help_v2_1":"Te saate ka mõndade komponentide värvust ning läbipaistvust üle kirjutada vajutades ruudule. Kasuta \\"Tühista kõik\\" nuppu, et need tühistada.","theme_help":"Kasuta hex värvikoode (#rrggbb) oma kujunduse isikupärastamiseks.","text":"Tekst","useStreamingApiWarning":"(Pole soovituslik, eksperimentaalne, on teada, et jätab postitusi vahele)","useStreamingApi":"Saa postitusi ning teateid reaalajas","user_mutes":"Kasutajad","streaming":"Luba uute postituste automaatvoog kui oled lehekülje alguses","stop_gifs":"Mängi GIFid hiirega ületades","post_status_content_type":"Postituse sisutüüp"},"timeline":{"conversation":"Vestlus","error_fetching":"Viga uuenduste laadimisel","load_older":"Kuva vanemaid staatuseid","show_new":"Näita uusi","up_to_date":"Uuendatud"},"user_card":{"block":"Blokeeri","blocked":"Blokeeritud!","follow":"Jälgi","followees":"Jälgitavaid","followers":"Jälgijaid","following":"Jälgin!","follows_you":"Jälgib sind!","mute":"Vaigista","muted":"Vaigistatud","per_day":"päevas","statuses":"Staatuseid"},"about":{"mrf":{"mrf_policies_desc":"MRF poliitikad mõjutavad selle instansi föderatsiooni käitumist. Järgmised poliitikad on lubatud:","simple":{"media_nsfw_desc":"See instants määrab nendest instantsidest postituste meedia sensitiivseks:","media_nsfw":"Meedia määratakse sensitiivseks","media_removal_desc":"See instants eemaldab meedia postitustelt nendest instantsidest:","media_removal":"Meedia eemaldamine","ftl_removal_desc":"See instants eemaldab postitused nendelt instantsidest \\"Kogu teatud võrgu\\" ajajoonelt:","ftl_removal":"\\"Kogu teatud võrgu\\" ajajoonelt eemaldamine","quarantine_desc":"See instants saadab ainult avalikke postitusi järgmistele instantsidele:","quarantine":"Karantiini","reject_desc":"See instants ei luba sõnumeid nendest instantsidest:","reject":"Keela","accept_desc":"See instants lubab sõnumeid ainult nendest instantsidest:","accept":"Luba","simple_policies":"Instansi-omased poliitikad"},"mrf_policies":"Lubatud MRF poliitikad","keyword":{"is_replaced_by":"→","replace":"Vaheta","reject":"Lükka tagasi","ftl_removal":"\\"Kogu teatud võrgu\\" ajajoonelt eemaldamine","keyword_policies":"Võtmesõna poliitikad"},"federation":"Föderatsioon"},"staff":"Personal"},"selectable_list":{"select_all":"Vali kõik"},"remote_user_resolver":{"error":"Ei leitud.","searching_for":"Otsin","remote_user_resolver":"Kaugkasutaja leidja"},"interactions":{"load_older":"Laadi vanemad interaktsioonid","moves":"Kasutaja kolimised","follows":"Uued jälgimised","favs_repeats":"Taaspostitused ja lemmikud"},"emoji":{"load_all":"Laen kõik {emojiAmount} emotikoni","load_all_hint":"Laadisin esimesed {saneAmount} emotikoni, kõike laadides võib esineda probleeme jõudlusega.","unicode":"Unicode emotikonid","custom":"Kohandatud emotikonid","add_emoji":"Lisa emotikon","search_emoji":"Otsi emotikone","keep_open":"Hoia valija lahti","emoji":"Emotikonid","stickers":"Kleepsud"},"polls":{"not_enough_options":"Liiga vähe unikaalseid valikuid hääletuses","expired":"Hääletus lõppes {0} tagasi","expires_in":"Hääletus lõppeb {0}","expiry":"Hääletuse vanus","multiple_choices":"Mitu vastust","single_choice":"Üks vastus","type":"Hääletuse tüüp","vote":"Hääleta","votes":"häält","option":"Valik","add_option":"Lisa valik","add_poll":"Lisa küsitlus"},"media_modal":{"next":"Järgmine","previous":"Eelmine"},"importer":{"error":"Faili importimisel tekkis viga.","success":"Import õnnestus.","submit":"Esita"},"image_cropper":{"cancel":"Tühista","save_without_cropping":"Salvesta muudatusteta","save":"Salvesta","crop_picture":"Modifitseeri pilti"},"features_panel":{"who_to_follow":"Keda jälgida","title":"Featuurid","text_limit":"Tekstilimiit","scope_options":"Ulatuse valikud","media_proxy":"Meedia proksi","gopher":"Gopher","chat":"Vestlus"},"exporter":{"processing":"Töötlemine, Teilt küsitakse varsti faili allalaadimist","export":"Ekspordi"},"domain_mute_card":{"unmute_progress":"Eemaldan vaigistuse…","unmute":"Ära vaigista","mute_progress":"Vaigistan…","mute":"Vaigista"},"chat":{"title":"Vestlus"}}')}}]); +//# sourceMappingURL=11.c173c6036fb3af5581b3.js.map \ No newline at end of file diff --git a/priv/static/static/js/11.7b11fd75fe61d6e10ac6.js.map b/priv/static/static/js/11.c173c6036fb3af5581b3.js.map similarity index 56% rename from priv/static/static/js/11.7b11fd75fe61d6e10ac6.js.map rename to priv/static/static/js/11.c173c6036fb3af5581b3.js.map index f5b9efef8..6fc07fd8a 100644 --- a/priv/static/static/js/11.7b11fd75fe61d6e10ac6.js.map +++ b/priv/static/static/js/11.c173c6036fb3af5581b3.js.map @@ -1 +1 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/11.7b11fd75fe61d6e10ac6.js","sourceRoot":""} \ No newline at end of file +{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/11.c173c6036fb3af5581b3.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/12.5ca41e245bb40263bc7f.js b/priv/static/static/js/12.5ca41e245bb40263bc7f.js new file mode 100644 index 000000000..a22fcc522 --- /dev/null +++ b/priv/static/static/js/12.5ca41e245bb40263bc7f.js @@ -0,0 +1,2 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{605:function(a){a.exports=JSON.parse('{"chat":{"title":"Txata"},"exporter":{"export":"Esportatu","processing":"Prozesatzen, zure fitxategia deskargatzeko eskatuko zaizu laster"},"features_panel":{"chat":"Txata","gopher":"Ghoper","media_proxy":"Media proxy","scope_options":"Ikusgaitasun aukerak","text_limit":"Testu limitea","title":"Ezaugarriak","who_to_follow":"Nori jarraitu","pleroma_chat_messages":"Pleroma Txata","upload_limit":"Kargatzeko muga"},"finder":{"error_fetching_user":"Errorea erabiltzailea eskuratzen","find_user":"Bilatu erabiltzailea"},"general":{"apply":"Aplikatu","submit":"Bidali","more":"Gehiago","generic_error":"Errore bat gertatu da","optional":"Hautazkoa","show_more":"Gehiago erakutsi","show_less":"Gutxiago erakutsi","cancel":"Ezeztatu","disable":"Ezgaitu","enable":"Gaitu","confirm":"Baieztatu","verify":"Egiaztatu","peek":"Begiratu","close":"Itxi","dismiss":"Baztertu","retry":"Saiatu berriro","error_retry":"Saiatu berriro mesedez","loading":"Kargatzen…","role":{"moderator":"Moderatzailea","admin":"Administratzailea"},"flash_content":"Klik egin Flash edukia erakusteko Ruffle erabilita (esperimentala, baliteke ez ibiltzea).","flash_security":"Kontuan izan arriskutsua izan daitekeela, Flash edukia kode arbitrarioa baita.","flash_fail":"Ezin izan da Flash edukia kargatu. Ikusi kontsola xehetasunetarako."},"image_cropper":{"crop_picture":"Moztu argazkia","save":"Gorde","save_without_cropping":"Gorde moztu gabe","cancel":"Ezeztatu"},"importer":{"submit":"Bidali","success":"Ondo inportatu da.","error":"Errore bat gertatu da fitxategi hau inportatzerakoan."},"login":{"login":"Saioa hasi","description":"OAuth-ekin saioa hasi","logout":"Saioa itxi","password":"Pasahitza","placeholder":"adibidez Lain","register":"Erregistratu","username":"Erabiltzaile-izena","hint":"Hasi saioa eztabaidan parte-hartzeko","authentication_code":"Autentifikazio kodea","enter_recovery_code":"Sartu berreskuratze kodea","enter_two_factor_code":"Sartu bi-faktore kodea","recovery_code":"Berreskuratze kodea","heading":{"totp":"Bi-faktore autentifikazioa","recovery":"Bi-faktore berreskuratzea"}},"media_modal":{"previous":"Aurrekoa","next":"Hurrengoa"},"nav":{"about":"Honi buruz","administration":"Administrazioa","back":"Atzera","chat":"Txat lokala","friend_requests":"Jarraitzeko eskaerak","mentions":"Aipamenak","interactions":"Interakzioak","dms":"Zuzeneko mezuak","public_tl":"Denbora-lerro publikoa","timeline":"Denbora-lerroa","twkn":"Ezagutzen den Sarea","user_search":"Erabiltzailea Bilatu","search":"Bilatu","who_to_follow":"Nori jarraitu","preferences":"Hobespenak","chats":"Txatak","timelines":"Denbora-lerroak","bookmarks":"Laster-markak","home_timeline":"Denbora-lerro pertsonala"},"notifications":{"broken_favorite":"Egoera ezezaguna, bilatzen…","favorited_you":"zure mezua gogoko du","followed_you":"Zu jarraitzen zaitu","load_older":"Kargatu jakinarazpen zaharragoak","notifications":"Jakinarazpenak","read":"Irakurrita!","repeated_you":"zure mezua errepikatu du","no_more_notifications":"Ez dago jakinarazpen gehiago","reacted_with":"{0}kin erreakzionatu zuen","migrated_to":"hona migratua:","follow_request":"jarraitu nahi zaitu","error":"Errorea jakinarazpenak eskuratzean: {0}"},"polls":{"add_poll":"Inkesta gehitu","add_option":"Gehitu aukera","option":"Aukera","votes":"Bozkak","vote":"Bozka","type":"Inkesta mota","single_choice":"Aukera bakarra","multiple_choices":"Aukera anizkoitza","expiry":"Inkestaren iraupena","expires_in":"Inkesta {0} bukatzen da","expired":"Inkesta {0} bukatu zen","not_enough_options":"Aukera gutxiegi inkestan","votes_count":"{count} boto| {count} boto","people_voted_count":"Pertsona batek bozkatu du | {count} pertsonak bozkatu dute"},"emoji":{"stickers":"Pegatinak","emoji":"Emoji","keep_open":"Mantendu hautatzailea zabalik","search_emoji":"Bilatu emoji bat","add_emoji":"Emoji bat gehitu","custom":"Ohiko emojiak","unicode":"Unicode emojiak","load_all":"{emojiAmount} emoji guztiak kargatzen","load_all_hint":"Lehenengo {saneAmount} emojia kargatuta, emoji guztiak kargatzeak errendimendu arazoak sor ditzake."},"stickers":{"add_sticker":"Pegatina gehitu"},"interactions":{"favs_repeats":"Errepikapen eta gogokoak","follows":"Jarraitzaile berriak","load_older":"Kargatu elkarrekintza zaharragoak","moves":"Erabiltzailea migratuta"},"post_status":{"new_status":"Mezu berri bat idatzi","account_not_locked_warning":"Zure kontua ez dago {0}. Edozeinek jarraitzen hastearekin, zure mezuak irakur ditzake.","account_not_locked_warning_link":"Blokeatuta","attachments_sensitive":"Nabarmendu eranskinak hunkigarri gisa","content_type":{"text/plain":"Testu arrunta","text/html":"HTML","text/markdown":"Markdown","text/bbcode":"BBCode"},"content_warning":"Gaia (hautazkoa)","default":"Iadanik Los Angeles-en","direct_warning_to_all":"Mezu hau aipatutako erabiltzaile guztientzat ikusgai egongo da.","direct_warning_to_first_only":"Mezu hau ikusgai egongo da bakarrik hasieran aipatzen diren erabiltzaileei.","posting":"Argitaratzen","scope_notice":{"public":"Mezu hau guztiontzat ikusgai izango da","private":"Mezu hau zure jarraitzaileek soilik ikusiko dute","unlisted":"Mezu hau ez da argitaratuko Denbora-lerro Publikoan ezta Ezagutzen den Sarean"},"scope":{"direct":"Zuzena: bidali aipatutako erabiltzaileei besterik ez","private":"Jarraitzaileentzako bakarrik: bidali jarraitzaileentzat bakarrik","public":"Publikoa: bistaratu denbora-lerro publikoetan","unlisted":"Zerrendatu gabea: ez bidali denbora-lerro publikoetara"},"media_description_error":"Ezin izan da artxiboa eguneratu, saiatu berriro","preview":"Aurrebista","media_description":"Media deskribapena","preview_empty":"Hutsik","post":"Bidali","empty_status_error":"Ezin da argitaratu ezer idatzi gabe edo eranskinik gabe"},"registration":{"bio":"Biografia","email":"E-posta","fullname":"Erakutsi izena","password_confirm":"Pasahitza berretsi","registration":"Sortu kontua","token":"Gonbidapen txartela","captcha":"CAPTCHA","new_captcha":"Klikatu irudia captcha berri bat lortzeko","username_placeholder":"Adibidez lain","fullname_placeholder":"Adibidez Lain Iwakura","bio_placeholder":"Adidibez.\\nKaixo, Lain naiz.\\nFedibertsoa gustokoa dut eta euskeraz hitzegiten dut.","validations":{"username_required":"Ezin da hutsik utzi","fullname_required":"Ezin da hutsik utzi","email_required":"Ezin da hutsik utzi","password_required":"Ezin da hutsik utzi","password_confirmation_required":"Ezin da hutsik utzi","password_confirmation_match":"Pasahitzaren berdina izan behar du"},"reason":"Kontua sortzeko arrazoia","reason_placeholder":"Instantzia honek kontu berriak eskuz onartzen ditu.\\nJakinarazi administrazioari zergatik erregistratu nahi duzun.","register":"Erregistratu"},"selectable_list":{"select_all":"Hautatu denak"},"settings":{"app_name":"App izena","security":"Segurtasuna","enter_current_password_to_confirm":"Sar ezazu zure egungo pasahitza zure identitatea baieztatzeko","mfa":{"otp":"OTP","setup_otp":"OTP konfiguratu","wait_pre_setup_otp":"OTP aurredoitzen","confirm_and_enable":"Baieztatu eta gaitu OTP","title":"Bi-faktore autentifikazioa","generate_new_recovery_codes":"Sortu berreskuratze kode berriak","warning_of_generate_new_codes":"Berreskuratze kode berriak sortzean, zure berreskuratze kode zaharrak ez dute balioko.","recovery_codes":"Berreskuratze kodea.","waiting_a_recovery_codes":"Babes-kopia kodeak jasotzen…","recovery_codes_warning":"Idatzi edo gorde kodeak leku seguruan - bestela ez dituzu berriro ikusiko. Zure 2FA aplikaziorako sarbidea eta berreskuratze kodeak galduz gero, zure kontutik blokeatuta egongo zara.","authentication_methods":"Autentifikazio metodoa","scan":{"title":"Eskaneatu","desc":"Zure bi-faktore aplikazioa erabiliz, eskaneatu QR kode hau edo idatzi testu-gakoa:","secret_code":"Giltza"},"verify":{"desc":"Bi-faktore autentifikazioa gaitzeko, sar ezazu bi-faktore kodea zure app-tik:"}},"attachmentRadius":"Eranskinak","attachments":"Eranskinak","avatar":"Avatarra","avatarAltRadius":"Abatarra (aipamenak)","avatarRadius":"Avatarrak","background":"Atzeko planoa","bio":"Biografia","block_export":"Blokeatu dituzunak esportatu","block_export_button":"Esportatu blokeatutakoak csv fitxategi batera","block_import":"Blokeatu dituzunak inportatu","block_import_error":"Errorea blokeatutakoak inportatzen","blocks_imported":"Blokeatutakoak inportaturik! Hauek prozesatzeak denbora hartuko du.","blocks_tab":"Blokeatutakoak","btnRadius":"Botoiak","cBlue":"Urdina (erantzun, jarraitu)","cGreen":"Berdea (Bertxiotu)","cOrange":"Laranja (Gogokoa)","cRed":"Gorria (ezeztatu)","change_password":"Pasahitza aldatu","change_password_error":"Arazao bat egon da zure pasahitza aldatzean.","changed_password":"Pasahitza ondo aldatu da!","collapse_subject":"Bildu gaia daukaten mezuak","composing":"Idazten","confirm_new_password":"Baieztatu pasahitz berria","current_avatar":"Zure uneko avatarra","current_password":"Indarrean dagoen pasahitza","current_profile_banner":"Zure profilaren banner-a","data_import_export_tab":"Datuak inportatu / esportatu","default_vis":"Lehenetsitako ikusgaitasunak","delete_account":"Ezabatu kontua","discoverable":"Baimendu zure kontua kanpo bilaketa-emaitzetan eta bestelako zerbitzuetan agertzea","delete_account_description":"Betirako ezabatu zure datuak eta desaktibatu kontua.","pad_emoji":"Zuriuneak gehitu emoji bat aukeratzen denean","delete_account_error":"Arazo bat gertatu da zure kontua ezabatzerakoan. Arazoa jarraitu eskero, administratzailearekin harremanetan jarri.","delete_account_instructions":"Idatzi zure pasahitza kontua ezabatzeko.","avatar_size_instruction":"Avatar irudien gomendatutako gutxieneko tamaina 150x150 pixel dira.","export_theme":"Gorde aurre-ezarpena","filtering":"Iragazten","filtering_explanation":"Hitz hauek dituzten mezu guztiak isilduak izango dira. Lerro bakoitzeko bat","follow_export":"Jarraitzen dituzunak esportatu","follow_export_button":"Esportatu zure jarraitzaileak csv fitxategi batean","follow_import":"Jarraitzen dituzunak inportatu","follow_import_error":"Errorea jarraitzaileak inportatzerakoan","follows_imported":"Jarraitzaileak inportatuta! Prozesatzeak denbora pixka bat iraungo du.","foreground":"Aurreko planoa","general":"Orokorra","hide_attachments_in_convo":"Ezkutatu eranskinak elkarrizketatan","hide_attachments_in_tl":"Ezkutatu eranskinak donbora-lerroan","hide_muted_posts":"Ezkutatu mutututako erabiltzaileen mezuak","max_thumbnails":"Mezu bakoitzeko argazki-miniatura kopuru maximoa","hide_isp":"Instantziari buruzko panela ezkutatu","preload_images":"Argazkiak aurrekargatu","use_one_click_nsfw":"Ireki eduki hunkigarria duten eranskinak klik batekin","hide_post_stats":"Ezkutatu mezuaren estatistikak (adibidez faborito kopurua)","hide_user_stats":"Ezkutatu erabiltzaile estatistikak (adibidez jarraitzaile kopurua)","hide_filtered_statuses":"Ezkutatu iragazitako mezuak","import_blocks_from_a_csv_file":"Blokeatutakoak inportatu CSV fitxategi batetik","import_followers_from_a_csv_file":"Inportatu jarraitzaileak csv fitxategi batetik","import_theme":"Kargatu aurre-ezarpena","inputRadius":"Sarrera eremuak","checkboxRadius":"Kuadrotxoak","instance_default":"(lehenetsia: {value})","instance_default_simple":"(lehenetsia)","interface":"Interfazea","interfaceLanguage":"Interfazearen hizkuntza","invalid_theme_imported":"Hautatutako fitxategia ez da onartutako Pleroma gaia. Ez da zure gaian aldaketarik burutu.","limited_availability":"Ez dago erabilgarri zure nabigatzailean","links":"Estekak","lock_account_description":"Mugatu zure kontua soilik onartutako jarraitzaileei","loop_video":"Begizta bideoak","loop_video_silent_only":"Soinu gabeko bideoak begiztatu bakarrik (adibidez Mastodon-eko gif-ak)","mutes_tab":"Mututuak","play_videos_in_modal":"Erreproduzitu bideoak zuzenean multimedia erreproduzigailuan","use_contain_fit":"Eranskinak ez moztu miniaturetan","name":"Izena","name_bio":"Izena eta biografia","new_password":"Pasahitz berria","notification_visibility":"Erakusteko jakinarazpen motak","notification_visibility_follows":"Jarraitzaileak","notification_visibility_likes":"Gogokoak","notification_visibility_mentions":"Aipamenak","notification_visibility_repeats":"Errepikapenak","no_rich_text_description":"Kendu testu-formatu aberastuak mezu guztietatik","no_blocks":"Ez daude erabiltzaile blokeatutak","no_mutes":"Ez daude erabiltzaile mututuak","hide_follows_description":"Ez erakutsi nor jarraitzen ari naizen","hide_followers_description":"Ez erakutsi nor ari den ni jarraitzen","hide_follows_count_description":"Ez erakutsi jarraitzen ari naizen kontuen kopurua","hide_followers_count_description":"Ez erakutsi nire jarraitzaileen kontuen kopurua","show_admin_badge":"Erakutsi \\"Administratzaile\\" etiketa nire profilan","show_moderator_badge":"Erakutsi \\"Moderatzaile\\" etiketa nire profilan","nsfw_clickthrough":"Gaitu klika hunkigarri eranskinak ezkutatzeko","oauth_tokens":"OAuth tokenak","token":"Tokena","refresh_token":"Berrgin tokena","valid_until":"Baliozkoa arte","revoke_token":"Ezeztatu","panelRadius":"Panelak","pause_on_unfocused":"Eguneraketa automatikoa gelditu fitxatik kanpo","presets":"Aurrezarpenak","profile_background":"Profilaren atzeko planoa","profile_banner":"Profilaren banner-a","profile_tab":"Profila","radii_help":"Konfiguratu interfazearen ertzen biribiltzea (pixeletan)","replies_in_timeline":"Denbora-lerroko erantzunak","reply_visibility_all":"Erakutsi erantzun guztiak","reply_visibility_following":"Erakutsi bakarrik niri zuzendutako edo nik jarraitutako erabiltzaileen erantzunak","reply_visibility_self":"Erakutsi bakarrik niri zuzendutako erantzunak","autohide_floating_post_button":"Automatikoki ezkutatu Mezu Berriaren botoia (sakelako)","saving_err":"Errorea ezarpenak gordetzean","saving_ok":"Ezarpenak gordeta","search_user_to_block":"Bilatu zein blokeatu nahi duzun","search_user_to_mute":"Bilatu zein isilarazi nahi duzun","security_tab":"Segurtasuna","scope_copy":"Ikusgaitasun aukerak kopiatu mezua erantzuterakoan (Zuzeneko Mezuak beti kopiatzen dute)","minimal_scopes_mode":"Bildu ikusgaitasun aukerak","set_new_avatar":"Ezarri avatar berria","set_new_profile_background":"Ezarri atzeko plano berria","set_new_profile_banner":"Ezarri profil banner berria","settings":"Ezarpenak","subject_input_always_show":"Erakutsi beti gaiaren eremua","subject_line_behavior":"Gaia kopiatu erantzuterakoan","subject_line_email":"E-maila bezala: \\"re: gaia\\"","subject_line_mastodon":"Mastodon bezala: kopiatu den bezala","subject_line_noop":"Ez kopiatu","post_status_content_type":"Argitarapen formatua","stop_gifs":"GIF-a iniziatu arratoia gainean jarrita","streaming":"Gaitu mezu berrien karga goraino mugitzean","text":"Testua","theme":"Gaia","theme_help":"Erabili hex-kolore kodeak (#rrggbb) gaiaren koloreak pertsonalizatzeko.","theme_help_v2_1":"Zenbait osagaien koloreak eta opakutasuna ezeztatu ditzakezu kontrol-laukia aktibatuz, \\"Garbitu dena\\" botoia erabili aldaketak deusezteko.","theme_help_v2_2":"Sarreren batzuen azpian dauden ikonoak atzeko planoaren eta testuaren arteko kontrastearen adierazleak dira, kokatu arratoia gainean informazio zehatza eskuratzeko. Kontuan izan gardentasun kontrasteen adierazleek erabiltzen direnean, kasurik okerrena erakusten dutela.","tooltipRadius":"Argibideak/alertak","upload_a_photo":"Argazkia kargatu","user_settings":"Erabiltzaile Ezarpenak","values":{"false":"ez","true":"bai"},"notifications":"Jakinarazpenak","notification_mutes":"Erabiltzaile jakin baten jakinarazpenak jasotzeari uzteko, isilarazi ezazu.","notification_blocks":"Erabiltzaile bat blokeatzeak jakinarazpen guztiak gelditzen ditu eta harpidetza ezeztatu.","enable_web_push_notifications":"Gaitu web jakinarazpenak","style":{"switcher":{"keep_color":"Mantendu koloreak","keep_shadows":"Mantendu itzalak","keep_opacity":"Mantendu opakotasuna","keep_roundness":"Mantendu biribiltasuna","keep_fonts":"Mantendu iturriak","save_load_hint":"\\"Mantendu\\" aukerak uneko konfiguratutako aukerak gordetzen ditu gaiak hautatzerakoan edo kargatzean, gai hauek esportatze garaian ere gordetzen ditu. Kontrol-lauki guztiak garbitzen direnean, esportazio-gaiak dena gordeko du.","reset":"Berrezarri","clear_all":"Garbitu dena","clear_opacity":"Garbitu opakotasuna"},"common":{"color":"Kolorea","opacity":"Opakotasuna","contrast":{"hint":"Kontrastearen erlazioa {ratio} da, {level} {context}","level":{"aa":"AA Mailako gidaliburua betetzen du (gutxienezkoa)","aaa":"AAA Mailako gidaliburua betetzen du (gomendatua)","bad":"ez ditu irisgarritasun arauak betetzen"},"context":{"18pt":"testu handientzat (+18pt)","text":"testuentzat"}}},"common_colors":{"_tab_label":"Ohikoa","main":"Ohiko koloreak","foreground_hint":"Ikusi \\"Aurreratua\\" fitxa kontrol zehatzagoa lortzeko","rgbo":"Ikono, azentu eta etiketak"},"advanced_colors":{"_tab_label":"Aurreratua","alert":"Alerten atzeko planoa","alert_error":"Errorea","badge":"Etiketen atzeko planoa","badge_notification":"Jakinarazpenak","panel_header":"Panelaren goiburua","top_bar":"Goiko barra","borders":"Ertzak","buttons":"Botoiak","inputs":"Sarrera eremuak","faint_text":"Testu itzalita"},"radii":{"_tab_label":"Biribiltasuna"},"shadows":{"_tab_label":"Itzal eta argiak","component":"Atala","override":"Berridatzi","shadow_id":"Itzala #{value}","blur":"Lausotu","spread":"Hedapena","inset":"Barrutik","hint":"Itzaletarako ere erabil dezakezu --aldagarri kolore balio gisa CSS3 aldagaiak erabiltzeko. Kontuan izan opakutasuna ezartzeak ez duela kasu honetan funtzionatuko.","filter_hint":{"always_drop_shadow":"Kontuz, itzal honek beti erabiltzen du {0} nabigatzaileak onartzen duenean.","drop_shadow_syntax":"{0} ez du onartzen {1} parametroa eta {2} gako-hitza.","avatar_inset":"Kontuan izan behar da barruko eta kanpoko itzal konbinazioak, ez esparotako emaitzak ager daitezkeela atzeko plano gardena duten Avatarretan.","spread_zero":"Hedapena > 0 duten itzalak zero izango balitz bezala agertuko dira","inset_classic":"Barruko itzalak {0} erabiliko dute"},"components":{"panel":"Panela","panelHeader":"Panel goiburua","topBar":"Goiko barra","avatar":"Erabiltzailearen avatarra (profilan)","avatarStatus":"Erabiltzailearen avatarra (mezuetan)","popup":"Popup-ak eta argibideak","button":"Botoia","buttonHover":"Botoia (gainean)","buttonPressed":"Botoai (sakatuta)","buttonPressedHover":"Botoia (sakatuta+gainean)","input":"Sarrera eremuak"}},"fonts":{"_tab_label":"Letra-tipoak","help":"Aukeratu letra-tipoak erabiltzailearen interfazean erabiltzeko. \\"Pertsonalizatua\\" letra-tipoan, sisteman agertzen den izen berdinarekin idatzi behar duzu.","components":{"interface":"Interfazea","input":"Sarrera eremuak","post":"Mezuen testua","postCode":"Tarte-bakarreko testua mezuetan (testu-formatu aberastuak)"},"family":"Letra-tipoaren izena","size":"Tamaina (px)","weight":"Pisua (lodiera)","custom":"Pertsonalizatua"},"preview":{"header":"Aurrebista","content":"Edukia","error":"Adibide errorea","button":"Botoia","text":"Hamaika {0} eta {1}","mono":"edukia","input":"Jadanik Los Angeles-en.","faint_link":"laguntza","fine_print":"Irakurri gure {0} ezer erabilgarria ikasteko!","header_faint":"Ondo dago","checkbox":"Baldintzak berrikusi ditut","link":"esteka polita"}},"version":{"title":"Bertsioa","backend_version":"Backend bertsioa","frontend_version":"Frontend bertsioa"},"save":"Aldaketak gorde","setting_changed":"Ezarpena lehenetsitakoaren desberdina da","allow_following_move":"Baimendu jarraipen automatikoa, jarraitzen duzun kontua beste instantzia batera eramaten denean","new_email":"E-posta berria"},"time":{"day":"{0} egun","days":"{0} egun","day_short":"{0}e","days_short":"{0}e","hour":"{0} ordu","hours":"{0} ordu","hour_short":"{0}o","hours_short":"{0}o","in_future":"{0} barru","in_past":"duela {0}","minute":"{0} minutu","minutes":"{0} minutu","minute_short":"{0}min","minutes_short":"{0}min","month":"{0} hilabete","months":"{0} hilabete","month_short":"{0}h","months_short":"{0}h","now":"oraintxe bertan","now_short":"orain","second":"{0} segundu","seconds":"{0} segundu","second_short":"{0}s","seconds_short":"{0}s","week":"{0} aste","weeks":"{0} aste","week_short":"{0}a","weeks_short":"{0}a","year":"{0} urte","years":"{0} urte","year_short":"{0}u","years_short":"{0}u"},"timeline":{"collapse":"Bildu","conversation":"Elkarrizketa","error_fetching":"Errorea eguneraketak eskuratzen","load_older":"Kargatu mezu zaharragoak","no_retweet_hint":"Mezu hau jarraitzailentzako bakarrik markatuta dago eta ezin da errepikatu","repeated":"Errepikatuta","show_new":"Berriena erakutsi","up_to_date":"Eguneratuta","no_more_statuses":"Ez daude mezu gehiago","no_statuses":"Mezurik gabe"},"status":{"favorites":"Gogokoak","repeats":"Errepikapenak","delete":"Mezua ezabatu","pin":"Profilan ainguratu","unpin":"Aingura ezeztatu profilatik","pinned":"Ainguratuta","delete_confirm":"Mezu hau benetan ezabatu nahi duzu?","reply_to":"Erantzuten","replies_list":"Erantzunak:","mute_conversation":"Elkarrizketa isilarazi","unmute_conversation":"Elkarrizketa aktibatu"},"user_card":{"approve":"Onartu","block":"Blokeatu","blocked":"Blokeatuta!","deny":"Ukatu","favorites":"Gogokoak","follow":"Jarraitu","follow_sent":"Eskaera bidalita!","follow_progress":"Eskatzen…","follow_unfollow":"Jarraitzeari utzi","followees":"Jarraitzen","followers":"Jarraitzaileak","following":"Jarraitzen!","follows_you":"Jarraitzen dizu!","its_you":"Zu zara!","media":"Multimedia","mention":"Aipatu","mute":"Isilarazi","muted":"Isilduta","per_day":"eguneko","remote_follow":"Jarraitu","report":"Berri eman","statuses":"Mezuak","subscribe":"Harpidetu","unsubscribe":"Harpidetza ezeztatu","unblock":"Blokeoa kendu","unblock_progress":"Blokeoa ezeztatzen…","block_progress":"Blokeatzen…","unmute":"Isiltasuna kendu","unmute_progress":"Isiltasuna kentzen…","mute_progress":"Isiltzen…","hide_repeats":"Ezkutatu errepikapenak","show_repeats":"Erakutsi errpekiapenak","admin_menu":{"moderation":"Moderazioa","grant_admin":"Administratzaile baimena","revoke_admin":"Ezeztatu administratzaile baimena","grant_moderator":"Moderatzaile baimena","revoke_moderator":"Ezeztatu moderatzaile baimena","activate_account":"Aktibatu kontua","deactivate_account":"Desaktibatu kontua","delete_account":"Ezabatu kontua","force_nsfw":"Markatu mezu guztiak hunkigarri gisa","strip_media":"Kendu multimedia mezuetatik","force_unlisted":"Behartu mezuak listatu gabekoak izatea","sandbox":"Behartu zure jarraitzaileentzako bakarrik argitaratzera","disable_remote_subscription":"Ez utzi istantzia kanpoko erabiltzaileak zuri jarraitzea","disable_any_subscription":"Ez utzi beste erabiltzaileak zuri jarraitzea","quarantine":"Ez onartu mezuak beste instantzietatik","delete_user":"Erabiltzailea ezabatu","delete_user_confirmation":"Erabat ziur zaude? Ekintza hau ezin da desegin."}},"user_profile":{"timeline_title":"Erabiltzailearen denbora-lerroa","profile_does_not_exist":"Barkatu, profil hau ez da existitzen.","profile_loading_error":"Barkatu, errore bat gertatu da profila kargatzean."},"user_reporting":{"title":"{0}-ri buruz berri ematen","add_comment_description":"Zure kexa moderatzaileei bidaliko da. Nahi baduzu zure kexaren zergatia idatz dezakezu:","additional_comments":"Iruzkin gehiago","forward_description":"Kontu hau beste instantzia batekoa da. Nahi duzu txostenaren kopia bat bidali ere?","forward_to":"{0}-ri birbidali","submit":"Bidali","generic_error":"Errore bat gertatu da zure eskaera prozesatzerakoan."},"who_to_follow":{"more":"Gehiago","who_to_follow":"Nori jarraitu"},"tool_tip":{"media_upload":"Multimedia igo","repeat":"Errepikatu","reply":"Erantzun","favorite":"Gogokoa","user_settings":"Erabiltzaile ezarpenak"},"upload":{"error":{"base":"Igoerak huts egin du.","file_too_big":"Artxiboa haundiegia [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]","default":"Saiatu berriro geroago"},"file_size_units":{"B":"B","KiB":"KiB","MiB":"MiB","GiB":"GiB","TiB":"TiB"}},"search":{"people":"Erabiltzaileak","hashtags":"Traolak","person_talking":"{count} pertsona hitzegiten","people_talking":"{count} jende hitzegiten","no_results":"Emaitzarik ez"},"password_reset":{"forgot_password":"Pasahitza ahaztua?","password_reset":"Pasahitza berrezarri","instruction":"Idatzi zure helbide elektronikoa edo erabiltzaile izena. Pasahitza berrezartzeko esteka bidaliko dizugu.","placeholder":"Zure e-posta edo erabiltzaile izena","check_email":"Begiratu zure posta elektronikoa pasahitza berrezarri ahal izateko.","return_home":"Itzuli hasierara","too_many_requests":"Saiakera gehiegi burutu ditzu, saiatu berriro geroxeago.","password_reset_disabled":"Pasahitza berrezartzea debekatuta dago. Mesedez, jarri harremanetan instantzia administratzailearekin.","password_reset_required":"Pasahitza berrezarri behar duzu saioa hasteko.","password_reset_required_but_mailer_is_disabled":"Pasahitza berrezarri behar duzu, baina pasahitza berrezartzeko aukera desgaituta dago. Mesedez, jarri harremanetan instantziaren administratzailearekin."},"about":{"mrf":{"keyword":{"keyword_policies":"Gako-hitz politika","ftl_removal":"\\"Ezagutzen den Sarea\\" denbora-lerrotik ezabatu","is_replaced_by":"→","replace":"Ordezkatuak","reject":"Ukatuak"},"federation":"Federazioa","simple":{"media_nsfw_desc":"Instantzia honek hurrengo instantzien multimediak sentikorrak izatera behartzen ditu:","media_nsfw":"Behartu multimedia sentikor moduan","media_removal_desc":"Instantzia honek atxikitutako multimedia hurrengo instantzietatik ezabatzen ditu:","media_removal":"Multimedia Ezabatu","ftl_removal_desc":"Instantzia honek hurrengo instantziak ezabatzen ditu \\"Ezagutzen den Sarea\\" denbora-lerrotik:","ftl_removal":"\\"Ezagutzen den Sarea\\" denbora-lerrotik ezabatu","quarantine_desc":"Instantzia honek soilik mezu publikoak bidaliko ditu instantzia hauetara:","quarantine":"Koarentena","reject_desc":"Instantzia honek ez ditu hurrengo instantzien mezuak onartuko:","reject":"Ukatuak","accept_desc":"Instantzia honek hurrengo instantzietako mezuak soilik onartzen ditu:","accept":"Onartu","simple_policies":"Gure instantziaren politika zehatzak"},"mrf_policies_desc":"MRF politikek instantzia honen federazioa manipulatzen dute gainerako instantziekin. Honako politika hauek daude gaituta:","mrf_policies":"Gaitutako MRF politikak"},"staff":"Arduradunak"},"domain_mute_card":{"unmute_progress":"Isiltasuna kentzen…","unmute":"Isiltasuna kendu","mute_progress":"Isiltzen…","mute":"Isilarazi"},"shoutbox":{"title":"Oihu-kutxa"},"errors":{"storage_unavailable":"Pleromak ezin izan du nabigatzailearen biltegira sartu. Hasiera-saioa edo tokiko ezarpenak ez dira gordeko eta ustekabeko arazoak sor ditzake. Saiatu cookie-ak gaitzen."},"remote_user_resolver":{"searching_for":"Bilatzen","error":"Ez da aurkitu."}}')}}]); +//# sourceMappingURL=12.5ca41e245bb40263bc7f.js.map \ No newline at end of file diff --git a/priv/static/static/js/12.a3dc3473565ec07a88c2.js.map b/priv/static/static/js/12.5ca41e245bb40263bc7f.js.map similarity index 56% rename from priv/static/static/js/12.a3dc3473565ec07a88c2.js.map rename to priv/static/static/js/12.5ca41e245bb40263bc7f.js.map index 7b8fe89ac..762172484 100644 --- a/priv/static/static/js/12.a3dc3473565ec07a88c2.js.map +++ b/priv/static/static/js/12.5ca41e245bb40263bc7f.js.map @@ -1 +1 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/12.a3dc3473565ec07a88c2.js","sourceRoot":""} \ No newline at end of file +{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/12.5ca41e245bb40263bc7f.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/12.a3dc3473565ec07a88c2.js b/priv/static/static/js/12.a3dc3473565ec07a88c2.js deleted file mode 100644 index ad6414e72..000000000 --- a/priv/static/static/js/12.a3dc3473565ec07a88c2.js +++ /dev/null @@ -1,2 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{592:function(a){a.exports=JSON.parse('{"chat":{"title":"Txata"},"exporter":{"export":"Esportatu","processing":"Prozesatzen, zure fitxategia deskargatzeko eskatuko zaizu laster"},"features_panel":{"chat":"Txata","gopher":"Ghoper","media_proxy":"Media proxy","scope_options":"Ikusgaitasun aukerak","text_limit":"Testu limitea","title":"Ezaugarriak","who_to_follow":"Nori jarraitu","pleroma_chat_messages":"Pleroma Txata","upload_limit":"Kargatzeko muga"},"finder":{"error_fetching_user":"Errorea erabiltzailea eskuratzen","find_user":"Bilatu erabiltzailea"},"general":{"apply":"Aplikatu","submit":"Bidali","more":"Gehiago","generic_error":"Errore bat gertatu da","optional":"Hautazkoa","show_more":"Gehiago erakutsi","show_less":"Gutxiago erakutsi","cancel":"Ezeztatu","disable":"Ezgaitu","enable":"Gaitu","confirm":"Baieztatu","verify":"Egiaztatu","peek":"Begiratu","close":"Itxi","dismiss":"Baztertu","retry":"Saiatu berriro","error_retry":"Saiatu berriro mesedez","loading":"Kargatzen…","role":{"moderator":"Moderatzailea","admin":"Administratzailea"}},"image_cropper":{"crop_picture":"Moztu argazkia","save":"Gorde","save_without_cropping":"Gorde moztu gabe","cancel":"Ezeztatu"},"importer":{"submit":"Bidali","success":"Ondo inportatu da.","error":"Errore bat gertatu da fitxategi hau inportatzerakoan."},"login":{"login":"Saioa hasi","description":"OAuth-ekin saioa hasi","logout":"Saioa itxi","password":"Pasahitza","placeholder":"adibidez Lain","register":"Erregistratu","username":"Erabiltzaile-izena","hint":"Hasi saioa eztabaidan parte-hartzeko","authentication_code":"Autentifikazio kodea","enter_recovery_code":"Sartu berreskuratze kodea","enter_two_factor_code":"Sartu bi-faktore kodea","recovery_code":"Berreskuratze kodea","heading":{"totp":"Bi-faktore autentifikazioa","recovery":"Bi-faktore berreskuratzea"}},"media_modal":{"previous":"Aurrekoa","next":"Hurrengoa"},"nav":{"about":"Honi buruz","administration":"Administrazioa","back":"Atzera","chat":"Txat lokala","friend_requests":"Jarraitzeko eskaerak","mentions":"Aipamenak","interactions":"Interakzioak","dms":"Zuzeneko mezuak","public_tl":"Denbora-lerro publikoa","timeline":"Denbora-lerroa","twkn":"Ezagutzen den Sarea","user_search":"Erabiltzailea Bilatu","search":"Bilatu","who_to_follow":"Nori jarraitu","preferences":"Hobespenak","chats":"Txatak","timelines":"Denbora-lerroak","bookmarks":"Laster-markak"},"notifications":{"broken_favorite":"Egoera ezezaguna, bilatzen…","favorited_you":"zure mezua gogoko du","followed_you":"Zu jarraitzen zaitu","load_older":"Kargatu jakinarazpen zaharragoak","notifications":"Jakinarazpenak","read":"Irakurrita!","repeated_you":"zure mezua errepikatu du","no_more_notifications":"Ez dago jakinarazpen gehiago","reacted_with":"{0}kin erreakzionatu zuen","migrated_to":"hona migratua:","follow_request":"jarraitu nahi zaitu","error":"Errorea jakinarazpenak eskuratzean: {0}"},"polls":{"add_poll":"Inkesta gehitu","add_option":"Gehitu aukera","option":"Aukera","votes":"Bozkak","vote":"Bozka","type":"Inkesta mota","single_choice":"Aukera bakarra","multiple_choices":"Aukera anizkoitza","expiry":"Inkestaren iraupena","expires_in":"Inkesta {0} bukatzen da","expired":"Inkesta {0} bukatu zen","not_enough_options":"Aukera gutxiegi inkestan","votes_count":"{count} boto| {count} boto","people_voted_count":"Pertsona batek bozkatu du | {count} pertsonak bozkatu dute"},"emoji":{"stickers":"Pegatinak","emoji":"Emoji","keep_open":"Mantendu hautatzailea zabalik","search_emoji":"Bilatu emoji bat","add_emoji":"Emoji bat gehitu","custom":"Ohiko emojiak","unicode":"Unicode emojiak","load_all":"{emojiAmount} emoji guztiak kargatzen"},"stickers":{"add_sticker":"Pegatina gehitu"},"interactions":{"favs_repeats":"Errepikapen eta gogokoak","follows":"Jarraitzaile berriak","load_older":"Kargatu elkarrekintza zaharragoak"},"post_status":{"new_status":"Mezu berri bat idatzi","account_not_locked_warning":"Zure kontua ez dago {0}. Edozeinek jarraitzen hastearekin, zure mezuak irakur ditzake.","account_not_locked_warning_link":"Blokeatuta","attachments_sensitive":"Nabarmendu eranskinak hunkigarri gisa","content_type":{"text/plain":"Testu arrunta","text/html":"HTML","text/markdown":"Markdown","text/bbcode":"BBCode"},"content_warning":"Gaia (hautazkoa)","default":"Iadanik Los Angeles-en","direct_warning_to_all":"Mezu hau aipatutako erabiltzaile guztientzat ikusgai egongo da.","direct_warning_to_first_only":"Mezu hau ikusgai egongo da bakarrik hasieran aipatzen diren erabiltzaileei.","posting":"Argitaratzen","scope_notice":{"public":"Mezu hau guztiontzat ikusgai izango da","private":"Mezu hau zure jarraitzaileek soilik ikusiko dute","unlisted":"Mezu hau ez da argitaratuko Denbora-lerro Publikoan ezta Ezagutzen den Sarean"},"scope":{"direct":"Zuzena: bidali aipatutako erabiltzaileei besterik ez","private":"Jarraitzaileentzako bakarrik: bidali jarraitzaileentzat bakarrik","public":"Publikoa: bistaratu denbora-lerro publikoetan","unlisted":"Zerrendatu gabea: ez bidali denbora-lerro publikoetara"}},"registration":{"bio":"Biografia","email":"E-posta","fullname":"Erakutsi izena","password_confirm":"Pasahitza berretsi","registration":"Izena ematea","token":"Gonbidapen txartela","captcha":"CAPTCHA","new_captcha":"Klikatu irudia captcha berri bat lortzeko","username_placeholder":"Adibidez lain","fullname_placeholder":"Adibidez Lain Iwakura","bio_placeholder":"Adidibez.\\nKaixo, Lain naiz.\\nFedibertsoa gustokoa dut eta euskeraz hitzegiten dut.","validations":{"username_required":"Ezin da hutsik utzi","fullname_required":"Ezin da hutsik utzi","email_required":"Ezin da hutsik utzi","password_required":"Ezin da hutsik utzi","password_confirmation_required":"Ezin da hutsik utzi","password_confirmation_match":"Pasahitzaren berdina izan behar du"}},"selectable_list":{"select_all":"Hautatu denak"},"settings":{"app_name":"App izena","security":"Segurtasuna","enter_current_password_to_confirm":"Sar ezazu zure egungo pasahitza zure identitatea baieztatzeko","mfa":{"otp":"OTP","setup_otp":"OTP konfiguratu","wait_pre_setup_otp":"OTP aurredoitzen","confirm_and_enable":"Baieztatu eta gaitu OTP","title":"Bi-faktore autentifikazioa","generate_new_recovery_codes":"Sortu berreskuratze kode berriak","warning_of_generate_new_codes":"Berreskuratze kode berriak sortzean, zure berreskuratze kode zaharrak ez dute balioko.","recovery_codes":"Berreskuratze kodea","waiting_a_recovery_codes":"Babes-kopia kodeak jasotzen…","recovery_codes_warning":"Idatzi edo gorde kodeak leku seguruan - bestela ez dituzu berriro ikusiko. Zure 2FA aplikaziorako sarbidea eta berreskuratze kodeak galduz gero, zure kontutik blokeatuta egongo zara.","authentication_methods":"Autentifikazio metodoa","scan":{"title":"Eskaneatu","desc":"Zure bi-faktore aplikazioa erabiliz, eskaneatu QR kode hau edo idatzi testu-gakoa:","secret_code":"Giltza"},"verify":{"desc":"Bi-faktore autentifikazioa gaitzeko, sar ezazu bi-faktore kodea zure app-tik:"}},"attachmentRadius":"Eranskinak","attachments":"Eranskinak","avatar":"Avatarra","avatarAltRadius":"Abatarra (aipamenak)","avatarRadius":"Avatarrak","background":"Atzeko planoa","bio":"Biografia","block_export":"Blokeatu dituzunak esportatu","block_export_button":"Esportatu blokeatutakoak csv fitxategi batera","block_import":"Blokeatu dituzunak inportatu","block_import_error":"Errorea blokeatutakoak inportatzen","blocks_imported":"Blokeatutakoak inportaturik! Hauek prozesatzeak denbora hartuko du.","blocks_tab":"Blokeatutakoak","btnRadius":"Botoiak","cBlue":"Urdina (erantzun, jarraitu)","cGreen":"Berdea (Bertxiotu)","cOrange":"Laranja (Gogokoa)","cRed":"Gorria (ezeztatu)","change_password":"Pasahitza aldatu","change_password_error":"Arazao bat egon da zure pasahitza aldatzean.","changed_password":"Pasahitza ondo aldatu da!","collapse_subject":"Bildu gaia daukaten mezuak","composing":"Idazten","confirm_new_password":"Baieztatu pasahitz berria","current_avatar":"Zure uneko avatarra","current_password":"Indarrean dagoen pasahitza","current_profile_banner":"Zure profilaren banner-a","data_import_export_tab":"Datuak inportatu / esportatu","default_vis":"Lehenetsitako ikusgaitasunak","delete_account":"Ezabatu kontua","discoverable":"Baimendu zure kontua kanpo bilaketa-emaitzetan eta bestelako zerbitzuetan agertzea","delete_account_description":"Betirako ezabatu zure datuak eta desaktibatu kontua.","pad_emoji":"Zuriuneak gehitu emoji bat aukeratzen denean","delete_account_error":"Arazo bat gertatu da zure kontua ezabatzerakoan. Arazoa jarraitu eskero, administratzailearekin harremanetan jarri.","delete_account_instructions":"Idatzi zure pasahitza kontua ezabatzeko.","avatar_size_instruction":"Avatar irudien gomendatutako gutxieneko tamaina 150x150 pixel dira.","export_theme":"Gorde aurre-ezarpena","filtering":"Iragazten","filtering_explanation":"Hitz hauek dituzten mezu guztiak isilduak izango dira. Lerro bakoitzeko bat","follow_export":"Jarraitzen dituzunak esportatu","follow_export_button":"Esportatu zure jarraitzaileak csv fitxategi batean","follow_import":"Jarraitzen dituzunak inportatu","follow_import_error":"Errorea jarraitzaileak inportatzerakoan","follows_imported":"Jarraitzaileak inportatuta! Prozesatzeak denbora pixka bat iraungo du.","foreground":"Aurreko planoa","general":"Orokorra","hide_attachments_in_convo":"Ezkutatu eranskinak elkarrizketatan","hide_attachments_in_tl":"Ezkutatu eranskinak donbora-lerroan","hide_muted_posts":"Ezkutatu mutututako erabiltzaileen mezuak","max_thumbnails":"Mezu bakoitzeko argazki-miniatura kopuru maximoa","hide_isp":"Instantziari buruzko panela ezkutatu","preload_images":"Argazkiak aurrekargatu","use_one_click_nsfw":"Ireki eduki hunkigarria duten eranskinak klik batekin","hide_post_stats":"Ezkutatu mezuaren estatistikak (adibidez faborito kopurua)","hide_user_stats":"Ezkutatu erabiltzaile estatistikak (adibidez jarraitzaile kopurua)","hide_filtered_statuses":"Ezkutatu iragazitako mezuak","import_blocks_from_a_csv_file":"Blokeatutakoak inportatu CSV fitxategi batetik","import_followers_from_a_csv_file":"Inportatu jarraitzaileak csv fitxategi batetik","import_theme":"Kargatu aurre-ezarpena","inputRadius":"Sarrera eremuak","checkboxRadius":"Kuadrotxoak","instance_default":"(lehenetsia: {value})","instance_default_simple":"(lehenetsia)","interface":"Interfazea","interfaceLanguage":"Interfazearen hizkuntza","invalid_theme_imported":"Hautatutako fitxategia ez da onartutako Pleroma gaia. Ez da zure gaian aldaketarik burutu.","limited_availability":"Ez dago erabilgarri zure nabigatzailean","links":"Estekak","lock_account_description":"Mugatu zure kontua soilik onartutako jarraitzaileei","loop_video":"Begizta bideoak","loop_video_silent_only":"Soinu gabeko bideoak begiztatu bakarrik (adibidez Mastodon-eko gif-ak)","mutes_tab":"Mututuak","play_videos_in_modal":"Erreproduzitu bideoak zuzenean multimedia erreproduzigailuan","use_contain_fit":"Eranskinak ez moztu miniaturetan","name":"Izena","name_bio":"Izena eta biografia","new_password":"Pasahitz berria","notification_visibility":"Erakusteko jakinarazpen motak","notification_visibility_follows":"Jarraitzaileak","notification_visibility_likes":"Gogokoak","notification_visibility_mentions":"Aipamenak","notification_visibility_repeats":"Errepikapenak","no_rich_text_description":"Kendu testu-formatu aberastuak mezu guztietatik","no_blocks":"Ez daude erabiltzaile blokeatutak","no_mutes":"Ez daude erabiltzaile mututuak","hide_follows_description":"Ez erakutsi nor jarraitzen ari naizen","hide_followers_description":"Ez erakutsi nor ari den ni jarraitzen","hide_follows_count_description":"Ez erakutsi jarraitzen ari naizen kontuen kopurua","hide_followers_count_description":"Ez erakutsi nire jarraitzaileen kontuen kopurua","show_admin_badge":"Erakutsi \\"Administratzaile\\" etiketa nire profilan","show_moderator_badge":"Erakutsi \\"Moderatzaile\\" etiketa nire profilan","nsfw_clickthrough":"Gaitu klika hunkigarri eranskinak ezkutatzeko","oauth_tokens":"OAuth tokenak","token":"Tokena","refresh_token":"Berrgin tokena","valid_until":"Baliozkoa arte","revoke_token":"Ezeztatu","panelRadius":"Panelak","pause_on_unfocused":"Eguneraketa automatikoa gelditu fitxatik kanpo","presets":"Aurrezarpenak","profile_background":"Profilaren atzeko planoa","profile_banner":"Profilaren banner-a","profile_tab":"Profila","radii_help":"Konfiguratu interfazearen ertzen biribiltzea (pixeletan)","replies_in_timeline":"Denbora-lerroko erantzunak","reply_visibility_all":"Erakutsi erantzun guztiak","reply_visibility_following":"Erakutsi bakarrik niri zuzendutako edo nik jarraitutako erabiltzaileen erantzunak","reply_visibility_self":"Erakutsi bakarrik niri zuzendutako erantzunak","autohide_floating_post_button":"Automatikoki ezkutatu Mezu Berriaren botoia (sakelako)","saving_err":"Errorea ezarpenak gordetzean","saving_ok":"Ezarpenak gordeta","search_user_to_block":"Bilatu zein blokeatu nahi duzun","search_user_to_mute":"Bilatu zein isilarazi nahi duzun","security_tab":"Segurtasuna","scope_copy":"Ikusgaitasun aukerak kopiatu mezua erantzuterakoan (Zuzeneko Mezuak beti kopiatzen dute)","minimal_scopes_mode":"Bildu ikusgaitasun aukerak","set_new_avatar":"Ezarri avatar berria","set_new_profile_background":"Ezarri atzeko plano berria","set_new_profile_banner":"Ezarri profil banner berria","settings":"Ezarpenak","subject_input_always_show":"Erakutsi beti gaiaren eremua","subject_line_behavior":"Gaia kopiatu erantzuterakoan","subject_line_email":"E-maila bezala: \\"re: gaia\\"","subject_line_mastodon":"Mastodon bezala: kopiatu den bezala","subject_line_noop":"Ez kopiatu","post_status_content_type":"Argitarapen formatua","stop_gifs":"GIF-a iniziatu arratoia gainean jarrita","streaming":"Gaitu mezu berrien karga goraino mugitzean","text":"Testua","theme":"Gaia","theme_help":"Erabili hex-kolore kodeak (#rrggbb) gaiaren koloreak pertsonalizatzeko.","theme_help_v2_1":"Zenbait osagaien koloreak eta opakutasuna ezeztatu ditzakezu kontrol-laukia aktibatuz, \\"Garbitu dena\\" botoia erabili aldaketak deusezteko.","theme_help_v2_2":"Sarreren batzuen azpian dauden ikonoak atzeko planoaren eta testuaren arteko kontrastearen adierazleak dira, kokatu arratoia gainean informazio zehatza eskuratzeko. Kontuan izan gardentasun kontrasteen adierazleek erabiltzen direnean, kasurik okerrena erakusten dutela.","tooltipRadius":"Argibideak/alertak","upload_a_photo":"Argazkia kargatu","user_settings":"Erabiltzaile Ezarpenak","values":{"false":"ez","true":"bai"},"notifications":"Jakinarazpenak","notification_mutes":"Erabiltzaile jakin baten jakinarazpenak jasotzeari uzteko, isilarazi ezazu.","notification_blocks":"Erabiltzaile bat blokeatzeak jakinarazpen guztiak gelditzen ditu eta harpidetza ezeztatu.","enable_web_push_notifications":"Gaitu web jakinarazpenak","style":{"switcher":{"keep_color":"Mantendu koloreak","keep_shadows":"Mantendu itzalak","keep_opacity":"Mantendu opakotasuna","keep_roundness":"Mantendu biribiltasuna","keep_fonts":"Mantendu iturriak","save_load_hint":"\\"Mantendu\\" aukerak uneko konfiguratutako aukerak gordetzen ditu gaiak hautatzerakoan edo kargatzean, gai hauek esportatze garaian ere gordetzen ditu. Kontrol-lauki guztiak garbitzen direnean, esportazio-gaiak dena gordeko du.","reset":"Berrezarri","clear_all":"Garbitu dena","clear_opacity":"Garbitu opakotasuna"},"common":{"color":"Kolorea","opacity":"Opakotasuna","contrast":{"hint":"Kontrastearen erlazioa {ratio} da, {level} {context}","level":{"aa":"AA Mailako gidaliburua betetzen du (gutxienezkoa)","aaa":"AAA Mailako gidaliburua betetzen du (gomendatua)","bad":"ez ditu irisgarritasun arauak betetzen"},"context":{"18pt":"testu handientzat (+18pt)","text":"testuentzat"}}},"common_colors":{"_tab_label":"Ohikoa","main":"Ohiko koloreak","foreground_hint":"Ikusi \\"Aurreratua\\" fitxa kontrol zehatzagoa lortzeko","rgbo":"Ikono, azentu eta etiketak"},"advanced_colors":{"_tab_label":"Aurreratua","alert":"Alerten atzeko planoa","alert_error":"Errorea","badge":"Etiketen atzeko planoa","badge_notification":"Jakinarazpenak","panel_header":"Panelaren goiburua","top_bar":"Goiko barra","borders":"Ertzak","buttons":"Botoiak","inputs":"Sarrera eremuak","faint_text":"Testu itzalita"},"radii":{"_tab_label":"Biribiltasuna"},"shadows":{"_tab_label":"Itzal eta argiak","component":"Atala","override":"Berridatzi","shadow_id":"Itzala #{value}","blur":"Lausotu","spread":"Hedapena","inset":"Barrutik","hint":"Itzaletarako ere erabil dezakezu --aldagarri kolore balio gisa CSS3 aldagaiak erabiltzeko. Kontuan izan opakutasuna ezartzeak ez duela kasu honetan funtzionatuko.","filter_hint":{"always_drop_shadow":"Kontuz, itzal honek beti erabiltzen du {0} nabigatzaileak onartzen duenean.","drop_shadow_syntax":"{0} ez du onartzen {1} parametroa eta {2} gako-hitza.","avatar_inset":"Kontuan izan behar da barruko eta kanpoko itzal konbinazioak, ez esparotako emaitzak ager daitezkeela atzeko plano gardena duten Avatarretan.","spread_zero":"Hedapena > 0 duten itzalak zero izango balitz bezala agertuko dira","inset_classic":"Barruko itzalak {0} erabiliko dute"},"components":{"panel":"Panela","panelHeader":"Panel goiburua","topBar":"Goiko barra","avatar":"Erabiltzailearen avatarra (profilan)","avatarStatus":"Erabiltzailearen avatarra (mezuetan)","popup":"Popup-ak eta argibideak","button":"Botoia","buttonHover":"Botoia (gainean)","buttonPressed":"Botoai (sakatuta)","buttonPressedHover":"Botoia (sakatuta+gainean)","input":"Sarrera eremuak"}},"fonts":{"_tab_label":"Letra-tipoak","help":"Aukeratu letra-tipoak erabiltzailearen interfazean erabiltzeko. \\"Pertsonalizatua\\" letra-tipoan, sisteman agertzen den izen berdinarekin idatzi behar duzu.","components":{"interface":"Interfazea","input":"Sarrera eremuak","post":"Mezuen testua","postCode":"Tarte-bakarreko testua mezuetan (testu-formatu aberastuak)"},"family":"Letra-tipoaren izena","size":"Tamaina (px)","weight":"Pisua (lodiera)","custom":"Pertsonalizatua"},"preview":{"header":"Aurrebista","content":"Edukia","error":"Adibide errorea","button":"Botoia","text":"Hamaika {0} eta {1}","mono":"edukia","input":"Jadanik Los Angeles-en","faint_link":"laguntza","fine_print":"Irakurri gure {0} ezer erabilgarria ikasteko!","header_faint":"Ondo dago","checkbox":"Baldintzak berrikusi ditut","link":"esteka polita"}},"version":{"title":"Bertsioa","backend_version":"Backend bertsioa","frontend_version":"Frontend bertsioa"}},"time":{"day":"{0} egun","days":"{0} egun","day_short":"{0}e","days_short":"{0}e","hour":"{0} ordu","hours":"{0} ordu","hour_short":"{0}o","hours_short":"{0}o","in_future":"{0} barru","in_past":"duela {0}","minute":"{0} minutu","minutes":"{0} minutu","minute_short":"{0}min","minutes_short":"{0}min","month":"{0} hilabete","months":"{0} hilabete","month_short":"{0}h","months_short":"{0}h","now":"oraintxe bertan","now_short":"orain","second":"{0} segundu","seconds":"{0} segundu","second_short":"{0}s","seconds_short":"{0}s","week":"{0} aste","weeks":"{0} aste","week_short":"{0}a","weeks_short":"{0}a","year":"{0} urte","years":"{0} urte","year_short":"{0}u","years_short":"{0}u"},"timeline":{"collapse":"Bildu","conversation":"Elkarrizketa","error_fetching":"Errorea eguneraketak eskuratzen","load_older":"Kargatu mezu zaharragoak","no_retweet_hint":"Mezu hau jarraitzailentzako bakarrik markatuta dago eta ezin da errepikatu","repeated":"Errepikatuta","show_new":"Berriena erakutsi","up_to_date":"Eguneratuta","no_more_statuses":"Ez daude mezu gehiago","no_statuses":"Mezurik gabe"},"status":{"favorites":"Gogokoak","repeats":"Errepikapenak","delete":"Mezua ezabatu","pin":"Profilan ainguratu","unpin":"Aingura ezeztatu profilatik","pinned":"Ainguratuta","delete_confirm":"Mezu hau benetan ezabatu nahi duzu?","reply_to":"Erantzuten","replies_list":"Erantzunak:","mute_conversation":"Elkarrizketa isilarazi","unmute_conversation":"Elkarrizketa aktibatu"},"user_card":{"approve":"Onartu","block":"Blokeatu","blocked":"Blokeatuta!","deny":"Ukatu","favorites":"Gogokoak","follow":"Jarraitu","follow_sent":"Eskaera bidalita!","follow_progress":"Eskatzen…","follow_again":"Eskaera berriro bidali?","follow_unfollow":"Jarraitzeari utzi","followees":"Jarraitzen","followers":"Jarraitzaileak","following":"Jarraitzen!","follows_you":"Jarraitzen dizu!","its_you":"Zu zara!","media":"Multimedia","mention":"Aipatu","mute":"Isilarazi","muted":"Isilduta","per_day":"eguneko","remote_follow":"Jarraitu","report":"Berri eman","statuses":"Mezuak","subscribe":"Harpidetu","unsubscribe":"Harpidetza ezeztatu","unblock":"Blokeoa kendu","unblock_progress":"Blokeoa ezeztatzen…","block_progress":"Blokeatzen…","unmute":"Isiltasuna kendu","unmute_progress":"Isiltasuna kentzen…","mute_progress":"Isiltzen…","hide_repeats":"Ezkutatu errepikapenak","show_repeats":"Erakutsi errpekiapenak","admin_menu":{"moderation":"Moderazioa","grant_admin":"Administratzaile baimena","revoke_admin":"Ezeztatu administratzaile baimena","grant_moderator":"Moderatzaile baimena","revoke_moderator":"Ezeztatu moderatzaile baimena","activate_account":"Aktibatu kontua","deactivate_account":"Desaktibatu kontua","delete_account":"Ezabatu kontua","force_nsfw":"Markatu mezu guztiak hunkigarri gisa","strip_media":"Kendu multimedia mezuetatik","force_unlisted":"Behartu mezuak listatu gabekoak izatea","sandbox":"Behartu zure jarraitzaileentzako bakarrik argitaratzera","disable_remote_subscription":"Ez utzi istantzia kanpoko erabiltzaileak zuri jarraitzea","disable_any_subscription":"Ez utzi beste erabiltzaileak zuri jarraitzea","quarantine":"Ez onartu mezuak beste instantzietatik","delete_user":"Erabiltzailea ezabatu","delete_user_confirmation":"Erabat ziur zaude? Ekintza hau ezin da desegin."}},"user_profile":{"timeline_title":"Erabiltzailearen denbora-lerroa","profile_does_not_exist":"Barkatu, profil hau ez da existitzen.","profile_loading_error":"Barkatu, errore bat gertatu da profila kargatzean."},"user_reporting":{"title":"{0}-ri buruz berri ematen","add_comment_description":"Zure kexa moderatzaileei bidaliko da. Nahi baduzu zure kexaren zergatia idatz dezakezu:","additional_comments":"Iruzkin gehiago","forward_description":"Kontu hau beste instantzia batekoa da. Nahi duzu txostenaren kopia bat bidali ere?","forward_to":"{0}-ri birbidali","submit":"Bidali","generic_error":"Errore bat gertatu da zure eskaera prozesatzerakoan."},"who_to_follow":{"more":"Gehiago","who_to_follow":"Nori jarraitu"},"tool_tip":{"media_upload":"Multimedia igo","repeat":"Errepikatu","reply":"Erantzun","favorite":"Gogokoa","user_settings":"Erabiltzaile ezarpenak"},"upload":{"error":{"base":"Igoerak huts egin du.","file_too_big":"Artxiboa haundiegia [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]","default":"Saiatu berriro geroago"},"file_size_units":{"B":"B","KiB":"KiB","MiB":"MiB","GiB":"GiB","TiB":"TiB"}},"search":{"people":"Erabiltzaileak","hashtags":"Traolak","person_talking":"{count} pertsona hitzegiten","people_talking":"{count} jende hitzegiten","no_results":"Emaitzarik ez"},"password_reset":{"forgot_password":"Pasahitza ahaztua?","password_reset":"Pasahitza berrezarri","instruction":"Idatzi zure helbide elektronikoa edo erabiltzaile izena. Pasahitza berrezartzeko esteka bidaliko dizugu.","placeholder":"Zure e-posta edo erabiltzaile izena","check_email":"Begiratu zure posta elektronikoa pasahitza berrezarri ahal izateko.","return_home":"Itzuli hasierara","too_many_requests":"Saiakera gehiegi burutu ditzu, saiatu berriro geroxeago.","password_reset_disabled":"Pasahitza berrezartzea debekatuta dago. Mesedez, jarri harremanetan instantzia administratzailearekin.","password_reset_required":"Pasahitza berrezarri behar duzu saioa hasteko.","password_reset_required_but_mailer_is_disabled":"Pasahitza berrezarri behar duzu, baina pasahitza berrezartzeko aukera desgaituta dago. Mesedez, jarri harremanetan instantziaren administratzailearekin."},"about":{"mrf":{"keyword":{"keyword_policies":"Gako-hitz politika","ftl_removal":"\\"Ezagutzen den Sarea\\" denbora-lerrotik ezabatu","is_replaced_by":"→","replace":"Ordezkatuak","reject":"Ukatuak"},"federation":"Federazioa","simple":{"media_nsfw_desc":"Instantzia honek hurrengo instantzien multimediak sentikorrak izatera behartzen ditu:","media_nsfw":"Behartu multimedia sentikor moduan","media_removal_desc":"Instantzia honek atxikitutako multimedia hurrengo instantzietatik ezabatzen ditu:","media_removal":"Multimedia Ezabatu","ftl_removal_desc":"Instantzia honek hurrengo instantziak ezabatzen ditu \\"Ezagutzen den Sarea\\" denbora-lerrotik:","ftl_removal":"\\"Ezagutzen den Sarea\\" denbora-lerrotik ezabatu","quarantine_desc":"Instantzia honek soilik mezu publikoak bidaliko ditu instantzia hauetara:","quarantine":"Koarentena","reject_desc":"Instantzia honek ez ditu hurrengo instantzien mezuak onartuko:","reject":"Ukatuak","accept_desc":"Instantzia honek hurrengo instantzietako mezuak soilik onartzen ditu:","accept":"Onartu","simple_policies":"Gure instantziaren politika zehatzak"},"mrf_policies_desc":"MRF politikek instantzia honen federazioa manipulatzen dute gainerako instantziekin. Honako politika hauek daude gaituta:","mrf_policies":"Gaitutako MRF politikak"},"staff":"Arduradunak"},"domain_mute_card":{"unmute_progress":"Isiltasuna kentzen…","unmute":"Isiltasuna kendu","mute_progress":"Isiltzen…","mute":"Isilarazi"},"shoutbox":{"title":"Oihu-kutxa"}}')}}]); -//# sourceMappingURL=12.a3dc3473565ec07a88c2.js.map \ No newline at end of file diff --git a/priv/static/static/js/13.cdc076533397e24391bc.js b/priv/static/static/js/13.99621e6c47936075b44d.js similarity index 76% rename from priv/static/static/js/13.cdc076533397e24391bc.js rename to priv/static/static/js/13.99621e6c47936075b44d.js index 6819297a8..ef26b927b 100644 --- a/priv/static/static/js/13.cdc076533397e24391bc.js +++ b/priv/static/static/js/13.99621e6c47936075b44d.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[13],{593:function(t){t.exports=JSON.parse('{"chat":{"title":"Chat"},"features_panel":{"chat":"Chat","gopher":"Gopher","media_proxy":"Media-välityspalvelin","scope_options":"Näkyvyyden rajaus","text_limit":"Tekstin pituusraja","title":"Ominaisuudet","who_to_follow":"Seurausehdotukset"},"finder":{"error_fetching_user":"Virhe hakiessa käyttäjää","find_user":"Hae käyttäjä"},"general":{"apply":"Aseta","submit":"Lähetä","more":"Lisää","generic_error":"Virhe tapahtui","optional":"valinnainen","show_more":"Näytä lisää","show_less":"Näytä vähemmän","dismiss":"Sulje","cancel":"Peruuta","disable":"Poista käytöstä","confirm":"Hyväksy","verify":"Varmenna","enable":"Ota käyttöön","loading":"Ladataan…","error_retry":"Yritä uudelleen","retry":"Yritä uudelleen","close":"Sulje","peek":"Kurkkaa"},"login":{"login":"Kirjaudu sisään","description":"Kirjaudu sisään OAuthilla","logout":"Kirjaudu ulos","password":"Salasana","placeholder":"esim. Seppo","register":"Rekisteröidy","username":"Käyttäjänimi","hint":"Kirjaudu sisään liittyäksesi keskusteluun","authentication_code":"Todennuskoodi","enter_recovery_code":"Syötä palautuskoodi","recovery_code":"Palautuskoodi","heading":{"totp":"Monivaihetodennus","recovery":"Monivaihepalautus"},"enter_two_factor_code":"Syötä monivaihetodennuskoodi"},"nav":{"about":"Tietoja","back":"Takaisin","chat":"Paikallinen Chat","friend_requests":"Seurauspyynnöt","mentions":"Maininnat","interactions":"Interaktiot","dms":"Yksityisviestit","public_tl":"Julkinen Aikajana","timeline":"Aikajana","twkn":"Tunnettu Verkosto","user_search":"Käyttäjähaku","who_to_follow":"Seurausehdotukset","preferences":"Asetukset","administration":"Ylläpito","search":"Haku","bookmarks":"Kirjanmerkit"},"notifications":{"broken_favorite":"Viestiä ei löydetty…","favorited_you":"tykkäsi viestistäsi","followed_you":"seuraa sinua","load_older":"Lataa vanhempia ilmoituksia","notifications":"Ilmoitukset","read":"Lue!","repeated_you":"toisti viestisi","no_more_notifications":"Ei enempää ilmoituksia","reacted_with":"lisäsi reaktion {0}","migrated_to":"siirtyi sivulle","follow_request":"haluaa seurata sinua"},"polls":{"add_poll":"Lisää äänestys","add_option":"Lisää vaihtoehto","option":"Vaihtoehto","votes":"ääntä","vote":"Äänestä","type":"Äänestyksen tyyppi","single_choice":"Yksi valinta","multiple_choices":"Monivalinta","expiry":"Äänestyksen kesto","expires_in":"Päättyy {0} päästä","expired":"Päättyi {0} sitten","not_enough_option":"Liian vähän uniikkeja vaihtoehtoja äänestyksessä","not_enough_options":"Liian vähän ainutkertaisia vaihtoehtoja"},"interactions":{"favs_repeats":"Toistot ja tykkäykset","follows":"Uudet seuraukset","load_older":"Lataa vanhempia interaktioita","moves":"Käyttäjien siirtymiset"},"post_status":{"new_status":"Uusi viesti","account_not_locked_warning":"Tilisi ei ole {0}. Kuka vain voi seurata sinua nähdäksesi \'vain-seuraajille\' -viestisi.","account_not_locked_warning_link":"lukittu","attachments_sensitive":"Merkkaa liitteet arkaluonteisiksi","content_type":{"text/plain":"Tavallinen teksti","text/html":"HTML","text/markdown":"Markdown","text/bbcode":"BBCode"},"content_warning":"Aihe (valinnainen)","default":"Tulin juuri saunasta.","direct_warning":"Tämä viesti näkyy vain mainituille käyttäjille.","posting":"Lähetetään","scope":{"direct":"Yksityisviesti - Näkyy vain mainituille käyttäjille","private":"Vain-seuraajille - Näkyy vain seuraajillesi","public":"Julkinen - Näkyy julkisilla aikajanoilla","unlisted":"Listaamaton - Ei näy julkisilla aikajanoilla"},"direct_warning_to_all":"Tämä viesti näkyy vain viestissä mainituille käyttäjille.","direct_warning_to_first_only":"Tämä viesti näkyy vain viestin alussa mainituille käyttäjille.","scope_notice":{"public":"Tämä viesti näkyy kaikille","private":"Tämä viesti näkyy vain sinun seuraajillesi","unlisted":"Tämä viesti ei näy Julkisella Aikajanalla tai Koko Tunnettu Verkosto -aikajanalla"},"preview":"Esikatselu","preview_empty":"Tyhjä","empty_status_error":"Tyhjää viestiä ilman tiedostoja ei voi lähettää","media_description":"Tiedoston kuvaus","media_description_error":"Tiedostojen päivitys epäonnistui, yritä uudelleen"},"registration":{"bio":"Kuvaus","email":"Sähköposti","fullname":"Koko nimi","password_confirm":"Salasanan vahvistaminen","registration":"Rekisteröityminen","token":"Kutsuvaltuus","captcha":"Varmenne","new_captcha":"Paina kuvaa saadaksesi uuden varmenteen","validations":{"username_required":"ei voi olla tyhjä","fullname_required":"ei voi olla tyhjä","email_required":"ei voi olla tyhjä","password_required":"ei voi olla tyhjä","password_confirmation_required":"ei voi olla tyhjä","password_confirmation_match":"pitää vastata salasanaa"},"username_placeholder":"esim. peke","fullname_placeholder":"esim. Pekka Postaaja","bio_placeholder":"esim.\\nHei, olen Pekka.\\nOlen esimerkkikäyttäjä tässä verkostossa."},"settings":{"attachmentRadius":"Liitteet","attachments":"Liitteet","avatar":"Profiilikuva","avatarAltRadius":"Profiilikuvat (ilmoitukset)","avatarRadius":"Profiilikuvat","background":"Tausta","bio":"Kuvaus","btnRadius":"Napit","cBlue":"Sininen (Vastaukset, seuraukset)","cGreen":"Vihreä (Toistot)","cOrange":"Oranssi (Tykkäykset)","cRed":"Punainen (Peruminen)","change_password":"Vaihda salasana","change_password_error":"Virhe vaihtaessa salasanaa.","changed_password":"Salasana vaihdettu!","collapse_subject":"Minimoi viestit, joille on asetettu aihe","composing":"Viestien laatiminen","confirm_new_password":"Vahvista uusi salasana","current_avatar":"Nykyinen profiilikuvasi","current_password":"Nykyinen salasana","current_profile_banner":"Nykyinen julisteesi","data_import_export_tab":"Tietojen tuonti / vienti","default_vis":"Oletusnäkyvyysrajaus","delete_account":"Poista tili","delete_account_description":"Poista tietosi ja lukitse tili pysyvästi.","delete_account_error":"Virhe poistaessa tiliäsi. Jos virhe jatkuu, ota yhteyttä palvelimesi ylläpitoon.","delete_account_instructions":"Syötä salasanasi vahvistaaksesi tilin poiston.","emoji_reactions_on_timeline":"Näytä emojireaktiot aikajanalla","export_theme":"Tallenna teema","filtering":"Suodatus","filtering_explanation":"Kaikki viestit, jotka sisältävät näitä sanoja, suodatetaan. Yksi sana per rivi.","follow_export":"Seurausten vienti","follow_export_button":"Vie seurauksesi CSV-tiedostoon","follow_export_processing":"Käsitellään, sinua pyydetään lataamaan tiedosto hetken päästä","follow_import":"Seurausten tuonti","follow_import_error":"Virhe tuodessa seuraksia","follows_imported":"Seuraukset tuotu! Niiden käsittely vie hetken.","foreground":"Etuala","general":"Yleinen","hide_attachments_in_convo":"Piilota liitteet keskusteluissa","hide_attachments_in_tl":"Piilota liitteet aikajanalla","max_thumbnails":"Suurin sallittu määrä liitteitä esikatselussa","hide_isp":"Piilota palvelimenkohtainen ruutu","preload_images":"Esilataa kuvat","use_one_click_nsfw":"Avaa NSFW-liitteet yhdellä painalluksella","hide_post_stats":"Piilota viestien statistiikka (esim. tykkäysten määrä)","hide_user_stats":"Piilota käyttäjien statistiikka (esim. seuraajien määrä)","import_followers_from_a_csv_file":"Tuo seuraukset CSV-tiedostosta","import_theme":"Tuo tallennettu teema","inputRadius":"Syöttökentät","checkboxRadius":"Valintalaatikot","instance_default":"(oletus: {value})","instance_default_simple":"(oletus)","interface":"Käyttöliittymä","interfaceLanguage":"Käyttöliittymän kieli","invalid_theme_imported":"Tuotu tallennettu teema on epäkelpo, muutoksia ei tehty nykyiseen teemaasi.","limited_availability":"Ei saatavilla selaimessasi","links":"Linkit","lock_account_description":"Vain erikseen hyväksytyt käyttäjät voivat seurata tiliäsi","loop_video":"Uudelleentoista videot","loop_video_silent_only":"Uudelleentoista ainoastaan äänettömät videot (Video-\\"giffit\\")","play_videos_in_modal":"Toista videot modaalissa","use_contain_fit":"Älä rajaa liitteitä esikatselussa","name":"Nimi","name_bio":"Nimi ja kuvaus","new_password":"Uusi salasana","notification_visibility":"Ilmoitusten näkyvyys","notification_visibility_follows":"Seuraukset","notification_visibility_likes":"Tykkäykset","notification_visibility_mentions":"Maininnat","notification_visibility_repeats":"Toistot","notification_visibility_emoji_reactions":"Reaktiot","no_rich_text_description":"Älä näytä tekstin muotoilua","hide_network_description":"Älä näytä seurauksiani tai seuraajiani","nsfw_clickthrough":"Piilota NSFW liitteet klikkauksen taakse","oauth_tokens":"OAuth-merkit","token":"Token","refresh_token":"Päivitä token","valid_until":"Voimassa asti","revoke_token":"Peruuta","panelRadius":"Ruudut","pause_on_unfocused":"Pysäytä automaattinen viestien näyttö välilehden ollessa pois fokuksesta","presets":"Valmiit teemat","profile_background":"Taustakuva","profile_banner":"Juliste","profile_tab":"Profiili","radii_help":"Aseta reunojen pyöristys (pikseleinä)","replies_in_timeline":"Keskustelut aikajanalla","reply_visibility_all":"Näytä kaikki vastaukset","reply_visibility_following":"Näytä vain vastaukset minulle tai seuraamilleni käyttäjille","reply_visibility_self":"Näytä vain vastaukset minulle","saving_err":"Virhe tallentaessa asetuksia","saving_ok":"Asetukset tallennettu","security_tab":"Tietoturva","scope_copy":"Kopioi näkyvyysrajaus vastatessa (Yksityisviestit aina kopioivat)","set_new_avatar":"Aseta uusi profiilikuva","set_new_profile_background":"Aseta uusi taustakuva","set_new_profile_banner":"Aseta uusi juliste","settings":"Asetukset","subject_input_always_show":"Näytä aihe-kenttä","subject_line_behavior":"Aihe-kentän kopiointi","subject_line_email":"Kuten sähköposti: \\"re: aihe\\"","subject_line_mastodon":"Kopioi sellaisenaan","subject_line_noop":"Älä kopioi","stop_gifs":"Toista giffit vain kohdistaessa","streaming":"Näytä uudet viestit automaattisesti ollessasi ruudun huipulla","text":"Teksti","theme":"Teema","theme_help":"Käytä heksadesimaalivärejä muokataksesi väriteemaasi.","theme_help_v2_1":"Voit asettaa tiettyjen osien värin tai läpinäkyvyyden täyttämällä valintalaatikon, käytä \\"Tyhjennä kaikki\\"-nappia tyhjentääksesi kaiken.","theme_help_v2_2":"Ikonit kenttien alla ovat kontrasti-indikaattoreita, lisätietoa kohdistamalla. Käyttäessä läpinäkyvyyttä ne näyttävät pahimman skenaarion.","tooltipRadius":"Ohje- tai huomioviestit","user_settings":"Käyttäjän asetukset","values":{"false":"pois päältä","true":"päällä"},"hide_follows_description":"Älä näytä ketä seuraan","show_moderator_badge":"Näytä Moderaattori-merkki profiilissani","useStreamingApi":"Vastaanota viestiejä ja ilmoituksia reaaliajassa","notification_setting_filters":"Suodattimet","notification_setting_privacy_option":"Piilota lähettäjä ja sisältö sovelluksen ulkopuolisista ilmoituksista","enable_web_push_notifications":"Ota käyttöön sovelluksen ulkopuoliset ilmoitukset","app_name":"Sovelluksen nimi","security":"Turvallisuus","mfa":{"otp":"OTP","setup_otp":"OTP-asetukset","wait_pre_setup_otp":"esiasetetaan OTP:ta","confirm_and_enable":"Hyväksy ja käytä OTP","title":"Monivaihetodennus","generate_new_recovery_codes":"Luo uudet palautuskoodit","authentication_methods":"Todennus","warning_of_generate_new_codes":"Luodessasi uudet palautuskoodit, vanhat koodisi lakkaavat toimimasta.","recovery_codes":"Palautuskoodit.","waiting_a_recovery_codes":"Odotetaan palautuskoodeja…","recovery_codes_warning":"Kirjoita koodit ylös tai tallenna ne turvallisesti, muuten et näe niitä uudestaan. Jos et voi käyttää monivaihetodennusta ja sinulla ei ole palautuskoodeja, et voi enää kirjautua sisään tilillesi.","scan":{"title":"Skannaa","secret_code":"Avain","desc":"Käytä monivaihetodennus-sovellusta skannakksesi tämän QR-kooding, tai syötä avain:"},"verify":{"desc":"Kytkeäksesi päälle monivaihetodennuksen, syötä koodi monivaihetodennussovellksesta:"}},"allow_following_move":"Salli automaattinen seuraaminen kun käyttäjä siirtää tilinsä","block_export":"Estojen vienti","block_export_button":"Vie estosi CSV-tiedostoon","block_import":"Estojen tuonti","block_import_error":"Virhe tuodessa estoja","blocks_imported":"Estot tuotu! Käsittely vie hetken.","blocks_tab":"Estot","change_email":"Vaihda sähköpostiosoite","change_email_error":"Virhe vaihtaessa sähköpostiosoitetta.","changed_email":"Sähköpostiosoite vaihdettu!","domain_mutes":"Sivut","avatar_size_instruction":"Suositeltu vähimmäiskoko profiilikuville on 150x150 pikseliä.","accent":"Korostus","hide_muted_posts":"Piilota mykistettyjen käyttäjien viestit","hide_filtered_statuses":"Piilota mykistetyt viestit","import_blocks_from_a_csv_file":"Tuo estot CSV-tiedostosta","no_blocks":"Ei estoja","no_mutes":"Ei mykistyksiä","notification_visibility_moves":"Käyttäjien siirtymiset","hide_followers_description":"Älä näytä ketkä seuraavat minua","hide_follows_count_description":"Älä näytä seurauksien määrää","hide_followers_count_description":"Älä näytä seuraajien määrää","show_admin_badge":"Näytä Ylläpitäjä-merkki proofilissani","autohide_floating_post_button":"Piilota Uusi Viesti -nappi automaattisesti (mobiili)","search_user_to_block":"Hae estettäviä käyttäjiä","search_user_to_mute":"Hae mykistettäviä käyttäjiä","minimal_scopes_mode":"Yksinkertaista näkyvyydenrajauksen vaihtoehdot","post_status_content_type":"Uuden viestin sisällön muoto","user_mutes":"Käyttäjät","useStreamingApiWarning":"(Kokeellinen)","type_domains_to_mute":"Etsi mykistettäviä sivustoja","upload_a_photo":"Lataa kuva","fun":"Hupi","greentext":"Meeminuolet","notifications":"Ilmoitukset","style":{"switcher":{"save_load_hint":"\\"Säilytä\\" asetukset säilyttävät tällä hetkellä asetetut asetukset valittaessa tai ladatessa teemaa, se myös tallentaa kyseiset asetukset viedessä teemaa. Kun kaikki laatikot ovat tyhjänä, viety teema tallentaa kaiken.","help":{"older_version_imported":"Tuomasi tiedosto on luotu vanhemmalla versiolla.","fe_upgraded":"PleromaFE:n teemaus päivitetty versiopäivityksen yhteydessä.","migration_snapshot_ok":"Varmuuden vuoksi teeman kaappaus ladattu. Voit koittaa ladata teeman sisällön.","migration_napshot_gone":"Jostain syystä teeman kaappaus puuttuu, kaikki asiat eivät välttämättä näytä oikealta.","snapshot_source_mismatch":"Versiot eivät täsmää: todennäköisesti versio vaihdettu vanhempaan ja päivitetty uudestaan, jos vaihdoit teemaa vanhalla versiolla, sinun tulisi käyttää vanhaa versiota, muutoin uutta.","upgraded_from_v2":"PleromaFE on päivitetty, teemasi saattaa näyttää erilaiselta kuin muistat.","v2_imported":"Tuomasi tiedosto on luotu vanhemmalla versiolla. Yhteensopivuus ei välttämättä ole täydellinen.","future_version_imported":"Tuomasi tiedosto on luotu uudemmalla versiolla.","snapshot_present":"Teeman kaappaus ladattu, joten kaikki arvot ovat ylikirjoitettu. Voit sen sijaan ladata teeman sisällön.","snapshot_missing":"Teeman kaappausta ei tiedostossa, joten se voi näyttää erilaiselta kuin suunniteltu.","fe_downgraded":"PleromaFE:n versio vaihtunut vanhempaan."},"keep_color":"Säilytä värit","keep_shadows":"Säilytä varjot","keep_opacity":"Säilytä läpinäkyvyys","keep_roundness":"Säilytä pyöristys","keep_fonts":"Säilytä fontit","reset":"Palauta","clear_all":"Tyhjennä kaikki","clear_opacity":"Tyhjennä läpinäkyvyys","load_theme":"Lataa teema","keep_as_is":"Pidä sellaisenaan","use_snapshot":"Vanha","use_source":"Uusi"},"advanced_colors":{"selectedPost":"Valittu viesti","_tab_label":"Edistynyt","alert":"Varoituksen tausta","alert_error":"Virhe","alert_warning":"Varoitus","alert_neutral":"Neutraali","post":"Viestit/Käyttäjien kuvaukset","badge":"Merkin tausta","badge_notification":"Ilmoitus","panel_header":"Ruudun otsikko","top_bar":"Yläpalkki","borders":"Reunat","buttons":"Napit","inputs":"Syöttökentät","faint_text":"Häivytetty teksti","underlay":"Taustapeite","poll":"Äänestyksen kuvaaja","icons":"Ikonit","highlight":"Korostetut elementit","pressed":"Painettu","selectedMenu":"Valikon valinta","disabled":"Pois käytöstä","toggled":"Kytketty","tabs":"Välilehdet","popover":"Työkaluvinkit, valikot, ponnahdusviestit"},"common":{"color":"Väri","opacity":"Läpinäkyvyys","contrast":{"level":{"aaa":"saavuttaa AAA-tason (suositeltu)","aa":"saavuttaa AA-tason (minimi)","bad":"ei saavuta mitään helppokäyttöisyyssuosituksia"},"hint":"Kontrastisuhde on {ratio}, se {level} {context}","context":{"18pt":"suurella (18pt+) tekstillä","text":"tekstillä"}}},"common_colors":{"_tab_label":"Yleinen","main":"Yleiset värit","foreground_hint":"Löydät \\"Edistynyt\\"-välilehdeltä tarkemmat asetukset","rgbo":"Ikonit, korostukset, merkit"},"shadows":{"filter_hint":{"always_drop_shadow":"Varoitus, tämä varjo käyttää aina {0} kun selain tukee sitä.","avatar_inset":"Huom. sisennettyjen ja ei-sisennettyjen varjojen yhdistelmät saattavat luoda ei-odotettuja lopputuloksia läpinäkyvillä profiilikuvilla.","drop_shadow_syntax":"{0} ei tue {1} parametria ja {2} avainsanaa.","spread_zero":"Varjot joiden levitys > 0 näyttävät samalta kuin se olisi nolla","inset_classic":"Sisennetyt varjot käyttävät {0}"},"components":{"buttonPressedHover":"Nappi (painettu ja kohdistettu)","panel":"Ruutu","panelHeader":"Ruudun otsikko","topBar":"Yläpalkki","avatar":"Profiilikuva (profiilinäkymässä)","avatarStatus":"Profiilikuva (viestin yhtyedessä)","popup":"Ponnahdusviestit ja työkaluvinkit","button":"Nappi","buttonHover":"Nappi (kohdistus)","buttonPressed":"Nappi (painettu)","input":"Syöttökenttä"},"hintV3":"Voit käyttää {0} merkintää varjoille käyttääksesi väriä toisesta asetuksesta.","_tab_label":"Valo ja varjostus","component":"Komponentti","override":"Ylikirjoita","shadow_id":"Varjo #{value}","blur":"Sumennus","spread":"Levitys","inset":"Sisennys"},"fonts":{"help":"Valitse fontti käyttöliittymälle. \\"Oma\\"-vaihtohdolle on syötettävä fontin nimi tarkalleen samana kuin se on järjestelmässäsi.","_tab_label":"Fontit","components":{"interface":"Käyttöliittymä","input":"Syöttökentät","post":"Viestin teksti","postCode":"Tasavälistetty teksti viestissä"},"family":"Fontin nimi","size":"Koko (pikseleissä)","weight":"Painostus (paksuus)","custom":"Oma"},"preview":{"input":"Tulin juuri saunasta.","header":"Esikatselu","content":"Sisältö","error":"Esimerkkivirhe","button":"Nappi","text":"Vähän lisää {0} ja {1}","mono":"sisältöä","faint_link":"manuaali","fine_print":"Lue meidän {0} vaikka huvin vuoksi!","header_faint":"Tämä on OK","checkbox":"Olen silmäillyt käyttöehdot","link":"kiva linkki"},"radii":{"_tab_label":"Pyöristys"}},"enter_current_password_to_confirm":"Syötä nykyinen salasanasi todentaaksesi henkilöllisyytesi","discoverable":"Salli tilisi näkyvyys hakukoneisiin ja muihin palveluihin","pad_emoji":"Välistä emojit välilyönneillä lisätessäsi niitä valitsimesta","mutes_tab":"Mykistykset","new_email":"Uusi sähköpostiosoite","notification_setting_privacy":"Yksityisyys","notification_mutes":"Jos et halua ilmoituksia joltain käyttäjältä, käytä mykistystä.","notification_blocks":"Estäminen pysäyttää kaikki ilmoitukset käyttäjältä ja poistaa seurauksen.","version":{"title":"Versio","backend_version":"Palvelimen versio","frontend_version":"Käyttöliittymän versio"},"reset_profile_background":"Nollaa taustakuva","reset_background_confirm":"Haluatko todella nollata taustakuvan?","mutes_and_blocks":"Mykistykset ja Estot","bot":"Tämä on bottitili","profile_fields":{"label":"Profiilin metatiedot","add_field":"Lisää kenttä","name":"Nimi","value":"Sisältö"},"reset_avatar":"Nollaa profiilikuva","reset_profile_banner":"Nollaa profiilin tausta","reset_avatar_confirm":"Haluatko todella nollata profiilikuvan?","reset_banner_confirm":"Haluatko todella nollata profiilin taustan?"},"time":{"day":"{0} päivä","days":"{0} päivää","day_short":"{0}pv","days_short":"{0}pv","hour":"{0} tunti","hours":"{0} tuntia","hour_short":"{0}t","hours_short":"{0}t","in_future":"{0} tulevaisuudessa","in_past":"{0} sitten","minute":"{0} minuutti","minutes":"{0} minuuttia","minute_short":"{0}min","minutes_short":"{0}min","month":"{0} kuukausi","months":"{0} kuukautta","month_short":"{0}kk","months_short":"{0}kk","now":"juuri nyt","now_short":"nyt","second":"{0} sekunti","seconds":"{0} sekuntia","second_short":"{0}s","seconds_short":"{0}s","week":"{0} viikko","weeks":"{0} viikkoa","week_short":"{0}vk","weeks_short":"{0}vk","year":"{0} vuosi","years":"{0} vuotta","year_short":"{0}v","years_short":"{0}v"},"timeline":{"collapse":"Sulje","conversation":"Keskustelu","error_fetching":"Virhe ladatessa viestejä","load_older":"Lataa vanhempia viestejä","no_retweet_hint":"Viesti ei ole julkinen, eikä sitä voi toistaa","repeated":"toisti","show_new":"Näytä uudet","up_to_date":"Ajantasalla","no_more_statuses":"Ei enempää viestejä","no_statuses":"Ei viestejä","reload":"Päivitä"},"status":{"favorites":"Tykkäykset","repeats":"Toistot","delete":"Poista","pin":"Kiinnitä profiiliisi","unpin":"Poista kiinnitys","pinned":"Kiinnitetty","delete_confirm":"Haluatko varmasti postaa viestin?","reply_to":"Vastaus","replies_list":"Vastaukset:","mute_conversation":"Mykistä keskustelu","unmute_conversation":"Poista mykistys","status_unavailable":"Viesti ei saatavissa","copy_link":"Kopioi linkki","bookmark":"Lisää kirjanmerkkeihin","unbookmark":"Poista kirjanmerkeistä","thread_muted":"Keskustelu mykistetty","thread_muted_and_words":", sisältää sanat:","show_full_subject":"Näytä koko otsikko","hide_full_subject":"Piilota koko otsikko","show_content":"Näytä sisältö","hide_content":"Piilota sisältö","status_deleted":"Poistettu viesti"},"user_card":{"approve":"Hyväksy","block":"Estä","blocked":"Estetty!","deny":"Älä hyväksy","follow":"Seuraa","follow_sent":"Pyyntö lähetetty!","follow_progress":"Pyydetään…","follow_again":"Lähetä pyyntö uudestaan?","follow_unfollow":"Älä seuraa","followees":"Seuraa","followers":"Seuraajat","following":"Seuraat!","follows_you":"Seuraa sinua!","its_you":"Sinun tili!","mute":"Mykistä","muted":"Mykistetty","per_day":"päivässä","remote_follow":"Seuraa muualta","statuses":"Viestit","hidden":"Piilotettu","media":"Media","block_progress":"Estetään…","admin_menu":{"grant_admin":"Anna Ylläpitöoikeudet","force_nsfw":"Merkitse kaikki viestit NSFW:nä","disable_any_subscription":"Estä käyttäjän seuraaminen","moderation":"Moderaatio","revoke_admin":"Poista Ylläpitöoikeudet","grant_moderator":"Anna Moderaattorioikeudet","revoke_moderator":"Poista Moderaattorioikeudet","activate_account":"Aktivoi tili","deactivate_account":"Deaktivoi tili","delete_account":"Poista tili","strip_media":"Poista media viesteistä","force_unlisted":"Pakota viestit listaamattomiksi","sandbox":"Pakota viestit vain seuraajille","disable_remote_subscription":"Estä seuraaminen ulkopuolisilta sivuilta","quarantine":"Estä käyttäjän viestin federoituminen","delete_user":"Poista käyttäjä","delete_user_confirmation":"Oletko aivan varma? Tätä ei voi kumota."},"favorites":"Tykkäykset","mention":"Mainitse","report":"Ilmianna","subscribe":"Tilaa","unsubscribe":"Poista tilaus","unblock":"Poista esto","unblock_progress":"Poistetaan estoa…","unmute":"Poista mykistys","unmute_progress":"Poistetaan mykistystä…","mute_progress":"Mykistetään…","hide_repeats":"Piilota toistot","show_repeats":"Näytä toistot"},"user_profile":{"timeline_title":"Käyttäjän aikajana","profile_does_not_exist":"Tätä profiilia ei ole.","profile_loading_error":"Virhe ladatessa profiilia."},"who_to_follow":{"more":"Lisää","who_to_follow":"Seurausehdotukset"},"tool_tip":{"media_upload":"Lataa tiedosto","repeat":"Toista","reply":"Vastaa","favorite":"Tykkää","user_settings":"Käyttäjäasetukset","add_reaction":"Lisää Reaktio","accept_follow_request":"Hyväksy seurauspyyntö","reject_follow_request":"Hylkää seurauspyyntö","bookmark":"Kirjanmerkki"},"upload":{"error":{"base":"Lataus epäonnistui.","file_too_big":"Tiedosto liian suuri [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]","default":"Yritä uudestaan myöhemmin"},"file_size_units":{"B":"tavua","KiB":"kt","MiB":"Mt","GiB":"Gt","TiB":"Tt"}},"about":{"mrf":{"keyword":{"keyword_policies":"Avainsanasäännöt","ftl_removal":"Poistettu \\"Koko Tunnettu Verkosto\\" -aikajanalta","reject":"Hylkää","replace":"Korvaa","is_replaced_by":"→"},"simple":{"accept":"Hyväksy","reject":"Hylkää","quarantine":"Karanteeni","ftl_removal":"Poisto \\"Koko Tunnettu Verkosto\\" -aikajanalta","media_removal":"Media-tiedostojen poisto","simple_policies":"Palvelinkohtaiset Säännöt","accept_desc":"Tämä palvelin hyväksyy viestit vain seuraavilta palvelimilta:","reject_desc":"Tämä palvelin ei hyväksy viestejä seuraavilta palvelimilta:","quarantine_desc":"Tämä palvelin lähettää vain julkisia viestejä seuraaville palvelimille:","ftl_removal_desc":"Tämä palvelin poistaa nämä palvelimet \\"Koko Tunnettu Verkosto\\"-aikajanalta:","media_removal_desc":"Tämä palvelin postaa mediatiedostot viesteistä seuraavilta palvelimilta:","media_nsfw":"Pakota Media Arkaluontoiseksi","media_nsfw_desc":"Tämä palvelin pakottaa mediatiedostot arkaluonteisiksi seuraavilta palvelimilta:"},"federation":"Federaatio","mrf_policies":"Aktivoidut MRF-säännöt","mrf_policies_desc":"MRF-säännöt muuttavat federaation toimintaa sivulla. Seuraavat säännöt ovat kytketty päälle:"},"staff":"Henkilökunta"},"domain_mute_card":{"mute":"Mykistä","unmute":"Poista mykistys","mute_progress":"Mykistetään…","unmute_progress":"Poistetaan mykistystä…"},"exporter":{"export":"Vie","processing":"Käsitellään, hetken päästä voit tallentaa tiedoston"},"image_cropper":{"crop_picture":"Rajaa kuva","save":"Tallenna","save_without_cropping":"Tallenna rajaamatta","cancel":"Peruuta"},"importer":{"submit":"Hyväksy","error":"Virhe tapahtui tietoja tuodessa.","success":"Tuonti onnistui."},"media_modal":{"previous":"Edellinen","next":"Seuraava"},"emoji":{"stickers":"Tarrat","emoji":"Emoji","keep_open":"Pidä valitsin auki","search_emoji":"Hae emojia","add_emoji":"Lisää emoji","custom":"Custom-emoji","load_all":"Ladataan kaikkia {emojiAmount} emojia","unicode":"Unicode-emoji","load_all_hint":"Ensimmäiset {saneAmount} emojia ladattu, kaikkien emojien lataaminen voi aiheuttaa hidastelua."},"remote_user_resolver":{"remote_user_resolver":"Ulkopuolinen käyttäjä","searching_for":"Etsitään käyttäjää","error":"Ei löytynyt."},"selectable_list":{"select_all":"Valitse kaikki"},"password_reset":{"check_email":"Tarkista sähköpostisi salasanannollausta varten.","instruction":"Syötä sähköpostiosoite tai käyttäjänimi. Lähetämme linkin salasanan nollausta varten.","password_reset_disabled":"Salasanan nollaus ei käytössä. Ota yhteyttä sivun ylläpitäjään.","password_reset_required_but_mailer_is_disabled":"Sinun täytyy vaihtaa salasana, mutta salasanan nollaus on pois käytöstä. Ota yhteyttä sivun ylläpitäjään.","forgot_password":"Unohditko salasanan?","password_reset":"Salasanan nollaus","placeholder":"Sähköpostiosoite tai käyttäjänimi","return_home":"Palaa etusivulle","too_many_requests":"Olet käyttänyt kaikki yritykset, yritä uudelleen myöhemmin.","password_reset_required":"Sinun täytyy vaihtaa salasana kirjautuaksesi."},"user_reporting":{"add_comment_description":"Tämä raportti lähetetään sivun moderaattoreille. Voit antaa selityksen miksi ilmiannoit tilin:","title":"Ilmiannetaan {0}","additional_comments":"Lisäkommentit","forward_description":"Tämä tili on toiselta palvelimelta. Lähetä kopio ilmiannosta sinnekin?","forward_to":"Lähetä eteenpäin: {0}","submit":"Lähetä","generic_error":"Virhe käsitellessä pyyntöä."},"search":{"people":"Käyttäjät","hashtags":"Aihetunnisteet","people_talking":"{0} käyttäjää puhuvat","person_talking":"{0} käyttäjä puhuu","no_results":"Ei tuloksia"},"errors":{"storage_unavailable":"Pleroma ei voinut käyttää selaimen muistia. Kirjautumisesi ja paikalliset asetukset eivät tallennu ja saatat kohdata odottamattomia ongelmia. Yritä sallia evästeet."}}')}}]); -//# sourceMappingURL=13.cdc076533397e24391bc.js.map \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[13],{606:function(t){t.exports=JSON.parse('{"chat":{"title":"Chat"},"features_panel":{"chat":"Chat","gopher":"Gopher","media_proxy":"Media-välityspalvelin","scope_options":"Näkyvyyden rajaus","text_limit":"Tekstin pituusraja","title":"Ominaisuudet","who_to_follow":"Seurausehdotukset"},"finder":{"error_fetching_user":"Virhe hakiessa käyttäjää","find_user":"Hae käyttäjä"},"general":{"apply":"Aseta","submit":"Lähetä","more":"Lisää","generic_error":"Virhe tapahtui","optional":"valinnainen","show_more":"Näytä lisää","show_less":"Näytä vähemmän","dismiss":"Sulje","cancel":"Peruuta","disable":"Poista käytöstä","confirm":"Hyväksy","verify":"Varmenna","enable":"Ota käyttöön","loading":"Ladataan…","error_retry":"Yritä uudelleen","retry":"Yritä uudelleen","close":"Sulje","peek":"Kurkkaa"},"login":{"login":"Kirjaudu sisään","description":"Kirjaudu sisään OAuthilla","logout":"Kirjaudu ulos","password":"Salasana","placeholder":"esim. Seppo","register":"Rekisteröidy","username":"Käyttäjänimi","hint":"Kirjaudu sisään liittyäksesi keskusteluun","authentication_code":"Todennuskoodi","enter_recovery_code":"Syötä palautuskoodi","recovery_code":"Palautuskoodi","heading":{"totp":"Monivaihetodennus","recovery":"Monivaihepalautus"},"enter_two_factor_code":"Syötä monivaihetodennuskoodi"},"nav":{"about":"Tietoja","back":"Takaisin","chat":"Paikallinen Chat","friend_requests":"Seurauspyynnöt","mentions":"Maininnat","interactions":"Interaktiot","dms":"Yksityisviestit","public_tl":"Julkinen Aikajana","timeline":"Aikajana","twkn":"Tunnettu Verkosto","user_search":"Käyttäjähaku","who_to_follow":"Seurausehdotukset","preferences":"Asetukset","administration":"Ylläpito","search":"Haku","bookmarks":"Kirjanmerkit"},"notifications":{"broken_favorite":"Viestiä ei löydetty…","favorited_you":"tykkäsi viestistäsi","followed_you":"seuraa sinua","load_older":"Lataa vanhempia ilmoituksia","notifications":"Ilmoitukset","read":"Lue!","repeated_you":"toisti viestisi","no_more_notifications":"Ei enempää ilmoituksia","reacted_with":"lisäsi reaktion {0}","migrated_to":"siirtyi sivulle","follow_request":"haluaa seurata sinua"},"polls":{"add_poll":"Lisää äänestys","add_option":"Lisää vaihtoehto","option":"Vaihtoehto","votes":"ääntä","vote":"Äänestä","type":"Äänestyksen tyyppi","single_choice":"Yksi valinta","multiple_choices":"Monivalinta","expiry":"Äänestyksen kesto","expires_in":"Päättyy {0} päästä","expired":"Päättyi {0} sitten","not_enough_option":"Liian vähän uniikkeja vaihtoehtoja äänestyksessä","not_enough_options":"Liian vähän ainutkertaisia vaihtoehtoja"},"interactions":{"favs_repeats":"Toistot ja tykkäykset","follows":"Uudet seuraukset","load_older":"Lataa vanhempia interaktioita","moves":"Käyttäjien siirtymiset"},"post_status":{"new_status":"Uusi viesti","account_not_locked_warning":"Tilisi ei ole {0}. Kuka vain voi seurata sinua nähdäksesi \'vain-seuraajille\' -viestisi.","account_not_locked_warning_link":"lukittu","attachments_sensitive":"Merkkaa liitteet arkaluonteisiksi","content_type":{"text/plain":"Tavallinen teksti","text/html":"HTML","text/markdown":"Markdown","text/bbcode":"BBCode"},"content_warning":"Aihe (valinnainen)","default":"Tulin juuri saunasta.","direct_warning":"Tämä viesti näkyy vain mainituille käyttäjille.","posting":"Lähetetään","scope":{"direct":"Yksityisviesti - Näkyy vain mainituille käyttäjille","private":"Vain-seuraajille - Näkyy vain seuraajillesi","public":"Julkinen - Näkyy julkisilla aikajanoilla","unlisted":"Listaamaton - Ei näy julkisilla aikajanoilla"},"direct_warning_to_all":"Tämä viesti näkyy vain viestissä mainituille käyttäjille.","direct_warning_to_first_only":"Tämä viesti näkyy vain viestin alussa mainituille käyttäjille.","scope_notice":{"public":"Tämä viesti näkyy kaikille","private":"Tämä viesti näkyy vain sinun seuraajillesi","unlisted":"Tämä viesti ei näy Julkisella Aikajanalla tai Koko Tunnettu Verkosto -aikajanalla"},"preview":"Esikatselu","preview_empty":"Tyhjä","empty_status_error":"Tyhjää viestiä ilman tiedostoja ei voi lähettää","media_description":"Tiedoston kuvaus","media_description_error":"Tiedostojen päivitys epäonnistui, yritä uudelleen"},"registration":{"bio":"Kuvaus","email":"Sähköposti","fullname":"Koko nimi","password_confirm":"Salasanan vahvistaminen","registration":"Rekisteröityminen","token":"Kutsuvaltuus","captcha":"Varmenne","new_captcha":"Paina kuvaa saadaksesi uuden varmenteen","validations":{"username_required":"ei voi olla tyhjä","fullname_required":"ei voi olla tyhjä","email_required":"ei voi olla tyhjä","password_required":"ei voi olla tyhjä","password_confirmation_required":"ei voi olla tyhjä","password_confirmation_match":"pitää vastata salasanaa"},"username_placeholder":"esim. peke","fullname_placeholder":"esim. Pekka Postaaja","bio_placeholder":"esim.\\nHei, olen Pekka.\\nOlen esimerkkikäyttäjä tässä verkostossa."},"settings":{"attachmentRadius":"Liitteet","attachments":"Liitteet","avatar":"Profiilikuva","avatarAltRadius":"Profiilikuvat (ilmoitukset)","avatarRadius":"Profiilikuvat","background":"Tausta","bio":"Kuvaus","btnRadius":"Napit","cBlue":"Sininen (Vastaukset, seuraukset)","cGreen":"Vihreä (Toistot)","cOrange":"Oranssi (Tykkäykset)","cRed":"Punainen (Peruminen)","change_password":"Vaihda salasana","change_password_error":"Virhe vaihtaessa salasanaa.","changed_password":"Salasana vaihdettu!","collapse_subject":"Minimoi viestit, joille on asetettu aihe","composing":"Viestien laatiminen","confirm_new_password":"Vahvista uusi salasana","current_avatar":"Nykyinen profiilikuvasi","current_password":"Nykyinen salasana","current_profile_banner":"Nykyinen julisteesi","data_import_export_tab":"Tietojen tuonti / vienti","default_vis":"Oletusnäkyvyysrajaus","delete_account":"Poista tili","delete_account_description":"Poista tietosi ja lukitse tili pysyvästi.","delete_account_error":"Virhe poistaessa tiliäsi. Jos virhe jatkuu, ota yhteyttä palvelimesi ylläpitoon.","delete_account_instructions":"Syötä salasanasi vahvistaaksesi tilin poiston.","emoji_reactions_on_timeline":"Näytä emojireaktiot aikajanalla","export_theme":"Tallenna teema","filtering":"Suodatus","filtering_explanation":"Kaikki viestit, jotka sisältävät näitä sanoja, suodatetaan. Yksi sana per rivi.","follow_export":"Seurausten vienti","follow_export_button":"Vie seurauksesi CSV-tiedostoon","follow_export_processing":"Käsitellään, sinua pyydetään lataamaan tiedosto hetken päästä","follow_import":"Seurausten tuonti","follow_import_error":"Virhe tuodessa seuraksia","follows_imported":"Seuraukset tuotu! Niiden käsittely vie hetken.","foreground":"Etuala","general":"Yleinen","hide_attachments_in_convo":"Piilota liitteet keskusteluissa","hide_attachments_in_tl":"Piilota liitteet aikajanalla","max_thumbnails":"Suurin sallittu määrä liitteitä esikatselussa","hide_isp":"Piilota palvelimenkohtainen ruutu","preload_images":"Esilataa kuvat","use_one_click_nsfw":"Avaa NSFW-liitteet yhdellä painalluksella","hide_post_stats":"Piilota viestien statistiikka (esim. tykkäysten määrä)","hide_user_stats":"Piilota käyttäjien statistiikka (esim. seuraajien määrä)","import_followers_from_a_csv_file":"Tuo seuraukset CSV-tiedostosta","import_theme":"Tuo tallennettu teema","inputRadius":"Syöttökentät","checkboxRadius":"Valintalaatikot","instance_default":"(oletus: {value})","instance_default_simple":"(oletus)","interface":"Käyttöliittymä","interfaceLanguage":"Käyttöliittymän kieli","invalid_theme_imported":"Tuotu tallennettu teema on epäkelpo, muutoksia ei tehty nykyiseen teemaasi.","limited_availability":"Ei saatavilla selaimessasi","links":"Linkit","lock_account_description":"Vain erikseen hyväksytyt käyttäjät voivat seurata tiliäsi","loop_video":"Uudelleentoista videot","loop_video_silent_only":"Uudelleentoista ainoastaan äänettömät videot (Video-\\"giffit\\")","play_videos_in_modal":"Toista videot modaalissa","use_contain_fit":"Älä rajaa liitteitä esikatselussa","name":"Nimi","name_bio":"Nimi ja kuvaus","new_password":"Uusi salasana","notification_visibility":"Ilmoitusten näkyvyys","notification_visibility_follows":"Seuraukset","notification_visibility_likes":"Tykkäykset","notification_visibility_mentions":"Maininnat","notification_visibility_repeats":"Toistot","notification_visibility_emoji_reactions":"Reaktiot","no_rich_text_description":"Älä näytä tekstin muotoilua","hide_network_description":"Älä näytä seurauksiani tai seuraajiani","nsfw_clickthrough":"Piilota NSFW liitteet klikkauksen taakse","oauth_tokens":"OAuth-merkit","token":"Token","refresh_token":"Päivitä token","valid_until":"Voimassa asti","revoke_token":"Peruuta","panelRadius":"Ruudut","pause_on_unfocused":"Pysäytä automaattinen viestien näyttö välilehden ollessa pois fokuksesta","presets":"Valmiit teemat","profile_background":"Taustakuva","profile_banner":"Juliste","profile_tab":"Profiili","radii_help":"Aseta reunojen pyöristys (pikseleinä)","replies_in_timeline":"Keskustelut aikajanalla","reply_visibility_all":"Näytä kaikki vastaukset","reply_visibility_following":"Näytä vain vastaukset minulle tai seuraamilleni käyttäjille","reply_visibility_self":"Näytä vain vastaukset minulle","saving_err":"Virhe tallentaessa asetuksia","saving_ok":"Asetukset tallennettu","security_tab":"Tietoturva","scope_copy":"Kopioi näkyvyysrajaus vastatessa (Yksityisviestit aina kopioivat)","set_new_avatar":"Aseta uusi profiilikuva","set_new_profile_background":"Aseta uusi taustakuva","set_new_profile_banner":"Aseta uusi juliste","settings":"Asetukset","subject_input_always_show":"Näytä aihe-kenttä","subject_line_behavior":"Aihe-kentän kopiointi","subject_line_email":"Kuten sähköposti: \\"re: aihe\\"","subject_line_mastodon":"Kopioi sellaisenaan","subject_line_noop":"Älä kopioi","stop_gifs":"Toista giffit vain kohdistaessa","streaming":"Näytä uudet viestit automaattisesti ollessasi ruudun huipulla","text":"Teksti","theme":"Teema","theme_help":"Käytä heksadesimaalivärejä muokataksesi väriteemaasi.","theme_help_v2_1":"Voit asettaa tiettyjen osien värin tai läpinäkyvyyden täyttämällä valintalaatikon, käytä \\"Tyhjennä kaikki\\"-nappia tyhjentääksesi kaiken.","theme_help_v2_2":"Ikonit kenttien alla ovat kontrasti-indikaattoreita, lisätietoa kohdistamalla. Käyttäessä läpinäkyvyyttä ne näyttävät pahimman skenaarion.","tooltipRadius":"Ohje- tai huomioviestit","user_settings":"Käyttäjän asetukset","values":{"false":"pois päältä","true":"päällä"},"hide_follows_description":"Älä näytä ketä seuraan","show_moderator_badge":"Näytä Moderaattori-merkki profiilissani","useStreamingApi":"Vastaanota viestiejä ja ilmoituksia reaaliajassa","notification_setting_filters":"Suodattimet","notification_setting_privacy_option":"Piilota lähettäjä ja sisältö sovelluksen ulkopuolisista ilmoituksista","enable_web_push_notifications":"Ota käyttöön sovelluksen ulkopuoliset ilmoitukset","app_name":"Sovelluksen nimi","security":"Turvallisuus","mfa":{"otp":"OTP","setup_otp":"OTP-asetukset","wait_pre_setup_otp":"esiasetetaan OTP:ta","confirm_and_enable":"Hyväksy ja käytä OTP","title":"Monivaihetodennus","generate_new_recovery_codes":"Luo uudet palautuskoodit","authentication_methods":"Todennus","warning_of_generate_new_codes":"Luodessasi uudet palautuskoodit, vanhat koodisi lakkaavat toimimasta.","recovery_codes":"Palautuskoodit.","waiting_a_recovery_codes":"Odotetaan palautuskoodeja…","recovery_codes_warning":"Kirjoita koodit ylös tai tallenna ne turvallisesti, muuten et näe niitä uudestaan. Jos et voi käyttää monivaihetodennusta ja sinulla ei ole palautuskoodeja, et voi enää kirjautua sisään tilillesi.","scan":{"title":"Skannaa","secret_code":"Avain","desc":"Käytä monivaihetodennus-sovellusta skannakksesi tämän QR-kooding, tai syötä avain:"},"verify":{"desc":"Kytkeäksesi päälle monivaihetodennuksen, syötä koodi monivaihetodennussovellksesta:"}},"allow_following_move":"Salli automaattinen seuraaminen kun käyttäjä siirtää tilinsä","block_export":"Estojen vienti","block_export_button":"Vie estosi CSV-tiedostoon","block_import":"Estojen tuonti","block_import_error":"Virhe tuodessa estoja","blocks_imported":"Estot tuotu! Käsittely vie hetken.","blocks_tab":"Estot","change_email":"Vaihda sähköpostiosoite","change_email_error":"Virhe vaihtaessa sähköpostiosoitetta.","changed_email":"Sähköpostiosoite vaihdettu!","domain_mutes":"Sivut","avatar_size_instruction":"Suositeltu vähimmäiskoko profiilikuville on 150x150 pikseliä.","accent":"Korostus","hide_muted_posts":"Piilota mykistettyjen käyttäjien viestit","hide_filtered_statuses":"Piilota mykistetyt viestit","import_blocks_from_a_csv_file":"Tuo estot CSV-tiedostosta","no_blocks":"Ei estoja","no_mutes":"Ei mykistyksiä","notification_visibility_moves":"Käyttäjien siirtymiset","hide_followers_description":"Älä näytä ketkä seuraavat minua","hide_follows_count_description":"Älä näytä seurauksien määrää","hide_followers_count_description":"Älä näytä seuraajien määrää","show_admin_badge":"Näytä Ylläpitäjä-merkki proofilissani","autohide_floating_post_button":"Piilota Uusi Viesti -nappi automaattisesti (mobiili)","search_user_to_block":"Hae estettäviä käyttäjiä","search_user_to_mute":"Hae mykistettäviä käyttäjiä","minimal_scopes_mode":"Yksinkertaista näkyvyydenrajauksen vaihtoehdot","post_status_content_type":"Uuden viestin sisällön muoto","user_mutes":"Käyttäjät","useStreamingApiWarning":"(Kokeellinen)","type_domains_to_mute":"Etsi mykistettäviä sivustoja","upload_a_photo":"Lataa kuva","fun":"Hupi","greentext":"Meeminuolet","notifications":"Ilmoitukset","style":{"switcher":{"save_load_hint":"\\"Säilytä\\" asetukset säilyttävät tällä hetkellä asetetut asetukset valittaessa tai ladatessa teemaa, se myös tallentaa kyseiset asetukset viedessä teemaa. Kun kaikki laatikot ovat tyhjänä, viety teema tallentaa kaiken.","help":{"older_version_imported":"Tuomasi tiedosto on luotu vanhemmalla versiolla.","fe_upgraded":"PleromaFE:n teemaus päivitetty versiopäivityksen yhteydessä.","migration_snapshot_ok":"Varmuuden vuoksi teeman kaappaus ladattu. Voit koittaa ladata teeman sisällön.","migration_napshot_gone":"Jostain syystä teeman kaappaus puuttuu, kaikki asiat eivät välttämättä näytä oikealta.","snapshot_source_mismatch":"Versiot eivät täsmää: todennäköisesti versio vaihdettu vanhempaan ja päivitetty uudestaan, jos vaihdoit teemaa vanhalla versiolla, sinun tulisi käyttää vanhaa versiota, muutoin uutta.","upgraded_from_v2":"PleromaFE on päivitetty, teemasi saattaa näyttää erilaiselta kuin muistat.","v2_imported":"Tuomasi tiedosto on luotu vanhemmalla versiolla. Yhteensopivuus ei välttämättä ole täydellinen.","future_version_imported":"Tuomasi tiedosto on luotu uudemmalla versiolla.","snapshot_present":"Teeman kaappaus ladattu, joten kaikki arvot ovat ylikirjoitettu. Voit sen sijaan ladata teeman sisällön.","snapshot_missing":"Teeman kaappausta ei tiedostossa, joten se voi näyttää erilaiselta kuin suunniteltu.","fe_downgraded":"PleromaFE:n versio vaihtunut vanhempaan."},"keep_color":"Säilytä värit","keep_shadows":"Säilytä varjot","keep_opacity":"Säilytä läpinäkyvyys","keep_roundness":"Säilytä pyöristys","keep_fonts":"Säilytä fontit","reset":"Palauta","clear_all":"Tyhjennä kaikki","clear_opacity":"Tyhjennä läpinäkyvyys","load_theme":"Lataa teema","keep_as_is":"Pidä sellaisenaan","use_snapshot":"Vanha","use_source":"Uusi"},"advanced_colors":{"selectedPost":"Valittu viesti","_tab_label":"Edistynyt","alert":"Varoituksen tausta","alert_error":"Virhe","alert_warning":"Varoitus","alert_neutral":"Neutraali","post":"Viestit/Käyttäjien kuvaukset","badge":"Merkin tausta","badge_notification":"Ilmoitus","panel_header":"Ruudun otsikko","top_bar":"Yläpalkki","borders":"Reunat","buttons":"Napit","inputs":"Syöttökentät","faint_text":"Häivytetty teksti","underlay":"Taustapeite","poll":"Äänestyksen kuvaaja","icons":"Ikonit","highlight":"Korostetut elementit","pressed":"Painettu","selectedMenu":"Valikon valinta","disabled":"Pois käytöstä","toggled":"Kytketty","tabs":"Välilehdet","popover":"Työkaluvinkit, valikot, ponnahdusviestit"},"common":{"color":"Väri","opacity":"Läpinäkyvyys","contrast":{"level":{"aaa":"saavuttaa AAA-tason (suositeltu)","aa":"saavuttaa AA-tason (minimi)","bad":"ei saavuta mitään helppokäyttöisyyssuosituksia"},"hint":"Kontrastisuhde on {ratio}, se {level} {context}","context":{"18pt":"suurella (18pt+) tekstillä","text":"tekstillä"}}},"common_colors":{"_tab_label":"Yleinen","main":"Yleiset värit","foreground_hint":"Löydät \\"Edistynyt\\"-välilehdeltä tarkemmat asetukset","rgbo":"Ikonit, korostukset, merkit"},"shadows":{"filter_hint":{"always_drop_shadow":"Varoitus, tämä varjo käyttää aina {0} kun selain tukee sitä.","avatar_inset":"Huom. sisennettyjen ja ei-sisennettyjen varjojen yhdistelmät saattavat luoda ei-odotettuja lopputuloksia läpinäkyvillä profiilikuvilla.","drop_shadow_syntax":"{0} ei tue {1} parametria ja {2} avainsanaa.","spread_zero":"Varjot joiden levitys > 0 näyttävät samalta kuin se olisi nolla","inset_classic":"Sisennetyt varjot käyttävät {0}"},"components":{"buttonPressedHover":"Nappi (painettu ja kohdistettu)","panel":"Ruutu","panelHeader":"Ruudun otsikko","topBar":"Yläpalkki","avatar":"Profiilikuva (profiilinäkymässä)","avatarStatus":"Profiilikuva (viestin yhtyedessä)","popup":"Ponnahdusviestit ja työkaluvinkit","button":"Nappi","buttonHover":"Nappi (kohdistus)","buttonPressed":"Nappi (painettu)","input":"Syöttökenttä"},"hintV3":"Voit käyttää {0} merkintää varjoille käyttääksesi väriä toisesta asetuksesta.","_tab_label":"Valo ja varjostus","component":"Komponentti","override":"Ylikirjoita","shadow_id":"Varjo #{value}","blur":"Sumennus","spread":"Levitys","inset":"Sisennys"},"fonts":{"help":"Valitse fontti käyttöliittymälle. \\"Oma\\"-vaihtohdolle on syötettävä fontin nimi tarkalleen samana kuin se on järjestelmässäsi.","_tab_label":"Fontit","components":{"interface":"Käyttöliittymä","input":"Syöttökentät","post":"Viestin teksti","postCode":"Tasavälistetty teksti viestissä"},"family":"Fontin nimi","size":"Koko (pikseleissä)","weight":"Painostus (paksuus)","custom":"Oma"},"preview":{"input":"Tulin juuri saunasta.","header":"Esikatselu","content":"Sisältö","error":"Esimerkkivirhe","button":"Nappi","text":"Vähän lisää {0} ja {1}","mono":"sisältöä","faint_link":"manuaali","fine_print":"Lue meidän {0} vaikka huvin vuoksi!","header_faint":"Tämä on OK","checkbox":"Olen silmäillyt käyttöehdot","link":"kiva linkki"},"radii":{"_tab_label":"Pyöristys"}},"enter_current_password_to_confirm":"Syötä nykyinen salasanasi todentaaksesi henkilöllisyytesi","discoverable":"Salli tilisi näkyvyys hakukoneisiin ja muihin palveluihin","pad_emoji":"Välistä emojit välilyönneillä lisätessäsi niitä valitsimesta","mutes_tab":"Mykistykset","new_email":"Uusi sähköpostiosoite","notification_setting_privacy":"Yksityisyys","notification_mutes":"Jos et halua ilmoituksia joltain käyttäjältä, käytä mykistystä.","notification_blocks":"Estäminen pysäyttää kaikki ilmoitukset käyttäjältä ja poistaa seurauksen.","version":{"title":"Versio","backend_version":"Palvelimen versio","frontend_version":"Käyttöliittymän versio"},"reset_profile_background":"Nollaa taustakuva","reset_background_confirm":"Haluatko todella nollata taustakuvan?","mutes_and_blocks":"Mykistykset ja Estot","bot":"Tämä on bottitili","profile_fields":{"label":"Profiilin metatiedot","add_field":"Lisää kenttä","name":"Nimi","value":"Sisältö"},"reset_avatar":"Nollaa profiilikuva","reset_profile_banner":"Nollaa profiilin tausta","reset_avatar_confirm":"Haluatko todella nollata profiilikuvan?","reset_banner_confirm":"Haluatko todella nollata profiilin taustan?"},"time":{"day":"{0} päivä","days":"{0} päivää","day_short":"{0}pv","days_short":"{0}pv","hour":"{0} tunti","hours":"{0} tuntia","hour_short":"{0}t","hours_short":"{0}t","in_future":"{0} tulevaisuudessa","in_past":"{0} sitten","minute":"{0} minuutti","minutes":"{0} minuuttia","minute_short":"{0}min","minutes_short":"{0}min","month":"{0} kuukausi","months":"{0} kuukautta","month_short":"{0}kk","months_short":"{0}kk","now":"juuri nyt","now_short":"nyt","second":"{0} sekunti","seconds":"{0} sekuntia","second_short":"{0}s","seconds_short":"{0}s","week":"{0} viikko","weeks":"{0} viikkoa","week_short":"{0}vk","weeks_short":"{0}vk","year":"{0} vuosi","years":"{0} vuotta","year_short":"{0}v","years_short":"{0}v"},"timeline":{"collapse":"Sulje","conversation":"Keskustelu","error_fetching":"Virhe ladatessa viestejä","load_older":"Lataa vanhempia viestejä","no_retweet_hint":"Viesti ei ole julkinen, eikä sitä voi toistaa","repeated":"toisti","show_new":"Näytä uudet","up_to_date":"Ajantasalla","no_more_statuses":"Ei enempää viestejä","no_statuses":"Ei viestejä","reload":"Päivitä"},"status":{"favorites":"Tykkäykset","repeats":"Toistot","delete":"Poista","pin":"Kiinnitä profiiliisi","unpin":"Poista kiinnitys","pinned":"Kiinnitetty","delete_confirm":"Haluatko varmasti postaa viestin?","reply_to":"Vastaus","replies_list":"Vastaukset:","mute_conversation":"Mykistä keskustelu","unmute_conversation":"Poista mykistys","status_unavailable":"Viesti ei saatavissa","copy_link":"Kopioi linkki","bookmark":"Lisää kirjanmerkkeihin","unbookmark":"Poista kirjanmerkeistä","thread_muted":"Keskustelu mykistetty","thread_muted_and_words":", sisältää sanat:","show_full_subject":"Näytä koko otsikko","hide_full_subject":"Piilota koko otsikko","show_content":"Näytä sisältö","hide_content":"Piilota sisältö","status_deleted":"Poistettu viesti","you":"(sinä)"},"user_card":{"approve":"Hyväksy","block":"Estä","blocked":"Estetty!","deny":"Älä hyväksy","follow":"Seuraa","follow_sent":"Pyyntö lähetetty!","follow_progress":"Pyydetään…","follow_unfollow":"Älä seuraa","followees":"Seuraa","followers":"Seuraajat","following":"Seuraat!","follows_you":"Seuraa sinua!","its_you":"Sinun tili!","mute":"Mykistä","muted":"Mykistetty","per_day":"päivässä","remote_follow":"Seuraa muualta","statuses":"Viestit","hidden":"Piilotettu","media":"Media","block_progress":"Estetään…","admin_menu":{"grant_admin":"Anna Ylläpitöoikeudet","force_nsfw":"Merkitse kaikki viestit NSFW:nä","disable_any_subscription":"Estä käyttäjän seuraaminen","moderation":"Moderaatio","revoke_admin":"Poista Ylläpitöoikeudet","grant_moderator":"Anna Moderaattorioikeudet","revoke_moderator":"Poista Moderaattorioikeudet","activate_account":"Aktivoi tili","deactivate_account":"Deaktivoi tili","delete_account":"Poista tili","strip_media":"Poista media viesteistä","force_unlisted":"Pakota viestit listaamattomiksi","sandbox":"Pakota viestit vain seuraajille","disable_remote_subscription":"Estä seuraaminen ulkopuolisilta sivuilta","quarantine":"Estä käyttäjän viestin federoituminen","delete_user":"Poista käyttäjä","delete_user_confirmation":"Oletko aivan varma? Tätä ei voi kumota."},"favorites":"Tykkäykset","mention":"Mainitse","report":"Ilmianna","subscribe":"Tilaa","unsubscribe":"Poista tilaus","unblock":"Poista esto","unblock_progress":"Poistetaan estoa…","unmute":"Poista mykistys","unmute_progress":"Poistetaan mykistystä…","mute_progress":"Mykistetään…","hide_repeats":"Piilota toistot","show_repeats":"Näytä toistot"},"user_profile":{"timeline_title":"Käyttäjän aikajana","profile_does_not_exist":"Tätä profiilia ei ole.","profile_loading_error":"Virhe ladatessa profiilia."},"who_to_follow":{"more":"Lisää","who_to_follow":"Seurausehdotukset"},"tool_tip":{"media_upload":"Lataa tiedosto","repeat":"Toista","reply":"Vastaa","favorite":"Tykkää","user_settings":"Käyttäjäasetukset","add_reaction":"Lisää Reaktio","accept_follow_request":"Hyväksy seurauspyyntö","reject_follow_request":"Hylkää seurauspyyntö","bookmark":"Kirjanmerkki"},"upload":{"error":{"base":"Lataus epäonnistui.","file_too_big":"Tiedosto liian suuri [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]","default":"Yritä uudestaan myöhemmin"},"file_size_units":{"B":"tavua","KiB":"kt","MiB":"Mt","GiB":"Gt","TiB":"Tt"}},"about":{"mrf":{"keyword":{"keyword_policies":"Avainsanasäännöt","ftl_removal":"Poistettu \\"Koko Tunnettu Verkosto\\" -aikajanalta","reject":"Hylkää","replace":"Korvaa","is_replaced_by":"→"},"simple":{"accept":"Hyväksy","reject":"Hylkää","quarantine":"Karanteeni","ftl_removal":"Poisto \\"Koko Tunnettu Verkosto\\" -aikajanalta","media_removal":"Media-tiedostojen poisto","simple_policies":"Palvelinkohtaiset Säännöt","accept_desc":"Tämä palvelin hyväksyy viestit vain seuraavilta palvelimilta:","reject_desc":"Tämä palvelin ei hyväksy viestejä seuraavilta palvelimilta:","quarantine_desc":"Tämä palvelin lähettää vain julkisia viestejä seuraaville palvelimille:","ftl_removal_desc":"Tämä palvelin poistaa nämä palvelimet \\"Koko Tunnettu Verkosto\\"-aikajanalta:","media_removal_desc":"Tämä palvelin postaa mediatiedostot viesteistä seuraavilta palvelimilta:","media_nsfw":"Pakota Media Arkaluontoiseksi","media_nsfw_desc":"Tämä palvelin pakottaa mediatiedostot arkaluonteisiksi seuraavilta palvelimilta:"},"federation":"Federaatio","mrf_policies":"Aktivoidut MRF-säännöt","mrf_policies_desc":"MRF-säännöt muuttavat federaation toimintaa sivulla. Seuraavat säännöt ovat kytketty päälle:"},"staff":"Henkilökunta"},"domain_mute_card":{"mute":"Mykistä","unmute":"Poista mykistys","mute_progress":"Mykistetään…","unmute_progress":"Poistetaan mykistystä…"},"exporter":{"export":"Vie","processing":"Käsitellään, hetken päästä voit tallentaa tiedoston"},"image_cropper":{"crop_picture":"Rajaa kuva","save":"Tallenna","save_without_cropping":"Tallenna rajaamatta","cancel":"Peruuta"},"importer":{"submit":"Hyväksy","error":"Virhe tapahtui tietoja tuodessa.","success":"Tuonti onnistui."},"media_modal":{"previous":"Edellinen","next":"Seuraava"},"emoji":{"stickers":"Tarrat","emoji":"Emoji","keep_open":"Pidä valitsin auki","search_emoji":"Hae emojia","add_emoji":"Lisää emoji","custom":"Custom-emoji","load_all":"Ladataan kaikkia {emojiAmount} emojia","unicode":"Unicode-emoji","load_all_hint":"Ensimmäiset {saneAmount} emojia ladattu, kaikkien emojien lataaminen voi aiheuttaa hidastelua."},"remote_user_resolver":{"remote_user_resolver":"Ulkopuolinen käyttäjä","searching_for":"Etsitään käyttäjää","error":"Ei löytynyt."},"selectable_list":{"select_all":"Valitse kaikki"},"password_reset":{"check_email":"Tarkista sähköpostisi salasanannollausta varten.","instruction":"Syötä sähköpostiosoite tai käyttäjänimi. Lähetämme linkin salasanan nollausta varten.","password_reset_disabled":"Salasanan nollaus ei käytössä. Ota yhteyttä sivun ylläpitäjään.","password_reset_required_but_mailer_is_disabled":"Sinun täytyy vaihtaa salasana, mutta salasanan nollaus on pois käytöstä. Ota yhteyttä sivun ylläpitäjään.","forgot_password":"Unohditko salasanan?","password_reset":"Salasanan nollaus","placeholder":"Sähköpostiosoite tai käyttäjänimi","return_home":"Palaa etusivulle","too_many_requests":"Olet käyttänyt kaikki yritykset, yritä uudelleen myöhemmin.","password_reset_required":"Sinun täytyy vaihtaa salasana kirjautuaksesi."},"user_reporting":{"add_comment_description":"Tämä raportti lähetetään sivun moderaattoreille. Voit antaa selityksen miksi ilmiannoit tilin:","title":"Ilmiannetaan {0}","additional_comments":"Lisäkommentit","forward_description":"Tämä tili on toiselta palvelimelta. Lähetä kopio ilmiannosta sinnekin?","forward_to":"Lähetä eteenpäin: {0}","submit":"Lähetä","generic_error":"Virhe käsitellessä pyyntöä."},"search":{"people":"Käyttäjät","hashtags":"Aihetunnisteet","people_talking":"{0} käyttäjää puhuvat","person_talking":"{0} käyttäjä puhuu","no_results":"Ei tuloksia"},"errors":{"storage_unavailable":"Pleroma ei voinut käyttää selaimen muistia. Kirjautumisesi ja paikalliset asetukset eivät tallennu ja saatat kohdata odottamattomia ongelmia. Yritä sallia evästeet."}}')}}]); +//# sourceMappingURL=13.99621e6c47936075b44d.js.map \ No newline at end of file diff --git a/priv/static/static/js/13.cdc076533397e24391bc.js.map b/priv/static/static/js/13.99621e6c47936075b44d.js.map similarity index 56% rename from priv/static/static/js/13.cdc076533397e24391bc.js.map rename to priv/static/static/js/13.99621e6c47936075b44d.js.map index 19b1f31f8..eb79bff03 100644 --- a/priv/static/static/js/13.cdc076533397e24391bc.js.map +++ b/priv/static/static/js/13.99621e6c47936075b44d.js.map @@ -1 +1 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/13.cdc076533397e24391bc.js","sourceRoot":""} \ No newline at end of file +{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/13.99621e6c47936075b44d.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/14.4e05e7c284119777ecc5.js b/priv/static/static/js/14.4e05e7c284119777ecc5.js new file mode 100644 index 000000000..6f5728bf6 --- /dev/null +++ b/priv/static/static/js/14.4e05e7c284119777ecc5.js @@ -0,0 +1,2 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{607:function(e){e.exports=JSON.parse('{"chat":{"title":"Chat"},"exporter":{"export":"Exporter","processing":"En cours de traitement, vous pourrez bientôt télécharger votre fichier"},"features_panel":{"chat":"Chat","gopher":"Gopher","media_proxy":"Proxy pièce-jointes","scope_options":"Options de visibilité","text_limit":"Limite du texte","title":"Fonctionnalités","who_to_follow":"Suggestions de suivis","pleroma_chat_messages":"Chat Pleroma","upload_limit":"Limite de téléversement"},"finder":{"error_fetching_user":"Erreur lors de la recherche du compte","find_user":"Rechercher un compte"},"general":{"apply":"Appliquer","submit":"Envoyer","more":"Plus","generic_error":"Une erreur s\'est produite","optional":"optionnel","show_more":"Afficher plus","show_less":"Afficher moins","cancel":"Annuler","disable":"Désactiver","enable":"Activer","confirm":"Confirmer","verify":"Vérifier","dismiss":"Ignorer","peek":"Jeter un coup d\'œil","close":"Fermer","retry":"Réessayez","error_retry":"Veuillez réessayer","loading":"Chargement…","role":{"moderator":"Modo\'","admin":"Admin"},"flash_content":"Clique pour afficher le contenu Flash avec Ruffle (Expérimental, peut ne pas fonctionner).","flash_security":"Cela reste potentiellement dangereux, Flash restant du code arbitraire.","flash_fail":"Échec de chargement du contenu Flash, voir la console pour les détails."},"image_cropper":{"crop_picture":"Rogner l\'image","save":"Sauvegarder","save_without_cropping":"Sauvegarder sans rogner","cancel":"Annuler"},"importer":{"submit":"Envoyer","success":"Importé avec succès.","error":"Une erreur est survenue pendant l\'import de ce fichier."},"login":{"login":"Connexion","description":"Connexion avec OAuth","logout":"Déconnexion","password":"Mot de passe","placeholder":"ex. lain","register":"S\'inscrire","username":"Identifiant","hint":"Connectez-vous pour rejoindre la discussion","authentication_code":"Code d\'authentification","enter_recovery_code":"Entrez un code de récupération","enter_two_factor_code":"Entrez un code double-facteur","recovery_code":"Code de récupération","heading":{"totp":"Authentification à double-facteur","recovery":"Récupération de l\'authentification à double-facteur"}},"media_modal":{"previous":"Précédent","next":"Suivant"},"nav":{"about":"À propos","back":"Retour","chat":"Chat local","friend_requests":"Demandes de suivi","mentions":"Mentions","interactions":"Interactions","dms":"Messages directs","public_tl":"Flux publique","timeline":"Flux personnel","twkn":"Réseau connu","user_search":"Recherche de comptes","who_to_follow":"Suggestion de suivit","preferences":"Préférences","search":"Recherche","administration":"Administration","chats":"Chats","bookmarks":"Marques-Pages","timelines":"Flux","home_timeline":"Flux personnel"},"notifications":{"broken_favorite":"Message inconnu, recherche en cours…","favorited_you":"a aimé votre statut","followed_you":"vous suit","load_older":"Charger les notifications précédentes","notifications":"Notifications","read":"Lu !","repeated_you":"a partagé votre statut","no_more_notifications":"Aucune notification supplémentaire","migrated_to":"a migré à","reacted_with":"a réagi avec {0}","follow_request":"veut vous suivre","error":"Erreur de chargement des notifications : {0}"},"interactions":{"favs_repeats":"Partages et favoris","follows":"Nouveaux suivis","load_older":"Chargez d\'anciennes interactions","moves":"Migrations de comptes"},"post_status":{"new_status":"Poster un nouveau statut","account_not_locked_warning":"Votre compte n\'est pas {0}. N\'importe qui peut vous suivre pour voir vos billets en Abonné·e·s uniquement.","account_not_locked_warning_link":"verrouillé","attachments_sensitive":"Marquer les pièce-jointes comme sensible","content_type":{"text/plain":"Texte brut","text/html":"HTML","text/markdown":"Markdown","text/bbcode":"BBCode"},"content_warning":"Sujet (optionnel)","default":"Je viens d\'atterrir en Tchéquie.","direct_warning_to_all":"Ce message sera visible pour toutes les personnes mentionnées.","direct_warning_to_first_only":"Ce message sera visible uniquement pour personnes mentionnées au début du message.","posting":"Envoi en cours","scope_notice":{"public":"Ce statut sera visible par tout le monde","private":"Ce statut sera visible par seulement vos abonné⋅e⋅s","unlisted":"Ce statut ne sera pas visible dans le Flux Public et le Flux Fédéré"},"scope":{"direct":"Direct - N\'envoyer qu\'aux personnes mentionnées","private":"Abonné·e·s uniquement - Seul·e·s vos abonné·e·s verront vos status","public":"Publique - Afficher dans les flux publics","unlisted":"Non-Listé - Ne pas afficher dans les flux publics"},"media_description_error":"Échec de téléversement du media, essayez encore","empty_status_error":"Impossible de poster un statut vide sans pièces-jointes","preview_empty":"Vide","preview":"Prévisualisation","media_description":"Description de la pièce-jointe","post":"Post"},"registration":{"bio":"Biographie","email":"Courriel","fullname":"Pseudonyme","password_confirm":"Confirmation du mot de passe","registration":"Inscription","token":"Jeton d\'invitation","captcha":"CAPTCHA","new_captcha":"Cliquez sur l\'image pour avoir un nouveau captcha","username_placeholder":"ex. lain","fullname_placeholder":"ex. Lain Iwakura","bio_placeholder":"ex.\\nSalut, je suis Lain\\nJe suis une héroïne d\'animation qui vit dans une banlieue japonaise. Vous me connaissez peut-être du Wired.","validations":{"username_required":"ne peut pas être laissé vide","fullname_required":"ne peut pas être laissé vide","email_required":"ne peut pas être laissé vide","password_required":"ne peut pas être laissé vide","password_confirmation_required":"ne peut pas être laissé vide","password_confirmation_match":"doit être identique au mot de passe"},"reason_placeholder":"Cette instance modère les inscriptions manuellement.\\nExpliquer ce qui motive votre inscription à l\'administration.","reason":"Motivation d\'inscription","register":"Enregistrer"},"selectable_list":{"select_all":"Tout selectionner"},"settings":{"app_name":"Nom de l\'application","security":"Sécurité","enter_current_password_to_confirm":"Entrez votre mot de passe actuel pour confirmer votre identité","mfa":{"otp":"OTP","setup_otp":"Configurer OTP","wait_pre_setup_otp":"préconfiguration OTP","confirm_and_enable":"Confirmer & activer OTP","title":"Authentification double-facteur","generate_new_recovery_codes":"Générer de nouveaux codes de récupération","warning_of_generate_new_codes":"Quand vous générez de nouveaux codes de récupération, vos anciens codes ne fonctionnerons plus.","recovery_codes":"Codes de récupération.","waiting_a_recovery_codes":"Réception des codes de récupération…","recovery_codes_warning":"Écrivez ces codes ou sauvegardez les dans un endroit sécurisé - sinon vous ne les verrez plus jamais. Si vous perdez l\'accès à votre application de double authentification et codes de récupération vous serez verrouillé en dehors de votre compte.","authentication_methods":"Méthodes d\'authentification","scan":{"title":"Scanner","desc":"En utilisant votre application d\'authentification à double-facteur, scannez ce QR code ou entrez la clé textuelle :","secret_code":"Clé"},"verify":{"desc":"Pour activer l\'authentification à double-facteur, entrez le code donné par votre application :"}},"attachmentRadius":"Pièces jointes","attachments":"Pièces jointes","avatar":"Avatar","avatarAltRadius":"Avatars (Notifications)","avatarRadius":"Avatars","background":"Arrière-plan","bio":"Biographie","block_export":"Export des comptes bloqués","block_export_button":"Export des comptes bloqués vers un fichier CSV","block_import":"Import des comptes bloqués","block_import_error":"Erreur lors de l\'import des comptes bloqués","blocks_imported":"Blocages importés ! Le traitement va prendre un moment.","blocks_tab":"Bloqué·e·s","btnRadius":"Boutons","cBlue":"Bleu (répondre, suivre)","cGreen":"Vert (partager)","cOrange":"Orange (aimer)","cRed":"Rouge (annuler)","change_password":"Changez votre mot de passe","change_password_error":"Il y a eu un problème pour changer votre mot de passe.","changed_password":"Mot de passe modifié avec succès !","collapse_subject":"Réduire les messages avec des sujets","composing":"Composition","confirm_new_password":"Confirmation du nouveau mot de passe","current_avatar":"Avatar actuel","current_password":"Mot de passe actuel","current_profile_banner":"Bannière de profil actuelle","data_import_export_tab":"Import / Export des Données","default_vis":"Visibilité par défaut","delete_account":"Supprimer le compte","delete_account_description":"Supprimer définitivement vos données et désactiver votre compte.","delete_account_error":"Il y a eu un problème lors de la tentative de suppression de votre compte. Si le problème persiste, contactez l\'administration de cette instance.","delete_account_instructions":"Indiquez votre mot de passe ci-dessous pour confirmer la suppression de votre compte.","avatar_size_instruction":"La taille minimale recommandée pour l\'image de l\'avatar est de 150x150 pixels.","export_theme":"Enregistrer le thème","filtering":"Filtrage","filtering_explanation":"Tous les statuts contenant ces mots seront masqués. Un mot par ligne","follow_export":"Exporter les suivis","follow_export_button":"Exporter les suivis dans un fichier CSV","follow_import":"Import des suivis","follow_import_error":"Erreur lors de l\'importation des suivis","follows_imported":"Suivis importés ! Le traitement peut prendre un moment.","foreground":"Premier plan","general":"Général","hide_attachments_in_convo":"Masquer les pièces jointes dans les conversations","hide_attachments_in_tl":"Masquer les pièces jointes dans le flux","hide_muted_posts":"Masquer les statuts des comptes masqués","max_thumbnails":"Nombre maximum de miniatures par statuts","hide_isp":"Masquer le panneau de l\'instance","preload_images":"Précharger les images","use_one_click_nsfw":"Ouvrir les pièces-jointes sensibles avec un seul clic","hide_post_stats":"Masquer les statistiques des messages (ex. le nombre de favoris)","hide_user_stats":"Masquer les statistiques de compte (ex. le nombre de suivis)","hide_filtered_statuses":"Masquer les statuts filtrés","import_blocks_from_a_csv_file":"Import de blocages depuis un fichier CSV","import_followers_from_a_csv_file":"Import de suivis depuis un fichier CSV","import_theme":"Charger le thème","inputRadius":"Champs de texte","checkboxRadius":"Cases à cocher","instance_default":"(default : {value})","instance_default_simple":"(default)","interface":"Interface","interfaceLanguage":"Langue de l\'interface","invalid_theme_imported":"Le fichier sélectionné n\'est pas un thème Pleroma pris en charge. Aucun changement n\'a été apporté à votre thème.","limited_availability":"Non disponible dans votre navigateur","links":"Liens","lock_account_description":"Limitez votre compte aux abonnés acceptés uniquement","loop_video":"Vidéos en boucle","loop_video_silent_only":"Boucle uniquement les vidéos sans le son (les « gifs » de Mastodon)","mutes_tab":"Comptes silenciés","play_videos_in_modal":"Jouer les vidéos directement dans le visionneur de médias","use_contain_fit":"Ne pas rogner les miniatures des pièces-jointes","name":"Nom","name_bio":"Nom & Bio","new_password":"Nouveau mot de passe","notification_visibility":"Types de notifications à afficher","notification_visibility_follows":"Suivis","notification_visibility_likes":"Favoris","notification_visibility_mentions":"Mentionnés","notification_visibility_repeats":"Partages","no_rich_text_description":"Ne formatez pas le texte","no_blocks":"Aucun bloqués","no_mutes":"Aucun masqués","hide_follows_description":"Ne pas afficher à qui je suis abonné","hide_followers_description":"Ne pas afficher qui est abonné à moi","show_admin_badge":"Afficher le badge d\'Admin sur mon profil","show_moderator_badge":"Afficher le badge de Modo\' sur mon profil","nsfw_clickthrough":"Activer le clic pour dévoiler les pièces jointes et cacher l\'aperçu des liens pour les statuts marqués comme sensibles","oauth_tokens":"Jetons OAuth","token":"Jeton","refresh_token":"Rafraichir le jeton","valid_until":"Valable jusque","revoke_token":"Révoquer","panelRadius":"Fenêtres","pause_on_unfocused":"Suspendre le streaming lorsque l\'onglet n\'est pas actif","presets":"Thèmes prédéfinis","profile_background":"Image de fond de profil","profile_banner":"Bannière de profil","profile_tab":"Profil","radii_help":"Vous pouvez ici choisir le niveau d\'arrondi des angles de l\'interface (en pixels)","replies_in_timeline":"Réponses dans le flux","reply_visibility_all":"Montrer toutes les réponses","reply_visibility_following":"Afficher uniquement les réponses adressées à moi ou aux personnes que je suis","reply_visibility_self":"Afficher uniquement les réponses adressées à moi","autohide_floating_post_button":"Automatiquement cacher le bouton de Nouveau Statut (sur mobile)","saving_err":"Erreur lors de l\'enregistrement des paramètres","saving_ok":"Paramètres enregistrés","search_user_to_block":"Rechercher qui vous voulez bloquer","search_user_to_mute":"Rechercher qui vous voulez masquer","security_tab":"Sécurité","scope_copy":"Garder la même visibilité en répondant (les DMs restent toujours des DMs)","minimal_scopes_mode":"Rétrécir les options de séléction de la portée","set_new_avatar":"Changer d\'avatar","set_new_profile_background":"Changer d\'image de fond","set_new_profile_banner":"Changer de bannière","settings":"Paramètres","subject_input_always_show":"Toujours afficher le champ Sujet","subject_line_behavior":"Copier le sujet en répondant","subject_line_email":"Similaire au courriel : « re : sujet »","subject_line_mastodon":"Comme mastodon : copier tel quel","subject_line_noop":"Ne pas copier","post_status_content_type":"Type de contenu du statuts","stop_gifs":"N\'animer les GIFS que lors du survol du curseur de la souris","streaming":"Charger automatiquement les nouveaux statuts lorsque vous êtes au haut de la page","text":"Texte","theme":"Thème","theme_help":"Spécifiez des codes couleur hexadécimaux (#rrvvbb) pour personnaliser les couleurs du thème.","theme_help_v2_1":"Vous pouvez aussi surcharger certaines couleurs de composants et transparence via la case à cocher, utilisez le bouton « Vider tout » pour effacer toutes les surcharges.","theme_help_v2_2":"Les icônes sous certaines des entrées ont un indicateur de contraste du fond/texte, survolez les pour plus d\'informations détailles. Veuillez garder a l\'esprit que lors de l\'utilisation de transparence l\'indicateur de contraste indique le pire des cas.","tooltipRadius":"Info-bulles/alertes","upload_a_photo":"Envoyer une photo","user_settings":"Paramètres utilisateur","values":{"false":"non","true":"oui"},"notifications":"Notifications","notification_mutes":"Pour stopper la récéption de notifications d\'un utilisateur particulier, utilisez un masquage.","notification_blocks":"Bloquer un utilisateur stoppe toute notification et se désabonne de lui.","enable_web_push_notifications":"Activer les notifications de push web","style":{"switcher":{"keep_color":"Garder les couleurs","keep_shadows":"Garder les ombres","keep_opacity":"Garder la transparence","keep_roundness":"Garder la rondeur","keep_fonts":"Garder les polices","save_load_hint":"L\'option « Garder » préserve les options activés en cours lors de la séléction ou chargement des thèmes, il sauve aussi les dites options lors de l\'export d\'un thème. Quand toutes les cases sont décochés, exporter un thème sauvera tout.","reset":"Remise à zéro","clear_all":"Tout vider","clear_opacity":"Vider la transparence","load_theme":"Charger le thème","use_snapshot":"Ancienne version","help":{"upgraded_from_v2":"PleromaFE à été mis à jour, le thème peut être un peu différent que dans vos souvenirs.","v2_imported":"Le fichier que vous avez importé vient d\'une version antérieure. Nous essayons de maximizer la compatibilité mais il peut y avoir quelques incohérences.","future_version_imported":"Le fichier importé viens d\'une version postérieure de PleromaFE.","older_version_imported":"Le fichier importé viens d\'une version antérieure de PleromaFE.","snapshot_source_mismatch":"Conflict de version : Probablement due à un retour arrière puis remise à jour de la version de PleromaFE, si vous avez charger le thème en utilisant une version antérieure vous voulez probablement utiliser la version antérieure, autrement utiliser la version postérieure.","migration_napshot_gone":"Pour une raison inconnue l\'instantané est manquant, des parties peuvent rendre différentes que dans vos souvenirs.","migration_snapshot_ok":"Pour être sûr un instantanée du thème à été chargé. Vos pouvez essayer de charger ses données.","fe_downgraded":"Retour en arrière de la version de PleromaFE.","fe_upgraded":"Le moteur de thème PleromaFE à été mis à jour après un changement de version.","snapshot_missing":"Aucun instantané du thème à été trouvé dans le fichier, il peut y avoir un rendu différent à la vision originelle.","snapshot_present":"Un instantané du thème à été chargé, toutes les valeurs sont dont écrasées. Vous pouvez autrement charger le thème complètement."},"keep_as_is":"Garder tel-quel","use_source":"Nouvelle version"},"common":{"color":"Couleur","opacity":"Transparence","contrast":{"hint":"Le ratio de contraste est {ratio}, il {level} {context}","level":{"aa":"répond aux directives de niveau AA (minimum)","aaa":"répond aux directives de niveau AAA (recommandé)","bad":"ne réponds à aucune directive d\'accessibilité"},"context":{"18pt":"pour texte large (19pt+)","text":"pour texte"}}},"common_colors":{"_tab_label":"Commun","main":"Couleurs communes","foreground_hint":"Voir l\'onglet « Avancé » pour plus de contrôle détaillé","rgbo":"Icônes, accents, badges"},"advanced_colors":{"_tab_label":"Avancé","alert":"Fond d\'alerte","alert_error":"Erreur","badge":"Fond de badge","badge_notification":"Notification","panel_header":"Entête de panneau","top_bar":"Barre du haut","borders":"Bordures","buttons":"Boutons","inputs":"Champs de saisie","faint_text":"Texte en fondu","underlay":"sous-calque","pressed":"Appuyé","alert_warning":"Avertissement","alert_neutral":"Neutre","post":"Messages/Bios des comptes","poll":"Graphique de Sondage","icons":"Icônes","selectedPost":"Message sélectionné","selectedMenu":"Objet sélectionné du menu","disabled":"Désactivé","tabs":"Onglets","toggled":"(Dés)activé","highlight":"Éléments mis en valeur","popover":"Infobulles, menus","chat":{"border":"Bordure","outgoing":"Sortant(s)","incoming":"Entrant(s)"},"wallpaper":"Fond d\'écran"},"radii":{"_tab_label":"Rondeur"},"shadows":{"_tab_label":"Ombres et éclairage","component":"Composant","override":"Surcharger","shadow_id":"Ombre #{value}","blur":"Flou","spread":"Dispersion","inset":"Interne","hint":"Pour les ombres, vous pouvez aussi utiliser --variable comme valeur de couleur en CSS3. Veuillez noter que spécifier la transparence ne fonctionnera pas dans ce cas.","filter_hint":{"always_drop_shadow":"Attention, cette ombre utilise toujours {0} quand le navigateur le supporte.","drop_shadow_syntax":"{0} ne supporte pas le paramètre {1} et mot-clé {2}.","avatar_inset":"Veuillez noter que combiner à la fois les ombres internes et non-internes sur les avatars peut fournir des résultats inattendus avec la transparence des avatars.","spread_zero":"Les ombres avec une dispersion > 0 apparaitrons comme si ils étaient à zéro","inset_classic":"L\'ombre interne utilisera toujours {0}"},"components":{"panel":"Panneau","panelHeader":"En-tête de panneau","topBar":"Barre du haut","avatar":"Avatar utilisateur⋅ice (dans la vue de profil)","avatarStatus":"Avatar utilisateur⋅ice (dans la vue de statuts)","popup":"Popups et infobulles","button":"Bouton","buttonHover":"Bouton (survol)","buttonPressed":"Bouton (cliqué)","buttonPressedHover":"Bouton (cliqué+survol)","input":"Champ de saisie"},"hintV3":"Pour les ombres vous pouvez aussi utiliser la notation {0} pour utiliser un autre emplacement de couleur."},"fonts":{"_tab_label":"Polices","help":"Sélectionnez la police à utiliser pour les éléments de l\'UI. Pour « personnalisé » vous avez à entrer le nom exact de la police comme il apparaît dans le système.","components":{"interface":"Interface","input":"Champs de saisie","post":"Post text","postCode":"Texte à taille fixe dans un article (texte enrichi)"},"family":"Nom de la police","size":"Taille (en px)","weight":"Poid (gras)","custom":"Personnalisé"},"preview":{"header":"Prévisualisation","content":"Contenu","error":"Exemple d\'erreur","button":"Bouton","text":"Un certain nombre de {0} et {1}","mono":"contenu","input":"Je viens juste d’atterrir à L.A.","faint_link":"manuel utile","fine_print":"Lisez notre {0} pour n\'apprendre rien d\'utile !","header_faint":"Tout va bien","checkbox":"J\'ai survolé les conditions d\'utilisation","link":"un petit lien sympa"}},"version":{"title":"Version","backend_version":"Version du Backend","frontend_version":"Version du Frontend"},"change_email":"Changer de courriel","domain_mutes":"Domaines","pad_emoji":"Entourer les émoji d\'espaces après leur sélections","notification_visibility_emoji_reactions":"Réactions","hide_follows_count_description":"Masquer le nombre de suivis","useStreamingApiWarning":"(Non recommandé, expérimental, connu pour rater des messages)","type_domains_to_mute":"Chercher les domaines à masquer","fun":"Rigolo","greentext":"greentexting","allow_following_move":"Activer le suivit automatique à la migration des comptes","change_email_error":"Il y a eu un problème pour changer votre courriel.","changed_email":"Courriel changé avec succès !","discoverable":"Permettre de découvrir ce compte dans les résultats de recherche web et autres services","emoji_reactions_on_timeline":"Montrer les émojis-réactions dans le flux","new_email":"Nouveau courriel","notification_visibility_moves":"Migrations de compte","user_mutes":"Comptes","useStreamingApi":"Recevoir les messages et notifications en temps réel","notification_setting_filters":"Filtres","notification_setting_privacy_option":"Masquer l\'expéditeur et le contenu des notifications push","notification_setting_privacy":"Intimité","hide_followers_count_description":"Masquer le nombre d\'abonnés","accent":"Accent","chatMessageRadius":"Message de chat","bot":"Ce compte est un robot","import_mutes_from_a_csv_file":"Import de masquages depuis un fichier CSV","mutes_imported":"Masquages importés ! Leur application peut prendre du temps.","mute_import_error":"Erreur à l\'import des masquages","mute_import":"Import des masquages","mute_export_button":"Exporter vos masquages dans un fichier CSV","mute_export":"Export des masquages","notification_setting_hide_notification_contents":"Cacher l\'expéditeur et le contenu des notifications push","notification_setting_block_from_strangers":"Bloquer les notifications des utilisateur⋅ice⋅s que vous ne suivez pas","virtual_scrolling":"Optimiser le rendu des flux","reset_background_confirm":"Voulez-vraiment réinitialiser l\'arrière-plan ?","reset_banner_confirm":"Voulez-vraiment réinitialiser la bannière ?","reset_avatar_confirm":"Voulez-vraiment réinitialiser l\'avatar ?","reset_profile_banner":"Réinitialiser la bannière du profil","reset_profile_background":"Réinitialiser le fond du profil","reset_avatar":"Réinitialiser l\'avatar","profile_fields":{"value":"Contenu","name":"Nom du champ","add_field":"Ajouter un champ","label":"Champs du profil"},"hide_media_previews":"Cacher la prévisualisation des pièces jointes","mutes_and_blocks":"Masquage et Blocages","setting_changed":"Préférence modifiée","more_settings":"Plus de préférences","sensitive_by_default":"Marquer les messages comme sensible par défaut","reply_visibility_self_short":"Uniquement les réponses à moi","reply_visibility_following_short":"Montrer les réponses à mes suivis","hide_wallpaper":"Cacher le fond d\'écran","hide_all_muted_posts":"Cacher les messages masqués","word_filter":"Filtrage par mots","save":"Enregistrer les changements","file_export_import":{"backup_settings_theme":"Sauvegarder les paramètres et le thème dans un fichier","errors":{"invalid_file":"Le fichier sélectionné n\'est pas un format supporté pour les sauvegarde Pleroma. Aucun changement n\'a été fait.","file_too_new":"Version majeure incompatible. {fileMajor}, ce PleromaFE ({feMajor}) est trop ancien","file_too_old":"Version majeure incompatible : {fileMajor}, la version du fichier est trop vielle et n\'est plus supportée (vers. min. {feMajor})","file_slightly_new":"La version mineure du fichier est différente, quelques paramètres on pût ne pas chargés"},"backup_restore":"Sauvegarde des Paramètres","backup_settings":"Sauvegarder les paramètres dans un fichier","restore_settings":"Restaurer les paramètres depuis un fichier"},"hide_shoutbox":"Cacher la shoutbox de l\'instance","right_sidebar":"Afficher le paneau latéral à droite"},"timeline":{"collapse":"Fermer","conversation":"Conversation","error_fetching":"Erreur en cherchant les mises à jour","load_older":"Afficher des status plus ancien","no_retweet_hint":"Le message est marqué en abonnés-seulement ou direct et ne peut pas être partagé","repeated":"a partagé","show_new":"Afficher plus","up_to_date":"À jour","no_more_statuses":"Pas plus de statuts","no_statuses":"Aucun statuts","reload":"Recharger","error":"Erreur lors de l\'affichage du flux : {0}","socket_broke":"Connexion temps-réel perdue : CloseEvent code {0}","socket_reconnected":"Connexion temps-réel établie"},"status":{"favorites":"Favoris","repeats":"Partages","delete":"Supprimer statuts","pin":"Agrafer sur le profil","unpin":"Dégrafer du profil","pinned":"Agraffé","delete_confirm":"Voulez-vous vraiment supprimer ce statuts ?","reply_to":"Réponse à","replies_list":"Réponses :","mute_conversation":"Masquer la conversation","unmute_conversation":"Démasquer la conversation","status_unavailable":"Status indisponible","copy_link":"Copier le lien au status","expand":"Développer","nsfw":"Contenu sensible","status_deleted":"Ce post a été effacé","hide_content":"Cacher le contenu","show_content":"Montrer le contenu","hide_full_subject":"Cacher le sujet","show_full_subject":"Montrer le sujet en entier","thread_muted_and_words":", contient les mots :","thread_muted":"Fil de discussion masqué","external_source":"Source externe","unbookmark":"Supprimer des favoris","bookmark":"Ajouter aux favoris"},"user_card":{"approve":"Accepter","block":"Bloquer","blocked":"Bloqué !","deny":"Rejeter","favorites":"Favoris","follow":"Suivre","follow_sent":"Demande envoyée !","follow_progress":"Demande en cours…","follow_unfollow":"Désabonner","followees":"Suivis","followers":"Vous suivent","following":"Suivi !","follows_you":"Vous suit !","its_you":"C\'est vous !","media":"Media","mute":"Masquer","muted":"Masqué","per_day":"par jour","remote_follow":"Suivre d\'une autre instance","report":"Signalement","statuses":"Statuts","unblock":"Débloquer","unblock_progress":"Déblocage…","block_progress":"Blocage…","unmute":"Démasquer","unmute_progress":"Démasquage…","mute_progress":"Masquage…","admin_menu":{"moderation":"Moderation","grant_admin":"Promouvoir Administrateur⋅ice","revoke_admin":"Dégrader Administrateur⋅ice","grant_moderator":"Promouvoir Modérateur⋅ice","revoke_moderator":"Dégrader Modérateur⋅ice","activate_account":"Activer le compte","deactivate_account":"Désactiver le compte","delete_account":"Supprimer le compte","force_nsfw":"Marquer tous les statuts comme NSFW","strip_media":"Supprimer les medias des statuts","force_unlisted":"Forcer les statuts à être délistés","sandbox":"Forcer les statuts à être visibles seuleument pour les abonné⋅e⋅s","disable_remote_subscription":"Interdir de s\'abonner a l\'utilisateur depuis l\'instance distante","disable_any_subscription":"Interdir de s\'abonner à l\'utilisateur tout court","quarantine":"Interdir les statuts de l\'utilisateur à fédérer","delete_user":"Supprimer l\'utilisateur","delete_user_confirmation":"Êtes-vous absolument-sûr⋅e ? Cette action ne peut être annulée."},"mention":"Mention","hidden":"Caché","subscribe":"Abonner","unsubscribe":"Désabonner","hide_repeats":"Cacher les partages","show_repeats":"Montrer les partages","roles":{"moderator":"Modérateur⋅ice","admin":"Administrateur⋅ice"},"message":"Message","highlight":{"disabled":"Sans mise-en-valeur","solid":"Fond uni","side":"Coté rayé","striped":"Fond rayé"},"bot":"Robot","edit_profile":"Éditer le profil"},"user_profile":{"timeline_title":"Flux du compte","profile_does_not_exist":"Désolé, ce profil n\'existe pas.","profile_loading_error":"Désolé, il y a eu une erreur au chargement du profil."},"user_reporting":{"title":"Signaler {0}","add_comment_description":"Ce signalement sera envoyé aux modérateur⋅ice⋅s de votre instance. Vous pouvez fournir une explication de pourquoi vous signalez ce compte ci-dessous :","additional_comments":"Commentaires additionnels","forward_description":"Le compte vient d\'un autre serveur. Envoyer une copie du signalement à celui-ci aussi ?","forward_to":"Transmettre à {0}","submit":"Envoyer","generic_error":"Une erreur est survenue lors du traitement de votre requête."},"who_to_follow":{"more":"Plus","who_to_follow":"À qui s\'abonner"},"tool_tip":{"media_upload":"Envoyer un media","repeat":"Répéter","reply":"Répondre","favorite":"Favoriser","user_settings":"Paramètres utilisateur","add_reaction":"Ajouter une réaction","accept_follow_request":"Accepter la demande de suivit","reject_follow_request":"Rejeter la demande de suivit","bookmark":"Favori"},"upload":{"error":{"base":"L\'envoi a échoué.","file_too_big":"Fichier trop gros [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]","default":"Réessayez plus tard","message":"Envoi échoué : {0}"},"file_size_units":{"B":"o","KiB":"Ko","MiB":"Mo","GiB":"Go","TiB":"To"}},"about":{"mrf":{"keyword":{"reject":"Rejette","replace":"Remplace","keyword_policies":"Filtrage par mots-clés","ftl_removal":"Suppression du flux fédéré","is_replaced_by":"→"},"simple":{"simple_policies":"Politiques par instances","accept":"Acceptées","accept_desc":"Cette instance accepte les messages seulement depuis ces instances :","reject":"Rejetées","reject_desc":"Cette instance n\'acceptera pas de message de ces instances :","quarantine":"Quarantaine","quarantine_desc":"Cette instance enverra seulement des messages publics à ces instances :","ftl_removal_desc":"Cette instance supprime les instance suivantes du flux fédéré :","media_removal":"Suppression des pièce-jointes","media_removal_desc":"Cette instance supprime le contenu multimédia des instances suivantes :","media_nsfw":"Force le contenu multimédia comme sensible","ftl_removal":"Supprimées du flux fédéré","media_nsfw_desc":"Cette instance force les pièce-jointes comme sensible pour les messages des instances suivantes :"},"federation":"Fédération","mrf_policies":"Politiques MRF actives","mrf_policies_desc":"Les politiques MRF modifient la fédération entre les instances. Les politiques suivantes sont activées :"},"staff":"Staff"},"domain_mute_card":{"mute":"Masqué","mute_progress":"Masquage…","unmute":"Démasquer","unmute_progress":"Démasquage…"},"polls":{"add_poll":"Ajouter un Sondage","add_option":"Ajouter une option","option":"Option","votes":"votes","type":"Type de Sondage","single_choice":"Choix unique","multiple_choices":"Choix multiples","expiry":"Age du sondage","expires_in":"Fin du sondage dans {0}","not_enough_options":"Trop peu d\'options unique au sondage","vote":"Voter","expired":"Sondage terminé il y a {0}","people_voted_count":"{count} voteur | {count} voteurs","votes_count":"{count} vote | {count} votes"},"emoji":{"emoji":"Émoji","search_emoji":"Rechercher un émoji","add_emoji":"Insérer un émoji","custom":"émoji personnalisé","unicode":"émoji unicode","load_all":"Charger tout les {emojiAmount} émojis","load_all_hint":"{saneAmount} émojis chargé, charger tout les émojis peuvent causer des problèmes de performances.","stickers":"Stickers","keep_open":"Garder ouvert"},"remote_user_resolver":{"error":"Non trouvé.","searching_for":"Recherche pour","remote_user_resolver":"Résolution de compte distant"},"time":{"minutes_short":"{0}min","second_short":"{0}s","day":"{0} jour","days":"{0} jours","months":"{0} mois","month_short":"{0}m","months_short":"{0}m","now":"tout de suite","now_short":"maintenant","second":"{0} seconde","seconds":"{0} secondes","seconds_short":"{0}s","day_short":"{0}j","days_short":"{0}j","hour":"{0} heure","hours":"{0} heures","hour_short":"{0}h","hours_short":"{0}h","in_future":"dans {0}","in_past":"il y a {0}","minute":"{0} minute","minutes":"{0} minutes","minute_short":"{0}min","month":"{0} mois","week":"{0} semaine","weeks":"{0} semaines","week_short":"{0}s","weeks_short":"{0}s","year":"{0} année","years":"{0} années","year_short":"{0}a","years_short":"{0}a"},"search":{"people":"Comptes","person_talking":"{count} personnes discutant","hashtags":"Mot-dièses","people_talking":"{count} personnes discutant","no_results":"Aucun résultats"},"password_reset":{"forgot_password":"Mot de passe oublié ?","check_email":"Vérifiez vos courriels pour le lien permettant de changer votre mot de passe.","password_reset_disabled":"Le changement de mot de passe est désactivé. Veuillez contacter l\'administration de votre instance.","password_reset_required_but_mailer_is_disabled":"Vous devez changer votre mot de passe mais sont changement est désactivé. Veuillez contacter l’administration de votre instance.","password_reset":"Nouveau mot de passe","instruction":"Entrer votre address de courriel ou votre nom utilisateur. Nous enverrons un lien pour changer votre mot de passe.","placeholder":"Votre email ou nom d\'utilisateur","return_home":"Retourner à la page d\'accueil","too_many_requests":"Vos avez atteint la limite d\'essais, essayez plus tard.","password_reset_required":"Vous devez changer votre mot de passe pour vous authentifier."},"errors":{"storage_unavailable":"Pleroma n\'a pas pu accéder au stockage du navigateur. Votre identifiant ou vos mots de passes ne seront sauvegardés et des problèmes pourront être rencontrés. Essayez d\'activer les cookies."},"shoutbox":{"title":"Shoutbox"},"display_date":{"today":"Aujourd\'hui"},"file_type":{"file":"Fichier","image":"Image","video":"Vidéo","audio":"Audio"},"chats":{"empty_chat_list_placeholder":"Vous n\'avez pas encore de discussions. Démarrez-en une nouvelle !","error_sending_message":"Quelque chose s\'est mal passé pendant l\'envoi du message.","error_loading_chat":"Quelque chose s\'est mal passé au chargement de la discussion.","delete_confirm":"Voulez-vous vraiment effacer ce message ?","more":"Plus","empty_message_error":"Impossible d\'envoyer un message vide","new":"Nouvelle discussion","chats":"Discussions","delete":"Effacer","message_user":"Message à {nickname}","you":"Vous :"}}')}}]); +//# sourceMappingURL=14.4e05e7c284119777ecc5.js.map \ No newline at end of file diff --git a/priv/static/static/js/14.4e05e7c284119777ecc5.js.map b/priv/static/static/js/14.4e05e7c284119777ecc5.js.map new file mode 100644 index 000000000..d219c6115 --- /dev/null +++ b/priv/static/static/js/14.4e05e7c284119777ecc5.js.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/14.4e05e7c284119777ecc5.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/14.a2b9acaf9caa95d1fd7f.js b/priv/static/static/js/14.a2b9acaf9caa95d1fd7f.js deleted file mode 100644 index 9111373a2..000000000 --- a/priv/static/static/js/14.a2b9acaf9caa95d1fd7f.js +++ /dev/null @@ -1,2 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{594:function(e){e.exports=JSON.parse('{"chat":{"title":"Chat"},"exporter":{"export":"Exporter","processing":"En cours de traitement, vous pourrez bientôt télécharger votre fichier"},"features_panel":{"chat":"Chat","gopher":"Gopher","media_proxy":"Proxy pièce-jointes","scope_options":"Options de visibilité","text_limit":"Limite du texte","title":"Fonctionnalités","who_to_follow":"Suggestions de suivis","pleroma_chat_messages":"Chat Pleroma","upload_limit":"Limite de téléversement"},"finder":{"error_fetching_user":"Erreur lors de la recherche du compte","find_user":"Rechercher un compte"},"general":{"apply":"Appliquer","submit":"Envoyer","more":"Plus","generic_error":"Une erreur s\'est produite","optional":"optionnel","show_more":"Afficher plus","show_less":"Afficher moins","cancel":"Annuler","disable":"Désactiver","enable":"Activer","confirm":"Confirmer","verify":"Vérifier","dismiss":"Ignorer","peek":"Jeter un coup d\'œil","close":"Fermer","retry":"Réessayez","error_retry":"Veuillez réessayer","loading":"Chargement…","role":{"moderator":"Modo\'","admin":"Admin"}},"image_cropper":{"crop_picture":"Rogner l\'image","save":"Sauvegarder","save_without_cropping":"Sauvegarder sans rogner","cancel":"Annuler"},"importer":{"submit":"Envoyer","success":"Importé avec succès.","error":"Une erreur est survenue pendant l\'import de ce fichier."},"login":{"login":"Connexion","description":"Connexion avec OAuth","logout":"Déconnexion","password":"Mot de passe","placeholder":"ex. lain","register":"S\'inscrire","username":"Identifiant","hint":"Connectez-vous pour rejoindre la discussion","authentication_code":"Code d\'authentification","enter_recovery_code":"Entrez un code de récupération","enter_two_factor_code":"Entrez un code double-facteur","recovery_code":"Code de récupération","heading":{"totp":"Authentification à double-facteur","recovery":"Récupération de l\'authentification à double-facteur"}},"media_modal":{"previous":"Précédent","next":"Suivant"},"nav":{"about":"À propos","back":"Retour","chat":"Chat local","friend_requests":"Demandes de suivi","mentions":"Mentions","interactions":"Interactions","dms":"Messages directs","public_tl":"Flux publique","timeline":"Flux personnel","twkn":"Réseau connu","user_search":"Recherche de comptes","who_to_follow":"Suggestion de suivit","preferences":"Préférences","search":"Recherche","administration":"Administration","chats":"Chats","bookmarks":"Marques-Pages","timelines":"Flux","home_timeline":"Flux personnel"},"notifications":{"broken_favorite":"Message inconnu, recherche en cours…","favorited_you":"a aimé votre statut","followed_you":"vous suit","load_older":"Charger les notifications précédentes","notifications":"Notifications","read":"Lu !","repeated_you":"a partagé votre statut","no_more_notifications":"Aucune notification supplémentaire","migrated_to":"a migré à","reacted_with":"a réagi avec {0}","follow_request":"veut vous suivre","error":"Erreur de chargement des notifications : {0}"},"interactions":{"favs_repeats":"Partages et favoris","follows":"Nouveaux suivis","load_older":"Chargez d\'anciennes interactions","moves":"Migrations de comptes"},"post_status":{"new_status":"Poster un nouveau statut","account_not_locked_warning":"Votre compte n\'est pas {0}. N\'importe qui peut vous suivre pour voir vos billets en Abonné·e·s uniquement.","account_not_locked_warning_link":"verrouillé","attachments_sensitive":"Marquer les pièce-jointes comme sensible","content_type":{"text/plain":"Texte brut","text/html":"HTML","text/markdown":"Markdown","text/bbcode":"BBCode"},"content_warning":"Sujet (optionnel)","default":"Je viens d\'atterrir en Tchéquie.","direct_warning_to_all":"Ce message sera visible pour toutes les personnes mentionnées.","direct_warning_to_first_only":"Ce message sera visible uniquement pour personnes mentionnées au début du message.","posting":"Envoi en cours","scope_notice":{"public":"Ce statut sera visible par tout le monde","private":"Ce statut sera visible par seulement vos abonné⋅e⋅s","unlisted":"Ce statut ne sera pas visible dans le Flux Public et le Flux Fédéré"},"scope":{"direct":"Direct - N\'envoyer qu\'aux personnes mentionnées","private":"Abonné·e·s uniquement - Seul·e·s vos abonné·e·s verront vos status","public":"Publique - Afficher dans les flux publics","unlisted":"Non-Listé - Ne pas afficher dans les flux publics"},"media_description_error":"Échec de téléversement du media, essayez encore","empty_status_error":"Impossible de poster un statut vide sans pièces-jointes","preview_empty":"Vide","preview":"Prévisualisation","media_description":"Description de la pièce-jointe","post":"Post"},"registration":{"bio":"Biographie","email":"Courriel","fullname":"Pseudonyme","password_confirm":"Confirmation du mot de passe","registration":"Inscription","token":"Jeton d\'invitation","captcha":"CAPTCHA","new_captcha":"Cliquez sur l\'image pour avoir un nouveau captcha","username_placeholder":"ex. lain","fullname_placeholder":"ex. Lain Iwakura","bio_placeholder":"ex.\\nSalut, je suis Lain\\nJe suis une héroïne d\'animation qui vit dans une banlieue japonaise. Vous me connaissez peut-être du Wired.","validations":{"username_required":"ne peut pas être laissé vide","fullname_required":"ne peut pas être laissé vide","email_required":"ne peut pas être laissé vide","password_required":"ne peut pas être laissé vide","password_confirmation_required":"ne peut pas être laissé vide","password_confirmation_match":"doit être identique au mot de passe"},"reason_placeholder":"Cette instance modère les inscriptions manuellement.\\nExpliquer ce qui motive votre inscription à l\'administration.","reason":"Motivation d\'inscription","register":"Enregistrer"},"selectable_list":{"select_all":"Tout selectionner"},"settings":{"app_name":"Nom de l\'application","security":"Sécurité","enter_current_password_to_confirm":"Entrez votre mot de passe actuel pour confirmer votre identité","mfa":{"otp":"OTP","setup_otp":"Configurer OTP","wait_pre_setup_otp":"préconfiguration OTP","confirm_and_enable":"Confirmer & activer OTP","title":"Authentification double-facteur","generate_new_recovery_codes":"Générer de nouveaux codes de récupération","warning_of_generate_new_codes":"Quand vous générez de nouveaux codes de récupération, vos anciens codes ne fonctionnerons plus.","recovery_codes":"Codes de récupération.","waiting_a_recovery_codes":"Réception des codes de récupération…","recovery_codes_warning":"Écrivez ces codes ou sauvegardez les dans un endroit sécurisé - sinon vous ne les verrez plus jamais. Si vous perdez l\'accès à votre application de double authentification et codes de récupération vous serez verrouillé en dehors de votre compte.","authentication_methods":"Méthodes d\'authentification","scan":{"title":"Scanner","desc":"En utilisant votre application d\'authentification à double-facteur, scannez ce QR code ou entrez la clé textuelle :","secret_code":"Clé"},"verify":{"desc":"Pour activer l\'authentification à double-facteur, entrez le code donné par votre application :"}},"attachmentRadius":"Pièces jointes","attachments":"Pièces jointes","avatar":"Avatar","avatarAltRadius":"Avatars (Notifications)","avatarRadius":"Avatars","background":"Arrière-plan","bio":"Biographie","block_export":"Export des comptes bloqués","block_export_button":"Export des comptes bloqués vers un fichier CSV","block_import":"Import des comptes bloqués","block_import_error":"Erreur lors de l\'import des comptes bloqués","blocks_imported":"Blocages importés ! Le traitement va prendre un moment.","blocks_tab":"Bloqué·e·s","btnRadius":"Boutons","cBlue":"Bleu (répondre, suivre)","cGreen":"Vert (partager)","cOrange":"Orange (aimer)","cRed":"Rouge (annuler)","change_password":"Changez votre mot de passe","change_password_error":"Il y a eu un problème pour changer votre mot de passe.","changed_password":"Mot de passe modifié avec succès !","collapse_subject":"Réduire les messages avec des sujets","composing":"Composition","confirm_new_password":"Confirmation du nouveau mot de passe","current_avatar":"Avatar actuel","current_password":"Mot de passe actuel","current_profile_banner":"Bannière de profil actuelle","data_import_export_tab":"Import / Export des Données","default_vis":"Visibilité par défaut","delete_account":"Supprimer le compte","delete_account_description":"Supprimer définitivement vos données et désactiver votre compte.","delete_account_error":"Il y a eu un problème lors de la tentative de suppression de votre compte. Si le problème persiste, contactez l\'administration de cette instance.","delete_account_instructions":"Indiquez votre mot de passe ci-dessous pour confirmer la suppression de votre compte.","avatar_size_instruction":"La taille minimale recommandée pour l\'image de l\'avatar est de 150x150 pixels.","export_theme":"Enregistrer le thème","filtering":"Filtrage","filtering_explanation":"Tous les statuts contenant ces mots seront masqués. Un mot par ligne","follow_export":"Exporter les suivis","follow_export_button":"Exporter les suivis dans un fichier CSV","follow_import":"Import des suivis","follow_import_error":"Erreur lors de l\'importation des suivis","follows_imported":"Suivis importés ! Le traitement peut prendre un moment.","foreground":"Premier plan","general":"Général","hide_attachments_in_convo":"Masquer les pièces jointes dans les conversations","hide_attachments_in_tl":"Masquer les pièces jointes dans le flux","hide_muted_posts":"Masquer les statuts des comptes masqués","max_thumbnails":"Nombre maximum de miniatures par statuts","hide_isp":"Masquer le panneau de l\'instance","preload_images":"Précharger les images","use_one_click_nsfw":"Ouvrir les pièces-jointes sensibles avec un seul clic","hide_post_stats":"Masquer les statistiques des messages (ex. le nombre de favoris)","hide_user_stats":"Masquer les statistiques de compte (ex. le nombre de suivis)","hide_filtered_statuses":"Masquer les statuts filtrés","import_blocks_from_a_csv_file":"Import de blocages depuis un fichier CSV","import_followers_from_a_csv_file":"Import de suivis depuis un fichier CSV","import_theme":"Charger le thème","inputRadius":"Champs de texte","checkboxRadius":"Cases à cocher","instance_default":"(default : {value})","instance_default_simple":"(default)","interface":"Interface","interfaceLanguage":"Langue de l\'interface","invalid_theme_imported":"Le fichier sélectionné n\'est pas un thème Pleroma pris en charge. Aucun changement n\'a été apporté à votre thème.","limited_availability":"Non disponible dans votre navigateur","links":"Liens","lock_account_description":"Limitez votre compte aux abonnés acceptés uniquement","loop_video":"Vidéos en boucle","loop_video_silent_only":"Boucle uniquement les vidéos sans le son (les « gifs » de Mastodon)","mutes_tab":"Comptes silenciés","play_videos_in_modal":"Jouer les vidéos directement dans le visionneur de médias","use_contain_fit":"Ne pas rogner les miniatures des pièces-jointes","name":"Nom","name_bio":"Nom & Bio","new_password":"Nouveau mot de passe","notification_visibility":"Types de notifications à afficher","notification_visibility_follows":"Suivis","notification_visibility_likes":"J\'aime","notification_visibility_mentions":"Mentionnés","notification_visibility_repeats":"Partages","no_rich_text_description":"Ne formatez pas le texte","no_blocks":"Aucun bloqués","no_mutes":"Aucun masqués","hide_follows_description":"Ne pas afficher à qui je suis abonné","hide_followers_description":"Ne pas afficher qui est abonné à moi","show_admin_badge":"Afficher le badge d\'Admin sur mon profil","show_moderator_badge":"Afficher le badge de Modo\' sur mon profil","nsfw_clickthrough":"Activer le clic pour dévoiler les pièces jointes et cacher l\'aperçu des liens pour les statuts marqués comme sensibles","oauth_tokens":"Jetons OAuth","token":"Jeton","refresh_token":"Rafraichir le jeton","valid_until":"Valable jusque","revoke_token":"Révoquer","panelRadius":"Fenêtres","pause_on_unfocused":"Suspendre le streaming lorsque l\'onglet n\'est pas actif","presets":"Thèmes prédéfinis","profile_background":"Image de fond de profil","profile_banner":"Bannière de profil","profile_tab":"Profil","radii_help":"Vous pouvez ici choisir le niveau d\'arrondi des angles de l\'interface (en pixels)","replies_in_timeline":"Réponses dans le flux","reply_visibility_all":"Montrer toutes les réponses","reply_visibility_following":"Afficher uniquement les réponses adressées à moi ou aux personnes que je suis","reply_visibility_self":"Afficher uniquement les réponses adressées à moi","autohide_floating_post_button":"Automatiquement cacher le bouton de Nouveau Statut (sur mobile)","saving_err":"Erreur lors de l\'enregistrement des paramètres","saving_ok":"Paramètres enregistrés","search_user_to_block":"Rechercher qui vous voulez bloquer","search_user_to_mute":"Rechercher qui vous voulez masquer","security_tab":"Sécurité","scope_copy":"Garder la même visibilité en répondant (les DMs restent toujours des DMs)","minimal_scopes_mode":"Rétrécir les options de séléction de la portée","set_new_avatar":"Changer d\'avatar","set_new_profile_background":"Changer d\'image de fond","set_new_profile_banner":"Changer de bannière","settings":"Paramètres","subject_input_always_show":"Toujours afficher le champ Sujet","subject_line_behavior":"Copier le sujet en répondant","subject_line_email":"Similaire au courriel : « re : sujet »","subject_line_mastodon":"Comme mastodon : copier tel quel","subject_line_noop":"Ne pas copier","post_status_content_type":"Type de contenu du statuts","stop_gifs":"N\'animer les GIFS que lors du survol du curseur de la souris","streaming":"Charger automatiquement les nouveaux statuts lorsque vous êtes au haut de la page","text":"Texte","theme":"Thème","theme_help":"Spécifiez des codes couleur hexadécimaux (#rrvvbb) pour personnaliser les couleurs du thème.","theme_help_v2_1":"Vous pouvez aussi surcharger certaines couleurs de composants et transparence via la case à cocher, utilisez le bouton « Vider tout » pour effacer toutes les surcharges.","theme_help_v2_2":"Les icônes sous certaines des entrées ont un indicateur de contraste du fond/texte, survolez les pour plus d\'informations détailles. Veuillez garder a l\'esprit que lors de l\'utilisation de transparence l\'indicateur de contraste indique le pire des cas.","tooltipRadius":"Info-bulles/alertes","upload_a_photo":"Envoyer une photo","user_settings":"Paramètres utilisateur","values":{"false":"non","true":"oui"},"notifications":"Notifications","notification_mutes":"Pour stopper la récéption de notifications d\'un utilisateur particulier, utilisez un masquage.","notification_blocks":"Bloquer un utilisateur stoppe toute notification et se désabonne de lui.","enable_web_push_notifications":"Activer les notifications de push web","style":{"switcher":{"keep_color":"Garder les couleurs","keep_shadows":"Garder les ombres","keep_opacity":"Garder la transparence","keep_roundness":"Garder la rondeur","keep_fonts":"Garder les polices","save_load_hint":"L\'option « Garder » préserve les options activés en cours lors de la séléction ou chargement des thèmes, il sauve aussi les dites options lors de l\'export d\'un thème. Quand toutes les cases sont décochés, exporter un thème sauvera tout.","reset":"Remise à zéro","clear_all":"Tout vider","clear_opacity":"Vider la transparence","load_theme":"Charger le thème","use_snapshot":"Ancienne version","help":{"upgraded_from_v2":"PleromaFE à été mis à jour, le thème peut être un peu différent que dans vos souvenirs.","v2_imported":"Le fichier que vous avez importé vient d\'une version antérieure. Nous essayons de maximizer la compatibilité mais il peut y avoir quelques incohérences.","future_version_imported":"Le fichier importé viens d\'une version postérieure de PleromaFE.","older_version_imported":"Le fichier importé viens d\'une version antérieure de PleromaFE.","snapshot_source_mismatch":"Conflict de version : Probablement due à un retour arrière puis remise à jour de la version de PleromaFE, si vous avez charger le thème en utilisant une version antérieure vous voulez probablement utiliser la version antérieure, autrement utiliser la version postérieure.","migration_napshot_gone":"Pour une raison inconnue l\'instantané est manquant, des parties peuvent rendre différentes que dans vos souvenirs.","migration_snapshot_ok":"Pour être sûr un instantanée du thème à été chargé. Vos pouvez essayer de charger ses données.","fe_downgraded":"Retour en arrière de la version de PleromaFE.","fe_upgraded":"Le moteur de thème PleromaFE à été mis à jour après un changement de version.","snapshot_missing":"Aucun instantané du thème à été trouvé dans le fichier, il peut y avoir un rendu différent à la vision originelle.","snapshot_present":"Un instantané du thème à été chargé, toutes les valeurs sont dont écrasées. Vous pouvez autrement charger le thème complètement."},"keep_as_is":"Garder tel-quel","use_source":"Nouvelle version"},"common":{"color":"Couleur","opacity":"Transparence","contrast":{"hint":"Le ratio de contraste est {ratio}, il {level} {context}","level":{"aa":"répond aux directives de niveau AA (minimum)","aaa":"répond aux directives de niveau AAA (recommandé)","bad":"ne réponds à aucune directive d\'accessibilité"},"context":{"18pt":"pour texte large (19pt+)","text":"pour texte"}}},"common_colors":{"_tab_label":"Commun","main":"Couleurs communes","foreground_hint":"Voir l\'onglet « Avancé » pour plus de contrôle détaillé","rgbo":"Icônes, accents, badges"},"advanced_colors":{"_tab_label":"Avancé","alert":"Fond d\'alerte","alert_error":"Erreur","badge":"Fond de badge","badge_notification":"Notification","panel_header":"Entête de panneau","top_bar":"Barre du haut","borders":"Bordures","buttons":"Boutons","inputs":"Champs de saisie","faint_text":"Texte en fondu","underlay":"sous-calque","pressed":"Appuyé","alert_warning":"Avertissement","alert_neutral":"Neutre","post":"Messages/Bios des comptes","poll":"Graphique de Sondage","icons":"Icônes","selectedPost":"Message sélectionné","selectedMenu":"Objet sélectionné du menu","disabled":"Désactivé","tabs":"Onglets","toggled":"(Dés)activé","highlight":"Éléments mis en valeur","popover":"Infobulles, menus","chat":{"border":"Bordure","outgoing":"Sortant(s)","incoming":"Entrant(s)"},"wallpaper":"Fond d\'écran"},"radii":{"_tab_label":"Rondeur"},"shadows":{"_tab_label":"Ombres et éclairage","component":"Composant","override":"Surcharger","shadow_id":"Ombre #{value}","blur":"Flou","spread":"Dispersion","inset":"Interne","hint":"Pour les ombres, vous pouvez aussi utiliser --variable comme valeur de couleur en CSS3. Veuillez noter que spécifier la transparence ne fonctionnera pas dans ce cas.","filter_hint":{"always_drop_shadow":"Attention, cette ombre utilise toujours {0} quand le navigateur le supporte.","drop_shadow_syntax":"{0} ne supporte pas le paramètre {1} et mot-clé {2}.","avatar_inset":"Veuillez noter que combiner à la fois les ombres internes et non-internes sur les avatars peut fournir des résultats inattendus avec la transparence des avatars.","spread_zero":"Les ombres avec une dispersion > 0 apparaitrons comme si ils étaient à zéro","inset_classic":"L\'ombre interne utilisera toujours {0}"},"components":{"panel":"Panneau","panelHeader":"En-tête de panneau","topBar":"Barre du haut","avatar":"Avatar utilisateur⋅ice (dans la vue de profil)","avatarStatus":"Avatar utilisateur⋅ice (dans la vue de statuts)","popup":"Popups et infobulles","button":"Bouton","buttonHover":"Bouton (survol)","buttonPressed":"Bouton (cliqué)","buttonPressedHover":"Bouton (cliqué+survol)","input":"Champ de saisie"},"hintV3":"Pour les ombres vous pouvez aussi utiliser la notation {0} pour utiliser un autre emplacement de couleur."},"fonts":{"_tab_label":"Polices","help":"Sélectionnez la police à utiliser pour les éléments de l\'UI. Pour « personnalisé » vous avez à entrer le nom exact de la police comme il apparaît dans le système.","components":{"interface":"Interface","input":"Champs de saisie","post":"Post text","postCode":"Texte à taille fixe dans un article (texte enrichi)"},"family":"Nom de la police","size":"Taille (en px)","weight":"Poid (gras)","custom":"Personnalisé"},"preview":{"header":"Prévisualisation","content":"Contenu","error":"Exemple d\'erreur","button":"Bouton","text":"Un certain nombre de {0} et {1}","mono":"contenu","input":"Je viens juste d’atterrir à L.A.","faint_link":"manuel utile","fine_print":"Lisez notre {0} pour n\'apprendre rien d\'utile !","header_faint":"Tout va bien","checkbox":"J\'ai survolé les conditions d\'utilisation","link":"un petit lien sympa"}},"version":{"title":"Version","backend_version":"Version du Backend","frontend_version":"Version du Frontend"},"change_email":"Changer de courriel","domain_mutes":"Domaines","pad_emoji":"Entourer les émoji d\'espaces après leur sélections","notification_visibility_emoji_reactions":"Réactions","hide_follows_count_description":"Masquer le nombre de suivis","useStreamingApiWarning":"(Non recommandé, expérimental, connu pour rater des messages)","type_domains_to_mute":"Chercher les domaines à masquer","fun":"Rigolo","greentext":"greentexting","allow_following_move":"Activer le suivit automatique à la migration des comptes","change_email_error":"Il y a eu un problème pour changer votre courriel.","changed_email":"Courriel changé avec succès !","discoverable":"Permettre de découvrir ce compte dans les résultats de recherche web et autres services","emoji_reactions_on_timeline":"Montrer les émojis-réactions dans le flux","new_email":"Nouveau courriel","notification_visibility_moves":"Migrations de compte","user_mutes":"Comptes","useStreamingApi":"Recevoir les messages et notifications en temps réel","notification_setting_filters":"Filtres","notification_setting_privacy_option":"Masquer l\'expéditeur et le contenu des notifications push","notification_setting_privacy":"Intimité","hide_followers_count_description":"Masquer le nombre d\'abonnés","accent":"Accent","chatMessageRadius":"Message de chat","bot":"Ce compte est un robot","import_mutes_from_a_csv_file":"Import de masquages depuis un fichier CSV","mutes_imported":"Masquages importés ! Leur application peut prendre du temps.","mute_import_error":"Erreur à l\'import des masquages","mute_import":"Import des masquages","mute_export_button":"Exporter vos masquages dans un fichier CSV","mute_export":"Export des masquages","notification_setting_hide_notification_contents":"Cacher l\'expéditeur et le contenu des notifications push","notification_setting_block_from_strangers":"Bloquer les notifications des utilisateur⋅ice⋅s que vous ne suivez pas","virtual_scrolling":"Optimiser le rendu des flux","reset_background_confirm":"Voulez-vraiment réinitialiser l\'arrière-plan ?","reset_banner_confirm":"Voulez-vraiment réinitialiser la bannière ?","reset_avatar_confirm":"Voulez-vraiment réinitialiser l\'avatar ?","reset_profile_banner":"Réinitialiser la bannière du profil","reset_profile_background":"Réinitialiser le fond du profil","reset_avatar":"Réinitialiser l\'avatar","profile_fields":{"value":"Contenu","name":"Nom du champ","add_field":"Ajouter un champ","label":"Champs du profil"},"hide_media_previews":"Cacher la prévisualisation des pièces jointes","mutes_and_blocks":"Masquage et Blocages","setting_changed":"Préférence modifiée","more_settings":"Plus de préférences","sensitive_by_default":"Marquer les messages comme sensible par défaut","reply_visibility_self_short":"Uniquement les réponses à moi","reply_visibility_following_short":"Montrer les réponses à mes suivis","hide_wallpaper":"Cacher le fond d\'écran","hide_all_muted_posts":"Cacher les messages masqués","word_filter":"Filtrage par mots","save":"Enregistrer les changements"},"timeline":{"collapse":"Fermer","conversation":"Conversation","error_fetching":"Erreur en cherchant les mises à jour","load_older":"Afficher des status plus ancien","no_retweet_hint":"Le message est marqué en abonnés-seulement ou direct et ne peut pas être partagé","repeated":"a partagé","show_new":"Afficher plus","up_to_date":"À jour","no_more_statuses":"Pas plus de statuts","no_statuses":"Aucun statuts","reload":"Recharger","error":"Erreur lors de l\'affichage du flux : {0}","socket_broke":"Connexion temps-réel perdue : CloseEvent code {0}","socket_reconnected":"Connexion temps-réel établie"},"status":{"favorites":"Favoris","repeats":"Partages","delete":"Supprimer statuts","pin":"Agrafer sur le profil","unpin":"Dégrafer du profil","pinned":"Agraffé","delete_confirm":"Voulez-vous vraiment supprimer ce statuts ?","reply_to":"Réponse à","replies_list":"Réponses :","mute_conversation":"Masquer la conversation","unmute_conversation":"Démasquer la conversation","status_unavailable":"Status indisponible","copy_link":"Copier le lien au status","expand":"Développer","nsfw":"Contenu sensible","status_deleted":"Ce post a été effacé","hide_content":"Cacher le contenu","show_content":"Montrer le contenu","hide_full_subject":"Cacher le sujet","show_full_subject":"Montrer le sujet en entier","thread_muted_and_words":", contient les mots :","thread_muted":"Fil de discussion masqué","external_source":"Source externe","unbookmark":"Supprimer des favoris","bookmark":"Ajouter aux favoris"},"user_card":{"approve":"Accepter","block":"Bloquer","blocked":"Bloqué !","deny":"Rejeter","favorites":"Favoris","follow":"Suivre","follow_sent":"Demande envoyée !","follow_progress":"Demande en cours…","follow_again":"Renvoyer la demande ?","follow_unfollow":"Désabonner","followees":"Suivis","followers":"Vous suivent","following":"Suivi !","follows_you":"Vous suit !","its_you":"C\'est vous !","media":"Media","mute":"Masquer","muted":"Masqué","per_day":"par jour","remote_follow":"Suivre d\'une autre instance","report":"Signalement","statuses":"Statuts","unblock":"Débloquer","unblock_progress":"Déblocage…","block_progress":"Blocage…","unmute":"Démasquer","unmute_progress":"Démasquage…","mute_progress":"Masquage…","admin_menu":{"moderation":"Moderation","grant_admin":"Promouvoir Administrateur⋅ice","revoke_admin":"Dégrader Administrateur⋅ice","grant_moderator":"Promouvoir Modérateur⋅ice","revoke_moderator":"Dégrader Modérateur⋅ice","activate_account":"Activer le compte","deactivate_account":"Désactiver le compte","delete_account":"Supprimer le compte","force_nsfw":"Marquer tous les statuts comme NSFW","strip_media":"Supprimer les medias des statuts","force_unlisted":"Forcer les statuts à être délistés","sandbox":"Forcer les statuts à être visibles seuleument pour les abonné⋅e⋅s","disable_remote_subscription":"Interdir de s\'abonner a l\'utilisateur depuis l\'instance distante","disable_any_subscription":"Interdir de s\'abonner à l\'utilisateur tout court","quarantine":"Interdir les statuts de l\'utilisateur à fédérer","delete_user":"Supprimer l\'utilisateur","delete_user_confirmation":"Êtes-vous absolument-sûr⋅e ? Cette action ne peut être annulée."},"mention":"Mention","hidden":"Caché","subscribe":"Abonner","unsubscribe":"Désabonner","hide_repeats":"Cacher les partages","show_repeats":"Montrer les partages","roles":{"moderator":"Modérateur⋅ice","admin":"Administrateur⋅ice"},"message":"Message","highlight":{"disabled":"Sans mise-en-valeur","solid":"Fond uni","side":"Coté rayé","striped":"Fond rayé"},"bot":"Robot"},"user_profile":{"timeline_title":"Flux du compte","profile_does_not_exist":"Désolé, ce profil n\'existe pas.","profile_loading_error":"Désolé, il y a eu une erreur au chargement du profil."},"user_reporting":{"title":"Signaler {0}","add_comment_description":"Ce signalement sera envoyé aux modérateur⋅ice⋅s de votre instance. Vous pouvez fournir une explication de pourquoi vous signalez ce compte ci-dessous :","additional_comments":"Commentaires additionnels","forward_description":"Le compte vient d\'un autre serveur. Envoyer une copie du signalement à celui-ci aussi ?","forward_to":"Transmettre à {0}","submit":"Envoyer","generic_error":"Une erreur est survenue lors du traitement de votre requête."},"who_to_follow":{"more":"Plus","who_to_follow":"À qui s\'abonner"},"tool_tip":{"media_upload":"Envoyer un media","repeat":"Répéter","reply":"Répondre","favorite":"Favoriser","user_settings":"Paramètres utilisateur","add_reaction":"Ajouter une réaction","accept_follow_request":"Accepter la demande de suivit","reject_follow_request":"Rejeter la demande de suivit","bookmark":"Favori"},"upload":{"error":{"base":"L\'envoi a échoué.","file_too_big":"Fichier trop gros [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]","default":"Réessayez plus tard","message":"Envoi échoué : {0}"},"file_size_units":{"B":"o","KiB":"Ko","MiB":"Mo","GiB":"Go","TiB":"To"}},"about":{"mrf":{"keyword":{"reject":"Rejette","replace":"Remplace","keyword_policies":"Filtrage par mots-clés","ftl_removal":"Suppression du flux fédéré","is_replaced_by":"→"},"simple":{"simple_policies":"Politiques par instances","accept":"Acceptées","accept_desc":"Cette instance accepte les messages seulement depuis ces instances :","reject":"Rejetées","reject_desc":"Cette instance n\'acceptera pas de message de ces instances :","quarantine":"Quarantaine","quarantine_desc":"Cette instance enverra seulement des messages publics à ces instances :","ftl_removal_desc":"Cette instance supprime les instance suivantes du flux fédéré :","media_removal":"Suppression des pièce-jointes","media_removal_desc":"Cette instance supprime le contenu multimédia des instances suivantes :","media_nsfw":"Force le contenu multimédia comme sensible","ftl_removal":"Supprimées du flux fédéré","media_nsfw_desc":"Cette instance force les pièce-jointes comme sensible pour les messages des instances suivantes :"},"federation":"Fédération","mrf_policies":"Politiques MRF actives","mrf_policies_desc":"Les politiques MRF modifient la fédération entre les instances. Les politiques suivantes sont activées :"},"staff":"Staff"},"domain_mute_card":{"mute":"Masqué","mute_progress":"Masquage…","unmute":"Démasquer","unmute_progress":"Démasquage…"},"polls":{"add_poll":"Ajouter un Sondage","add_option":"Ajouter une option","option":"Option","votes":"votes","type":"Type de Sondage","single_choice":"Choix unique","multiple_choices":"Choix multiples","expiry":"Age du sondage","expires_in":"Fin du sondage dans {0}","not_enough_options":"Trop peu d\'options unique au sondage","vote":"Voter","expired":"Sondage terminé il y a {0}","people_voted_count":"{count} voteur | {count} voteurs","votes_count":"{count} vote | {count} votes"},"emoji":{"emoji":"Émoji","search_emoji":"Rechercher un émoji","add_emoji":"Insérer un émoji","custom":"émoji personnalisé","unicode":"émoji unicode","load_all":"Charger tout les {emojiAmount} émojis","load_all_hint":"{saneAmount} émojis chargé, charger tout les émojis peuvent causer des problèmes de performances.","stickers":"Stickers","keep_open":"Garder ouvert"},"remote_user_resolver":{"error":"Non trouvé.","searching_for":"Recherche pour","remote_user_resolver":"Résolution de compte distant"},"time":{"minutes_short":"{0}min","second_short":"{0}s","day":"{0} jour","days":"{0} jours","months":"{0} mois","month_short":"{0}m","months_short":"{0}m","now":"tout de suite","now_short":"maintenant","second":"{0} seconde","seconds":"{0} secondes","seconds_short":"{0}s","day_short":"{0}j","days_short":"{0}j","hour":"{0} heure","hours":"{0} heures","hour_short":"{0}h","hours_short":"{0}h","in_future":"dans {0}","in_past":"il y a {0}","minute":"{0} minute","minutes":"{0} minutes","minute_short":"{0}min","month":"{0} mois","week":"{0} semaine","weeks":"{0} semaines","week_short":"{0}s","weeks_short":"{0}s","year":"{0} année","years":"{0} années","year_short":"{0}a","years_short":"{0}a"},"search":{"people":"Comptes","person_talking":"{count} personnes discutant","hashtags":"Mot-dièses","people_talking":"{count} personnes discutant","no_results":"Aucun résultats"},"password_reset":{"forgot_password":"Mot de passe oublié ?","check_email":"Vérifiez vos courriels pour le lien permettant de changer votre mot de passe.","password_reset_disabled":"Le changement de mot de passe est désactivé. Veuillez contacter l\'administration de votre instance.","password_reset_required_but_mailer_is_disabled":"Vous devez changer votre mot de passe mais sont changement est désactivé. Veuillez contacter l’administration de votre instance.","password_reset":"Nouveau mot de passe","instruction":"Entrer votre address de courriel ou votre nom utilisateur. Nous enverrons un lien pour changer votre mot de passe.","placeholder":"Votre email ou nom d\'utilisateur","return_home":"Retourner à la page d\'accueil","too_many_requests":"Vos avez atteint la limite d\'essais, essayez plus tard.","password_reset_required":"Vous devez changer votre mot de passe pour vous authentifier."},"errors":{"storage_unavailable":"Pleroma n\'a pas pu accéder au stockage du navigateur. Votre identifiant ou vos mots de passes ne seront sauvegardés et des problèmes pourront être rencontrés. Essayez d\'activer les cookies."},"shoutbox":{"title":"Shoutbox"},"display_date":{"today":"Aujourd\'hui"},"file_type":{"file":"Fichier","image":"Image","video":"Vidéo","audio":"Audio"},"chats":{"empty_chat_list_placeholder":"Vous n\'avez pas encore de discussions. Démarrez-en une nouvelle !","error_sending_message":"Quelque chose s\'est mal passé pendant l\'envoi du message.","error_loading_chat":"Quelque chose s\'est mal passé au chargement de la discussion.","delete_confirm":"Voulez-vous vraiment effacer ce message ?","more":"Plus","empty_message_error":"Impossible d\'envoyer un message vide","new":"Nouvelle discussion","chats":"Discussions","delete":"Effacer","message_user":"Message à {nickname}","you":"Vous :"}}')}}]); -//# sourceMappingURL=14.a2b9acaf9caa95d1fd7f.js.map \ No newline at end of file diff --git a/priv/static/static/js/14.a2b9acaf9caa95d1fd7f.js.map b/priv/static/static/js/14.a2b9acaf9caa95d1fd7f.js.map deleted file mode 100644 index c1a2c983f..000000000 --- a/priv/static/static/js/14.a2b9acaf9caa95d1fd7f.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/14.a2b9acaf9caa95d1fd7f.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/15.fe4e76f27cc478289a42.js b/priv/static/static/js/15.23f179cc3adc903bb537.js similarity index 98% rename from priv/static/static/js/15.fe4e76f27cc478289a42.js rename to priv/static/static/js/15.23f179cc3adc903bb537.js index 3005c67b3..d87608e34 100644 --- a/priv/static/static/js/15.fe4e76f27cc478289a42.js +++ b/priv/static/static/js/15.23f179cc3adc903bb537.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[15],{595:function(a){a.exports=JSON.parse('{"chat":{"title":"Comhrá"},"features_panel":{"chat":"Comhrá","gopher":"Gófar","media_proxy":"Seachfhreastalaí meáin","scope_options":"Rogha scóip","text_limit":"Teorainn Téacs","title":"Gnéithe","who_to_follow":"Daoine le leanúint"},"finder":{"error_fetching_user":"Earráid a aimsiú d\'úsáideoir","find_user":"Aimsigh úsáideoir"},"general":{"apply":"Feidhmigh","submit":"Deimhnigh"},"login":{"login":"Logáil isteach","logout":"Logáil amach","password":"Pasfhocal","placeholder":"m.sh. Daire","register":"Clárú","username":"Ainm Úsáideora"},"nav":{"chat":"Comhrá Áitiúil","friend_requests":"Iarratas ar Cairdeas","mentions":"Tagairt","public_tl":"Amlíne Poiblí","timeline":"Amlíne","twkn":"An Líonra Iomlán"},"notifications":{"broken_favorite":"Post anaithnid. Cuardach dó…","favorited_you":"toghadh le do phost","followed_you":"lean tú","load_older":"Luchtaigh fógraí aosta","notifications":"Fógraí","read":"Léigh!","repeated_you":"athphostáil tú"},"post_status":{"account_not_locked_warning":"Níl do chuntas {0}. Is féidir le duine ar bith a leanúint leat chun do phoist leantacha amháin a fheiceáil.","account_not_locked_warning_link":"faoi glas","attachments_sensitive":"Marcáil ceangaltán mar íogair","content_type":{"text/plain":"Gnáth-théacs"},"content_warning":"Teideal (roghnach)","default":"Lá iontach anseo i nGaillimh","direct_warning":"Ní bheidh an post seo le feiceáil ach amháin do na húsáideoirí atá luaite.","posting":"Post nua","scope":{"direct":"Díreach - Post chuig úsáideoirí luaite amháin","private":"Leanúna amháin - Post chuig lucht leanúna amháin","public":"Poiblí - Post chuig amlínte poiblí","unlisted":"Neamhliostaithe - Ná cuir post chuig amlínte poiblí"}},"registration":{"bio":"Scéal saoil","email":"Ríomhphost","fullname":"Ainm taispeána\'","password_confirm":"Deimhnigh do pasfhocal","registration":"Clárú","token":"Cód cuireadh"},"settings":{"attachmentRadius":"Ceangaltáin","attachments":"Ceangaltáin","avatar":"Phictúir phrófíle","avatarAltRadius":"Phictúirí phrófíle (Fograí)","avatarRadius":"Phictúirí phrófíle","background":"Cúlra","bio":"Scéal saoil","btnRadius":"Cnaipí","cBlue":"Gorm (Freagra, lean)","cGreen":"Glas (Athphóstail)","cOrange":"Oráiste (Cosúil)","cRed":"Dearg (Cealaigh)","change_password":"Athraigh do pasfhocal","change_password_error":"Bhí fadhb ann ag athrú do pasfhocail.","changed_password":"Athraigh an pasfhocal go rathúil!","collapse_subject":"Poist a chosc le teidil","confirm_new_password":"Deimhnigh do pasfhocal nua","current_avatar":"Phictúir phrófíle","current_password":"Pasfhocal reatha","current_profile_banner":"Phictúir ceanntáisc","data_import_export_tab":"Iompórtáil / Easpórtáil Sonraí","default_vis":"Scóip infheicthe réamhshocraithe","delete_account":"Scrios cuntas","delete_account_description":"Do chuntas agus do chuid teachtaireachtaí go léir a scriosadh go buan.","delete_account_error":"Bhí fadhb ann a scriosadh do chuntas. Má leanann sé seo, téigh i dteagmháil le do riarthóir.","delete_account_instructions":"Scríobh do phasfhocal san ionchur thíos chun deimhniú a scriosadh.","export_theme":"Sábháil Téama","filtering":"Scagadh","filtering_explanation":"Beidh gach post ina bhfuil na focail seo i bhfolach, ceann in aghaidh an líne","follow_export":"Easpórtáil do leanann","follow_export_button":"Easpórtáil do leanann chuig comhad csv","follow_export_processing":"Próiseáil. Iarrtar ort go luath an comhad a íoslódáil.","follow_import":"Iompórtáil do leanann","follow_import_error":"Earráid agus do leanann a iompórtáil","follows_imported":"Do leanann iompórtáil! Tógfaidh an próiseas iad le tamall.","foreground":"Tulra","general":"Ginearálta","hide_attachments_in_convo":"Folaigh ceangaltáin i comhráite","hide_attachments_in_tl":"Folaigh ceangaltáin sa amlíne","hide_post_stats":"Folaigh staitisticí na bpost (m.sh. líon na n-athrá)","hide_user_stats":"Folaigh na staitisticí úsáideora (m.sh. líon na leantóiri)","import_followers_from_a_csv_file":"Iompórtáil leanann ó chomhad csv","import_theme":"Luchtaigh Téama","inputRadius":"Limistéar iontrála","instance_default":"(Réamhshocrú: {value})","interfaceLanguage":"Teanga comhéadain","invalid_theme_imported":"Ní téama bailí é an comhad dícheangailte. Níor rinneadh aon athruithe.","limited_availability":"Níl sé ar fáil i do bhrabhsálaí","links":"Naisc","lock_account_description":"Srian a chur ar do chuntas le lucht leanúna ceadaithe amháin","loop_video":"Lúb físeáin","loop_video_silent_only":"Lúb físeáin amháin gan fuaim (i.e. Mastodon\'s \\"gifs\\")","name":"Ainm","name_bio":"Ainm ⁊ Scéal","new_password":"Pasfhocal nua\'","notification_visibility":"Cineálacha fógraí a thaispeáint","notification_visibility_follows":"Leana","notification_visibility_likes":"Thaithin","notification_visibility_mentions":"Tagairt","notification_visibility_repeats":"Atphostáil","no_rich_text_description":"Bain formáidiú téacs saibhir ó gach post","nsfw_clickthrough":"Cumasaigh an ceangaltán NSFW cliceáil ar an gcnaipe","oauth_tokens":"Tocanna OAuth","token":"Token","refresh_token":"Athnuachan Comórtas","valid_until":"Bailí Go dtí","revoke_token":"Athghairm","panelRadius":"Painéil","pause_on_unfocused":"Sruthú ar sos nuair a bhíonn an fócas caillte","presets":"Réamhshocruithe","profile_background":"Cúlra Próifíl","profile_banner":"Phictúir Ceanntáisc","profile_tab":"Próifíl","radii_help":"Cruinniú imeall comhéadan a chumrú (i bpicteilíní)","replies_in_timeline":"Freagraí sa amlíne","reply_visibility_all":"Taispeáin gach freagra","reply_visibility_following":"Taispeáin freagraí amháin atá dírithe ar mise nó ar úsáideoirí atá mé ag leanúint","reply_visibility_self":"Taispeáin freagraí amháin atá dírithe ar mise","saving_err":"Earráid socruithe a shábháil","saving_ok":"Socruithe sábháilte","security_tab":"Slándáil","set_new_avatar":"Athraigh do phictúir phrófíle","set_new_profile_background":"Athraigh do cúlra próifíl","set_new_profile_banner":"Athraigh do phictúir ceanntáisc","settings":"Socruithe","stop_gifs":"Seinn GIFs ar an scáileán","streaming":"Cumasaigh post nua a shruthú uathoibríoch nuair a scrollaítear go barr an leathanaigh","text":"Téacs","theme":"Téama","theme_help":"Úsáid cód daith hex (#rrggbb) chun do schéim a saincheapadh.","tooltipRadius":"Bileoga eolais","user_settings":"Socruithe úsáideora","values":{"false":"níl","true":"tá"}},"time":{"day":"{0} lá","days":"{0} lá","day_short":"{0}l","days_short":"{0}l","hour":"{0} uair","hours":"{0} uair","hour_short":"{0}u","hours_short":"{0}u","in_future":"in {0}","in_past":"{0} ago","minute":"{0} nóimeád","minutes":"{0} nóimeád","minute_short":"{0}n","minutes_short":"{0}n","month":"{0} mí","months":"{0} mí","month_short":"{0}m","months_short":"{0}m","now":"Anois","now_short":"Anois","second":"{0} s","seconds":"{0} s","second_short":"{0}s","seconds_short":"{0}s","week":"{0} seachtain","weeks":"{0} seachtaine","week_short":"{0}se","weeks_short":"{0}se","year":"{0} bliainta","years":"{0} bliainta","year_short":"{0}b","years_short":"{0}b"},"timeline":{"collapse":"Folaigh","conversation":"Cómhra","error_fetching":"Earráid a thabhairt cothrom le dáta","load_older":"Luchtaigh níos mó","no_retweet_hint":"Tá an post seo marcáilte mar lucht leanúna amháin nó díreach agus ní féidir é a athphostáil","repeated":"athphostáil","show_new":"Taispeáin nua","up_to_date":"Nuashonraithe"},"user_card":{"approve":"Údaraigh","block":"Cosc","blocked":"Cuireadh coisc!","deny":"Diúltaigh","follow":"Lean","followees":"Leantóirí","followers":"Á Leanúint","following":"Á Leanúint","follows_you":"Leanann tú","mute":"Cuir i mód ciúin","muted":"Mód ciúin","per_day":"laethúil","remote_follow":"Leaníunt iargúlta","statuses":"Poist"},"user_profile":{"timeline_title":"Amlíne úsáideora"},"who_to_follow":{"more":"Feach uile","who_to_follow":"Daoine le leanúint"}}')}}]); -//# sourceMappingURL=15.fe4e76f27cc478289a42.js.map \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[15],{608:function(a){a.exports=JSON.parse('{"chat":{"title":"Comhrá"},"features_panel":{"chat":"Comhrá","gopher":"Gófar","media_proxy":"Seachfhreastalaí meáin","scope_options":"Rogha scóip","text_limit":"Teorainn Téacs","title":"Gnéithe","who_to_follow":"Daoine le leanúint"},"finder":{"error_fetching_user":"Earráid a aimsiú d\'úsáideoir","find_user":"Aimsigh úsáideoir"},"general":{"apply":"Feidhmigh","submit":"Deimhnigh"},"login":{"login":"Logáil isteach","logout":"Logáil amach","password":"Pasfhocal","placeholder":"m.sh. Daire","register":"Clárú","username":"Ainm Úsáideora"},"nav":{"chat":"Comhrá Áitiúil","friend_requests":"Iarratas ar Cairdeas","mentions":"Tagairt","public_tl":"Amlíne Poiblí","timeline":"Amlíne","twkn":"An Líonra Iomlán"},"notifications":{"broken_favorite":"Post anaithnid. Cuardach dó…","favorited_you":"toghadh le do phost","followed_you":"lean tú","load_older":"Luchtaigh fógraí aosta","notifications":"Fógraí","read":"Léigh!","repeated_you":"athphostáil tú"},"post_status":{"account_not_locked_warning":"Níl do chuntas {0}. Is féidir le duine ar bith a leanúint leat chun do phoist leantacha amháin a fheiceáil.","account_not_locked_warning_link":"faoi glas","attachments_sensitive":"Marcáil ceangaltán mar íogair","content_type":{"text/plain":"Gnáth-théacs"},"content_warning":"Teideal (roghnach)","default":"Lá iontach anseo i nGaillimh","direct_warning":"Ní bheidh an post seo le feiceáil ach amháin do na húsáideoirí atá luaite.","posting":"Post nua","scope":{"direct":"Díreach - Post chuig úsáideoirí luaite amháin","private":"Leanúna amháin - Post chuig lucht leanúna amháin","public":"Poiblí - Post chuig amlínte poiblí","unlisted":"Neamhliostaithe - Ná cuir post chuig amlínte poiblí"}},"registration":{"bio":"Scéal saoil","email":"Ríomhphost","fullname":"Ainm taispeána\'","password_confirm":"Deimhnigh do pasfhocal","registration":"Clárú","token":"Cód cuireadh"},"settings":{"attachmentRadius":"Ceangaltáin","attachments":"Ceangaltáin","avatar":"Phictúir phrófíle","avatarAltRadius":"Phictúirí phrófíle (Fograí)","avatarRadius":"Phictúirí phrófíle","background":"Cúlra","bio":"Scéal saoil","btnRadius":"Cnaipí","cBlue":"Gorm (Freagra, lean)","cGreen":"Glas (Athphóstail)","cOrange":"Oráiste (Cosúil)","cRed":"Dearg (Cealaigh)","change_password":"Athraigh do pasfhocal","change_password_error":"Bhí fadhb ann ag athrú do pasfhocail.","changed_password":"Athraigh an pasfhocal go rathúil!","collapse_subject":"Poist a chosc le teidil","confirm_new_password":"Deimhnigh do pasfhocal nua","current_avatar":"Phictúir phrófíle","current_password":"Pasfhocal reatha","current_profile_banner":"Phictúir ceanntáisc","data_import_export_tab":"Iompórtáil / Easpórtáil Sonraí","default_vis":"Scóip infheicthe réamhshocraithe","delete_account":"Scrios cuntas","delete_account_description":"Do chuntas agus do chuid teachtaireachtaí go léir a scriosadh go buan.","delete_account_error":"Bhí fadhb ann a scriosadh do chuntas. Má leanann sé seo, téigh i dteagmháil le do riarthóir.","delete_account_instructions":"Scríobh do phasfhocal san ionchur thíos chun deimhniú a scriosadh.","export_theme":"Sábháil Téama","filtering":"Scagadh","filtering_explanation":"Beidh gach post ina bhfuil na focail seo i bhfolach, ceann in aghaidh an líne","follow_export":"Easpórtáil do leanann","follow_export_button":"Easpórtáil do leanann chuig comhad csv","follow_export_processing":"Próiseáil. Iarrtar ort go luath an comhad a íoslódáil.","follow_import":"Iompórtáil do leanann","follow_import_error":"Earráid agus do leanann a iompórtáil","follows_imported":"Do leanann iompórtáil! Tógfaidh an próiseas iad le tamall.","foreground":"Tulra","general":"Ginearálta","hide_attachments_in_convo":"Folaigh ceangaltáin i comhráite","hide_attachments_in_tl":"Folaigh ceangaltáin sa amlíne","hide_post_stats":"Folaigh staitisticí na bpost (m.sh. líon na n-athrá)","hide_user_stats":"Folaigh na staitisticí úsáideora (m.sh. líon na leantóiri)","import_followers_from_a_csv_file":"Iompórtáil leanann ó chomhad csv","import_theme":"Luchtaigh Téama","inputRadius":"Limistéar iontrála","instance_default":"(Réamhshocrú: {value})","interfaceLanguage":"Teanga comhéadain","invalid_theme_imported":"Ní téama bailí é an comhad dícheangailte. Níor rinneadh aon athruithe.","limited_availability":"Níl sé ar fáil i do bhrabhsálaí","links":"Naisc","lock_account_description":"Srian a chur ar do chuntas le lucht leanúna ceadaithe amháin","loop_video":"Lúb físeáin","loop_video_silent_only":"Lúb físeáin amháin gan fuaim (i.e. Mastodon\'s \\"gifs\\")","name":"Ainm","name_bio":"Ainm ⁊ Scéal","new_password":"Pasfhocal nua\'","notification_visibility":"Cineálacha fógraí a thaispeáint","notification_visibility_follows":"Leana","notification_visibility_likes":"Thaithin","notification_visibility_mentions":"Tagairt","notification_visibility_repeats":"Atphostáil","no_rich_text_description":"Bain formáidiú téacs saibhir ó gach post","nsfw_clickthrough":"Cumasaigh an ceangaltán NSFW cliceáil ar an gcnaipe","oauth_tokens":"Tocanna OAuth","token":"Token","refresh_token":"Athnuachan Comórtas","valid_until":"Bailí Go dtí","revoke_token":"Athghairm","panelRadius":"Painéil","pause_on_unfocused":"Sruthú ar sos nuair a bhíonn an fócas caillte","presets":"Réamhshocruithe","profile_background":"Cúlra Próifíl","profile_banner":"Phictúir Ceanntáisc","profile_tab":"Próifíl","radii_help":"Cruinniú imeall comhéadan a chumrú (i bpicteilíní)","replies_in_timeline":"Freagraí sa amlíne","reply_visibility_all":"Taispeáin gach freagra","reply_visibility_following":"Taispeáin freagraí amháin atá dírithe ar mise nó ar úsáideoirí atá mé ag leanúint","reply_visibility_self":"Taispeáin freagraí amháin atá dírithe ar mise","saving_err":"Earráid socruithe a shábháil","saving_ok":"Socruithe sábháilte","security_tab":"Slándáil","set_new_avatar":"Athraigh do phictúir phrófíle","set_new_profile_background":"Athraigh do cúlra próifíl","set_new_profile_banner":"Athraigh do phictúir ceanntáisc","settings":"Socruithe","stop_gifs":"Seinn GIFs ar an scáileán","streaming":"Cumasaigh post nua a shruthú uathoibríoch nuair a scrollaítear go barr an leathanaigh","text":"Téacs","theme":"Téama","theme_help":"Úsáid cód daith hex (#rrggbb) chun do schéim a saincheapadh.","tooltipRadius":"Bileoga eolais","user_settings":"Socruithe úsáideora","values":{"false":"níl","true":"tá"}},"time":{"day":"{0} lá","days":"{0} lá","day_short":"{0}l","days_short":"{0}l","hour":"{0} uair","hours":"{0} uair","hour_short":"{0}u","hours_short":"{0}u","in_future":"in {0}","in_past":"{0} ago","minute":"{0} nóimeád","minutes":"{0} nóimeád","minute_short":"{0}n","minutes_short":"{0}n","month":"{0} mí","months":"{0} mí","month_short":"{0}m","months_short":"{0}m","now":"Anois","now_short":"Anois","second":"{0} s","seconds":"{0} s","second_short":"{0}s","seconds_short":"{0}s","week":"{0} seachtain","weeks":"{0} seachtaine","week_short":"{0}se","weeks_short":"{0}se","year":"{0} bliainta","years":"{0} bliainta","year_short":"{0}b","years_short":"{0}b"},"timeline":{"collapse":"Folaigh","conversation":"Cómhra","error_fetching":"Earráid a thabhairt cothrom le dáta","load_older":"Luchtaigh níos mó","no_retweet_hint":"Tá an post seo marcáilte mar lucht leanúna amháin nó díreach agus ní féidir é a athphostáil","repeated":"athphostáil","show_new":"Taispeáin nua","up_to_date":"Nuashonraithe"},"user_card":{"approve":"Údaraigh","block":"Cosc","blocked":"Cuireadh coisc!","deny":"Diúltaigh","follow":"Lean","followees":"Leantóirí","followers":"Á Leanúint","following":"Á Leanúint","follows_you":"Leanann tú","mute":"Cuir i mód ciúin","muted":"Mód ciúin","per_day":"laethúil","remote_follow":"Leaníunt iargúlta","statuses":"Poist"},"user_profile":{"timeline_title":"Amlíne úsáideora"},"who_to_follow":{"more":"Feach uile","who_to_follow":"Daoine le leanúint"}}')}}]); +//# sourceMappingURL=15.23f179cc3adc903bb537.js.map \ No newline at end of file diff --git a/priv/static/static/js/15.23f179cc3adc903bb537.js.map b/priv/static/static/js/15.23f179cc3adc903bb537.js.map new file mode 100644 index 000000000..15811ea18 --- /dev/null +++ b/priv/static/static/js/15.23f179cc3adc903bb537.js.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/15.23f179cc3adc903bb537.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/15.fe4e76f27cc478289a42.js.map b/priv/static/static/js/15.fe4e76f27cc478289a42.js.map deleted file mode 100644 index 7177387b7..000000000 --- a/priv/static/static/js/15.fe4e76f27cc478289a42.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/15.fe4e76f27cc478289a42.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/16.90b5ee380da41d6d061c.js b/priv/static/static/js/16.43dd2c64dcb160dd96a6.js similarity index 81% rename from priv/static/static/js/16.90b5ee380da41d6d061c.js rename to priv/static/static/js/16.43dd2c64dcb160dd96a6.js index f3a4fadd4..abed0132f 100644 --- a/priv/static/static/js/16.90b5ee380da41d6d061c.js +++ b/priv/static/static/js/16.43dd2c64dcb160dd96a6.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[16],{596:function(e){e.exports=JSON.parse('{"chat":{"title":"צ\'אט"},"exporter":{"export":"ייצוא","processing":"מעבד, בקרוב תופיע אפשרות להוריד את הקובץ"},"features_panel":{"chat":"צ\'אט","gopher":"גופר","media_proxy":"מדיה פרוקסי","scope_options":"אפשרויות טווח","text_limit":"מגבלת טקסט","title":"מאפיינים","who_to_follow":"אחרי מי לעקוב"},"finder":{"error_fetching_user":"שגיאה במציאת משתמש","find_user":"מציאת משתמש"},"general":{"apply":"החל","submit":"שלח","more":"עוד","generic_error":"קרתה שגיאה","optional":"לבחירה","show_more":"הראה עוד","show_less":"הראה פחות","cancel":"בטל"},"image_cropper":{"crop_picture":"חתוך תמונה","save":"שמור","save_without_cropping":"שמור בלי לחתוך","cancel":"בטל"},"importer":{"submit":"שלח","success":"ייובא בהצלחה.","error":"אירעתה שגיאה בזמן ייבוא קובץ זה."},"login":{"login":"התחבר","description":"היכנס עם OAuth","logout":"התנתק","password":"סיסמה","placeholder":"למשל lain","register":"הירשם","username":"שם המשתמש","hint":"הירשם על מנת להצטרף לדיון"},"media_modal":{"previous":"הקודם","next":"הבא"},"nav":{"about":"על-אודות","back":"חזור","chat":"צ\'אט מקומי","friend_requests":"בקשות עקיבה","mentions":"אזכורים","interactions":"אינטרקציות","dms":"הודעות ישירות","public_tl":"ציר הזמן הציבורי","timeline":"ציר הזמן","twkn":"כל הרשת הידועה","user_search":"חיפוש משתמש","who_to_follow":"אחרי מי לעקוב","preferences":"העדפות"},"notifications":{"broken_favorite":"סטאטוס לא ידוע, מחפש…","favorited_you":"אהב את הסטטוס שלך","followed_you":"עקב אחריך","load_older":"טען התראות ישנות","notifications":"התראות","read":"קרא!","repeated_you":"חזר על הסטטוס שלך","no_more_notifications":"לא עוד התראות"},"interactions":{"favs_repeats":"חזרות ומועדפים","follows":"עוקבים חדשים","load_older":"טען אינטרקציות ישנות"},"post_status":{"new_status":"פרסם סטאטוס חדש","account_not_locked_warning":"המשתמש שלך אינו {0}. כל אחד יכול לעקוב אחריך ולראות את ההודעות לעוקבים-בלבד שלך.","account_not_locked_warning_link":"נעול","attachments_sensitive":"סמן מסמכים מצורפים כלא בטוחים לצפייה","content_type":{"text/plain":"טקסט פשוט","text/html":"HTML","text/markdown":"Markdown","text/bbcode":"BBCode"},"content_warning":"נושא (נתון לבחירה)","default":"הרגע נחת ב-ל.א.","direct_warning_to_all":"הודעה זו תהיה נראית לכל המשתמשים המוזכרים.","direct_warning_to_first_only":"הודעה זו תהיה נראית לכל המשתמשים במוזכרים בתחילת ההודעה בלבד.","posting":"מפרסם","scope_notice":{"public":"הודעה זו תהיה נראית לכולם","private":"הודעה זו תהיה נראית לעוקבים שלך בלבד","unlisted":"הודעה זו לא תהיה נראית בציר זמן הציבורי או בכל הרשת הידועה"},"scope":{"direct":"ישיר - שלח לאנשים המוזכרים בלבד","private":"עוקבים-בלבד - שלח לעוקבים בלבד","public":"ציבורי - שלח לציר הזמן הציבורי","unlisted":"מחוץ לרשימה - אל תשלח לציר הזמן הציבורי"}},"registration":{"bio":"אודות","email":"אימייל","fullname":"שם תצוגה","password_confirm":"אישור סיסמה","registration":"הרשמה","token":"טוקן הזמנה","captcha":"אימות אנוש","new_captcha":"לחץ על התמונה על מנת לקבל אימות אנוש חדש","username_placeholder":"למשל lain","fullname_placeholder":"למשל Lain Iwakura","bio_placeholder":"למשל\\nהיי, אני ליין.\\nאני ילדת אנימה שגרה בפרוורי יפן. אולי אתם מכירים אותי מהWired.","validations":{"username_required":"לא יכול להישאר ריק","fullname_required":"לא יכול להישאר ריק","email_required":"לא יכול להישאר ריק","password_required":"לא יכול להישאר ריק","password_confirmation_required":"לא יכול להישאר ריק","password_confirmation_match":"צריך להיות דומה לסיסמה"}},"selectable_list":{"select_all":"בחר הכל"},"settings":{"app_name":"שם האפליקציה","attachmentRadius":"צירופים","attachments":"צירופים","avatar":"תמונת פרופיל","avatarAltRadius":"תמונות פרופיל (התראות)","avatarRadius":"תמונות פרופיל","background":"רקע","bio":"אודות","block_export":"ייצוא חסימות","block_export_button":"ייצוא חסימות אל קובץ csv","block_import":"ייבוא חסימות","block_import_error":"שגיאה בייבוא החסימות","blocks_imported":"החסימות יובאו! ייקח מעט זמן לעבד אותן.","blocks_tab":"חסימות","btnRadius":"כפתורים","cBlue":"כחול (תגובה, עקיבה)","cGreen":"ירוק (חזרה)","cOrange":"כתום (לייק)","cRed":"אדום (ביטול)","change_password":"שנה סיסמה","change_password_error":"הייתה בעיה בשינוי סיסמתך.","changed_password":"סיסמה שונתה בהצלחה!","collapse_subject":"מזער הודעות עם נושאים","composing":"מרכיב","confirm_new_password":"אשר סיסמה","current_avatar":"תמונת הפרופיל הנוכחית שלך","current_password":"סיסמה נוכחית","current_profile_banner":"כרזת הפרופיל הנוכחית שלך","data_import_export_tab":"ייבוא או ייצוא מידע","default_vis":"ברירת מחדל לטווח הנראות","delete_account":"מחק משתמש","delete_account_description":"מחק לצמיתות את המשתמש שלך ואת כל הודעותיך.","delete_account_error":"הייתה בעיה במחיקת המשתמש. אם זה ממשיך, אנא עדכן את מנהל השרת שלך.","delete_account_instructions":"הכנס את סיסמתך בקלט למטה על מנת לאשר מחיקת משתמש.","avatar_size_instruction":"הגודל המינימלי המומלץ לתמונות פרופיל הוא 150x150 פיקסלים.","export_theme":"שמור ערכים","filtering":"סינון","filtering_explanation":"כל הסטטוסים הכוללים את המילים הללו יושתקו, אחד לשורה","follow_export":"יצוא עקיבות","follow_export_button":"ייצא את הנעקבים שלך לקובץ csv","follow_import":"יבוא עקיבות","follow_import_error":"שגיאה בייבוא נעקבים","follows_imported":"נעקבים יובאו! ייקח זמן מה לעבד אותם.","foreground":"חזית","general":"כללי","hide_attachments_in_convo":"החבא צירופים בשיחות","hide_attachments_in_tl":"החבא צירופים בציר הזמן","hide_muted_posts":"הסתר הודעות של משתמשים מושתקים","max_thumbnails":"מספר מירבי של תמונות ממוזערות להודעה","hide_isp":"הסתר פאנל-צד","preload_images":"טען תמונות מראש","use_one_click_nsfw":"פתח תמונות לא-בטוחות-לעבודה עם לחיצה אחת בלבד","hide_post_stats":"הסתר נתוני הודעה (למשל, מספר החזרות)","hide_user_stats":"הסתר נתוני משתמש (למשל, מספר העוקבים)","hide_filtered_statuses":"מסתר סטטוסים מסוננים","import_blocks_from_a_csv_file":"ייבא חסימות מקובץ csv","import_followers_from_a_csv_file":"ייבא את הנעקבים שלך מקובץ csv","import_theme":"טען ערכים","inputRadius":"שדות קלט","checkboxRadius":"תיבות סימון","instance_default":"(default: {value})","instance_default_simple":"(default)","interface":"ממשק","interfaceLanguage":"שפת הממשק","invalid_theme_imported":"הקובץ הנבחר אינו תמה הנתמכת ע\\"י פלרומה. שום שינויים לא נעשו לתמה שלך.","limited_availability":"לא זמין בדפדפן שלך","links":"לינקים","lock_account_description":"הגבל את המשתמש לעוקבים מאושרים בלבד","loop_video":"נגן סרטונים ללא הפסקה","loop_video_silent_only":"נגן רק סרטונים חסרי קול ללא הפסקה","mutes_tab":"השתקות","play_videos_in_modal":"נגן סרטונים ישירות בנגן המדיה","use_contain_fit":"אל תחתוך את הצירוף בתמונות הממוזערות","name":"שם","name_bio":"שם ואודות","new_password":"סיסמה חדשה","notification_visibility":"סוג ההתראות שתרצו לראות","notification_visibility_follows":"עקיבות","notification_visibility_likes":"לייקים","notification_visibility_mentions":"אזכורים","notification_visibility_repeats":"חזרות","no_rich_text_description":"הסר פורמט טקסט עשיר מכל ההודעות","no_blocks":"ללא חסימות","no_mutes":"ללא השתקות","hide_follows_description":"אל תראה אחרי מי אני עוקב","hide_followers_description":"אל תראה מי עוקב אחרי","show_admin_badge":"הראה סמל מנהל בפרופיל שלי","show_moderator_badge":"הראה סמל צוות בפרופיל שלי","nsfw_clickthrough":"החל החבאת צירופים לא בטוחים לצפיה בעת עבודה בעזרת לחיצת עכבר","oauth_tokens":"אסימוני OAuth","token":"אסימון","refresh_token":"רענון האסימון","valid_until":"בתוקף עד","revoke_token":"בטל","panelRadius":"פאנלים","pause_on_unfocused":"השהה זרימת הודעות כשהחלון לא בפוקוס","presets":"ערכים קבועים מראש","profile_background":"רקע הפרופיל","profile_banner":"כרזת הפרופיל","profile_tab":"פרופיל","radii_help":"קבע מראש עיגול פינות לממשק (בפיקסלים)","replies_in_timeline":"תגובות בציר הזמן","reply_visibility_all":"הראה את כל התגובות","reply_visibility_following":"הראה תגובות שמופנות אליי או לעקובים שלי בלבד","reply_visibility_self":"הראה תגובות שמופנות אליי בלבד","autohide_floating_post_button":"החבא אוטומטית את הכפתור הודעה חדשה (נייד)","saving_err":"שגיאה בשמירת הגדרות","saving_ok":"הגדרות נשמרו","search_user_to_block":"חפש משתמש לחסימה","search_user_to_mute":"חפש משתמש להשתקה","security_tab":"ביטחון","scope_copy":"העתק תחום הודעה בתגובה להודעה (הודעות ישירות תמיד מועתקות)","minimal_scopes_mode":"צמצם אפשרויות בחירה לתחום הודעה","set_new_avatar":"קבע תמונת פרופיל חדשה","set_new_profile_background":"קבע רקע פרופיל חדש","set_new_profile_banner":"קבע כרזת פרופיל חדשה","settings":"הגדרות","subject_input_always_show":"תמיד הראה את שדה הנושא","subject_line_behavior":"העתק נושא בתגובה","subject_line_email":"כמו אימייל: \\"re: נושא\\"","subject_line_mastodon":"כמו מסטודון: העתק כפי שזה","subject_line_noop":"אל תעתיק","post_status_content_type":"שלח את סוג תוכן ההודעה","stop_gifs":"נגן-בעת-ריחוף GIFs","streaming":"החל זרימת הודעות אוטומטית בעת גלילה למעלה הדף","text":"טקסט","theme":"תמה","theme_help":"השתמש בקודי צבע הקס (#אדום-אדום-ירוק-ירוק-כחול-כחול) על מנת להתאים אישית את תמת הצבע שלך.","tooltipRadius":"טולטיפ \\\\ התראות","upload_a_photo":"העלה תמונה","user_settings":"הגדרות משתמש","values":{"false":"לא","true":"כן"},"notifications":"התראות","enable_web_push_notifications":"אפשר התראות web push","version":{"title":"גרסה","backend_version":"גרסת קצה אחורי","frontend_version":"גרסת קצה קדמי"}},"timeline":{"collapse":"מוטט","conversation":"שיחה","error_fetching":"שגיאה בהבאת הודעות","load_older":"טען סטטוסים חדשים","no_retweet_hint":"ההודעה מסומנת כ\\"לעוקבים-בלבד\\" ולא ניתן לחזור עליה","repeated":"חזר","show_new":"הראה חדש","up_to_date":"עדכני","no_more_statuses":"אין עוד סטטוסים","no_statuses":"אין סטטוסים"},"status":{"favorites":"מועדפים","repeats":"חזרות","delete":"מחק סטטוס","pin":"הצמד לפרופיל","unpin":"הסר הצמדה מהפרופיל","pinned":"מוצמד","delete_confirm":"האם באמת למחוק סטטוס זה?","reply_to":"הגב ל","replies_list":"תגובות:"},"user_card":{"approve":"אשר","block":"חסימה","blocked":"חסום!","deny":"דחה","favorites":"מועדפים","follow":"עקוב","follow_sent":"בקשה נשלחה!","follow_progress":"מבקש…","follow_again":"שלח בקשה שוב?","follow_unfollow":"בטל עקיבה","followees":"נעקבים","followers":"עוקבים","following":"עוקב!","follows_you":"עוקב אחריך!","its_you":"זה אתה!","media":"מדיה","mute":"השתק","muted":"מושתק","per_day":"ליום","remote_follow":"עקיבה מרחוק","report":"דווח","statuses":"סטטוסים","unblock":"הסר חסימה","unblock_progress":"מסיר חסימה…","block_progress":"חוסם…","unmute":"הסר השתקה","unmute_progress":"מסיר השתקה…","mute_progress":"משתיק…","admin_menu":{"moderation":"ניהול (צוות)","grant_admin":"הפוך למנהל","revoke_admin":"הסר מנהל","grant_moderator":"הפוך לצוות","revoke_moderator":"הסר צוות","activate_account":"הפעל משתמש","deactivate_account":"השבת משתמש","delete_account":"מחק משתמש","force_nsfw":"סמן את כל ההודעות בתור לא-מתאימות-לעבודה","strip_media":"הסר מדיה מההודעות","force_unlisted":"הפוך הודעות ללא רשומות","sandbox":"הפוך הודעות לנראות לעוקבים-בלבד","disable_remote_subscription":"אל תאפשר עקיבה של המשתמש מאינסטנס אחר","disable_any_subscription":"אל תאפשר עקיבה של המשתמש בכלל","quarantine":"אל תאפשר פדרציה של ההודעות של המשתמש","delete_user":"מחק משתמש","delete_user_confirmation":"בטוח? פעולה זו הינה בלתי הפיכה."}},"user_profile":{"timeline_title":"ציר זמן המשתמש","profile_does_not_exist":"סליחה, פרופיל זה אינו קיים.","profile_loading_error":"סליחה, הייתה שגיאה בטעינת הפרופיל."},"user_reporting":{"title":"מדווח על {0}","add_comment_description":"הדיווח ישלח לצוות האינסטנס. אפשר להסביר למה הנך מדווחים על משתמש זה למטה:","additional_comments":"תגובות נוספות","forward_description":"המשתמש משרת אחר. לשלוח לשם עותק של הדיווח?","forward_to":"העבר ל {0}","submit":"הגש","generic_error":"קרתה שגיאה בעת עיבוד הבקשה."},"who_to_follow":{"more":"עוד","who_to_follow":"אחרי מי לעקוב"},"tool_tip":{"media_upload":"העלה מדיה","repeat":"חזור","reply":"הגב","favorite":"מועדף","user_settings":"הגדרות משתמש"},"upload":{"error":{"base":"העלאה נכשלה.","file_too_big":"קובץ גדול מדי [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]","default":"נסה שוב אחר כך"},"file_size_units":{"B":"B","KiB":"KiB","MiB":"MiB","GiB":"GiB","TiB":"TiB"}},"about":{"mrf":{"keyword":{"keyword_policies":"פוליסת מילות מפתח"},"federation":"פדרציה"}}}')}}]); -//# sourceMappingURL=16.90b5ee380da41d6d061c.js.map \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[16],{609:function(e){e.exports=JSON.parse('{"chat":{"title":"צ\'אט"},"exporter":{"export":"ייצוא","processing":"מעבד, בקרוב תופיע אפשרות להוריד את הקובץ"},"features_panel":{"chat":"צ\'אט","gopher":"גופר","media_proxy":"מדיה פרוקסי","scope_options":"אפשרויות טווח","text_limit":"מגבלת טקסט","title":"מאפיינים","who_to_follow":"אחרי מי לעקוב"},"finder":{"error_fetching_user":"שגיאה במציאת משתמש","find_user":"מציאת משתמש"},"general":{"apply":"החל","submit":"שלח","more":"עוד","generic_error":"קרתה שגיאה","optional":"לבחירה","show_more":"הראה עוד","show_less":"הראה פחות","cancel":"בטל"},"image_cropper":{"crop_picture":"חתוך תמונה","save":"שמור","save_without_cropping":"שמור בלי לחתוך","cancel":"בטל"},"importer":{"submit":"שלח","success":"ייובא בהצלחה.","error":"אירעתה שגיאה בזמן ייבוא קובץ זה."},"login":{"login":"התחבר","description":"היכנס עם OAuth","logout":"התנתק","password":"סיסמה","placeholder":"למשל lain","register":"הירשם","username":"שם המשתמש","hint":"הירשם על מנת להצטרף לדיון"},"media_modal":{"previous":"הקודם","next":"הבא"},"nav":{"about":"על-אודות","back":"חזור","chat":"צ\'אט מקומי","friend_requests":"בקשות עקיבה","mentions":"אזכורים","interactions":"אינטרקציות","dms":"הודעות ישירות","public_tl":"ציר הזמן הציבורי","timeline":"ציר הזמן","twkn":"כל הרשת הידועה","user_search":"חיפוש משתמש","who_to_follow":"אחרי מי לעקוב","preferences":"העדפות"},"notifications":{"broken_favorite":"סטאטוס לא ידוע, מחפש…","favorited_you":"אהב את הסטטוס שלך","followed_you":"עקב אחריך","load_older":"טען התראות ישנות","notifications":"התראות","read":"קרא!","repeated_you":"חזר על הסטטוס שלך","no_more_notifications":"לא עוד התראות"},"interactions":{"favs_repeats":"חזרות ומועדפים","follows":"עוקבים חדשים","load_older":"טען אינטרקציות ישנות"},"post_status":{"new_status":"פרסם סטאטוס חדש","account_not_locked_warning":"המשתמש שלך אינו {0}. כל אחד יכול לעקוב אחריך ולראות את ההודעות לעוקבים-בלבד שלך.","account_not_locked_warning_link":"נעול","attachments_sensitive":"סמן מסמכים מצורפים כלא בטוחים לצפייה","content_type":{"text/plain":"טקסט פשוט","text/html":"HTML","text/markdown":"Markdown","text/bbcode":"BBCode"},"content_warning":"נושא (נתון לבחירה)","default":"הרגע נחת ב-ל.א.","direct_warning_to_all":"הודעה זו תהיה נראית לכל המשתמשים המוזכרים.","direct_warning_to_first_only":"הודעה זו תהיה נראית לכל המשתמשים במוזכרים בתחילת ההודעה בלבד.","posting":"מפרסם","scope_notice":{"public":"הודעה זו תהיה נראית לכולם","private":"הודעה זו תהיה נראית לעוקבים שלך בלבד","unlisted":"הודעה זו לא תהיה נראית בציר זמן הציבורי או בכל הרשת הידועה"},"scope":{"direct":"ישיר - שלח לאנשים המוזכרים בלבד","private":"עוקבים-בלבד - שלח לעוקבים בלבד","public":"ציבורי - שלח לציר הזמן הציבורי","unlisted":"מחוץ לרשימה - אל תשלח לציר הזמן הציבורי"}},"registration":{"bio":"אודות","email":"אימייל","fullname":"שם תצוגה","password_confirm":"אישור סיסמה","registration":"הרשמה","token":"טוקן הזמנה","captcha":"אימות אנוש","new_captcha":"לחץ על התמונה על מנת לקבל אימות אנוש חדש","username_placeholder":"למשל lain","fullname_placeholder":"למשל Lain Iwakura","bio_placeholder":"למשל\\nהיי, אני ליין.\\nאני ילדת אנימה שגרה בפרוורי יפן. אולי אתם מכירים אותי מהWired.","validations":{"username_required":"לא יכול להישאר ריק","fullname_required":"לא יכול להישאר ריק","email_required":"לא יכול להישאר ריק","password_required":"לא יכול להישאר ריק","password_confirmation_required":"לא יכול להישאר ריק","password_confirmation_match":"צריך להיות דומה לסיסמה"}},"selectable_list":{"select_all":"בחר הכל"},"settings":{"app_name":"שם האפליקציה","attachmentRadius":"צירופים","attachments":"צירופים","avatar":"תמונת פרופיל","avatarAltRadius":"תמונות פרופיל (התראות)","avatarRadius":"תמונות פרופיל","background":"רקע","bio":"אודות","block_export":"ייצוא חסימות","block_export_button":"ייצוא חסימות אל קובץ csv","block_import":"ייבוא חסימות","block_import_error":"שגיאה בייבוא החסימות","blocks_imported":"החסימות יובאו! ייקח מעט זמן לעבד אותן.","blocks_tab":"חסימות","btnRadius":"כפתורים","cBlue":"כחול (תגובה, עקיבה)","cGreen":"ירוק (חזרה)","cOrange":"כתום (לייק)","cRed":"אדום (ביטול)","change_password":"שנה סיסמה","change_password_error":"הייתה בעיה בשינוי סיסמתך.","changed_password":"סיסמה שונתה בהצלחה!","collapse_subject":"מזער הודעות עם נושאים","composing":"מרכיב","confirm_new_password":"אשר סיסמה","current_avatar":"תמונת הפרופיל הנוכחית שלך","current_password":"סיסמה נוכחית","current_profile_banner":"כרזת הפרופיל הנוכחית שלך","data_import_export_tab":"ייבוא או ייצוא מידע","default_vis":"ברירת מחדל לטווח הנראות","delete_account":"מחק משתמש","delete_account_description":"מחק לצמיתות את המשתמש שלך ואת כל הודעותיך.","delete_account_error":"הייתה בעיה במחיקת המשתמש. אם זה ממשיך, אנא עדכן את מנהל השרת שלך.","delete_account_instructions":"הכנס את סיסמתך בקלט למטה על מנת לאשר מחיקת משתמש.","avatar_size_instruction":"הגודל המינימלי המומלץ לתמונות פרופיל הוא 150x150 פיקסלים.","export_theme":"שמור ערכים","filtering":"סינון","filtering_explanation":"כל הסטטוסים הכוללים את המילים הללו יושתקו, אחד לשורה","follow_export":"יצוא עקיבות","follow_export_button":"ייצא את הנעקבים שלך לקובץ csv","follow_import":"יבוא עקיבות","follow_import_error":"שגיאה בייבוא נעקבים","follows_imported":"נעקבים יובאו! ייקח זמן מה לעבד אותם.","foreground":"חזית","general":"כללי","hide_attachments_in_convo":"החבא צירופים בשיחות","hide_attachments_in_tl":"החבא צירופים בציר הזמן","hide_muted_posts":"הסתר הודעות של משתמשים מושתקים","max_thumbnails":"מספר מירבי של תמונות ממוזערות להודעה","hide_isp":"הסתר פאנל-צד","preload_images":"טען תמונות מראש","use_one_click_nsfw":"פתח תמונות לא-בטוחות-לעבודה עם לחיצה אחת בלבד","hide_post_stats":"הסתר נתוני הודעה (למשל, מספר החזרות)","hide_user_stats":"הסתר נתוני משתמש (למשל, מספר העוקבים)","hide_filtered_statuses":"מסתר סטטוסים מסוננים","import_blocks_from_a_csv_file":"ייבא חסימות מקובץ csv","import_followers_from_a_csv_file":"ייבא את הנעקבים שלך מקובץ csv","import_theme":"טען ערכים","inputRadius":"שדות קלט","checkboxRadius":"תיבות סימון","instance_default":"(default: {value})","instance_default_simple":"(default)","interface":"ממשק","interfaceLanguage":"שפת הממשק","invalid_theme_imported":"הקובץ הנבחר אינו תמה הנתמכת ע\\"י פלרומה. שום שינויים לא נעשו לתמה שלך.","limited_availability":"לא זמין בדפדפן שלך","links":"לינקים","lock_account_description":"הגבל את המשתמש לעוקבים מאושרים בלבד","loop_video":"נגן סרטונים ללא הפסקה","loop_video_silent_only":"נגן רק סרטונים חסרי קול ללא הפסקה","mutes_tab":"השתקות","play_videos_in_modal":"נגן סרטונים ישירות בנגן המדיה","use_contain_fit":"אל תחתוך את הצירוף בתמונות הממוזערות","name":"שם","name_bio":"שם ואודות","new_password":"סיסמה חדשה","notification_visibility":"סוג ההתראות שתרצו לראות","notification_visibility_follows":"עקיבות","notification_visibility_likes":"לייקים","notification_visibility_mentions":"אזכורים","notification_visibility_repeats":"חזרות","no_rich_text_description":"הסר פורמט טקסט עשיר מכל ההודעות","no_blocks":"ללא חסימות","no_mutes":"ללא השתקות","hide_follows_description":"אל תראה אחרי מי אני עוקב","hide_followers_description":"אל תראה מי עוקב אחרי","show_admin_badge":"הראה סמל מנהל בפרופיל שלי","show_moderator_badge":"הראה סמל צוות בפרופיל שלי","nsfw_clickthrough":"החל החבאת צירופים לא בטוחים לצפיה בעת עבודה בעזרת לחיצת עכבר","oauth_tokens":"אסימוני OAuth","token":"אסימון","refresh_token":"רענון האסימון","valid_until":"בתוקף עד","revoke_token":"בטל","panelRadius":"פאנלים","pause_on_unfocused":"השהה זרימת הודעות כשהחלון לא בפוקוס","presets":"ערכים קבועים מראש","profile_background":"רקע הפרופיל","profile_banner":"כרזת הפרופיל","profile_tab":"פרופיל","radii_help":"קבע מראש עיגול פינות לממשק (בפיקסלים)","replies_in_timeline":"תגובות בציר הזמן","reply_visibility_all":"הראה את כל התגובות","reply_visibility_following":"הראה תגובות שמופנות אליי או לעקובים שלי בלבד","reply_visibility_self":"הראה תגובות שמופנות אליי בלבד","autohide_floating_post_button":"החבא אוטומטית את הכפתור הודעה חדשה (נייד)","saving_err":"שגיאה בשמירת הגדרות","saving_ok":"הגדרות נשמרו","search_user_to_block":"חפש משתמש לחסימה","search_user_to_mute":"חפש משתמש להשתקה","security_tab":"ביטחון","scope_copy":"העתק תחום הודעה בתגובה להודעה (הודעות ישירות תמיד מועתקות)","minimal_scopes_mode":"צמצם אפשרויות בחירה לתחום הודעה","set_new_avatar":"קבע תמונת פרופיל חדשה","set_new_profile_background":"קבע רקע פרופיל חדש","set_new_profile_banner":"קבע כרזת פרופיל חדשה","settings":"הגדרות","subject_input_always_show":"תמיד הראה את שדה הנושא","subject_line_behavior":"העתק נושא בתגובה","subject_line_email":"כמו אימייל: \\"re: נושא\\"","subject_line_mastodon":"כמו מסטודון: העתק כפי שזה","subject_line_noop":"אל תעתיק","post_status_content_type":"שלח את סוג תוכן ההודעה","stop_gifs":"נגן-בעת-ריחוף GIFs","streaming":"החל זרימת הודעות אוטומטית בעת גלילה למעלה הדף","text":"טקסט","theme":"תמה","theme_help":"השתמש בקודי צבע הקס (#אדום-אדום-ירוק-ירוק-כחול-כחול) על מנת להתאים אישית את תמת הצבע שלך.","tooltipRadius":"טולטיפ \\\\ התראות","upload_a_photo":"העלה תמונה","user_settings":"הגדרות משתמש","values":{"false":"לא","true":"כן"},"notifications":"התראות","enable_web_push_notifications":"אפשר התראות web push","version":{"title":"גרסה","backend_version":"גרסת קצה אחורי","frontend_version":"גרסת קצה קדמי"}},"timeline":{"collapse":"מוטט","conversation":"שיחה","error_fetching":"שגיאה בהבאת הודעות","load_older":"טען סטטוסים חדשים","no_retweet_hint":"ההודעה מסומנת כ\\"לעוקבים-בלבד\\" ולא ניתן לחזור עליה","repeated":"חזר","show_new":"הראה חדש","up_to_date":"עדכני","no_more_statuses":"אין עוד סטטוסים","no_statuses":"אין סטטוסים"},"status":{"favorites":"מועדפים","repeats":"חזרות","delete":"מחק סטטוס","pin":"הצמד לפרופיל","unpin":"הסר הצמדה מהפרופיל","pinned":"מוצמד","delete_confirm":"האם באמת למחוק סטטוס זה?","reply_to":"הגב ל","replies_list":"תגובות:"},"user_card":{"approve":"אשר","block":"חסימה","blocked":"חסום!","deny":"דחה","favorites":"מועדפים","follow":"עקוב","follow_sent":"בקשה נשלחה!","follow_progress":"מבקש…","follow_unfollow":"בטל עקיבה","followees":"נעקבים","followers":"עוקבים","following":"עוקב!","follows_you":"עוקב אחריך!","its_you":"זה אתה!","media":"מדיה","mute":"השתק","muted":"מושתק","per_day":"ליום","remote_follow":"עקיבה מרחוק","report":"דווח","statuses":"סטטוסים","unblock":"הסר חסימה","unblock_progress":"מסיר חסימה…","block_progress":"חוסם…","unmute":"הסר השתקה","unmute_progress":"מסיר השתקה…","mute_progress":"משתיק…","admin_menu":{"moderation":"ניהול (צוות)","grant_admin":"הפוך למנהל","revoke_admin":"הסר מנהל","grant_moderator":"הפוך לצוות","revoke_moderator":"הסר צוות","activate_account":"הפעל משתמש","deactivate_account":"השבת משתמש","delete_account":"מחק משתמש","force_nsfw":"סמן את כל ההודעות בתור לא-מתאימות-לעבודה","strip_media":"הסר מדיה מההודעות","force_unlisted":"הפוך הודעות ללא רשומות","sandbox":"הפוך הודעות לנראות לעוקבים-בלבד","disable_remote_subscription":"אל תאפשר עקיבה של המשתמש מאינסטנס אחר","disable_any_subscription":"אל תאפשר עקיבה של המשתמש בכלל","quarantine":"אל תאפשר פדרציה של ההודעות של המשתמש","delete_user":"מחק משתמש","delete_user_confirmation":"בטוח? פעולה זו הינה בלתי הפיכה."}},"user_profile":{"timeline_title":"ציר זמן המשתמש","profile_does_not_exist":"סליחה, פרופיל זה אינו קיים.","profile_loading_error":"סליחה, הייתה שגיאה בטעינת הפרופיל."},"user_reporting":{"title":"מדווח על {0}","add_comment_description":"הדיווח ישלח לצוות האינסטנס. אפשר להסביר למה הנך מדווחים על משתמש זה למטה:","additional_comments":"תגובות נוספות","forward_description":"המשתמש משרת אחר. לשלוח לשם עותק של הדיווח?","forward_to":"העבר ל {0}","submit":"הגש","generic_error":"קרתה שגיאה בעת עיבוד הבקשה."},"who_to_follow":{"more":"עוד","who_to_follow":"אחרי מי לעקוב"},"tool_tip":{"media_upload":"העלה מדיה","repeat":"חזור","reply":"הגב","favorite":"מועדף","user_settings":"הגדרות משתמש"},"upload":{"error":{"base":"העלאה נכשלה.","file_too_big":"קובץ גדול מדי [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]","default":"נסה שוב אחר כך"},"file_size_units":{"B":"B","KiB":"KiB","MiB":"MiB","GiB":"GiB","TiB":"TiB"}},"about":{"mrf":{"keyword":{"keyword_policies":"פוליסת מילות מפתח"},"federation":"פדרציה"}}}')}}]); +//# sourceMappingURL=16.43dd2c64dcb160dd96a6.js.map \ No newline at end of file diff --git a/priv/static/static/js/16.43dd2c64dcb160dd96a6.js.map b/priv/static/static/js/16.43dd2c64dcb160dd96a6.js.map new file mode 100644 index 000000000..20ab38e81 --- /dev/null +++ b/priv/static/static/js/16.43dd2c64dcb160dd96a6.js.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/16.43dd2c64dcb160dd96a6.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/16.90b5ee380da41d6d061c.js.map b/priv/static/static/js/16.90b5ee380da41d6d061c.js.map deleted file mode 100644 index f69273c5c..000000000 --- a/priv/static/static/js/16.90b5ee380da41d6d061c.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/16.90b5ee380da41d6d061c.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/17.c5a6513076aa9c5a9564.js.map b/priv/static/static/js/17.c5a6513076aa9c5a9564.js.map deleted file mode 100644 index f2ac5ef45..000000000 --- a/priv/static/static/js/17.c5a6513076aa9c5a9564.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/17.c5a6513076aa9c5a9564.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/17.c5a6513076aa9c5a9564.js b/priv/static/static/js/17.d1deeeb81b7cab98b068.js similarity index 94% rename from priv/static/static/js/17.c5a6513076aa9c5a9564.js rename to priv/static/static/js/17.d1deeeb81b7cab98b068.js index 74c623294..519a6e2bd 100644 --- a/priv/static/static/js/17.c5a6513076aa9c5a9564.js +++ b/priv/static/static/js/17.d1deeeb81b7cab98b068.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{597:function(e){e.exports=JSON.parse('{"finder":{"error_fetching_user":"Hiba felhasználó beszerzésével","find_user":"Felhasználó keresése"},"general":{"submit":"Elküld"},"login":{"login":"Bejelentkezés","logout":"Kijelentkezés","password":"Jelszó","placeholder":"e.g. lain","register":"Feliratkozás","username":"Felhasználó név"},"nav":{"mentions":"Említéseim","public_tl":"Publikus Idővonal","timeline":"Idővonal","twkn":"Az Egész Ismert Hálózat"},"notifications":{"followed_you":"követ téged","notifications":"Értesítések","read":"Olvasva!"},"post_status":{"default":"Most érkeztem L.A.-be","posting":"Küldés folyamatban"},"registration":{"bio":"Bio","email":"Email","fullname":"Teljes név","password_confirm":"Jelszó megerősítése","registration":"Feliratkozás"},"settings":{"attachments":"Csatolmányok","avatar":"Avatár","bio":"Bio","current_avatar":"Jelenlegi avatár","current_profile_banner":"Jelenlegi profil banner","filtering":"Szűrés","filtering_explanation":"Minden tartalom mely ezen szavakat tartalmazza némítva lesz, soronként egy","hide_attachments_in_convo":"Csatolmányok elrejtése a társalgásokban","hide_attachments_in_tl":"Csatolmányok elrejtése az idővonalon","name":"Név","name_bio":"Név és Bio","nsfw_clickthrough":"NSFW átkattintási tartalom elrejtésének engedélyezése","profile_background":"Profil háttérkép","profile_banner":"Profil Banner","set_new_avatar":"Új avatár","set_new_profile_background":"Új profil háttér beállítása","set_new_profile_banner":"Új profil banner","settings":"Beállítások","theme":"Téma","user_settings":"Felhasználói beállítások"},"timeline":{"conversation":"Társalgás","error_fetching":"Hiba a frissítések beszerzésénél","load_older":"Régebbi állapotok betöltése","show_new":"Újak mutatása","up_to_date":"Naprakész"},"user_card":{"block":"Letilt","blocked":"Letiltva!","follow":"Követ","followees":"Követettek","followers":"Követők","following":"Követve!","follows_you":"Követ téged!","mute":"Némít","muted":"Némított","per_day":"naponta","statuses":"Állapotok"}}')}}]); -//# sourceMappingURL=17.c5a6513076aa9c5a9564.js.map \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{610:function(e){e.exports=JSON.parse('{"finder":{"error_fetching_user":"Hiba felhasználó beszerzésével","find_user":"Felhasználó keresése"},"general":{"submit":"Elküld"},"login":{"login":"Bejelentkezés","logout":"Kijelentkezés","password":"Jelszó","placeholder":"e.g. lain","register":"Feliratkozás","username":"Felhasználó név"},"nav":{"mentions":"Említéseim","public_tl":"Publikus Idővonal","timeline":"Idővonal","twkn":"Az Egész Ismert Hálózat"},"notifications":{"followed_you":"követ téged","notifications":"Értesítések","read":"Olvasva!"},"post_status":{"default":"Most érkeztem L.A.-be","posting":"Küldés folyamatban"},"registration":{"bio":"Bio","email":"Email","fullname":"Teljes név","password_confirm":"Jelszó megerősítése","registration":"Feliratkozás"},"settings":{"attachments":"Csatolmányok","avatar":"Avatár","bio":"Bio","current_avatar":"Jelenlegi avatár","current_profile_banner":"Jelenlegi profil banner","filtering":"Szűrés","filtering_explanation":"Minden tartalom mely ezen szavakat tartalmazza némítva lesz, soronként egy","hide_attachments_in_convo":"Csatolmányok elrejtése a társalgásokban","hide_attachments_in_tl":"Csatolmányok elrejtése az idővonalon","name":"Név","name_bio":"Név és Bio","nsfw_clickthrough":"NSFW átkattintási tartalom elrejtésének engedélyezése","profile_background":"Profil háttérkép","profile_banner":"Profil Banner","set_new_avatar":"Új avatár","set_new_profile_background":"Új profil háttér beállítása","set_new_profile_banner":"Új profil banner","settings":"Beállítások","theme":"Téma","user_settings":"Felhasználói beállítások"},"timeline":{"conversation":"Társalgás","error_fetching":"Hiba a frissítések beszerzésénél","load_older":"Régebbi állapotok betöltése","show_new":"Újak mutatása","up_to_date":"Naprakész"},"user_card":{"block":"Letilt","blocked":"Letiltva!","follow":"Követ","followees":"Követettek","followers":"Követők","following":"Követve!","follows_you":"Követ téged!","mute":"Némít","muted":"Némított","per_day":"naponta","statuses":"Állapotok"}}')}}]); +//# sourceMappingURL=17.d1deeeb81b7cab98b068.js.map \ No newline at end of file diff --git a/priv/static/static/js/17.d1deeeb81b7cab98b068.js.map b/priv/static/static/js/17.d1deeeb81b7cab98b068.js.map new file mode 100644 index 000000000..156fad930 --- /dev/null +++ b/priv/static/static/js/17.d1deeeb81b7cab98b068.js.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/17.d1deeeb81b7cab98b068.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/18.a4d5b399e228a6a45a7b.js b/priv/static/static/js/18.a4d5b399e228a6a45a7b.js new file mode 100644 index 000000000..1b17be977 --- /dev/null +++ b/priv/static/static/js/18.a4d5b399e228a6a45a7b.js @@ -0,0 +1,2 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[18],{611:function(e){e.exports=JSON.parse('{"general":{"submit":"Invia","apply":"Applica","more":"Altro","generic_error":"Errore","optional":"facoltativo","show_more":"Mostra tutto","show_less":"Ripiega","dismiss":"Chiudi","cancel":"Annulla","disable":"Disabilita","enable":"Abilita","confirm":"Conferma","verify":"Verifica","peek":"Anteprima","close":"Chiudi","retry":"Riprova","error_retry":"Per favore, riprova","loading":"Carico…","role":{"moderator":"Moderatore","admin":"Amministratore"},"flash_fail":"Contenuto Flash non caricato, vedi console del browser.","flash_content":"Mostra contenuto Flash tramite Ruffle (funzione in prova).","flash_security":"Può essere pericoloso perché i contenuti in Flash sono eseguibili."},"nav":{"mentions":"Menzioni","public_tl":"Sequenza pubblica","timeline":"Sequenza personale","twkn":"Sequenza federale","chat":"Chat della stanza","friend_requests":"Vogliono seguirti","about":"Informazioni","administration":"Amministrazione","back":"Indietro","interactions":"Interazioni","dms":"Messaggi privati","user_search":"Ricerca utenti","search":"Ricerca","who_to_follow":"Chi seguire","preferences":"Preferenze","bookmarks":"Segnalibri","chats":"Conversazioni","timelines":"Sequenze","home_timeline":"Sequenza personale"},"notifications":{"followed_you":"ti segue","notifications":"Notifiche","read":"Letto!","broken_favorite":"Stato sconosciuto, lo sto cercando…","favorited_you":"ha gradito","load_older":"Carica notifiche precedenti","repeated_you":"ha condiviso il tuo messaggio","follow_request":"vuole seguirti","no_more_notifications":"Fine delle notifiche","migrated_to":"è migrato verso","reacted_with":"ha reagito con {0}","error":"Errore nel caricare le notifiche: {0}"},"settings":{"attachments":"Allegati","avatar":"Icona utente","bio":"Introduzione","current_avatar":"La tua icona attuale","current_profile_banner":"Il tuo stendardo attuale","filtering":"Filtri","filtering_explanation":"Tutti i messaggi contenenti queste parole saranno silenziati, una per riga","hide_attachments_in_convo":"Nascondi gli allegati presenti nelle conversazioni","hide_attachments_in_tl":"Nascondi gli allegati presenti nelle sequenze","name":"Nome","name_bio":"Nome ed introduzione","nsfw_clickthrough":"Fai click per visualizzare gli allegati offuscati","profile_background":"Sfondo del tuo profilo","profile_banner":"Gonfalone del tuo profilo","set_new_avatar":"Scegli una nuova icona","set_new_profile_background":"Scegli un nuovo sfondo","set_new_profile_banner":"Scegli un nuovo gonfalone","settings":"Impostazioni","theme":"Tema","user_settings":"Impostazioni Utente","attachmentRadius":"Allegati","avatarAltRadius":"Icone utente (Notifiche)","avatarRadius":"Icone utente","background":"Sfondo","btnRadius":"Pulsanti","cBlue":"Blu (rispondi, segui)","cGreen":"Verde (ripeti)","cOrange":"Arancione (gradisci)","cRed":"Rosso (annulla)","change_password":"Cambia password","change_password_error":"C\'è stato un problema durante il cambiamento della password.","changed_password":"Password cambiata correttamente!","collapse_subject":"Ripiega messaggi con oggetto","confirm_new_password":"Conferma la nuova password","current_password":"La tua password attuale","data_import_export_tab":"Importa o esporta dati","default_vis":"Visibilità predefinita dei messaggi","delete_account":"Elimina profilo","delete_account_description":"Elimina definitivamente i tuoi dati e disattiva il tuo profilo.","delete_account_error":"C\'è stato un problema durante l\'eliminazione del tuo profilo. Se il problema persiste contatta l\'amministratore della tua stanza.","delete_account_instructions":"Digita la tua password nel campo sottostante per eliminare il tuo profilo.","export_theme":"Salva impostazioni","follow_export":"Esporta la lista di chi segui","follow_export_button":"Esporta la lista di chi segui in un file CSV","follow_export_processing":"Sto elaborando, presto ti sarà chiesto di scaricare il tuo file","follow_import":"Importa la lista di chi segui","follow_import_error":"Errore nell\'importazione della lista di chi segui","follows_imported":"Importazione riuscita! L\'elaborazione richiederà un po\' di tempo.","foreground":"Primo piano","general":"Generale","hide_post_stats":"Nascondi statistiche dei messaggi (es. il numero di preferenze)","hide_user_stats":"Nascondi statistiche dell\'utente (es. il numero di seguaci)","import_followers_from_a_csv_file":"Importa una lista di chi segui da un file CSV","import_theme":"Carica impostazioni","inputRadius":"Campi di testo","instance_default":"(predefinito: {value})","interfaceLanguage":"Lingua dell\'interfaccia","invalid_theme_imported":"Il file selezionato non è un tema supportato da Pleroma. Il tuo tema non è stato modificato.","limited_availability":"Non disponibile nel tuo browser","links":"Collegamenti","lock_account_description":"Vaglia manualmente i nuovi seguaci","loop_video":"Riproduci video in ciclo continuo","loop_video_silent_only":"Riproduci solo video muti in ciclo continuo (es. le \\"gif\\" di Mastodon)","new_password":"Nuova password","notification_visibility":"Tipi di notifiche da mostrare","notification_visibility_follows":"Nuovi seguaci","notification_visibility_likes":"Preferiti","notification_visibility_mentions":"Menzioni","notification_visibility_repeats":"Condivisioni","no_rich_text_description":"Togli la formattazione del testo da tutti i messaggi","oauth_tokens":"Token OAuth","token":"Token","refresh_token":"Aggiorna token","valid_until":"Valido fino a","revoke_token":"Revoca","panelRadius":"Pannelli","pause_on_unfocused":"Interrompi l\'aggiornamento continuo mentre la scheda è in secondo piano","presets":"Valori predefiniti","profile_tab":"Profilo","radii_help":"Imposta il raggio degli angoli (in pixel)","replies_in_timeline":"Risposte nelle sequenze","reply_visibility_all":"Mostra tutte le risposte","reply_visibility_following":"Mostra solo le risposte rivolte a me o agli utenti che seguo","reply_visibility_self":"Mostra solo risposte rivolte a me","saving_err":"Errore nel salvataggio delle impostazioni","saving_ok":"Impostazioni salvate","security_tab":"Sicurezza","stop_gifs":"Riproduci GIF al passaggio del cursore","streaming":"Mostra automaticamente i nuovi messaggi quando sei in cima alla pagina","text":"Testo","theme_help":"Usa colori esadecimali (#rrggbb) per personalizzare il tuo schema di colori.","tooltipRadius":"Suggerimenti/avvisi","values":{"false":"no","true":"sì"},"avatar_size_instruction":"La taglia minima per l\'icona personale è 150x150 pixel.","domain_mutes":"Domini","discoverable":"Permetti la scoperta di questo profilo a servizi di ricerca ed altro","composing":"Composizione","changed_email":"Email cambiata con successo!","change_email_error":"C\'è stato un problema nel cambiare la tua email.","change_email":"Cambia email","blocks_tab":"Bloccati","blocks_imported":"Blocchi importati! Saranno elaborati a breve.","block_import_error":"Errore nell\'importazione","block_import":"Importa blocchi","block_export_button":"Esporta i tuoi blocchi in un file CSV","block_export":"Esporta blocchi","allow_following_move":"Consenti l\'iscrizione automatica ai profili traslocati","mfa":{"verify":{"desc":"Per abilitare l\'autenticazione bifattoriale, inserisci il codice fornito dalla tua applicazione:"},"scan":{"secret_code":"Codice","desc":"Con la tua applicazione bifattoriale, acquisisci il QR o inserisci il codice:","title":"Acquisisci"},"authentication_methods":"Metodi di accesso","recovery_codes_warning":"Metti i codici al sicuro, perché non potrai più visualizzarli. Se perderai l\'accesso sia alla tua applicazione bifattoriale che ai codici di recupero non potrai più accedere al tuo profilo.","waiting_a_recovery_codes":"Ricevo codici di recupero…","recovery_codes":"Codici di recupero.","warning_of_generate_new_codes":"Alla generazione di nuovi codici di recupero, quelli vecchi saranno disattivati.","generate_new_recovery_codes":"Genera nuovi codici di recupero","title":"Accesso bifattoriale","confirm_and_enable":"Conferma ed abilita OTP","wait_pre_setup_otp":"preimposto OTP","setup_otp":"Imposta OTP","otp":"OTP"},"enter_current_password_to_confirm":"Inserisci la tua password per identificarti","security":"Sicurezza","app_name":"Nome applicazione","style":{"switcher":{"help":{"older_version_imported":"Il tema importato è stato creato per una versione precedente dell\'interfaccia.","future_version_imported":"Il tema importato è stato creato per una versione più recente dell\'interfaccia.","v2_imported":"Il tema importato è stato creato per una vecchia interfaccia. Non tutto potrebbe essere come inteso.","upgraded_from_v2":"L\'interfaccia è stata aggiornata, il tema potrebbe essere diverso da come lo ricordi.","migration_snapshot_ok":"Ho caricato l\'anteprima del tema. Puoi provare a caricarne i contenuti.","fe_downgraded":"L\'interfaccia è stata portata ad una versione precedente.","fe_upgraded":"Lo schema dei temi è stato aggiornato insieme all\'interfaccia.","snapshot_missing":"Il tema non è provvisto di anteprima, quindi potrebbe essere diverso da come appare.","snapshot_present":"Tutti i valori sono sostituiti dall\'anteprima del tema. Puoi invece caricare i suoi contenuti.","snapshot_source_mismatch":"Conflitto di versione: probabilmente l\'interfaccia è stata portata indietro e poi aggiornata di nuovo. Se hai modificato il tema con una vecchia versione usa il tema precedente, altrimenti puoi usare il nuovo.","migration_napshot_gone":"Anteprima del tema non trovata, non tutto potrebbe essere come ricordi."},"use_source":"Nuova versione","use_snapshot":"Versione precedente","keep_as_is":"Mantieni tal quale","load_theme":"Carica tema","clear_opacity":"Rimuovi opacità","clear_all":"Azzera tutto","reset":"Reimposta","save_load_hint":"Le opzioni \\"mantieni\\" conservano le impostazioni correnti quando selezioni o carichi un tema, e le salvano quando ne esporti uno. Quando nessuna casella è selezionata, tutte le impostazioni correnti saranno salvate nel tema.","keep_fonts":"Mantieni font","keep_roundness":"Mantieni vertici","keep_opacity":"Mantieni opacità","keep_shadows":"Mantieni ombre","keep_color":"Mantieni colori"},"common":{"opacity":"Opacità","color":"Colore","contrast":{"context":{"text":"per il testo","18pt":"per il testo oltre 17pt"},"level":{"bad":"non soddisfa le linee guida di alcun livello","aaa":"soddisfa le linee guida di livello AAA (ottimo)","aa":"soddisfa le linee guida di livello AA (sufficiente)"},"hint":"Il rapporto di contrasto è {ratio}, e {level} {context}"}},"advanced_colors":{"badge":"Sfondo medaglie","post":"Messaggi / Biografie","alert_neutral":"Neutro","alert_warning":"Attenzione","alert_error":"Errore","alert":"Sfondo degli avvertimenti","_tab_label":"Avanzate","tabs":"Etichette","disabled":"Disabilitato","selectedMenu":"Voce menù selezionata","selectedPost":"Messaggio selezionato","pressed":"Premuto","highlight":"Elementi in risalto","icons":"Icone","poll":"Grafico sondaggi","underlay":"Sottostante","faint_text":"Testo sbiadito","inputs":"Campi d\'immissione","buttons":"Pulsanti","borders":"Bordi","top_bar":"Barra superiore","panel_header":"Titolo pannello","badge_notification":"Notifica","popover":"Suggerimenti, menù, sbalzi","toggled":"Scambiato","chat":{"border":"Bordo","outgoing":"Inviati","incoming":"Ricevuti"},"wallpaper":"Sfondo"},"common_colors":{"rgbo":"Icone, accenti, medaglie","foreground_hint":"Seleziona l\'etichetta \\"Avanzate\\" per controlli più fini","main":"Colori comuni","_tab_label":"Comuni"},"shadows":{"inset":"Includi","spread":"Spandi","blur":"Sfoca","shadow_id":"Ombra numero {value}","override":"Sostituisci","component":"Componente","_tab_label":"Luci ed ombre","components":{"avatarStatus":"Icona utente (vista messaggio)","avatar":"Icona utente (vista profilo)","topBar":"Barra superiore","panelHeader":"Intestazione pannello","panel":"Pannello","input":"Campo d\'immissione","buttonPressedHover":"Pulsante (puntato e premuto)","buttonPressed":"Pulsante (premuto)","buttonHover":"Pulsante (puntato)","button":"Pulsante","popup":"Sbalzi e suggerimenti"},"filter_hint":{"inset_classic":"Le ombre incluse usano {0}","spread_zero":"Lo spandimento maggiore di zero si azzera sulle ombre","avatar_inset":"Tieni presente che combinare ombre (sia incluse che non) sulle icone utente potrebbe dare risultati strani con quelle trasparenti.","drop_shadow_syntax":"{0} non supporta il parametro {1} né la keyword {2}.","always_drop_shadow":"Attenzione: quest\'ombra usa sempre {0} se il tuo browser lo supporta."},"hintV3":"Per le ombre puoi anche usare la sintassi {0} per sfruttare il secondo colore."},"radii":{"_tab_label":"Raggio"},"fonts":{"_tab_label":"Font","custom":"Personalizzato","weight":"Grassettatura","size":"Dimensione in pixel","family":"Nome font","components":{"postCode":"Font a spaziatura fissa incluso in un messaggio","post":"Testo del messaggio","input":"Campi d\'immissione","interface":"Interfaccia"},"help":"Seleziona il font da usare per gli elementi dell\'interfaccia. Se scegli \\"personalizzato\\" devi inserire il suo nome di sistema."},"preview":{"link":"un bel collegamentino","checkbox":"Ho dato uno sguardo a termini e condizioni","header_faint":"Tutto bene","fine_print":"Leggi il nostro {0} per imparare un bel niente!","faint_link":"utilissimo manuale","input":"Sono appena atterrato a Fiumicino.","mono":"contenuto","text":"Altro {0} e {1}","content":"Contenuto","button":"Pulsante","error":"Errore d\'esempio","header":"Anteprima"}},"enable_web_push_notifications":"Abilita notifiche web push","fun":"Divertimento","notification_mutes":"Per non ricevere notifiche da uno specifico utente, silenzialo.","notification_setting_privacy_option":"Nascondi mittente e contenuti delle notifiche push","notification_setting_privacy":"Privacy","notification_setting_filters":"Filtri","notifications":"Notifiche","greentext":"Frecce da meme","upload_a_photo":"Carica un\'immagine","type_domains_to_mute":"Cerca domini da silenziare","theme_help_v2_2":"Le icone vicino alcuni elementi sono indicatori del contrasto fra testo e sfondo, passaci sopra col puntatore per ulteriori informazioni. Se usani trasparenze, questi indicatori mostrano il peggior caso possibile.","theme_help_v2_1":"Puoi anche forzare colore ed opacità di alcuni elementi selezionando la casella. Usa il pulsante \\"Azzera\\" per azzerare tutte le forzature.","useStreamingApiWarning":"(Sconsigliato, sperimentale, può saltare messaggi)","useStreamingApi":"Ricevi messaggi e notifiche in tempo reale","user_mutes":"Utenti","post_status_content_type":"Tipo di contenuto dei messaggi","subject_line_noop":"Non copiare","subject_line_mastodon":"Come in Mastodon: copia tal quale","subject_line_email":"Come nelle email: \\"re: oggetto\\"","subject_line_behavior":"Copia oggetto quando rispondi","subject_input_always_show":"Mostra sempre il campo Oggetto","minimal_scopes_mode":"Riduci opzioni di visibilità","scope_copy":"Risposte ereditano la visibilità (messaggi privati lo fanno sempre)","search_user_to_mute":"Cerca utente da silenziare","search_user_to_block":"Cerca utente da bloccare","autohide_floating_post_button":"Nascondi automaticamente il pulsante di composizione (mobile)","show_moderator_badge":"Mostra l\'insegna di moderatore sul mio profilo","show_admin_badge":"Mostra l\'insegna di amministratore sul mio profilo","hide_followers_count_description":"Non mostrare quanti seguaci ho","hide_follows_count_description":"Non mostrare quanti utenti seguo","hide_followers_description":"Non mostrare i miei seguaci","hide_follows_description":"Non mostrare chi seguo","no_mutes":"Nessun utente silenziato","no_blocks":"Nessun utente bloccato","notification_visibility_emoji_reactions":"Reazioni","notification_visibility_moves":"Migrazioni utenti","new_email":"Nuova email","use_contain_fit":"Non ritagliare le anteprime degli allegati","play_videos_in_modal":"Riproduci video in un riquadro a sbalzo","mutes_tab":"Silenziati","interface":"Interfaccia","instance_default_simple":"(predefinito)","checkboxRadius":"Caselle di selezione","import_blocks_from_a_csv_file":"Importa blocchi da un file CSV","hide_filtered_statuses":"Nascondi messaggi filtrati","use_one_click_nsfw":"Apri media offuscati con un solo click","preload_images":"Precarica immagini","hide_isp":"Nascondi pannello della stanza","max_thumbnails":"Numero massimo di anteprime per messaggio","hide_muted_posts":"Nascondi messaggi degli utenti silenziati","accent":"Accento","emoji_reactions_on_timeline":"Mostra reazioni nelle sequenze","pad_emoji":"Affianca spazi agli emoji inseriti tramite selettore","notification_blocks":"Bloccando un utente non riceverai più le sue notifiche né lo seguirai più.","mutes_and_blocks":"Silenziati e bloccati","profile_fields":{"value":"Contenuto","name":"Descrizione","add_field":"Aggiungi campo","label":"Metadati profilo"},"bot":"Questo è un robot","version":{"frontend_version":"Versione interfaccia","backend_version":"Versione backend","title":"Versione"},"reset_avatar":"Azzera icona","reset_profile_background":"Azzera sfondo","reset_profile_banner":"Azzera gonfalone","reset_avatar_confirm":"Vuoi veramente azzerare l\'icona?","reset_banner_confirm":"Vuoi veramente azzerare il gonfalone?","reset_background_confirm":"Vuoi veramente azzerare lo sfondo?","chatMessageRadius":"Messaggi istantanei","notification_setting_hide_notification_contents":"Nascondi mittente e contenuti delle notifiche push","notification_setting_block_from_strangers":"Blocca notifiche da utenti che non segui","virtual_scrolling":"Velocizza l\'elaborazione delle sequenze","import_mutes_from_a_csv_file":"Importa silenziati da un file CSV","mutes_imported":"Silenziati importati! Elaborazione in corso.","mute_import_error":"Errore nell\'importazione","mute_import":"Carica silenziati","mute_export_button":"Esporta i silenziati in un file CSV","mute_export":"Esporta silenziati","hide_wallpaper":"Nascondi sfondo della stanza","setting_changed":"Valore personalizzato","more_settings":"Altre impostazioni","sensitive_by_default":"Tutti i miei messaggi sono scabrosi","reply_visibility_self_short":"Vedi solo risposte a te","reply_visibility_following_short":"Vedi risposte a messaggi di altri","hide_all_muted_posts":"Nascondi messaggi silenziati","hide_media_previews":"Nascondi anteprime","word_filter":"Parole filtrate","save":"Salva modifiche","file_export_import":{"errors":{"file_slightly_new":"Versione minore diversa, qualcosa potrebbe non combaciare.","file_too_old":"Versione troppo vecchia: {fileMajor}. Questa versione dell\'interfaccia ({feMajor}) non supporta il file.","file_too_new":"Versione troppo recente: {fileMajor}. Questa versione dell\'interfaccia ({feMajor}) non supporta il file.","invalid_file":"Il file selezionato non è un archivio supportato. Nessuna modifica è stata apportata."},"restore_settings":"Carica impostazioni sul server","backup_settings_theme":"Archivia impostazioni e tema localmente","backup_settings":"Archivia impostazioni localmente","backup_restore":"Archiviazione impostazioni"},"right_sidebar":"Mostra barra laterale a destra","hide_shoutbox":"Nascondi muro dei graffiti"},"timeline":{"error_fetching":"Errore nell\'aggiornamento","load_older":"Carica messaggi precedenti","show_new":"Mostra nuovi","up_to_date":"Aggiornato","collapse":"Ripiega","conversation":"Conversazione","no_retweet_hint":"Il messaggio è diretto o solo per seguaci e non può essere condiviso","repeated":"ha condiviso","no_statuses":"Nessun messaggio","no_more_statuses":"Fine dei messaggi","reload":"Ricarica","error":"Errore nel caricare la sequenza: {0}","socket_broke":"Connessione tempo reale interrotta: codice {0}","socket_reconnected":"Connesso in tempo reale"},"user_card":{"follow":"Segui","followees":"Segue","followers":"Seguaci","following":"Seguìto!","follows_you":"Ti segue!","mute":"Silenzia","muted":"Silenziato","per_day":"al giorno","statuses":"Messaggi","approve":"Approva","block":"Blocca","blocked":"Bloccato!","deny":"Nega","remote_follow":"Segui da remoto","admin_menu":{"delete_user_confirmation":"Ne sei completamente sicuro? Non potrai tornare indietro.","delete_user":"Elimina utente","quarantine":"I messaggi non arriveranno alle altre stanze","disable_any_subscription":"Rendi utente non seguibile","disable_remote_subscription":"Blocca i tentativi di seguirlo da altre stanze","sandbox":"Rendi tutti i messaggi solo per seguaci","force_unlisted":"Nascondi tutti i messaggi","strip_media":"Rimuovi ogni allegato ai messaggi","force_nsfw":"Oscura tutti i messaggi","delete_account":"Elimina profilo","deactivate_account":"Disattiva profilo","activate_account":"Attiva profilo","revoke_moderator":"Divesti Moderatore","grant_moderator":"Crea Moderatore","revoke_admin":"Divesti Amministratore","grant_admin":"Crea Amministratore","moderation":"Moderazione"},"show_repeats":"Mostra condivisioni","hide_repeats":"Nascondi condivisioni","mute_progress":"Silenzio…","unmute_progress":"Riabilito…","unmute":"Riabilita","block_progress":"Blocco…","unblock_progress":"Sblocco…","unblock":"Sblocca","unsubscribe":"Disdici","subscribe":"Abbònati","report":"Segnala","mention":"Menziona","media":"Media","its_you":"Sei tu!","hidden":"Nascosto","follow_unfollow":"Disconosci","follow_progress":"Richiedo…","follow_sent":"Richiesta inviata!","favorites":"Preferiti","message":"Contatta","bot":"Bot","highlight":{"side":"Nastro a lato","striped":"A righe","solid":"Un colore","disabled":"Nessun risalto"},"edit_profile":"Modifica profilo"},"chat":{"title":"Chat"},"features_panel":{"chat":"Chat","gopher":"Gopher","media_proxy":"Proxy allegati","scope_options":"Opzioni visibilità","text_limit":"Lunghezza massima","title":"Caratteristiche","who_to_follow":"Chi seguire","pleroma_chat_messages":"Chiacchiere","upload_limit":"Limite allegati"},"finder":{"error_fetching_user":"Errore nel recupero dell\'utente","find_user":"Cerca utente"},"login":{"login":"Accedi","logout":"Disconnettiti","password":"Password","placeholder":"es. Lupo Lucio","register":"Registrati","username":"Nome utente","description":"Accedi con OAuth","hint":"Accedi per conversare","authentication_code":"Codice di autenticazione","enter_recovery_code":"Inserisci un codice di recupero","enter_two_factor_code":"Inserisci un codice 2FA","recovery_code":"Codice di recupero","heading":{"totp":"Autenticazione 2FA","recovery":"Recupero 2FA"}},"post_status":{"account_not_locked_warning":"Il tuo profilo non è {0}. Chiunque può seguirti e vedere i tuoi messaggi per seguaci.","account_not_locked_warning_link":"protetto","attachments_sensitive":"Nascondi gli allegati","content_type":{"text/plain":"Testo normale","text/bbcode":"BBCode","text/markdown":"Markdown","text/html":"HTML"},"content_warning":"Oggetto (facoltativo)","default":"Sono appena atterrato a Città Laggiù.","direct_warning":"Questo post sarà visibile solo dagli utenti menzionati.","posting":"Sto pubblicando","scope":{"direct":"Diretto - Visibile solo agli utenti menzionati","private":"Solo per seguaci - Visibile solo dai tuoi seguaci","public":"Pubblico - Visibile sulla sequenza pubblica","unlisted":"Nascosto - Non visibile sulla sequenza pubblica"},"scope_notice":{"unlisted":"Questo messaggio non sarà visibile sulla sequenza locale né su quella pubblica","private":"Questo messaggio sarà visibile solo ai tuoi seguaci","public":"Questo messaggio sarà visibile a tutti"},"direct_warning_to_first_only":"Questo messaggio sarà visibile solo agli utenti menzionati in testa.","direct_warning_to_all":"Questo messaggio sarà visibile a tutti i menzionati.","new_status":"Nuovo messaggio","empty_status_error":"Aggiungi del testo o degli allegati","preview_empty":"Vuoto","preview":"Anteprima","media_description_error":"Allegati non caricati, riprova","media_description":"Descrizione allegati","post":"Pubblica"},"registration":{"bio":"Introduzione","email":"Email","fullname":"Nome visualizzato","password_confirm":"Conferma password","registration":"Registrazione","token":"Codice d\'invito","validations":{"password_confirmation_match":"dovrebbe essere uguale alla password","password_confirmation_required":"non può essere vuoto","password_required":"non può essere vuoto","email_required":"non può essere vuoto","fullname_required":"non può essere vuoto","username_required":"non può essere vuoto"},"bio_placeholder":"es.\\nCiao, sono Lupo Lucio.\\nSono un lupo fantastico che vive nel Fantabosco. Forse mi hai visto alla Melevisione.","fullname_placeholder":"es. Lupo Lucio","username_placeholder":"es. mister_wolf","new_captcha":"Clicca il captcha per averne uno nuovo","captcha":"CAPTCHA","reason_placeholder":"L\'amministratore esamina ciascuna richiesta.\\nFornisci il motivo della tua iscrizione.","reason":"Motivo dell\'iscrizione","register":"Registrati"},"user_profile":{"timeline_title":"Sequenza dell\'utente","profile_loading_error":"Spiacente, c\'è stato un errore nel caricamento del profilo.","profile_does_not_exist":"Spiacente, questo profilo non esiste."},"who_to_follow":{"more":"Altro","who_to_follow":"Chi seguire"},"about":{"mrf":{"federation":"Federazione","keyword":{"reject":"Rifiuta","replace":"Sostituisci","is_replaced_by":"→","keyword_policies":"Regole per parole chiave","ftl_removal":"Rimozione dalla sequenza federale"},"simple":{"reject":"Rifiuta","accept":"Accetta","simple_policies":"Regole specifiche alla stanza","accept_desc":"Questa stanza accetta messaggi solo dalle seguenti altre:","reject_desc":"Questa stanza rifiuterà i messaggi provenienti dalle seguenti:","quarantine":"Quarantena","quarantine_desc":"Questa stanza inoltrerà solo messaggi pubblici alle seguenti:","ftl_removal":"Rimozione dalla sequenza federale","ftl_removal_desc":"Questa stanza rimuove le seguenti dalla sequenza federale:","media_removal":"Rimozione multimedia","media_removal_desc":"Questa istanza rimuove gli allegati dalle seguenti stanze:","media_nsfw":"Allegati oscurati d\'ufficio","media_nsfw_desc":"Questa stanza oscura gli allegati dei messaggi provenienti da queste stanze:"},"mrf_policies":"Regole RM abilitate","mrf_policies_desc":"Le regole RM cambiano il comportamento federativo della stanza. Vigono le seguenti regole:"},"staff":"Responsabili"},"domain_mute_card":{"mute":"Silenzia","mute_progress":"Procedo…","unmute":"Ascolta","unmute_progress":"Procedo…"},"exporter":{"export":"Esporta","processing":"In elaborazione, il tuo file sarà scaricabile a breve"},"image_cropper":{"crop_picture":"Ritaglia immagine","save":"Salva","save_without_cropping":"Salva senza ritagliare","cancel":"Annulla"},"importer":{"submit":"Invia","success":"Importato.","error":"L\'importazione non è andata a buon fine."},"media_modal":{"previous":"Precedente","next":"Prossimo"},"polls":{"add_poll":"Sondaggio","add_option":"Aggiungi opzione","option":"Opzione","votes":"voti","vote":"Vota","type":"Tipo di sondaggio","single_choice":"Scelta singola","multiple_choices":"Scelta multipla","expiry":"Età","expires_in":"Chiude fra {0}","expired":"Chiuso {0} fa","not_enough_options":"Aggiungi altre risposte","votes_count":"{count} voto | {count} voti","people_voted_count":"{count} votante | {count} votanti"},"interactions":{"favs_repeats":"Condivisi e Graditi","load_older":"Carica interazioni precedenti","moves":"Utenti migrati","follows":"Nuovi seguìti"},"emoji":{"load_all":"Carico tutti i {emojiAmount} emoji","load_all_hint":"Primi {saneAmount} emoji caricati, caricarli tutti potrebbe causare rallentamenti.","unicode":"Emoji Unicode","custom":"Emoji della stanza","add_emoji":"Inserisci emoji","search_emoji":"Cerca un emoji","keep_open":"Tieni aperto il menù","emoji":"Emoji","stickers":"Adesivi"},"selectable_list":{"select_all":"Seleziona tutto"},"remote_user_resolver":{"error":"Non trovato.","searching_for":"Cerco","remote_user_resolver":"Cerca utenti remoti"},"errors":{"storage_unavailable":"Pleroma non può accedere ai dati del tuo browser. Il tuo accesso o le tue impostazioni non saranno salvate e potresti incontrare strani errori. Prova ad abilitare i cookie."},"status":{"pinned":"Intestato","unpin":"De-intesta","pin":"Intesta al profilo","delete":"Elimina messaggio","repeats":"Condivisi","favorites":"Preferiti","hide_content":"Nascondi contenuti","show_content":"Mostra contenuti","hide_full_subject":"Nascondi oggetto intero","show_full_subject":"Mostra oggetto intero","thread_muted_and_words":", contiene:","thread_muted":"Discussione silenziata","copy_link":"Copia collegamento","status_unavailable":"Messaggio non disponibile","unmute_conversation":"Riabilita conversazione","mute_conversation":"Silenzia conversazione","replies_list":"Risposte:","reply_to":"In risposta a","delete_confirm":"Vuoi veramente eliminare questo messaggio?","unbookmark":"Rimuovi segnalibro","bookmark":"Aggiungi segnalibro","status_deleted":"Questo messagio è stato cancellato","nsfw":"DISDICEVOLE","external_source":"Vai all\'origine","expand":"Espandi"},"time":{"years_short":"{0} a","year_short":"{0} a","years":"{0} anni","year":"{0} anno","weeks_short":"{0} stm","week_short":"{0} stm","seconds_short":"{0} sec","second_short":"{0} sec","weeks":"{0} settimane","week":"{0} settimana","seconds":"{0} secondi","second":"{0} secondo","now_short":"adesso","now":"adesso","months_short":"{0} ms","month_short":"{0} ms","months":"{0} mesi","month":"{0} mese","minutes_short":"{0} min","minute_short":"{0} min","minutes":"{0} minuti","minute":"{0} minuto","in_past":"{0} fa","in_future":"fra {0}","hours_short":"{0} h","days_short":"{0} g","hour_short":"{0} h","hours":"{0} ore","hour":"{0} ora","day_short":"{0} g","days":"{0} giorni","day":"{0} giorno"},"user_reporting":{"title":"Segnalo {0}","additional_comments":"Osservazioni accessorie","generic_error":"C\'è stato un errore nell\'elaborazione della tua richiesta.","submit":"Invia","forward_to":"Inoltra a {0}","forward_description":"Il profilo appartiene ad un\'altra stanza. Inviare la segnalazione anche a quella?","add_comment_description":"La segnalazione sarà inviata ai moderatori della tua stanza. Puoi motivarla qui sotto:"},"password_reset":{"password_reset_required_but_mailer_is_disabled":"Devi reimpostare la tua password, ma non puoi farlo. Contatta l\'amministratore.","password_reset_required":"Devi reimpostare la tua password per poter continuare.","password_reset_disabled":"Non puoi azzerare la tua password. Contatta il tuo amministratore.","too_many_requests":"Hai raggiunto il numero massimo di tentativi, riprova più tardi.","return_home":"Torna alla pagina principale","check_email":"Controlla la tua posta elettronica.","placeholder":"La tua email o nome utente","instruction":"Inserisci il tuo indirizzo email o il tuo nome utente. Ti invieremo un collegamento per reimpostare la tua password.","password_reset":"Azzera password","forgot_password":"Password dimenticata?"},"search":{"no_results":"Nessun risultato","people_talking":"{count} partecipanti","person_talking":"{count} partecipante","hashtags":"Etichette","people":"Utenti"},"upload":{"file_size_units":{"TiB":"TiB","GiB":"GiB","MiB":"MiB","KiB":"KiB","B":"B"},"error":{"default":"Riprova in seguito","file_too_big":"File troppo pesante [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]","base":"Caricamento fallito.","message":"Caricamento fallito: {0}"}},"tool_tip":{"bookmark":"Aggiungi segnalibro","reject_follow_request":"Rifiuta seguace","accept_follow_request":"Accetta seguace","user_settings":"Impostazioni utente","add_reaction":"Reagisci","favorite":"Gradisci","reply":"Rispondi","repeat":"Condividi","media_upload":"Carica allegati"},"display_date":{"today":"Oggi"},"file_type":{"file":"File","image":"Immagine","video":"Video","audio":"Audio"},"chats":{"empty_chat_list_placeholder":"Non hai conversazioni. Contatta qualcuno!","error_sending_message":"Errore. Il messaggio non è stato inviato.","error_loading_chat":"Errore. La conversazione non è stata caricata.","delete_confirm":"Vuoi veramente eliminare questo messaggio?","more":"Altro","empty_message_error":"Non puoi inviare messaggi vuoti","new":"Nuova conversazione","chats":"Conversazioni","delete":"Elimina","message_user":"Contatta {nickname}","you":"Tu:"},"shoutbox":{"title":"Graffiti"}}')}}]); +//# sourceMappingURL=18.a4d5b399e228a6a45a7b.js.map \ No newline at end of file diff --git a/priv/static/static/js/18.a4d5b399e228a6a45a7b.js.map b/priv/static/static/js/18.a4d5b399e228a6a45a7b.js.map new file mode 100644 index 000000000..5e5264405 --- /dev/null +++ b/priv/static/static/js/18.a4d5b399e228a6a45a7b.js.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/18.a4d5b399e228a6a45a7b.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/18.ffde79cfe78615dbb020.js b/priv/static/static/js/18.ffde79cfe78615dbb020.js deleted file mode 100644 index 7dab8a63d..000000000 --- a/priv/static/static/js/18.ffde79cfe78615dbb020.js +++ /dev/null @@ -1,2 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[18],{598:function(e){e.exports=JSON.parse('{"general":{"submit":"Invia","apply":"Applica","more":"Altro","generic_error":"Errore","optional":"facoltativo","show_more":"Mostra tutto","show_less":"Ripiega","dismiss":"Chiudi","cancel":"Annulla","disable":"Disabilita","enable":"Abilita","confirm":"Conferma","verify":"Verifica","peek":"Anteprima","close":"Chiudi","retry":"Riprova","error_retry":"Per favore, riprova","loading":"Carico…","role":{"moderator":"Moderatore","admin":"Amministratore"}},"nav":{"mentions":"Menzioni","public_tl":"Sequenza pubblica","timeline":"Sequenza personale","twkn":"Sequenza federale","chat":"Chat della stanza","friend_requests":"Vogliono seguirti","about":"Informazioni","administration":"Amministrazione","back":"Indietro","interactions":"Interazioni","dms":"Messaggi privati","user_search":"Ricerca utenti","search":"Ricerca","who_to_follow":"Chi seguire","preferences":"Preferenze","bookmarks":"Segnalibri","chats":"Conversazioni","timelines":"Sequenze","home_timeline":"Sequenza personale"},"notifications":{"followed_you":"ti segue","notifications":"Notifiche","read":"Letto!","broken_favorite":"Stato sconosciuto, lo sto cercando…","favorited_you":"ha gradito","load_older":"Carica notifiche precedenti","repeated_you":"ha condiviso il tuo messaggio","follow_request":"vuole seguirti","no_more_notifications":"Fine delle notifiche","migrated_to":"è migrato verso","reacted_with":"ha reagito con {0}","error":"Errore nel caricare le notifiche: {0}"},"settings":{"attachments":"Allegati","avatar":"Icona utente","bio":"Introduzione","current_avatar":"La tua icona attuale","current_profile_banner":"Il tuo stendardo attuale","filtering":"Filtri","filtering_explanation":"Tutti i post contenenti queste parole saranno silenziati, una per riga","hide_attachments_in_convo":"Nascondi gli allegati presenti nelle conversazioni","hide_attachments_in_tl":"Nascondi gli allegati presenti nelle sequenze","name":"Nome","name_bio":"Nome ed introduzione","nsfw_clickthrough":"Fai click per visualizzare gli allegati offuscati","profile_background":"Sfondo della tua pagina","profile_banner":"Gonfalone del tuo profilo","set_new_avatar":"Scegli una nuova icona","set_new_profile_background":"Scegli un nuovo sfondo","set_new_profile_banner":"Scegli un nuovo gonfalone","settings":"Impostazioni","theme":"Tema","user_settings":"Impostazioni Utente","attachmentRadius":"Allegati","avatarAltRadius":"Icone utente (Notifiche)","avatarRadius":"Icone utente","background":"Sfondo","btnRadius":"Pulsanti","cBlue":"Blu (rispondi, segui)","cGreen":"Verde (ripeti)","cOrange":"Arancione (gradisci)","cRed":"Rosso (annulla)","change_password":"Cambia password","change_password_error":"C\'è stato un problema durante il cambiamento della password.","changed_password":"Password cambiata correttamente!","collapse_subject":"Ripiega messaggi con oggetto","confirm_new_password":"Conferma la nuova password","current_password":"La tua password attuale","data_import_export_tab":"Importa o esporta dati","default_vis":"Visibilità predefinita dei messaggi","delete_account":"Elimina profilo","delete_account_description":"Elimina definitivamente i tuoi dati e disattiva il tuo profilo.","delete_account_error":"C\'è stato un problema durante l\'eliminazione del tuo profilo. Se il problema persiste contatta l\'amministratore della tua stanza.","delete_account_instructions":"Digita la tua password nel campo sottostante per eliminare il tuo profilo.","export_theme":"Salva impostazioni","follow_export":"Esporta la lista di chi segui","follow_export_button":"Esporta la lista di chi segui in un file CSV","follow_export_processing":"Sto elaborando, presto ti sarà chiesto di scaricare il tuo file","follow_import":"Importa la lista di chi segui","follow_import_error":"Errore nell\'importazione della lista di chi segui","follows_imported":"Importazione riuscita! L\'elaborazione richiederà un po\' di tempo.","foreground":"Primo piano","general":"Generale","hide_post_stats":"Nascondi statistiche dei messaggi (es. il numero di preferenze)","hide_user_stats":"Nascondi statistiche dell\'utente (es. il numero di seguaci)","import_followers_from_a_csv_file":"Importa una lista di chi segui da un file CSV","import_theme":"Carica impostazioni","inputRadius":"Campi di testo","instance_default":"(predefinito: {value})","interfaceLanguage":"Lingua dell\'interfaccia","invalid_theme_imported":"Il file selezionato non è un tema supportato da Pleroma. Il tuo tema non è stato modificato.","limited_availability":"Non disponibile nel tuo browser","links":"Collegamenti","lock_account_description":"Vaglia manualmente i nuovi seguaci","loop_video":"Riproduci video in ciclo continuo","loop_video_silent_only":"Riproduci solo video muti in ciclo continuo (es. le \\"gif\\" di Mastodon)","new_password":"Nuova password","notification_visibility":"Tipi di notifiche da mostrare","notification_visibility_follows":"Nuovi seguaci","notification_visibility_likes":"Preferiti","notification_visibility_mentions":"Menzioni","notification_visibility_repeats":"Condivisioni","no_rich_text_description":"Togli la formattazione del testo da tutti i messaggi","oauth_tokens":"Token OAuth","token":"Token","refresh_token":"Aggiorna token","valid_until":"Valido fino a","revoke_token":"Revoca","panelRadius":"Pannelli","pause_on_unfocused":"Interrompi l\'aggiornamento continuo mentre la scheda è in secondo piano","presets":"Valori predefiniti","profile_tab":"Profilo","radii_help":"Imposta il raggio degli angoli (in pixel)","replies_in_timeline":"Risposte nelle sequenze","reply_visibility_all":"Mostra tutte le risposte","reply_visibility_following":"Mostra solo le risposte rivolte a me o agli utenti che seguo","reply_visibility_self":"Mostra solo risposte rivolte a me","saving_err":"Errore nel salvataggio delle impostazioni","saving_ok":"Impostazioni salvate","security_tab":"Sicurezza","stop_gifs":"Riproduci GIF al passaggio del cursore","streaming":"Mostra automaticamente i nuovi messaggi quando sei in cima alla pagina","text":"Testo","theme_help":"Usa colori esadecimali (#rrggbb) per personalizzare il tuo schema di colori.","tooltipRadius":"Suggerimenti/avvisi","values":{"false":"no","true":"sì"},"avatar_size_instruction":"La taglia minima per l\'icona personale è 150x150 pixel.","domain_mutes":"Domini","discoverable":"Permetti la scoperta di questo profilo a servizi di ricerca ed altro","composing":"Composizione","changed_email":"Email cambiata con successo!","change_email_error":"C\'è stato un problema nel cambiare la tua email.","change_email":"Cambia email","blocks_tab":"Bloccati","blocks_imported":"Blocchi importati! Saranno elaborati a breve.","block_import_error":"Errore nell\'importazione","block_import":"Importa blocchi","block_export_button":"Esporta i tuoi blocchi in un file CSV","block_export":"Esporta blocchi","allow_following_move":"Consenti l\'iscrizione automatica ai profili traslocati","mfa":{"verify":{"desc":"Per abilitare l\'autenticazione bifattoriale, inserisci il codice fornito dalla tua applicazione:"},"scan":{"secret_code":"Codice","desc":"Con la tua applicazione bifattoriale, acquisisci il QR o inserisci il codice:","title":"Acquisisci"},"authentication_methods":"Metodi di accesso","recovery_codes_warning":"Metti i codici al sicuro, perché non potrai più visualizzarli. Se perderai l\'accesso sia alla tua applicazione bifattoriale che ai codici di recupero non potrai più accedere al tuo profilo.","waiting_a_recovery_codes":"Ricevo codici di recupero…","recovery_codes":"Codici di recupero.","warning_of_generate_new_codes":"Alla generazione di nuovi codici di recupero, quelli vecchi saranno disattivati.","generate_new_recovery_codes":"Genera nuovi codici di recupero","title":"Accesso bifattoriale","confirm_and_enable":"Conferma ed abilita OTP","wait_pre_setup_otp":"preimposto OTP","setup_otp":"Imposta OTP","otp":"OTP"},"enter_current_password_to_confirm":"Inserisci la tua password per identificarti","security":"Sicurezza","app_name":"Nome applicazione","style":{"switcher":{"help":{"older_version_imported":"Il tema importato è stato creato per una versione precedente dell\'interfaccia.","future_version_imported":"Il tema importato è stato creato per una versione più recente dell\'interfaccia.","v2_imported":"Il tema importato è stato creato per una vecchia interfaccia. Non tutto potrebbe essere come inteso.","upgraded_from_v2":"L\'interfaccia è stata aggiornata, il tema potrebbe essere diverso da come lo ricordi.","migration_snapshot_ok":"Ho caricato l\'anteprima del tema. Puoi provare a caricarne i contenuti.","fe_downgraded":"L\'interfaccia è stata portata ad una versione precedente.","fe_upgraded":"Lo schema dei temi è stato aggiornato insieme all\'interfaccia.","snapshot_missing":"Il tema non è provvisto di anteprima, quindi potrebbe essere diverso da come appare.","snapshot_present":"Tutti i valori sono sostituiti dall\'anteprima del tema. Puoi invece caricare i suoi contenuti.","snapshot_source_mismatch":"Conflitto di versione: probabilmente l\'interfaccia è stata portata indietro e poi aggiornata di nuovo. Se hai modificato il tema con una vecchia versione usa il tema precedente, altrimenti puoi usare il nuovo.","migration_napshot_gone":"Anteprima del tema non trovata, non tutto potrebbe essere come ricordi."},"use_source":"Nuova versione","use_snapshot":"Versione precedente","keep_as_is":"Mantieni tal quale","load_theme":"Carica tema","clear_opacity":"Rimuovi opacità","clear_all":"Azzera tutto","reset":"Reimposta","save_load_hint":"Le opzioni \\"mantieni\\" conservano le impostazioni correnti quando selezioni o carichi un tema, e le salvano quando ne esporti uno. Quando nessuna casella è selezionata, tutte le impostazioni correnti saranno salvate nel tema.","keep_fonts":"Mantieni font","keep_roundness":"Mantieni vertici","keep_opacity":"Mantieni opacità","keep_shadows":"Mantieni ombre","keep_color":"Mantieni colori"},"common":{"opacity":"Opacità","color":"Colore","contrast":{"context":{"text":"per il testo","18pt":"per il testo oltre 17pt"},"level":{"bad":"non soddisfa le linee guida di alcun livello","aaa":"soddisfa le linee guida di livello AAA (ottimo)","aa":"soddisfa le linee guida di livello AA (sufficiente)"},"hint":"Il rapporto di contrasto è {ratio}, e {level} {context}"}},"advanced_colors":{"badge":"Sfondo medaglie","post":"Messaggi / Biografie","alert_neutral":"Neutro","alert_warning":"Attenzione","alert_error":"Errore","alert":"Sfondo degli avvertimenti","_tab_label":"Avanzate","tabs":"Etichette","disabled":"Disabilitato","selectedMenu":"Voce menù selezionata","selectedPost":"Messaggio selezionato","pressed":"Premuto","highlight":"Elementi in risalto","icons":"Icone","poll":"Grafico sondaggi","underlay":"Sottostante","faint_text":"Testo sbiadito","inputs":"Campi d\'immissione","buttons":"Pulsanti","borders":"Bordi","top_bar":"Barra superiore","panel_header":"Titolo pannello","badge_notification":"Notifica","popover":"Suggerimenti, menù, sbalzi","toggled":"Scambiato","chat":{"border":"Bordo","outgoing":"Inviati","incoming":"Ricevuti"},"wallpaper":"Sfondo"},"common_colors":{"rgbo":"Icone, accenti, medaglie","foreground_hint":"Seleziona l\'etichetta \\"Avanzate\\" per controlli più fini","main":"Colori comuni","_tab_label":"Comuni"},"shadows":{"inset":"Includi","spread":"Spandi","blur":"Sfoca","shadow_id":"Ombra numero {value}","override":"Sostituisci","component":"Componente","_tab_label":"Luci ed ombre","components":{"avatarStatus":"Icona utente (vista messaggio)","avatar":"Icona utente (vista profilo)","topBar":"Barra superiore","panelHeader":"Intestazione pannello","panel":"Pannello","input":"Campo d\'immissione","buttonPressedHover":"Pulsante (puntato e premuto)","buttonPressed":"Pulsante (premuto)","buttonHover":"Pulsante (puntato)","button":"Pulsante","popup":"Sbalzi e suggerimenti"},"filter_hint":{"inset_classic":"Le ombre incluse usano {0}","spread_zero":"Lo spandimento maggiore di zero si azzera sulle ombre","avatar_inset":"Tieni presente che combinare ombre (sia incluse che non) sulle icone utente potrebbe dare risultati strani con quelle trasparenti.","drop_shadow_syntax":"{0} non supporta il parametro {1} né la keyword {2}.","always_drop_shadow":"Attenzione: quest\'ombra usa sempre {0} se il tuo browser lo supporta."},"hintV3":"Per le ombre puoi anche usare la sintassi {0} per sfruttare il secondo colore."},"radii":{"_tab_label":"Raggio"},"fonts":{"_tab_label":"Font","custom":"Personalizzato","weight":"Grassettatura","size":"Dimensione in pixel","family":"Nome font","components":{"postCode":"Font a spaziatura fissa incluso in un messaggio","post":"Testo del messaggio","input":"Campi d\'immissione","interface":"Interfaccia"},"help":"Seleziona il font da usare per gli elementi dell\'interfaccia. Se scegli \\"personalizzato\\" devi inserire il suo nome di sistema."},"preview":{"link":"un bel collegamentino","checkbox":"Ho dato uno sguardo a termini e condizioni","header_faint":"Tutto bene","fine_print":"Leggi il nostro {0} per imparare un bel niente!","faint_link":"utilissimo manuale","input":"Sono appena atterrato a Fiumicino.","mono":"contenuto","text":"Altro {0} e {1}","content":"Contenuto","button":"Pulsante","error":"Errore d\'esempio","header":"Anteprima"}},"enable_web_push_notifications":"Abilita notifiche web push","fun":"Divertimento","notification_mutes":"Per non ricevere notifiche da uno specifico utente, silenzialo.","notification_setting_privacy_option":"Nascondi mittente e contenuti delle notifiche push","notification_setting_privacy":"Privacy","notification_setting_filters":"Filtri","notifications":"Notifiche","greentext":"Frecce da meme","upload_a_photo":"Carica un\'immagine","type_domains_to_mute":"Cerca domini da silenziare","theme_help_v2_2":"Le icone vicino alcuni elementi sono indicatori del contrasto fra testo e sfondo, passaci sopra col puntatore per ulteriori informazioni. Se usani trasparenze, questi indicatori mostrano il peggior caso possibile.","theme_help_v2_1":"Puoi anche forzare colore ed opacità di alcuni elementi selezionando la casella. Usa il pulsante \\"Azzera\\" per azzerare tutte le forzature.","useStreamingApiWarning":"(Sconsigliato, sperimentale, può saltare messaggi)","useStreamingApi":"Ricevi messaggi e notifiche in tempo reale","user_mutes":"Utenti","post_status_content_type":"Tipo di contenuto dei messaggi","subject_line_noop":"Non copiare","subject_line_mastodon":"Come in Mastodon: copia tal quale","subject_line_email":"Come nelle email: \\"re: oggetto\\"","subject_line_behavior":"Copia oggetto quando rispondi","subject_input_always_show":"Mostra sempre il campo Oggetto","minimal_scopes_mode":"Riduci opzioni di visibilità","scope_copy":"Risposte ereditano la visibilità (messaggi privati lo fanno sempre)","search_user_to_mute":"Cerca utente da silenziare","search_user_to_block":"Cerca utente da bloccare","autohide_floating_post_button":"Nascondi automaticamente il pulsante di composizione (mobile)","show_moderator_badge":"Mostra l\'insegna di moderatore sulla mia pagina","show_admin_badge":"Mostra l\'insegna di amministratore sulla mia pagina","hide_followers_count_description":"Non mostrare quanti seguaci ho","hide_follows_count_description":"Non mostrare quanti utenti seguo","hide_followers_description":"Non mostrare i miei seguaci","hide_follows_description":"Non mostrare chi seguo","no_mutes":"Nessun utente silenziato","no_blocks":"Nessun utente bloccato","notification_visibility_emoji_reactions":"Reazioni","notification_visibility_moves":"Migrazioni utenti","new_email":"Nuova email","use_contain_fit":"Non ritagliare le anteprime degli allegati","play_videos_in_modal":"Riproduci video in un riquadro a sbalzo","mutes_tab":"Silenziati","interface":"Interfaccia","instance_default_simple":"(predefinito)","checkboxRadius":"Caselle di selezione","import_blocks_from_a_csv_file":"Importa blocchi da un file CSV","hide_filtered_statuses":"Nascondi messaggi filtrati","use_one_click_nsfw":"Apri media offuscati con un solo click","preload_images":"Precarica immagini","hide_isp":"Nascondi pannello della stanza","max_thumbnails":"Numero massimo di anteprime per messaggio","hide_muted_posts":"Nascondi messaggi degli utenti silenziati","accent":"Accento","emoji_reactions_on_timeline":"Mostra reazioni nelle sequenze","pad_emoji":"Affianca spazi agli emoji inseriti tramite selettore","notification_blocks":"Bloccando un utente non riceverai più le sue notifiche né lo seguirai più.","mutes_and_blocks":"Silenziati e bloccati","profile_fields":{"value":"Contenuto","name":"Descrizione","add_field":"Aggiungi campo","label":"Metadati profilo"},"bot":"Questo è un robot","version":{"frontend_version":"Versione interfaccia","backend_version":"Versione backend","title":"Versione"},"reset_avatar":"Azzera icona","reset_profile_background":"Azzera sfondo","reset_profile_banner":"Azzera gonfalone","reset_avatar_confirm":"Vuoi veramente azzerare l\'icona?","reset_banner_confirm":"Vuoi veramente azzerare il gonfalone?","reset_background_confirm":"Vuoi veramente azzerare lo sfondo?","chatMessageRadius":"Messaggi istantanei","notification_setting_hide_notification_contents":"Nascondi mittente e contenuti delle notifiche push","notification_setting_block_from_strangers":"Blocca notifiche da utenti che non segui","virtual_scrolling":"Velocizza l\'elaborazione delle sequenze","import_mutes_from_a_csv_file":"Importa silenziati da un file CSV","mutes_imported":"Silenziati importati! Elaborazione in corso.","mute_import_error":"Errore nell\'importazione","mute_import":"Carica silenziati","mute_export_button":"Esporta i silenziati in un file CSV","mute_export":"Esporta silenziati","hide_wallpaper":"Nascondi sfondo della stanza","setting_changed":"Valore personalizzato","more_settings":"Altre impostazioni","sensitive_by_default":"Tutti i miei messaggi sono scabrosi","reply_visibility_self_short":"Vedi solo risposte a te","reply_visibility_following_short":"Vedi risposte a messaggi di altri","hide_all_muted_posts":"Nascondi messaggi silenziati","hide_media_previews":"Nascondi anteprime","word_filter":"Parole filtrate","save":"Salva modifiche","file_export_import":{"errors":{"file_slightly_new":"Versione minore diversa, qualcosa potrebbe non combaciare.","file_too_old":"Versione troppo vecchia: {fileMajor}. Questa versione dell\'interfaccia ({feMajor}) non supporta il file.","file_too_new":"Versione troppo recente: {fileMajor}. Questa versione dell\'interfaccia ({feMajor}) non supporta il file.","invalid_file":"Il file selezionato non è un archivio supportato. Nessuna modifica è stata apportata."},"restore_settings":"Carica impostazioni sul server","backup_settings_theme":"Archivia impostazioni e tema localmente","backup_settings":"Archivia impostazioni localmente","backup_restore":"Archiviazione impostazioni"}},"timeline":{"error_fetching":"Errore nell\'aggiornamento","load_older":"Carica messaggi precedenti","show_new":"Mostra nuovi","up_to_date":"Aggiornato","collapse":"Ripiega","conversation":"Conversazione","no_retweet_hint":"Il messaggio è diretto o solo per seguaci e non può essere condiviso","repeated":"ha condiviso","no_statuses":"Nessun messaggio","no_more_statuses":"Fine dei messaggi","reload":"Ricarica","error":"Errore nel caricare la sequenza: {0}","socket_broke":"Connessione tempo reale interrotta: codice {0}","socket_reconnected":"Connesso in tempo reale"},"user_card":{"follow":"Segui","followees":"Segue","followers":"Seguaci","following":"Seguìto!","follows_you":"Ti segue!","mute":"Silenzia","muted":"Silenziato","per_day":"al giorno","statuses":"Messaggi","approve":"Approva","block":"Blocca","blocked":"Bloccato!","deny":"Nega","remote_follow":"Segui da remoto","admin_menu":{"delete_user_confirmation":"Ne sei completamente sicuro? Non potrai tornare indietro.","delete_user":"Elimina utente","quarantine":"I messaggi non arriveranno alle altre stanze","disable_any_subscription":"Rendi utente non seguibile","disable_remote_subscription":"Blocca i tentativi di seguirlo da altre stanze","sandbox":"Rendi tutti i messaggi solo per seguaci","force_unlisted":"Nascondi tutti i messaggi","strip_media":"Rimuovi ogni allegato ai messaggi","force_nsfw":"Oscura tutti i messaggi","delete_account":"Elimina profilo","deactivate_account":"Disattiva profilo","activate_account":"Attiva profilo","revoke_moderator":"Divesti Moderatore","grant_moderator":"Crea Moderatore","revoke_admin":"Divesti Amministratore","grant_admin":"Crea Amministratore","moderation":"Moderazione"},"show_repeats":"Mostra condivisioni","hide_repeats":"Nascondi condivisioni","mute_progress":"Silenzio…","unmute_progress":"Riabilito…","unmute":"Riabilita","block_progress":"Blocco…","unblock_progress":"Sblocco…","unblock":"Sblocca","unsubscribe":"Disdici","subscribe":"Abbònati","report":"Segnala","mention":"Menziona","media":"Media","its_you":"Sei tu!","hidden":"Nascosto","follow_unfollow":"Disconosci","follow_again":"Reinvio richiesta?","follow_progress":"Richiedo…","follow_sent":"Richiesta inviata!","favorites":"Preferiti","message":"Contatta","bot":"Bot","highlight":{"side":"Nastro a lato","striped":"A righe","solid":"Un colore","disabled":"Nessun risalto"}},"chat":{"title":"Chat"},"features_panel":{"chat":"Chat","gopher":"Gopher","media_proxy":"Proxy allegati","scope_options":"Opzioni visibilità","text_limit":"Lunghezza massima","title":"Caratteristiche","who_to_follow":"Chi seguire","pleroma_chat_messages":"Chiacchiere","upload_limit":"Limite allegati"},"finder":{"error_fetching_user":"Errore nel recupero dell\'utente","find_user":"Cerca utente"},"login":{"login":"Accedi","logout":"Disconnettiti","password":"Password","placeholder":"es. Lupo Lucio","register":"Registrati","username":"Nome utente","description":"Accedi con OAuth","hint":"Accedi per conversare","authentication_code":"Codice di autenticazione","enter_recovery_code":"Inserisci un codice di recupero","enter_two_factor_code":"Inserisci un codice 2FA","recovery_code":"Codice di recupero","heading":{"totp":"Autenticazione 2FA","recovery":"Recupero 2FA"}},"post_status":{"account_not_locked_warning":"Il tuo profilo non è {0}. Chiunque può seguirti e vedere i tuoi messaggi per seguaci.","account_not_locked_warning_link":"protetto","attachments_sensitive":"Nascondi gli allegati","content_type":{"text/plain":"Testo normale","text/bbcode":"BBCode","text/markdown":"Markdown","text/html":"HTML"},"content_warning":"Oggetto (facoltativo)","default":"Sono appena atterrato a Città Laggiù.","direct_warning":"Questo post sarà visibile solo dagli utenti menzionati.","posting":"Sto pubblicando","scope":{"direct":"Diretto - Visibile solo agli utenti menzionati","private":"Solo per seguaci - Visibile solo dai tuoi seguaci","public":"Pubblico - Visibile sulla sequenza pubblica","unlisted":"Nascosto - Non visibile sulla sequenza pubblica"},"scope_notice":{"unlisted":"Questo messaggio non sarà visibile sulla sequenza locale né su quella pubblica","private":"Questo messaggio sarà visibile solo ai tuoi seguaci","public":"Questo messaggio sarà visibile a tutti"},"direct_warning_to_first_only":"Questo messaggio sarà visibile solo agli utenti menzionati in testa.","direct_warning_to_all":"Questo messaggio sarà visibile a tutti i menzionati.","new_status":"Nuovo messaggio","empty_status_error":"Aggiungi del testo o degli allegati","preview_empty":"Vuoto","preview":"Anteprima","media_description_error":"Allegati non caricati, riprova","media_description":"Descrizione allegati","post":"Pubblica"},"registration":{"bio":"Introduzione","email":"Email","fullname":"Nome visualizzato","password_confirm":"Conferma password","registration":"Registrazione","token":"Codice d\'invito","validations":{"password_confirmation_match":"dovrebbe essere uguale alla password","password_confirmation_required":"non può essere vuoto","password_required":"non può essere vuoto","email_required":"non può essere vuoto","fullname_required":"non può essere vuoto","username_required":"non può essere vuoto"},"bio_placeholder":"es.\\nCiao, sono Lupo Lucio.\\nSono un lupo fantastico che vive nel Fantabosco. Forse mi hai visto alla Melevisione.","fullname_placeholder":"es. Lupo Lucio","username_placeholder":"es. mister_wolf","new_captcha":"Clicca il captcha per averne uno nuovo","captcha":"CAPTCHA","reason_placeholder":"L\'amministratore esamina ciascuna richiesta.\\nFornisci il motivo della tua iscrizione.","reason":"Motivo dell\'iscrizione","register":"Registrati"},"user_profile":{"timeline_title":"Sequenza dell\'utente","profile_loading_error":"Spiacente, c\'è stato un errore nel caricamento del profilo.","profile_does_not_exist":"Spiacente, questo profilo non esiste."},"who_to_follow":{"more":"Altro","who_to_follow":"Chi seguire"},"about":{"mrf":{"federation":"Federazione","keyword":{"reject":"Rifiuta","replace":"Sostituisci","is_replaced_by":"→","keyword_policies":"Regole per parole chiave","ftl_removal":"Rimozione dalla sequenza federale"},"simple":{"reject":"Rifiuta","accept":"Accetta","simple_policies":"Regole specifiche alla stanza","accept_desc":"Questa stanza accetta messaggi solo dalle seguenti altre:","reject_desc":"Questa stanza rifiuterà i messaggi provenienti dalle seguenti:","quarantine":"Quarantena","quarantine_desc":"Questa stanza inoltrerà solo messaggi pubblici alle seguenti:","ftl_removal":"Rimozione dalla sequenza federale","ftl_removal_desc":"Questa stanza rimuove le seguenti dalla sequenza federale:","media_removal":"Rimozione multimedia","media_removal_desc":"Questa istanza rimuove gli allegati dalle seguenti stanze:","media_nsfw":"Allegati oscurati d\'ufficio","media_nsfw_desc":"Questa stanza oscura gli allegati dei messaggi provenienti da queste stanze:"},"mrf_policies":"Regole RM abilitate","mrf_policies_desc":"Le regole RM cambiano il comportamento federativo della stanza. Vigono le seguenti regole:"},"staff":"Responsabili"},"domain_mute_card":{"mute":"Silenzia","mute_progress":"Silenzio…","unmute":"Ascolta","unmute_progress":"Procedo…"},"exporter":{"export":"Esporta","processing":"In elaborazione, il tuo file sarà scaricabile a breve"},"image_cropper":{"crop_picture":"Ritaglia immagine","save":"Salva","save_without_cropping":"Salva senza ritagliare","cancel":"Annulla"},"importer":{"submit":"Invia","success":"Importato.","error":"L\'importazione non è andata a buon fine."},"media_modal":{"previous":"Precedente","next":"Prossimo"},"polls":{"add_poll":"Sondaggio","add_option":"Aggiungi opzione","option":"Opzione","votes":"voti","vote":"Vota","type":"Tipo di sondaggio","single_choice":"Scelta singola","multiple_choices":"Scelta multipla","expiry":"Età","expires_in":"Chiude fra {0}","expired":"Chiuso {0} fa","not_enough_options":"Aggiungi altre risposte","votes_count":"{count} voto | {count} voti","people_voted_count":"{count} votante | {count} votanti"},"interactions":{"favs_repeats":"Condivisi e Graditi","load_older":"Carica vecchie interazioni","moves":"Utenti migrati","follows":"Nuovi seguìti"},"emoji":{"load_all":"Carico tutti i {emojiAmount} emoji","load_all_hint":"Primi {saneAmount} emoji caricati, caricarli tutti potrebbe causare rallentamenti.","unicode":"Emoji Unicode","custom":"Emoji della stanza","add_emoji":"Inserisci emoji","search_emoji":"Cerca un emoji","keep_open":"Tieni aperto il menù","emoji":"Emoji","stickers":"Adesivi"},"selectable_list":{"select_all":"Seleziona tutto"},"remote_user_resolver":{"error":"Non trovato.","searching_for":"Cerco","remote_user_resolver":"Cerca utenti remoti"},"errors":{"storage_unavailable":"Pleroma non può accedere ai dati del tuo browser. Il tuo accesso o le tue impostazioni non saranno salvate e potresti incontrare strani errori. Prova ad abilitare i cookie."},"status":{"pinned":"Intestato","unpin":"De-intesta","pin":"Intesta al profilo","delete":"Elimina messaggio","repeats":"Condivisi","favorites":"Preferiti","hide_content":"Nascondi contenuti","show_content":"Mostra contenuti","hide_full_subject":"Nascondi oggetto intero","show_full_subject":"Mostra oggetto intero","thread_muted_and_words":", contiene:","thread_muted":"Discussione silenziata","copy_link":"Copia collegamento","status_unavailable":"Messaggio non disponibile","unmute_conversation":"Riabilita conversazione","mute_conversation":"Silenzia conversazione","replies_list":"Risposte:","reply_to":"In risposta a","delete_confirm":"Vuoi veramente eliminare questo messaggio?","unbookmark":"Rimuovi segnalibro","bookmark":"Aggiungi segnalibro","status_deleted":"Questo messagio è stato cancellato","nsfw":"DISDICEVOLE","external_source":"Vai all\'origine","expand":"Espandi"},"time":{"years_short":"{0} a","year_short":"{0} a","years":"{0} anni","year":"{0} anno","weeks_short":"{0} stm","week_short":"{0} stm","seconds_short":"{0} sec","second_short":"{0} sec","weeks":"{0} settimane","week":"{0} settimana","seconds":"{0} secondi","second":"{0} secondo","now_short":"adesso","now":"adesso","months_short":"{0} ms","month_short":"{0} ms","months":"{0} mesi","month":"{0} mese","minutes_short":"{0} min","minute_short":"{0} min","minutes":"{0} minuti","minute":"{0} minuto","in_past":"{0} fa","in_future":"fra {0}","hours_short":"{0} h","days_short":"{0} g","hour_short":"{0} h","hours":"{0} ore","hour":"{0} ora","day_short":"{0} g","days":"{0} giorni","day":"{0} giorno"},"user_reporting":{"title":"Segnalo {0}","additional_comments":"Osservazioni accessorie","generic_error":"C\'è stato un errore nell\'elaborazione della tua richiesta.","submit":"Invia","forward_to":"Inoltra a {0}","forward_description":"Il profilo appartiene ad un\'altra stanza. Inviare la segnalazione anche a quella?","add_comment_description":"La segnalazione sarà inviata ai moderatori della tua stanza. Puoi motivarla qui sotto:"},"password_reset":{"password_reset_required_but_mailer_is_disabled":"Devi reimpostare la tua password, ma non puoi farlo. Contatta l\'amministratore.","password_reset_required":"Devi reimpostare la tua password per poter continuare.","password_reset_disabled":"Non puoi azzerare la tua password. Contatta il tuo amministratore.","too_many_requests":"Hai raggiunto il numero massimo di tentativi, riprova più tardi.","return_home":"Torna alla pagina principale","check_email":"Controlla la tua posta elettronica.","placeholder":"La tua email o nome utente","instruction":"Inserisci il tuo indirizzo email o il tuo nome utente. Ti invieremo un collegamento per reimpostare la tua password.","password_reset":"Azzera password","forgot_password":"Password dimenticata?"},"search":{"no_results":"Nessun risultato","people_talking":"{count} partecipanti","person_talking":"{count} partecipante","hashtags":"Etichette","people":"Utenti"},"upload":{"file_size_units":{"TiB":"TiB","GiB":"GiB","MiB":"MiB","KiB":"KiB","B":"B"},"error":{"default":"Riprova in seguito","file_too_big":"File troppo pesante [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]","base":"Caricamento fallito.","message":"Caricamento fallito: {0}"}},"tool_tip":{"bookmark":"Aggiungi segnalibro","reject_follow_request":"Rifiuta seguace","accept_follow_request":"Accetta seguace","user_settings":"Impostazioni utente","add_reaction":"Reagisci","favorite":"Gradisci","reply":"Rispondi","repeat":"Condividi","media_upload":"Carica allegati"},"display_date":{"today":"Oggi"},"file_type":{"file":"File","image":"Immagine","video":"Video","audio":"Audio"},"chats":{"empty_chat_list_placeholder":"Non hai conversazioni. Contatta qualcuno!","error_sending_message":"Errore. Il messaggio non è stato inviato.","error_loading_chat":"Errore. La conversazione non è stata caricata.","delete_confirm":"Vuoi veramente eliminare questo messaggio?","more":"Altro","empty_message_error":"Non puoi inviare messaggi vuoti","new":"Nuova conversazione","chats":"Conversazioni","delete":"Elimina","message_user":"Contatta {nickname}","you":"Tu:"},"shoutbox":{"title":"Graffiti"}}')}}]); -//# sourceMappingURL=18.ffde79cfe78615dbb020.js.map \ No newline at end of file diff --git a/priv/static/static/js/18.ffde79cfe78615dbb020.js.map b/priv/static/static/js/18.ffde79cfe78615dbb020.js.map deleted file mode 100644 index 21c9fcc95..000000000 --- a/priv/static/static/js/18.ffde79cfe78615dbb020.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/18.ffde79cfe78615dbb020.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/19.c031807287d659bd841d.js.map b/priv/static/static/js/19.c031807287d659bd841d.js.map deleted file mode 100644 index 4a5527aae..000000000 --- a/priv/static/static/js/19.c031807287d659bd841d.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/19.c031807287d659bd841d.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/19.c031807287d659bd841d.js b/priv/static/static/js/19.e513835c3274271258fa.js similarity index 83% rename from priv/static/static/js/19.c031807287d659bd841d.js rename to priv/static/static/js/19.e513835c3274271258fa.js index 8664e0814..1a4c2d230 100644 --- a/priv/static/static/js/19.c031807287d659bd841d.js +++ b/priv/static/static/js/19.e513835c3274271258fa.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{600:function(e){e.exports=JSON.parse('{"about":{"mrf":{"federation":"フェデレーション","mrf_policies":"ゆうこうなMRFポリシー","mrf_policies_desc":"MRFポリシーは、このインスタンスのフェデレーションのふるまいを、いじります。これらのMRFポリシーがゆうこうになっています:","simple":{"simple_policies":"インスタンスのポリシー","accept":"うけいれ","accept_desc":"このインスンスは、これらのインスタンスからのメッセージのみをうけいれます:","reject":"おことわり","reject_desc":"このインスタンスは、これらのインスタンスからのメッセージをうけいれません:","quarantine":"けんえき","quarantine_desc":"このインスタンスは、これらのインスタンスに、パブリックなとうこうのみを、おくります:","ftl_removal":"「つながっているすべてのネットワーク」タイムラインからのぞく","ftl_removal_desc":"このインスタンスは、つながっているすべてのネットワーク」タイムラインから、これらのインスタンスを、とりのぞきます:","media_removal":"メディアをのぞく","media_removal_desc":"このインスタンスは、これらのインスタンスからおくられてきたメディアを、とりのぞきます:","media_nsfw":"メディアをすべてセンシティブにする","media_nsfw_desc":"このインスタンスは、これらのインスタンスからおくられてきたメディアを、すべて、センシティブにマークします:"}},"staff":"スタッフ"},"chat":{"title":"チャット"},"exporter":{"export":"エクスポート","processing":"おまちください。しばらくすると、あなたのファイルをダウンロードするように、メッセージがでます"},"features_panel":{"chat":"チャット","gopher":"Gopher","media_proxy":"メディアプロクシ","scope_options":"こうかいはんいせんたく","text_limit":"もじのかず","title":"ゆうこうなきのう","who_to_follow":"おすすめユーザー"},"finder":{"error_fetching_user":"ユーザーけんさくがエラーになりました","find_user":"ユーザーをさがす"},"general":{"apply":"てきよう","submit":"そうしん","more":"つづき","generic_error":"エラーになりました","optional":"かかなくてもよい","show_more":"つづきをみる","show_less":"たたむ","cancel":"キャンセル","disable":"なし","enable":"あり","confirm":"たしかめる","verify":"たしかめる"},"image_cropper":{"crop_picture":"がぞうをきりぬく","save":"セーブ","save_without_cropping":"きりぬかずにセーブ","cancel":"キャンセル"},"importer":{"submit":"そうしん","success":"インポートできました。","error":"インポートがエラーになりました。"},"login":{"login":"ログイン","description":"OAuthでログイン","logout":"ログアウト","password":"パスワード","placeholder":"れい: lain","register":"はじめる","username":"ユーザーめい","hint":"はなしあいにくわわるには、ログインしてください","authentication_code":"にんしょうコード","enter_recovery_code":"リカバリーコードをいれてください","enter_two_factor_code":"2-ファクターコードをいれてください","recovery_code":"リカバリーコード","heading":{"totp":"2-ファクターにんしょう","recovery":"2-ファクターリカバリー"}},"media_modal":{"previous":"まえ","next":"つぎ"},"nav":{"about":"これはなに?","administration":"アドミニストレーション","back":"もどる","chat":"ローカルチャット","friend_requests":"フォローリクエスト","mentions":"メンション","interactions":"やりとり","dms":"ダイレクトメッセージ","public_tl":"パブリックタイムライン","timeline":"タイムライン","twkn":"つながっているすべてのネットワーク","user_search":"ユーザーをさがす","search":"さがす","who_to_follow":"おすすめユーザー","preferences":"せってい"},"notifications":{"broken_favorite":"ステータスがみつかりません。さがしています…","favorited_you":"あなたのステータスがおきにいりされました","followed_you":"フォローされました","load_older":"ふるいつうちをみる","notifications":"つうち","read":"よんだ!","repeated_you":"あなたのステータスがリピートされました","no_more_notifications":"つうちはありません"},"polls":{"add_poll":"いれふだをはじめる","add_option":"オプションをふやす","option":"オプション","votes":"いれふだ","vote":"ふだをいれる","type":"いれふだのかた","single_choice":"ひとつえらぶ","multiple_choices":"いくつでもえらべる","expiry":"いれふだのながさ","expires_in":"いれふだは {0} で、おわります","expired":"いれふだは {0} まえに、おわりました","not_enough_options":"ユニークなオプションが、たりません"},"emoji":{"stickers":"ステッカー","emoji":"えもじ","keep_open":"ピッカーをあけたままにする","search_emoji":"えもじをさがす","add_emoji":"えもじをうちこむ","custom":"カスタムえもじ","unicode":"ユニコードえもじ","load_all_hint":"はじめの {saneAmount} このえもじだけがロードされています。すべてのえもじをロードすると、パフォーマンスがわるくなるかもしれません。","load_all":"すべてのえもじをロード ({emojiAmount} こあります)"},"stickers":{"add_sticker":"ステッカーをふやす"},"interactions":{"favs_repeats":"リピートとおきにいり","follows":"あたらしいフォロー","load_older":"ふるいやりとりをみる"},"post_status":{"new_status":"とうこうする","account_not_locked_warning":"あなたのアカウントは {0} ではありません。あなたをフォローすれば、だれでも、フォロワーげんていのステータスをよむことができます。","account_not_locked_warning_link":"ロックされたアカウント","attachments_sensitive":"ファイルをNSFWにする","content_type":{"text/plain":"プレーンテキスト","text/html":"HTML","text/markdown":"Markdown","text/bbcode":"BBCode"},"content_warning":"せつめい (かかなくてもよい)","default":"はねだくうこうに、つきました。","direct_warning_to_all":"このとうこうは、メンションされたすべてのユーザーが、みることができます。","direct_warning_to_first_only":"このとうこうは、メッセージのはじめでメンションされたユーザーだけが、みることができます。","direct_warning":"このステータスは、メンションされたユーザーだけが、よむことができます。","posting":"とうこう","scope_notice":{"public":"このとうこうは、だれでもみることができます","private":"このとうこうは、あなたのフォロワーだけが、みることができます","unlisted":"このとうこうは、パブリックタイムラインと、つながっているすべてのネットワークでは、みることができません"},"scope":{"direct":"ダイレクト: メンションされたユーザーのみにとどきます","private":"フォロワーげんてい: フォロワーのみにとどきます","public":"パブリック: パブリックタイムラインにとどきます","unlisted":"アンリステッド: パブリックタイムラインにとどきません"}},"registration":{"bio":"プロフィール","email":"Eメール","fullname":"スクリーンネーム","password_confirm":"パスワードのかくにん","registration":"はじめる","token":"しょうたいトークン","captcha":"CAPTCHA","new_captcha":"もじがよめないときは、がぞうをクリックすると、あたらしいがぞうになります","username_placeholder":"れい: lain","fullname_placeholder":"れい: いわくら れいん","bio_placeholder":"れい:\\nごきげんよう。わたしはれいん。\\nわたしはアニメのおんなのこで、にほんのベッドタウンにすんでいます。ワイヤードで、わたしにあったことが、あるかもしれませんね。","validations":{"username_required":"なにかかいてください","fullname_required":"なにかかいてください","email_required":"なにかかいてください","password_required":"なにかかいてください","password_confirmation_required":"なにかかいてください","password_confirmation_match":"パスワードがちがいます"}},"remote_user_resolver":{"remote_user_resolver":"リモートユーザーリゾルバー","searching_for":"さがしています:","error":"みつかりませんでした。"},"selectable_list":{"select_all":"すべてえらぶ"},"settings":{"app_name":"アプリのなまえ","security":"セキュリティ","enter_current_password_to_confirm":"あなたのアイデンティティをたしかめるため、あなたのいまのパスワードをかいてください","mfa":{"otp":"OTP","setup_otp":"OTPをつくる","wait_pre_setup_otp":"OTPをよういしています","confirm_and_enable":"OTPをたしかめて、ゆうこうにする","title":"2-ファクターにんしょう","generate_new_recovery_codes":"あたらしいリカバリーコードをつくる","warning_of_generate_new_codes":"あたらしいリカバリーコードをつくったら、ふるいコードはつかえなくなります。","recovery_codes":"リカバリーコード。","waiting_a_recovery_codes":"バックアップコードをうけとっています…","recovery_codes_warning":"コードをかきうつすか、ひとにみられないところにセーブしてください。そうでなければ、あなたはこのコードをふたたびみることはできません。もしあなたが、2FAアプリのアクセスをうしなって、なおかつ、リカバリーコードもおもいだせないならば、あなたはあなたのアカウントから、しめだされます。","authentication_methods":"にんしょうメソッド","scan":{"title":"スキャン","desc":"あなたの2-ファクターアプリをつかって、このQRコードをスキャンするか、テキストキーをうちこんでください:","secret_code":"キー"},"verify":{"desc":"2-ファクターにんしょうをつかうには、あなたの2-ファクターアプリのコードをいれてください:"}},"attachmentRadius":"ファイル","attachments":"ファイル","avatar":"アバター","avatarAltRadius":"つうちのアバター","avatarRadius":"アバター","background":"バックグラウンド","bio":"プロフィール","block_export":"ブロックのエクスポート","block_export_button":"ブロックをCSVファイルにエクスポート","block_import":"ブロックのインポート","block_import_error":"ブロックのインポートがエラーになりました","blocks_imported":"ブロックをインポートしました! じっさいにブロックするまでには、もうしばらくかかります。","blocks_tab":"ブロック","btnRadius":"ボタン","cBlue":"リプライとフォロー","cGreen":"リピート","cOrange":"おきにいり","cRed":"キャンセル","change_email":"メールアドレスをかえる","change_email_error":"メールアドレスをかえようとしましたが、なにかがおかしいです。","changed_email":"メールアドレスをかえることができました!","change_password":"パスワードをかえる","change_password_error":"パスワードをかえることが、できなかったかもしれません。","changed_password":"パスワードが、かわりました!","collapse_subject":"せつめいのあるとうこうをたたむ","composing":"とうこう","confirm_new_password":"あたらしいパスワードのかくにん","current_avatar":"いまのアバター","current_password":"いまのパスワード","current_profile_banner":"いまのプロフィールバナー","data_import_export_tab":"インポートとエクスポート","default_vis":"デフォルトのこうかいはんい","delete_account":"アカウントをけす","delete_account_description":"あなたのアカウントとメッセージが、きえます。","delete_account_error":"アカウントをけすことが、できなかったかもしれません。インスタンスのアドミニストレーターに、おといあわせください。","delete_account_instructions":"ほんとうにアカウントをけしてもいいなら、パスワードをかいてください。","discoverable":"けんさくなどのサービスで、このアカウントをみつけてもよい","avatar_size_instruction":"アバターのおおきさは、150×150ピクセルか、それよりもおおきくするといいです。","pad_emoji":"えもじをピッカーでえらんだとき、えもじのまわりにスペースをいれる","export_theme":"セーブ","filtering":"フィルタリング","filtering_explanation":"これらのことばをふくむすべてのものがミュートされます。1ぎょうに1つのことばをかいてください","follow_export":"フォローのエクスポート","follow_export_button":"エクスポート","follow_export_processing":"おまちください。まもなくファイルをダウンロードできます。","follow_import":"フォローインポート","follow_import_error":"フォローのインポートがエラーになりました","follows_imported":"フォローがインポートされました! すこしじかんがかかるかもしれません。","foreground":"フォアグラウンド","general":"ぜんぱん","hide_attachments_in_convo":"スレッドのファイルをかくす","hide_attachments_in_tl":"タイムラインのファイルをかくす","hide_muted_posts":"ミュートしたユーザーのとうこうをかくす","max_thumbnails":"ひとつのとうこうにいれられるサムネイルのかず","hide_isp":"インスタンススペシフィックパネルをかくす","preload_images":"がぞうをさきよみする","use_one_click_nsfw":"NSFWなファイルを1クリックでひらく","hide_post_stats":"とうこうのとうけいをかくす (れい: おきにいりのかず)","hide_user_stats":"ユーザーのとうけいをかくす (れい: フォロワーのかず)","hide_filtered_statuses":"フィルターされたとうこうをかくす","import_blocks_from_a_csv_file":"CSVファイルからブロックをインポートする","import_followers_from_a_csv_file":"CSVファイルからフォローをインポートする","import_theme":"ロード","inputRadius":"インプットフィールド","checkboxRadius":"チェックボックス","instance_default":"(デフォルト: {value})","instance_default_simple":"(デフォルト)","interface":"インターフェース","interfaceLanguage":"インターフェースのことば","invalid_theme_imported":"このファイルはPleromaのテーマではありません。テーマはへんこうされませんでした。","limited_availability":"あなたのブラウザではできません","links":"リンク","lock_account_description":"あなたがみとめたひとだけ、あなたのアカウントをフォローできる","loop_video":"ビデオをくりかえす","loop_video_silent_only":"おとのないビデオだけくりかえす","mutes_tab":"ミュート","play_videos_in_modal":"ビデオをメディアビューアーでみる","use_contain_fit":"がぞうのサムネイルを、きりぬかない","name":"なまえ","name_bio":"なまえとプロフィール","new_email":"あたらしいメールアドレス","new_password":"あたらしいパスワード","notification_visibility":"ひょうじするつうち","notification_visibility_follows":"フォロー","notification_visibility_likes":"おきにいり","notification_visibility_mentions":"メンション","notification_visibility_repeats":"リピート","no_rich_text_description":"リッチテキストをつかわない","no_blocks":"ブロックしていません","no_mutes":"ミュートしていません","hide_follows_description":"フォローしているひとをみせない","hide_followers_description":"フォロワーをみせない","hide_follows_count_description":"フォローしているひとのかずをみせない","hide_followers_count_description":"フォロワーのかずをみせない","show_admin_badge":"アドミンのしるしをみせる","show_moderator_badge":"モデレーターのしるしをみせる","nsfw_clickthrough":"NSFWなファイルをかくす","oauth_tokens":"OAuthトークン","token":"トークン","refresh_token":"トークンをリフレッシュ","valid_until":"おわりのとき","revoke_token":"とりけす","panelRadius":"パネル","pause_on_unfocused":"タブにフォーカスがないときストリーミングをとめる","presets":"プリセット","profile_background":"プロフィールのバックグラウンド","profile_banner":"プロフィールバナー","profile_tab":"プロフィール","radii_help":"インターフェースのまるさをせっていする","replies_in_timeline":"タイムラインのリプライ","reply_visibility_all":"すべてのリプライをみる","reply_visibility_following":"わたしにあてられたリプライと、フォローしているひとからのリプライをみる","reply_visibility_self":"わたしにあてられたリプライをみる","autohide_floating_post_button":"あたらしいとうこうのボタンを、じどうてきにかくす (モバイル)","saving_err":"せっていをセーブできませんでした","saving_ok":"せっていをセーブしました","search_user_to_block":"ブロックしたいひとを、ここでけんさくできます","search_user_to_mute":"ミュートしたいひとを、ここでけんさくできます","security_tab":"セキュリティ","scope_copy":"リプライするとき、こうかいはんいをコピーする (DMのこうかいはんいは、つねにコピーされます)","minimal_scopes_mode":"こうかいはんいせんたくオプションを、ちいさくする","set_new_avatar":"あたらしいアバターをせっていする","set_new_profile_background":"あたらしいプロフィールのバックグラウンドをせっていする","set_new_profile_banner":"あたらしいプロフィールバナーを設定する","settings":"せってい","subject_input_always_show":"サブジェクトフィールドをいつでもひょうじする","subject_line_behavior":"リプライするときサブジェクトをコピーする","subject_line_email":"メールふう: \\"re: サブジェクト\\"","subject_line_mastodon":"マストドンふう: そのままコピー","subject_line_noop":"コピーしない","post_status_content_type":"とうこうのコンテントタイプ","stop_gifs":"カーソルをかさねたとき、GIFをうごかす","streaming":"うえまでスクロールしたとき、じどうてきにストリーミングする","text":"もじ","theme":"テーマ","theme_help":"カラーテーマをカスタマイズできます。","theme_help_v2_1":"チェックボックスをONにすると、コンポーネントごとに、いろと、とうめいどを、オーバーライドできます。「すべてクリア」ボタンをおすと、すべてのオーバーライドを、やめます。","theme_help_v2_2":"バックグラウンドとテキストのコントラストをあらわすアイコンがあります。マウスをホバーすると、くわしいせつめいがでます。とうめいないろをつかっているときは、もっともわるいばあいのコントラストがしめされます。","upload_a_photo":"がぞうをアップロード","tooltipRadius":"ツールチップとアラート","user_settings":"ユーザーせってい","values":{"false":"いいえ","true":"はい"},"fun":"おたのしみ","greentext":"ミームやじるし","notifications":"つうち","notification_mutes":"あるユーザーからのつうちをとめるには、ミュートしてください。","notification_blocks":"ブロックしているユーザーからのつうちは、すべてとまります。","enable_web_push_notifications":"ウェブプッシュつうちをゆるす","style":{"switcher":{"keep_color":"いろをのこす","keep_shadows":"かげをのこす","keep_opacity":"とうめいどをのこす","keep_roundness":"まるさをのこす","keep_fonts":"フォントをのこす","save_load_hint":"「のこす」オプションをONにすると、テーマをえらんだときとロードしたとき、いまのせっていをのこします。また、テーマをエクスポートするとき、これらのオプションをストアします。すべてのチェックボックスをOFFにすると、テーマをエクスポートしたとき、すべてのせっていをセーブします。","reset":"リセット","clear_all":"すべてクリア","clear_opacity":"とうめいどをクリア"},"common":{"color":"いろ","opacity":"とうめいど","contrast":{"hint":"コントラストは {ratio} です。{level}。({context})","level":{"aa":"AAレベルガイドライン (ミニマル) をみたします","aaa":"AAAレベルガイドライン (レコメンデッド) をみたします","bad":"ガイドラインをみたしません"},"context":{"18pt":"おおきい (18ポイントいじょう) テキスト","text":"テキスト"}}},"common_colors":{"_tab_label":"きょうつう","main":"きょうつうのいろ","foreground_hint":"「くわしく」タブで、もっとこまかくせっていできます","rgbo":"アイコンとアクセントとバッジ"},"advanced_colors":{"_tab_label":"くわしく","alert":"アラートのバックグラウンド","alert_error":"エラー","alert_warning":"けいこく","badge":"バッジのバックグラウンド","badge_notification":"つうち","panel_header":"パネルヘッダー","top_bar":"トップバー","borders":"さかいめ","buttons":"ボタン","inputs":"インプットフィールド","faint_text":"うすいテキスト"},"radii":{"_tab_label":"まるさ"},"shadows":{"_tab_label":"ひかりとかげ","component":"コンポーネント","override":"オーバーライド","shadow_id":"かげ #{value}","blur":"ぼかし","spread":"ひろがり","inset":"うちがわ","hint":"かげのせっていでは、いろのあたいとして --variable をつかうことができます。これはCSS3へんすうです。ただし、とうめいどのせっていは、きかなくなります。","filter_hint":{"always_drop_shadow":"ブラウザーがサポートしていれば、つねに {0} がつかわれます。","drop_shadow_syntax":"{0} は、{1} パラメーターと {2} キーワードをサポートしていません。","avatar_inset":"うちがわのかげと、そとがわのかげを、いっしょにつかうと、とうめいなアバターが、へんなみためになります。","spread_zero":"ひろがりが 0 よりもおおきなかげは、0 とおなじです","inset_classic":"うちがわのかげは {0} をつかいます"},"components":{"panel":"パネル","panelHeader":"パネルヘッダー","topBar":"トップバー","avatar":"ユーザーアバター (プロフィール)","avatarStatus":"ユーザーアバター (とうこう)","popup":"ポップアップとツールチップ","button":"ボタン","buttonHover":"ボタン (ホバー)","buttonPressed":"ボタン (おされているとき)","buttonPressedHover":"ボタン (ホバー、かつ、おされているとき)","input":"インプットフィールド"}},"fonts":{"_tab_label":"フォント","help":"「カスタム」をえらんだときは、システムにあるフォントのなまえを、ただしくにゅうりょくしてください。","components":{"interface":"インターフェース","input":"インプットフィールド","post":"とうこう","postCode":"モノスペース (とうこうがリッチテキストであるとき)"},"family":"フォントめい","size":"おおきさ (px)","weight":"ふとさ","custom":"カスタム"},"preview":{"header":"プレビュー","content":"ほんぶん","error":"エラーのれい","button":"ボタン","text":"これは{0}と{1}のれいです","mono":"monospace","input":"はねだくうこうに、つきました。","faint_link":"とてもたすけになるマニュアル","fine_print":"わたしたちの{0}を、よまないでください!","header_faint":"エラーではありません","checkbox":"りようきやくを、よみました","link":"ハイパーリンク"}},"version":{"title":"バージョン","backend_version":"バックエンドのバージョン","frontend_version":"フロントエンドのバージョン"}},"time":{"day":"{0}日","days":"{0}日","day_short":"{0}日","days_short":"{0}日","hour":"{0}時間","hours":"{0}時間","hour_short":"{0}時間","hours_short":"{0}時間","in_future":"{0}で","in_past":"{0}前","minute":"{0}分","minutes":"{0}分","minute_short":"{0}分","minutes_short":"{0}分","month":"{0}ヶ月前","months":"{0}ヶ月前","month_short":"{0}ヶ月前","months_short":"{0}ヶ月前","now":"たった今","now_short":"たった今","second":"{0}秒","seconds":"{0}秒","second_short":"{0}秒","seconds_short":"{0}秒","week":"{0}週間","weeks":"{0}週間","week_short":"{0}週間","weeks_short":"{0}週間","year":"{0}年","years":"{0}年","year_short":"{0}年","years_short":"{0}年"},"timeline":{"collapse":"たたむ","conversation":"スレッド","error_fetching":"よみこみがエラーになりました","load_older":"ふるいステータス","no_retweet_hint":"とうこうを「フォロワーのみ」または「ダイレクト」にすると、リピートできなくなります","repeated":"リピート","show_new":"よみこみ","up_to_date":"さいしん","no_more_statuses":"これでおわりです","no_statuses":"ありません"},"status":{"favorites":"おきにいり","repeats":"リピート","delete":"ステータスをけす","pin":"プロフィールにピンどめする","unpin":"プロフィールにピンどめするのをやめる","pinned":"ピンどめ","delete_confirm":"ほんとうに、このステータスを、けしてもいいですか?","reply_to":"へんしん:","replies_list":"へんしん:","mute_conversation":"スレッドをミュートする","unmute_conversation":"スレッドをミュートするのをやめる"},"user_card":{"approve":"うけいれ","block":"ブロック","blocked":"ブロックしています!","deny":"おことわり","favorites":"おきにいり","follow":"フォロー","follow_sent":"リクエストを、おくりました!","follow_progress":"リクエストしています…","follow_again":"ふたたびリクエストをおくりますか?","follow_unfollow":"フォローをやめる","followees":"フォロー","followers":"フォロワー","following":"フォローしています!","follows_you":"フォローされました!","hidden":"かくされています","its_you":"これはあなたです!","media":"メディア","mention":"メンション","mute":"ミュート","muted":"ミュートしています!","per_day":"/日","remote_follow":"リモートフォロー","report":"つうほう","statuses":"ステータス","subscribe":"サブスクライブ","unsubscribe":"サブスクライブをやめる","unblock":"ブロックをやめる","unblock_progress":"ブロックをとりけしています…","block_progress":"ブロックしています…","unmute":"ミュートをやめる","unmute_progress":"ミュートをとりけしています…","mute_progress":"ミュートしています…","hide_repeats":"リピートをかくす","show_repeats":"リピートをみる","admin_menu":{"moderation":"モデレーション","grant_admin":"アドミンにする","revoke_admin":"アドミンをやめさせる","grant_moderator":"モデレーターにする","revoke_moderator":"モデレーターをやめさせる","activate_account":"アカウントをアクティブにする","deactivate_account":"アカウントをアクティブでなくする","delete_account":"アカウントをけす","force_nsfw":"すべてのとうこうをNSFWにする","strip_media":"とうこうからメディアをなくす","force_unlisted":"とうこうをアンリステッドにする","sandbox":"とうこうをフォロワーのみにする","disable_remote_subscription":"ほかのインスタンスからフォローされないようにする","disable_any_subscription":"フォローされないようにする","quarantine":"ほかのインスタンスのユーザーのとうこうをとめる","delete_user":"ユーザーをけす","delete_user_confirmation":"あなたは、ほんとうに、きはたしかですか? これは、とりけすことが、できません。"}},"user_profile":{"timeline_title":"ユーザータイムライン","profile_does_not_exist":"ごめんなさい。このプロフィールは、そんざいしません。","profile_loading_error":"ごめんなさい。プロフィールのロードがエラーになりました。"},"user_reporting":{"title":"つうほうする: {0}","add_comment_description":"このつうほうは、あなたのインスタンスのモデレーターに、おくられます。このアカウントを、つうほうするりゆうを、せつめいすることができます:","additional_comments":"ついかのコメント","forward_description":"このアカウントは、ほかのインスタンスのものです。そのインスタンスにも、このつうほうのコピーを、おくりますか?","forward_to":"コピーをおくる: {0}","submit":"そうしん","generic_error":"あなたのリクエストをうけつけようとしましたが、エラーになってしまいました。"},"who_to_follow":{"more":"くわしく","who_to_follow":"おすすめユーザー"},"tool_tip":{"media_upload":"メディアをアップロード","repeat":"リピート","reply":"リプライ","favorite":"おきにいり","user_settings":"ユーザーせってい"},"upload":{"error":{"base":"アップロードにしっぱいしました。","file_too_big":"ファイルがおおきすぎます [{filesize} {filesizeunit} / {allowedsize} {allowedsizeunit}]","default":"しばらくしてから、ためしてください"},"file_size_units":{"B":"B","KiB":"KiB","MiB":"MiB","GiB":"GiB","TiB":"TiB"}},"search":{"people":"ひとびと","hashtags":"ハッシュタグ","person_talking":"{count} にんが、はなしています","people_talking":"{count} にんが、はなしています","no_results":"みつかりませんでした"},"password_reset":{"forgot_password":"パスワードを、わすれましたか?","password_reset":"パスワードリセット","instruction":"あなたのメールアドレスかユーザーめいをいれてください。パスワードをリセットするためのリンクをおくります。","placeholder":"あなたのメールアドレスかユーザーめい","check_email":"パスワードをリセットするためのリンクがかかれたメールが、とどいているかどうか、みてください。","return_home":"ホームページにもどる","too_many_requests":"パスワードリセットを、ためすことが、おおすぎます。しばらくしてから、ためしてください。","password_reset_disabled":"このインスタンスでは、パスワードリセットは、できません。インスタンスのアドミニストレーターに、おといあわせください。","password_reset_required":"ログインするには、パスワードをリセットしてください。","password_reset_required_but_mailer_is_disabled":"あなたはパスワードのリセットがひつようです。しかし、まずいことに、このインスタンスでは、パスワードのリセットができなくなっています。このインスタンスのアドミニストレーターに、おといあわせください。"}}')}}]); -//# sourceMappingURL=19.c031807287d659bd841d.js.map \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{613:function(e){e.exports=JSON.parse('{"about":{"mrf":{"federation":"フェデレーション","mrf_policies":"ゆうこうなMRFポリシー","mrf_policies_desc":"MRFポリシーは、このインスタンスのフェデレーションのふるまいを、いじります。これらのMRFポリシーがゆうこうになっています:","simple":{"simple_policies":"インスタンスのポリシー","accept":"うけいれ","accept_desc":"このインスンスは、これらのインスタンスからのメッセージのみをうけいれます:","reject":"おことわり","reject_desc":"このインスタンスは、これらのインスタンスからのメッセージをうけいれません:","quarantine":"けんえき","quarantine_desc":"このインスタンスは、これらのインスタンスに、パブリックなとうこうのみを、おくります:","ftl_removal":"「つながっているすべてのネットワーク」タイムラインからのぞく","ftl_removal_desc":"このインスタンスは、つながっているすべてのネットワーク」タイムラインから、これらのインスタンスを、とりのぞきます:","media_removal":"メディアをのぞく","media_removal_desc":"このインスタンスは、これらのインスタンスからおくられてきたメディアを、とりのぞきます:","media_nsfw":"メディアをすべてセンシティブにする","media_nsfw_desc":"このインスタンスは、これらのインスタンスからおくられてきたメディアを、すべて、センシティブにマークします:"}},"staff":"スタッフ"},"chat":{"title":"チャット"},"exporter":{"export":"エクスポート","processing":"おまちください。しばらくすると、あなたのファイルをダウンロードするように、メッセージがでます"},"features_panel":{"chat":"チャット","gopher":"Gopher","media_proxy":"メディアプロクシ","scope_options":"こうかいはんいせんたく","text_limit":"もじのかず","title":"ゆうこうなきのう","who_to_follow":"おすすめユーザー"},"finder":{"error_fetching_user":"ユーザーけんさくがエラーになりました","find_user":"ユーザーをさがす"},"general":{"apply":"てきよう","submit":"そうしん","more":"つづき","generic_error":"エラーになりました","optional":"かかなくてもよい","show_more":"つづきをみる","show_less":"たたむ","cancel":"キャンセル","disable":"なし","enable":"あり","confirm":"たしかめる","verify":"たしかめる"},"image_cropper":{"crop_picture":"がぞうをきりぬく","save":"セーブ","save_without_cropping":"きりぬかずにセーブ","cancel":"キャンセル"},"importer":{"submit":"そうしん","success":"インポートできました。","error":"インポートがエラーになりました。"},"login":{"login":"ログイン","description":"OAuthでログイン","logout":"ログアウト","password":"パスワード","placeholder":"れい: lain","register":"はじめる","username":"ユーザーめい","hint":"はなしあいにくわわるには、ログインしてください","authentication_code":"にんしょうコード","enter_recovery_code":"リカバリーコードをいれてください","enter_two_factor_code":"2-ファクターコードをいれてください","recovery_code":"リカバリーコード","heading":{"totp":"2-ファクターにんしょう","recovery":"2-ファクターリカバリー"}},"media_modal":{"previous":"まえ","next":"つぎ"},"nav":{"about":"これはなに?","administration":"アドミニストレーション","back":"もどる","chat":"ローカルチャット","friend_requests":"フォローリクエスト","mentions":"メンション","interactions":"やりとり","dms":"ダイレクトメッセージ","public_tl":"パブリックタイムライン","timeline":"タイムライン","twkn":"つながっているすべてのネットワーク","user_search":"ユーザーをさがす","search":"さがす","who_to_follow":"おすすめユーザー","preferences":"せってい"},"notifications":{"broken_favorite":"ステータスがみつかりません。さがしています…","favorited_you":"あなたのステータスがおきにいりされました","followed_you":"フォローされました","load_older":"ふるいつうちをみる","notifications":"つうち","read":"よんだ!","repeated_you":"あなたのステータスがリピートされました","no_more_notifications":"つうちはありません"},"polls":{"add_poll":"いれふだをはじめる","add_option":"オプションをふやす","option":"オプション","votes":"いれふだ","vote":"ふだをいれる","type":"いれふだのかた","single_choice":"ひとつえらぶ","multiple_choices":"いくつでもえらべる","expiry":"いれふだのながさ","expires_in":"いれふだは {0} で、おわります","expired":"いれふだは {0} まえに、おわりました","not_enough_options":"ユニークなオプションが、たりません"},"emoji":{"stickers":"ステッカー","emoji":"えもじ","keep_open":"ピッカーをあけたままにする","search_emoji":"えもじをさがす","add_emoji":"えもじをうちこむ","custom":"カスタムえもじ","unicode":"ユニコードえもじ","load_all_hint":"はじめの {saneAmount} このえもじだけがロードされています。すべてのえもじをロードすると、パフォーマンスがわるくなるかもしれません。","load_all":"すべてのえもじをロード ({emojiAmount} こあります)"},"stickers":{"add_sticker":"ステッカーをふやす"},"interactions":{"favs_repeats":"リピートとおきにいり","follows":"あたらしいフォロー","load_older":"ふるいやりとりをみる"},"post_status":{"new_status":"とうこうする","account_not_locked_warning":"あなたのアカウントは {0} ではありません。あなたをフォローすれば、だれでも、フォロワーげんていのステータスをよむことができます。","account_not_locked_warning_link":"ロックされたアカウント","attachments_sensitive":"ファイルをNSFWにする","content_type":{"text/plain":"プレーンテキスト","text/html":"HTML","text/markdown":"Markdown","text/bbcode":"BBCode"},"content_warning":"せつめい (かかなくてもよい)","default":"はねだくうこうに、つきました。","direct_warning_to_all":"このとうこうは、メンションされたすべてのユーザーが、みることができます。","direct_warning_to_first_only":"このとうこうは、メッセージのはじめでメンションされたユーザーだけが、みることができます。","direct_warning":"このステータスは、メンションされたユーザーだけが、よむことができます。","posting":"とうこう","scope_notice":{"public":"このとうこうは、だれでもみることができます","private":"このとうこうは、あなたのフォロワーだけが、みることができます","unlisted":"このとうこうは、パブリックタイムラインと、つながっているすべてのネットワークでは、みることができません"},"scope":{"direct":"ダイレクト: メンションされたユーザーのみにとどきます","private":"フォロワーげんてい: フォロワーのみにとどきます","public":"パブリック: パブリックタイムラインにとどきます","unlisted":"アンリステッド: パブリックタイムラインにとどきません"}},"registration":{"bio":"プロフィール","email":"Eメール","fullname":"スクリーンネーム","password_confirm":"パスワードのかくにん","registration":"はじめる","token":"しょうたいトークン","captcha":"CAPTCHA","new_captcha":"もじがよめないときは、がぞうをクリックすると、あたらしいがぞうになります","username_placeholder":"れい: lain","fullname_placeholder":"れい: いわくら れいん","bio_placeholder":"れい:\\nごきげんよう。わたしはれいん。\\nわたしはアニメのおんなのこで、にほんのベッドタウンにすんでいます。ワイヤードで、わたしにあったことが、あるかもしれませんね。","validations":{"username_required":"なにかかいてください","fullname_required":"なにかかいてください","email_required":"なにかかいてください","password_required":"なにかかいてください","password_confirmation_required":"なにかかいてください","password_confirmation_match":"パスワードがちがいます"}},"remote_user_resolver":{"remote_user_resolver":"リモートユーザーリゾルバー","searching_for":"さがしています:","error":"みつかりませんでした。"},"selectable_list":{"select_all":"すべてえらぶ"},"settings":{"app_name":"アプリのなまえ","security":"セキュリティ","enter_current_password_to_confirm":"あなたのアイデンティティをたしかめるため、あなたのいまのパスワードをかいてください","mfa":{"otp":"OTP","setup_otp":"OTPをつくる","wait_pre_setup_otp":"OTPをよういしています","confirm_and_enable":"OTPをたしかめて、ゆうこうにする","title":"2-ファクターにんしょう","generate_new_recovery_codes":"あたらしいリカバリーコードをつくる","warning_of_generate_new_codes":"あたらしいリカバリーコードをつくったら、ふるいコードはつかえなくなります。","recovery_codes":"リカバリーコード。","waiting_a_recovery_codes":"バックアップコードをうけとっています…","recovery_codes_warning":"コードをかきうつすか、ひとにみられないところにセーブしてください。そうでなければ、あなたはこのコードをふたたびみることはできません。もしあなたが、2FAアプリのアクセスをうしなって、なおかつ、リカバリーコードもおもいだせないならば、あなたはあなたのアカウントから、しめだされます。","authentication_methods":"にんしょうメソッド","scan":{"title":"スキャン","desc":"あなたの2-ファクターアプリをつかって、このQRコードをスキャンするか、テキストキーをうちこんでください:","secret_code":"キー"},"verify":{"desc":"2-ファクターにんしょうをつかうには、あなたの2-ファクターアプリのコードをいれてください:"}},"attachmentRadius":"ファイル","attachments":"ファイル","avatar":"アバター","avatarAltRadius":"つうちのアバター","avatarRadius":"アバター","background":"バックグラウンド","bio":"プロフィール","block_export":"ブロックのエクスポート","block_export_button":"ブロックをCSVファイルにエクスポート","block_import":"ブロックのインポート","block_import_error":"ブロックのインポートがエラーになりました","blocks_imported":"ブロックをインポートしました! じっさいにブロックするまでには、もうしばらくかかります。","blocks_tab":"ブロック","btnRadius":"ボタン","cBlue":"リプライとフォロー","cGreen":"リピート","cOrange":"おきにいり","cRed":"キャンセル","change_email":"メールアドレスをかえる","change_email_error":"メールアドレスをかえようとしましたが、なにかがおかしいです。","changed_email":"メールアドレスをかえることができました!","change_password":"パスワードをかえる","change_password_error":"パスワードをかえることが、できなかったかもしれません。","changed_password":"パスワードが、かわりました!","collapse_subject":"せつめいのあるとうこうをたたむ","composing":"とうこう","confirm_new_password":"あたらしいパスワードのかくにん","current_avatar":"いまのアバター","current_password":"いまのパスワード","current_profile_banner":"いまのプロフィールバナー","data_import_export_tab":"インポートとエクスポート","default_vis":"デフォルトのこうかいはんい","delete_account":"アカウントをけす","delete_account_description":"あなたのアカウントとメッセージが、きえます。","delete_account_error":"アカウントをけすことが、できなかったかもしれません。インスタンスのアドミニストレーターに、おといあわせください。","delete_account_instructions":"ほんとうにアカウントをけしてもいいなら、パスワードをかいてください。","discoverable":"けんさくなどのサービスで、このアカウントをみつけてもよい","avatar_size_instruction":"アバターのおおきさは、150×150ピクセルか、それよりもおおきくするといいです。","pad_emoji":"えもじをピッカーでえらんだとき、えもじのまわりにスペースをいれる","export_theme":"セーブ","filtering":"フィルタリング","filtering_explanation":"これらのことばをふくむすべてのものがミュートされます。1ぎょうに1つのことばをかいてください","follow_export":"フォローのエクスポート","follow_export_button":"エクスポート","follow_export_processing":"おまちください。まもなくファイルをダウンロードできます。","follow_import":"フォローインポート","follow_import_error":"フォローのインポートがエラーになりました","follows_imported":"フォローがインポートされました! すこしじかんがかかるかもしれません。","foreground":"フォアグラウンド","general":"ぜんぱん","hide_attachments_in_convo":"スレッドのファイルをかくす","hide_attachments_in_tl":"タイムラインのファイルをかくす","hide_muted_posts":"ミュートしたユーザーのとうこうをかくす","max_thumbnails":"ひとつのとうこうにいれられるサムネイルのかず","hide_isp":"インスタンススペシフィックパネルをかくす","preload_images":"がぞうをさきよみする","use_one_click_nsfw":"NSFWなファイルを1クリックでひらく","hide_post_stats":"とうこうのとうけいをかくす (れい: おきにいりのかず)","hide_user_stats":"ユーザーのとうけいをかくす (れい: フォロワーのかず)","hide_filtered_statuses":"フィルターされたとうこうをかくす","import_blocks_from_a_csv_file":"CSVファイルからブロックをインポートする","import_followers_from_a_csv_file":"CSVファイルからフォローをインポートする","import_theme":"ロード","inputRadius":"インプットフィールド","checkboxRadius":"チェックボックス","instance_default":"(デフォルト: {value})","instance_default_simple":"(デフォルト)","interface":"インターフェース","interfaceLanguage":"インターフェースのことば","invalid_theme_imported":"このファイルはPleromaのテーマではありません。テーマはへんこうされませんでした。","limited_availability":"あなたのブラウザではできません","links":"リンク","lock_account_description":"あなたがみとめたひとだけ、あなたのアカウントをフォローできる","loop_video":"ビデオをくりかえす","loop_video_silent_only":"おとのないビデオだけくりかえす","mutes_tab":"ミュート","play_videos_in_modal":"ビデオをメディアビューアーでみる","use_contain_fit":"がぞうのサムネイルを、きりぬかない","name":"なまえ","name_bio":"なまえとプロフィール","new_email":"あたらしいメールアドレス","new_password":"あたらしいパスワード","notification_visibility":"ひょうじするつうち","notification_visibility_follows":"フォロー","notification_visibility_likes":"おきにいり","notification_visibility_mentions":"メンション","notification_visibility_repeats":"リピート","no_rich_text_description":"リッチテキストをつかわない","no_blocks":"ブロックしていません","no_mutes":"ミュートしていません","hide_follows_description":"フォローしているひとをみせない","hide_followers_description":"フォロワーをみせない","hide_follows_count_description":"フォローしているひとのかずをみせない","hide_followers_count_description":"フォロワーのかずをみせない","show_admin_badge":"アドミンのしるしをみせる","show_moderator_badge":"モデレーターのしるしをみせる","nsfw_clickthrough":"NSFWなファイルをかくす","oauth_tokens":"OAuthトークン","token":"トークン","refresh_token":"トークンをリフレッシュ","valid_until":"おわりのとき","revoke_token":"とりけす","panelRadius":"パネル","pause_on_unfocused":"タブにフォーカスがないときストリーミングをとめる","presets":"プリセット","profile_background":"プロフィールのバックグラウンド","profile_banner":"プロフィールバナー","profile_tab":"プロフィール","radii_help":"インターフェースのまるさをせっていする","replies_in_timeline":"タイムラインのリプライ","reply_visibility_all":"すべてのリプライをみる","reply_visibility_following":"わたしにあてられたリプライと、フォローしているひとからのリプライをみる","reply_visibility_self":"わたしにあてられたリプライをみる","autohide_floating_post_button":"あたらしいとうこうのボタンを、じどうてきにかくす (モバイル)","saving_err":"せっていをセーブできませんでした","saving_ok":"せっていをセーブしました","search_user_to_block":"ブロックしたいひとを、ここでけんさくできます","search_user_to_mute":"ミュートしたいひとを、ここでけんさくできます","security_tab":"セキュリティ","scope_copy":"リプライするとき、こうかいはんいをコピーする (DMのこうかいはんいは、つねにコピーされます)","minimal_scopes_mode":"こうかいはんいせんたくオプションを、ちいさくする","set_new_avatar":"あたらしいアバターをせっていする","set_new_profile_background":"あたらしいプロフィールのバックグラウンドをせっていする","set_new_profile_banner":"あたらしいプロフィールバナーを設定する","settings":"せってい","subject_input_always_show":"サブジェクトフィールドをいつでもひょうじする","subject_line_behavior":"リプライするときサブジェクトをコピーする","subject_line_email":"メールふう: \\"re: サブジェクト\\"","subject_line_mastodon":"マストドンふう: そのままコピー","subject_line_noop":"コピーしない","post_status_content_type":"とうこうのコンテントタイプ","stop_gifs":"カーソルをかさねたとき、GIFをうごかす","streaming":"うえまでスクロールしたとき、じどうてきにストリーミングする","text":"もじ","theme":"テーマ","theme_help":"カラーテーマをカスタマイズできます。","theme_help_v2_1":"チェックボックスをONにすると、コンポーネントごとに、いろと、とうめいどを、オーバーライドできます。「すべてクリア」ボタンをおすと、すべてのオーバーライドを、やめます。","theme_help_v2_2":"バックグラウンドとテキストのコントラストをあらわすアイコンがあります。マウスをホバーすると、くわしいせつめいがでます。とうめいないろをつかっているときは、もっともわるいばあいのコントラストがしめされます。","upload_a_photo":"がぞうをアップロード","tooltipRadius":"ツールチップとアラート","user_settings":"ユーザーせってい","values":{"false":"いいえ","true":"はい"},"fun":"おたのしみ","greentext":"ミームやじるし","notifications":"つうち","notification_mutes":"あるユーザーからのつうちをとめるには、ミュートしてください。","notification_blocks":"ブロックしているユーザーからのつうちは、すべてとまります。","enable_web_push_notifications":"ウェブプッシュつうちをゆるす","style":{"switcher":{"keep_color":"いろをのこす","keep_shadows":"かげをのこす","keep_opacity":"とうめいどをのこす","keep_roundness":"まるさをのこす","keep_fonts":"フォントをのこす","save_load_hint":"「のこす」オプションをONにすると、テーマをえらんだときとロードしたとき、いまのせっていをのこします。また、テーマをエクスポートするとき、これらのオプションをストアします。すべてのチェックボックスをOFFにすると、テーマをエクスポートしたとき、すべてのせっていをセーブします。","reset":"リセット","clear_all":"すべてクリア","clear_opacity":"とうめいどをクリア"},"common":{"color":"いろ","opacity":"とうめいど","contrast":{"hint":"コントラストは {ratio} です。{level}。({context})","level":{"aa":"AAレベルガイドライン (ミニマル) をみたします","aaa":"AAAレベルガイドライン (レコメンデッド) をみたします","bad":"ガイドラインをみたしません"},"context":{"18pt":"おおきい (18ポイントいじょう) テキスト","text":"テキスト"}}},"common_colors":{"_tab_label":"きょうつう","main":"きょうつうのいろ","foreground_hint":"「くわしく」タブで、もっとこまかくせっていできます","rgbo":"アイコンとアクセントとバッジ"},"advanced_colors":{"_tab_label":"くわしく","alert":"アラートのバックグラウンド","alert_error":"エラー","alert_warning":"けいこく","badge":"バッジのバックグラウンド","badge_notification":"つうち","panel_header":"パネルヘッダー","top_bar":"トップバー","borders":"さかいめ","buttons":"ボタン","inputs":"インプットフィールド","faint_text":"うすいテキスト"},"radii":{"_tab_label":"まるさ"},"shadows":{"_tab_label":"ひかりとかげ","component":"コンポーネント","override":"オーバーライド","shadow_id":"かげ #{value}","blur":"ぼかし","spread":"ひろがり","inset":"うちがわ","hint":"かげのせっていでは、いろのあたいとして --variable をつかうことができます。これはCSS3へんすうです。ただし、とうめいどのせっていは、きかなくなります。","filter_hint":{"always_drop_shadow":"ブラウザーがサポートしていれば、つねに {0} がつかわれます。","drop_shadow_syntax":"{0} は、{1} パラメーターと {2} キーワードをサポートしていません。","avatar_inset":"うちがわのかげと、そとがわのかげを、いっしょにつかうと、とうめいなアバターが、へんなみためになります。","spread_zero":"ひろがりが 0 よりもおおきなかげは、0 とおなじです","inset_classic":"うちがわのかげは {0} をつかいます"},"components":{"panel":"パネル","panelHeader":"パネルヘッダー","topBar":"トップバー","avatar":"ユーザーアバター (プロフィール)","avatarStatus":"ユーザーアバター (とうこう)","popup":"ポップアップとツールチップ","button":"ボタン","buttonHover":"ボタン (ホバー)","buttonPressed":"ボタン (おされているとき)","buttonPressedHover":"ボタン (ホバー、かつ、おされているとき)","input":"インプットフィールド"}},"fonts":{"_tab_label":"フォント","help":"「カスタム」をえらんだときは、システムにあるフォントのなまえを、ただしくにゅうりょくしてください。","components":{"interface":"インターフェース","input":"インプットフィールド","post":"とうこう","postCode":"モノスペース (とうこうがリッチテキストであるとき)"},"family":"フォントめい","size":"おおきさ (px)","weight":"ふとさ","custom":"カスタム"},"preview":{"header":"プレビュー","content":"ほんぶん","error":"エラーのれい","button":"ボタン","text":"これは{0}と{1}のれいです","mono":"monospace","input":"はねだくうこうに、つきました。","faint_link":"とてもたすけになるマニュアル","fine_print":"わたしたちの{0}を、よまないでください!","header_faint":"エラーではありません","checkbox":"りようきやくを、よみました","link":"ハイパーリンク"}},"version":{"title":"バージョン","backend_version":"バックエンドのバージョン","frontend_version":"フロントエンドのバージョン"}},"time":{"day":"{0}日","days":"{0}日","day_short":"{0}日","days_short":"{0}日","hour":"{0}時間","hours":"{0}時間","hour_short":"{0}時間","hours_short":"{0}時間","in_future":"{0}で","in_past":"{0}前","minute":"{0}分","minutes":"{0}分","minute_short":"{0}分","minutes_short":"{0}分","month":"{0}ヶ月前","months":"{0}ヶ月前","month_short":"{0}ヶ月前","months_short":"{0}ヶ月前","now":"たった今","now_short":"たった今","second":"{0}秒","seconds":"{0}秒","second_short":"{0}秒","seconds_short":"{0}秒","week":"{0}週間","weeks":"{0}週間","week_short":"{0}週間","weeks_short":"{0}週間","year":"{0}年","years":"{0}年","year_short":"{0}年","years_short":"{0}年"},"timeline":{"collapse":"たたむ","conversation":"スレッド","error_fetching":"よみこみがエラーになりました","load_older":"ふるいステータス","no_retweet_hint":"とうこうを「フォロワーのみ」または「ダイレクト」にすると、リピートできなくなります","repeated":"リピート","show_new":"よみこみ","up_to_date":"さいしん","no_more_statuses":"これでおわりです","no_statuses":"ありません"},"status":{"favorites":"おきにいり","repeats":"リピート","delete":"ステータスをけす","pin":"プロフィールにピンどめする","unpin":"プロフィールにピンどめするのをやめる","pinned":"ピンどめ","delete_confirm":"ほんとうに、このステータスを、けしてもいいですか?","reply_to":"へんしん:","replies_list":"へんしん:","mute_conversation":"スレッドをミュートする","unmute_conversation":"スレッドをミュートするのをやめる"},"user_card":{"approve":"うけいれ","block":"ブロック","blocked":"ブロックしています!","deny":"おことわり","favorites":"おきにいり","follow":"フォロー","follow_sent":"リクエストを、おくりました!","follow_progress":"リクエストしています…","follow_unfollow":"フォローをやめる","followees":"フォロー","followers":"フォロワー","following":"フォローしています!","follows_you":"フォローされました!","hidden":"かくされています","its_you":"これはあなたです!","media":"メディア","mention":"メンション","mute":"ミュート","muted":"ミュートしています!","per_day":"/日","remote_follow":"リモートフォロー","report":"つうほう","statuses":"ステータス","subscribe":"サブスクライブ","unsubscribe":"サブスクライブをやめる","unblock":"ブロックをやめる","unblock_progress":"ブロックをとりけしています…","block_progress":"ブロックしています…","unmute":"ミュートをやめる","unmute_progress":"ミュートをとりけしています…","mute_progress":"ミュートしています…","hide_repeats":"リピートをかくす","show_repeats":"リピートをみる","admin_menu":{"moderation":"モデレーション","grant_admin":"アドミンにする","revoke_admin":"アドミンをやめさせる","grant_moderator":"モデレーターにする","revoke_moderator":"モデレーターをやめさせる","activate_account":"アカウントをアクティブにする","deactivate_account":"アカウントをアクティブでなくする","delete_account":"アカウントをけす","force_nsfw":"すべてのとうこうをNSFWにする","strip_media":"とうこうからメディアをなくす","force_unlisted":"とうこうをアンリステッドにする","sandbox":"とうこうをフォロワーのみにする","disable_remote_subscription":"ほかのインスタンスからフォローされないようにする","disable_any_subscription":"フォローされないようにする","quarantine":"ほかのインスタンスのユーザーのとうこうをとめる","delete_user":"ユーザーをけす","delete_user_confirmation":"あなたは、ほんとうに、きはたしかですか? これは、とりけすことが、できません。"}},"user_profile":{"timeline_title":"ユーザータイムライン","profile_does_not_exist":"ごめんなさい。このプロフィールは、そんざいしません。","profile_loading_error":"ごめんなさい。プロフィールのロードがエラーになりました。"},"user_reporting":{"title":"つうほうする: {0}","add_comment_description":"このつうほうは、あなたのインスタンスのモデレーターに、おくられます。このアカウントを、つうほうするりゆうを、せつめいすることができます:","additional_comments":"ついかのコメント","forward_description":"このアカウントは、ほかのインスタンスのものです。そのインスタンスにも、このつうほうのコピーを、おくりますか?","forward_to":"コピーをおくる: {0}","submit":"そうしん","generic_error":"あなたのリクエストをうけつけようとしましたが、エラーになってしまいました。"},"who_to_follow":{"more":"くわしく","who_to_follow":"おすすめユーザー"},"tool_tip":{"media_upload":"メディアをアップロード","repeat":"リピート","reply":"リプライ","favorite":"おきにいり","user_settings":"ユーザーせってい"},"upload":{"error":{"base":"アップロードにしっぱいしました。","file_too_big":"ファイルがおおきすぎます [{filesize} {filesizeunit} / {allowedsize} {allowedsizeunit}]","default":"しばらくしてから、ためしてください"},"file_size_units":{"B":"B","KiB":"KiB","MiB":"MiB","GiB":"GiB","TiB":"TiB"}},"search":{"people":"ひとびと","hashtags":"ハッシュタグ","person_talking":"{count} にんが、はなしています","people_talking":"{count} にんが、はなしています","no_results":"みつかりませんでした"},"password_reset":{"forgot_password":"パスワードを、わすれましたか?","password_reset":"パスワードリセット","instruction":"あなたのメールアドレスかユーザーめいをいれてください。パスワードをリセットするためのリンクをおくります。","placeholder":"あなたのメールアドレスかユーザーめい","check_email":"パスワードをリセットするためのリンクがかかれたメールが、とどいているかどうか、みてください。","return_home":"ホームページにもどる","too_many_requests":"パスワードリセットを、ためすことが、おおすぎます。しばらくしてから、ためしてください。","password_reset_disabled":"このインスタンスでは、パスワードリセットは、できません。インスタンスのアドミニストレーターに、おといあわせください。","password_reset_required":"ログインするには、パスワードをリセットしてください。","password_reset_required_but_mailer_is_disabled":"あなたはパスワードのリセットがひつようです。しかし、まずいことに、このインスタンスでは、パスワードのリセットができなくなっています。このインスタンスのアドミニストレーターに、おといあわせください。"}}')}}]); +//# sourceMappingURL=19.e513835c3274271258fa.js.map \ No newline at end of file diff --git a/priv/static/static/js/19.e513835c3274271258fa.js.map b/priv/static/static/js/19.e513835c3274271258fa.js.map new file mode 100644 index 000000000..d92c8eeac --- /dev/null +++ b/priv/static/static/js/19.e513835c3274271258fa.js.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/19.e513835c3274271258fa.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/2.5f3ceb7bdf08fadacf00.js b/priv/static/static/js/2.5f3ceb7bdf08fadacf00.js deleted file mode 100644 index 31ef2f0ac..000000000 --- a/priv/static/static/js/2.5f3ceb7bdf08fadacf00.js +++ /dev/null @@ -1,2 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{616:function(t,e,s){var n=s(617);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);(0,s(7).default)("a45e17ec",n,!0,{})},617:function(t,e,s){(t.exports=s(6)(!1)).push([t.i,".settings_tab-switcher{height:100%}.settings_tab-switcher .setting-item{border-bottom:2px solid var(--fg,#182230);margin:1em 1em 1.4em;padding-bottom:1.4em}.settings_tab-switcher .setting-item>div,.settings_tab-switcher .setting-item>label{display:block;margin-bottom:.5em}.settings_tab-switcher .setting-item>div:last-child,.settings_tab-switcher .setting-item>label:last-child{margin-bottom:0}.settings_tab-switcher .setting-item .select-multiple{display:-ms-flexbox;display:flex}.settings_tab-switcher .setting-item .select-multiple .option-list{margin:0;padding-left:.5em}.settings_tab-switcher .setting-item:last-child{border-bottom:none;padding-bottom:0;margin-bottom:1em}.settings_tab-switcher .setting-item select{min-width:10em}.settings_tab-switcher .setting-item textarea{width:100%;max-width:100%;height:100px}.settings_tab-switcher .setting-item .unavailable,.settings_tab-switcher .setting-item .unavailable svg{color:var(--cRed,red);color:red}.settings_tab-switcher .setting-item .number-input{max-width:6em}",""])},618:function(t,e,s){var n=s(619);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);(0,s(7).default)("5bed876c",n,!0,{})},619:function(t,e,s){(t.exports=s(6)(!1)).push([t.i,".importer-uploading{font-size:1.5em;margin:.25em}",""])},620:function(t,e,s){var n=s(621);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);(0,s(7).default)("432fc7c6",n,!0,{})},621:function(t,e,s){(t.exports=s(6)(!1)).push([t.i,".exporter-processing{margin:.25em}",""])},622:function(t,e,s){var n=s(623);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);(0,s(7).default)("33ca0d90",n,!0,{})},623:function(t,e,s){(t.exports=s(6)(!1)).push([t.i,".mutes-and-blocks-tab{height:100%}.mutes-and-blocks-tab .usersearch-wrapper{padding:1em}.mutes-and-blocks-tab .bulk-actions{text-align:right;padding:0 1em;min-height:28px}.mutes-and-blocks-tab .bulk-action-button{width:10em}.mutes-and-blocks-tab .domain-mute-form{padding:1em;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.mutes-and-blocks-tab .domain-mute-button{-ms-flex-item-align:end;align-self:flex-end;margin-top:1em;width:10em}",""])},624:function(t,e,s){var n=s(625);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);(0,s(7).default)("3a9ec1bf",n,!0,{})},625:function(t,e,s){(t.exports=s(6)(!1)).push([t.i,".autosuggest{position:relative}.autosuggest-input{display:block;width:100%}.autosuggest-results{position:absolute;left:0;top:100%;right:0;max-height:400px;background-color:#121a24;background-color:var(--bg,#121a24);border-color:#222;border:1px solid var(--border,#222);border-radius:4px;border-radius:var(--inputRadius,4px);border-top-left-radius:0;border-top-right-radius:0;box-shadow:1px 1px 4px rgba(0,0,0,.6);box-shadow:var(--panelShadow);overflow-y:auto;z-index:1}",""])},626:function(t,e,s){var n=s(627);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);(0,s(7).default)("211aa67c",n,!0,{})},627:function(t,e,s){(t.exports=s(6)(!1)).push([t.i,".block-card-content-container{margin-top:.5em;text-align:right}.block-card-content-container button{width:10em}",""])},628:function(t,e,s){var n=s(629);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);(0,s(7).default)("7ea980e0",n,!0,{})},629:function(t,e,s){(t.exports=s(6)(!1)).push([t.i,".mute-card-content-container{margin-top:.5em;text-align:right}.mute-card-content-container button{width:10em}",""])},630:function(t,e,s){var n=s(631);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);(0,s(7).default)("39a942c3",n,!0,{})},631:function(t,e,s){(t.exports=s(6)(!1)).push([t.i,".domain-mute-card{-ms-flex:1 0;flex:1 0;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-align:center;align-items:center;padding:.6em 1em .6em 0}.domain-mute-card-domain{margin-right:1em;overflow:hidden;text-overflow:ellipsis}.domain-mute-card button{width:10em}.autosuggest-results .domain-mute-card{padding-left:1em}",""])},632:function(t,e,s){var n=s(633);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);(0,s(7).default)("3724291e",n,!0,{})},633:function(t,e,s){(t.exports=s(6)(!1)).push([t.i,".selectable-list-item-inner{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.selectable-list-item-inner>*{min-width:0}.selectable-list-item-selected-inner{background-color:#151e2a;background-color:var(--selectedMenu,#151e2a);color:var(--selectedMenuText,#b9b9ba);--faint:var(--selectedMenuFaintText,$fallback--faint);--faintLink:var(--selectedMenuFaintLink,$fallback--faint);--lightText:var(--selectedMenuLightText,$fallback--lightText);--icon:var(--selectedMenuIcon,$fallback--icon)}.selectable-list-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.6em 0;border-bottom:2px solid;border-bottom-color:#222;border-bottom-color:var(--border,#222)}.selectable-list-header-actions{-ms-flex:1;flex:1}.selectable-list-checkbox-wrapper{padding:0 10px;-ms-flex:none;flex:none}",""])},634:function(t,e,s){},638:function(t,e,s){var n=s(639);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);(0,s(7).default)("1fa434a2",n,!0,{})},639:function(t,e,s){(t.exports=s(6)(!1)).push([t.i,".ModifiedIndicator{display:inline-block;position:relative}.ModifiedIndicator .modified-tooltip{margin:.5em 1em;min-width:10em;text-align:center}",""])},640:function(t,e,s){var n=s(641);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);(0,s(7).default)("9374f1e2",n,!0,{})},641:function(t,e,s){(t.exports=s(6)(!1)).push([t.i,"",""])},642:function(t,e,s){var n=s(643);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);(0,s(7).default)("a588473e",n,!0,{})},643:function(t,e,s){(t.exports=s(6)(!1)).push([t.i,".mfa-settings .method-item,.mfa-settings .mfa-heading{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-align:baseline;align-items:baseline}.mfa-settings .warning{color:orange;color:var(--cOrange,orange)}.mfa-settings .setup-otp{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-wrap:wrap;flex-wrap:wrap}.mfa-settings .setup-otp .qr-code{-ms-flex:1;flex:1;padding-right:10px}.mfa-settings .setup-otp .verify{-ms-flex:1;flex:1}.mfa-settings .setup-otp .error{margin:4px 0 0}.mfa-settings .setup-otp .confirm-otp-actions button{width:15em;margin-top:5px}",""])},644:function(t,e,s){var n=s(645);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);(0,s(7).default)("4065bf15",n,!0,{})},645:function(t,e,s){(t.exports=s(6)(!1)).push([t.i,".mfa-backup-codes .warning{color:orange;color:var(--cOrange,orange)}.mfa-backup-codes .backup-codes{font-family:var(--postCodeFont,monospace)}",""])},647:function(t,e,s){var n=s(648);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);(0,s(7).default)("27925ae8",n,!0,{})},648:function(t,e,s){(t.exports=s(6)(!1)).push([t.i,".profile-tab .bio{margin:0}.profile-tab .visibility-tray{padding-top:5px}.profile-tab input[type=file]{padding:5px;height:auto}.profile-tab .banner-background-preview{max-width:100%;width:300px;position:relative}.profile-tab .banner-background-preview img{width:100%}.profile-tab .uploading{font-size:1.5em;margin:.25em}.profile-tab .name-changer{width:100%}.profile-tab .current-avatar-container{position:relative;width:150px;height:150px}.profile-tab .current-avatar{display:block;width:100%;height:100%;border-radius:4px;border-radius:var(--avatarRadius,4px)}.profile-tab .reset-button{position:absolute;top:.2em;right:.2em;border-radius:5px;border-radius:var(--tooltipRadius,5px);background-color:rgba(0,0,0,.6);opacity:.7;color:#fff;width:1.5em;height:1.5em;text-align:center;line-height:1.5em;font-size:1.5em;cursor:pointer}.profile-tab .reset-button:hover{opacity:1}.profile-tab .oauth-tokens{width:100%}.profile-tab .oauth-tokens th{text-align:left}.profile-tab .oauth-tokens .actions{text-align:right}.profile-tab-usersearch-wrapper{padding:1em}.profile-tab-bulk-actions{text-align:right;padding:0 1em;min-height:28px}.profile-tab-bulk-actions button{width:10em}.profile-tab-domain-mute-form{padding:1em;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.profile-tab-domain-mute-form button{-ms-flex-item-align:end;align-self:flex-end;margin-top:1em;width:10em}.profile-tab .setting-subitem{margin-left:1.75em}.profile-tab .profile-fields{display:-ms-flexbox;display:flex}.profile-tab .profile-fields>.emoji-input{-ms-flex:1 1 auto;flex:1 1 auto;margin:0 .2em .5em;min-width:0}.profile-tab .profile-fields .delete-field{width:20px;-ms-flex-item-align:center;-ms-grid-row-align:center;align-self:center;margin:0 .2em .5em;padding:0 .5em}",""])},649:function(t,e,s){var n=s(650);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);(0,s(7).default)("0dfd0b33",n,!0,{})},650:function(t,e,s){(t.exports=s(6)(!1)).push([t.i,".image-cropper-img-input{display:none}.image-cropper-image-container{position:relative}.image-cropper-image-container img{display:block;max-width:100%}.image-cropper-buttons-wrapper{margin-top:10px}.image-cropper-buttons-wrapper button{margin-top:5px}",""])},653:function(t,e,s){var n=s(654);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);(0,s(7).default)("4fafab12",n,!0,{})},654:function(t,e,s){(t.exports=s(6)(!1)).push([t.i,".theme-tab{padding-bottom:2em}.theme-tab .theme-warning{display:-ms-flexbox;display:flex;-ms-flex-align:baseline;align-items:baseline;margin-bottom:.5em}.theme-tab .theme-warning .buttons .btn{margin-bottom:.5em}.theme-tab .preset-switcher{margin-right:1em}.theme-tab .style-control{display:-ms-flexbox;display:flex;-ms-flex-align:baseline;align-items:baseline;margin-bottom:5px}.theme-tab .style-control .label{-ms-flex:1;flex:1}.theme-tab .style-control.disabled input,.theme-tab .style-control.disabled select{opacity:.5}.theme-tab .style-control .opt{margin:.5em}.theme-tab .style-control .color-input{-ms-flex:0 0 0px;flex:0 0 0}.theme-tab .style-control input,.theme-tab .style-control select{min-width:3em;margin:0;-ms-flex:0;flex:0}.theme-tab .style-control input[type=number],.theme-tab .style-control select[type=number]{min-width:5em}.theme-tab .style-control input[type=range],.theme-tab .style-control select[type=range]{-ms-flex:1;flex:1;min-width:3em;-ms-flex-item-align:start;align-self:flex-start}.theme-tab .reset-container{-ms-flex-wrap:wrap;flex-wrap:wrap}.theme-tab .apply-container,.theme-tab .color-container,.theme-tab .fonts-container,.theme-tab .radius-container,.theme-tab .reset-container{display:-ms-flexbox;display:flex}.theme-tab .fonts-container,.theme-tab .radius-container{-ms-flex-direction:column;flex-direction:column}.theme-tab .color-container{-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:justify;justify-content:space-between}.theme-tab .color-container>h4{width:99%}.theme-tab .color-container,.theme-tab .fonts-container,.theme-tab .presets-container,.theme-tab .radius-container,.theme-tab .shadow-container{margin:1em 1em 0}.theme-tab .tab-header{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-align:baseline;align-items:baseline;width:100%;min-height:30px;margin-bottom:1em}.theme-tab .tab-header p{-ms-flex:1;flex:1;margin:0;margin-right:.5em}.theme-tab .tab-header-buttons{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.theme-tab .tab-header-buttons .btn{min-width:1px;-ms-flex:0 auto;flex:0 auto;padding:0 1em;margin-bottom:.5em}.theme-tab .shadow-selector .override{-ms-flex:1;flex:1;margin-left:.5em}.theme-tab .shadow-selector .select-container{margin-top:-4px;margin-bottom:-3px}.theme-tab .save-load,.theme-tab .save-load-options{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:baseline;align-items:baseline;-ms-flex-wrap:wrap;flex-wrap:wrap}.theme-tab .save-load-options .import-export,.theme-tab .save-load-options .presets,.theme-tab .save-load .import-export,.theme-tab .save-load .presets{margin-bottom:.5em}.theme-tab .save-load-options .import-export,.theme-tab .save-load .import-export{display:-ms-flexbox;display:flex}.theme-tab .save-load-options .override,.theme-tab .save-load .override{margin-left:.5em}.theme-tab .save-load-options{-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:.5em;-ms-flex-pack:center;justify-content:center}.theme-tab .save-load-options .keep-option{margin:0 .5em .5em;min-width:25%}.theme-tab .preview-container{border-top:1px dashed;border-bottom:1px dashed;border-color:#222;border-color:var(--border,#222);margin:1em 0;padding:1em;background-color:var(--wallpaper);background-image:var(--body-background-image);background-size:cover;background-position:50% 50%}.theme-tab .preview-container .dummy .post{font-family:var(--postFont);display:-ms-flexbox;display:flex}.theme-tab .preview-container .dummy .post .content{-ms-flex:1;flex:1}.theme-tab .preview-container .dummy .post .content h4{margin-bottom:.25em}.theme-tab .preview-container .dummy .post .content .icons{margin-top:.5em;display:-ms-flexbox;display:flex}.theme-tab .preview-container .dummy .post .content .icons i{margin-right:1em}.theme-tab .preview-container .dummy .after-post{margin-top:1em;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.theme-tab .preview-container .dummy .avatar,.theme-tab .preview-container .dummy .avatar-alt{background:linear-gradient(135deg,#b8e1fc,#a9d2f3 10%,#90bae4 25%,#90bcea 37%,#90bff0 50%,#6ba8e5 51%,#a2daf5 83%,#bdf3fd);color:#000;font-family:sans-serif;text-align:center;margin-right:1em}.theme-tab .preview-container .dummy .avatar-alt{-ms-flex:0 auto;flex:0 auto;margin-left:28px;font-size:12px;min-width:20px;min-height:20px;line-height:20px;border-radius:10px;border-radius:var(--avatarAltRadius,10px)}.theme-tab .preview-container .dummy .avatar{-ms-flex:0 auto;flex:0 auto;width:48px;height:48px;font-size:14px;line-height:48px}.theme-tab .preview-container .dummy .actions{display:-ms-flexbox;display:flex;-ms-flex-align:baseline;align-items:baseline}.theme-tab .preview-container .dummy .actions .checkbox{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:baseline;align-items:baseline;margin-right:1em;-ms-flex:1;flex:1}.theme-tab .preview-container .dummy .separator{margin:1em;border-bottom:1px solid;border-color:#222;border-color:var(--border,#222)}.theme-tab .preview-container .dummy .panel-heading .alert,.theme-tab .preview-container .dummy .panel-heading .badge,.theme-tab .preview-container .dummy .panel-heading .btn,.theme-tab .preview-container .dummy .panel-heading .faint{margin-left:1em;white-space:nowrap}.theme-tab .preview-container .dummy .panel-heading .faint{text-overflow:ellipsis;min-width:2em;overflow-x:hidden}.theme-tab .preview-container .dummy .panel-heading .flex-spacer{-ms-flex:1;flex:1}.theme-tab .preview-container .dummy .btn{margin-left:0;padding:0 1em;min-width:3em;min-height:30px}.theme-tab .apply-container{-ms-flex-pack:center;justify-content:center}.theme-tab .color-item,.theme-tab .radius-item{min-width:20em;margin:5px 6px 0 0;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex:1 1 0px;flex:1 1 0}.theme-tab .color-item.wide,.theme-tab .radius-item.wide{min-width:60%}.theme-tab .color-item:not(.wide):nth-child(odd),.theme-tab .radius-item:not(.wide):nth-child(odd){margin-right:7px}.theme-tab .color-item .color,.theme-tab .color-item .opacity,.theme-tab .radius-item .color,.theme-tab .radius-item .opacity{display:-ms-flexbox;display:flex;-ms-flex-align:baseline;align-items:baseline}.theme-tab .radius-item{-ms-flex-preferred-size:auto;flex-basis:auto}.theme-tab .theme-color-cl,.theme-tab .theme-radius-rn{border:0;box-shadow:none;background:transparent;color:var(--faint,hsla(240,1%,73%,.5));-ms-flex-item-align:stretch;-ms-grid-row-align:stretch;align-self:stretch}.theme-tab .theme-color-cl,.theme-tab .theme-color-in,.theme-tab .theme-radius-in{margin-left:4px}.theme-tab .theme-radius-in{min-width:1em;max-width:7em;-ms-flex:1;flex:1}.theme-tab .theme-radius-lb{max-width:50em}.theme-tab .theme-preview-content{padding:20px}.theme-tab .apply-container .btn{min-height:28px;min-width:10em;padding:0 2em}.theme-tab .btn{margin-left:.25em;margin-right:.25em}",""])},655:function(t,e,s){var n=s(656);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);(0,s(7).default)("7e57f952",n,!0,{})},656:function(t,e,s){(t.exports=s(6)(!1)).push([t.i,'.color-input,.color-input-field.input{display:-ms-inline-flexbox;display:inline-flex}.color-input-field.input{-ms-flex:0 0 0px;flex:0 0 0;max-width:9em;-ms-flex-align:stretch;align-items:stretch;padding:.2em 8px}.color-input-field.input input{background:none;color:#b9b9ba;color:var(--inputText,#b9b9ba);border:none;padding:0;margin:0}.color-input-field.input input.textColor{-ms-flex:1 0 3em;flex:1 0 3em;min-width:3em;padding:0}.color-input-field.input .computedIndicator,.color-input-field.input .transparentIndicator,.color-input-field.input input.nativeColor{-ms-flex:0 0 2em;flex:0 0 2em;min-width:2em;-ms-flex-item-align:center;-ms-grid-row-align:center;align-self:center;height:100%}.color-input-field.input .transparentIndicator{background-color:#f0f;position:relative}.color-input-field.input .transparentIndicator:after,.color-input-field.input .transparentIndicator:before{display:block;content:"";background-color:#000;position:absolute;height:50%;width:50%}.color-input-field.input .transparentIndicator:after{top:0;left:0}.color-input-field.input .transparentIndicator:before{bottom:0;right:0}.color-input .label{-ms-flex:1 1 auto;flex:1 1 auto}',""])},657:function(t,e,s){var n=s(658);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);(0,s(7).default)("6c632637",n,!0,{})},658:function(t,e,s){(t.exports=s(6)(!1)).push([t.i,".color-control input.text-input{max-width:7em;-ms-flex:1;flex:1}",""])},659:function(t,e,s){var n=s(660);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);(0,s(7).default)("d219da80",n,!0,{})},660:function(t,e,s){(t.exports=s(6)(!1)).push([t.i,".shadow-control{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;margin-bottom:1em}.shadow-control .shadow-preview-container,.shadow-control .shadow-tweak{margin:5px 6px 0 0}.shadow-control .shadow-preview-container{-ms-flex:0;flex:0;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.shadow-control .shadow-preview-container input[type=number]{width:5em;min-width:2em}.shadow-control .shadow-preview-container .x-shift-control,.shadow-control .shadow-preview-container .y-shift-control{display:-ms-flexbox;display:flex;-ms-flex:0;flex:0}.shadow-control .shadow-preview-container .x-shift-control[disabled=disabled] *,.shadow-control .shadow-preview-container .y-shift-control[disabled=disabled] *{opacity:.5}.shadow-control .shadow-preview-container .x-shift-control{-ms-flex-align:start;align-items:flex-start}.shadow-control .shadow-preview-container .x-shift-control .wrap,.shadow-control .shadow-preview-container input[type=range]{margin:0;width:15em;height:2em}.shadow-control .shadow-preview-container .y-shift-control{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:end;align-items:flex-end}.shadow-control .shadow-preview-container .y-shift-control .wrap{width:2em;height:15em}.shadow-control .shadow-preview-container .y-shift-control input[type=range]{transform-origin:1em 1em;transform:rotate(90deg)}.shadow-control .shadow-preview-container .preview-window{-ms-flex:1;flex:1;background-color:#999;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;background-image:linear-gradient(45deg,#666 25%,transparent 0),linear-gradient(-45deg,#666 25%,transparent 0),linear-gradient(45deg,transparent 75%,#666 0),linear-gradient(-45deg,transparent 75%,#666 0);background-size:20px 20px;background-position:0 0,0 10px,10px -10px,-10px 0;border-radius:4px;border-radius:var(--inputRadius,4px)}.shadow-control .shadow-preview-container .preview-window .preview-block{width:33%;height:33%;background-color:#121a24;background-color:var(--bg,#121a24);border-radius:10px;border-radius:var(--panelRadius,10px)}.shadow-control .shadow-tweak{-ms-flex:1;flex:1;min-width:280px}.shadow-control .shadow-tweak .id-control{-ms-flex-align:stretch;align-items:stretch}.shadow-control .shadow-tweak .id-control .shadow-switcher{-ms-flex:1;flex:1}.shadow-control .shadow-tweak .id-control .btn,.shadow-control .shadow-tweak .id-control .shadow-switcher{min-width:1px;margin-right:5px}.shadow-control .shadow-tweak .id-control .btn{padding:0 .4em;margin:0 .1em}",""])},661:function(t,e,s){var n=s(662);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);(0,s(7).default)("d9c0acde",n,!0,{})},662:function(t,e,s){(t.exports=s(6)(!1)).push([t.i,".font-control input.custom-font{min-width:10em}.font-control.custom .font-switcher{border-top-right-radius:0;border-bottom-right-radius:0}.font-control.custom .custom-font{border-top-left-radius:0;border-bottom-left-radius:0}",""])},663:function(t,e,s){var n=s(664);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);(0,s(7).default)("b94bc120",n,!0,{})},664:function(t,e,s){(t.exports=s(6)(!1)).push([t.i,".contrast-ratio{display:-ms-flexbox;display:flex;-ms-flex-pack:end;justify-content:flex-end;margin-top:-4px;margin-bottom:5px}.contrast-ratio .label{margin-right:1em}.contrast-ratio .rating{display:inline-block;text-align:center;margin-left:.5em}",""])},665:function(t,e,s){var n=s(666);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);(0,s(7).default)("6fe23c76",n,!0,{})},666:function(t,e,s){(t.exports=s(6)(!1)).push([t.i,".preview-container{position:relative}.underlay-preview{position:absolute;top:0;bottom:0;left:10px;right:10px}",""])},668:function(t,e,s){"use strict";s.r(e);var n=s(150),a=s(2),o=s.n(a),i=s(3),r=s(1);i.c.add(r.m,r.jb);var l={props:{submitHandler:{type:Function,required:!0},submitButtonLabel:{type:String,default:function(){return this.$t("importer.submit")}},successMessage:{type:String,default:function(){return this.$t("importer.success")}},errorMessage:{type:String,default:function(){return this.$t("importer.error")}}},data:function(){return{file:null,error:!1,success:!1,submitting:!1}},methods:{change:function(){this.file=this.$refs.input.files[0]},submit:function(){var t=this;this.dismiss(),this.submitting=!0,this.submitHandler(this.file).then((function(){t.success=!0})).catch((function(){t.error=!0})).finally((function(){t.submitting=!1}))},dismiss:function(){this.success=!1,this.error=!1}}},c=s(0);var u=function(t){s(618)},d=Object(c.a)(l,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"importer"},[s("form",[s("input",{ref:"input",attrs:{type:"file"},on:{change:t.change}})]),t._v(" "),t.submitting?s("FAIcon",{staticClass:"importer-uploading",attrs:{spin:"",icon:"circle-notch"}}):s("button",{staticClass:"btn button-default",on:{click:t.submit}},[t._v("\n "+t._s(t.submitButtonLabel)+"\n ")]),t._v(" "),t.success?s("div",[s("FAIcon",{attrs:{icon:"times"},on:{click:t.dismiss}}),t._v(" "),s("p",[t._v(t._s(t.successMessage))])],1):t.error?s("div",[s("FAIcon",{attrs:{icon:"times"},on:{click:t.dismiss}}),t._v(" "),s("p",[t._v(t._s(t.errorMessage))])],1):t._e()],1)}),[],!1,u,null,null).exports;i.c.add(r.m);var p={props:{getContent:{type:Function,required:!0},filename:{type:String,default:"export.csv"},exportButtonLabel:{type:String,default:function(){return this.$t("exporter.export")}},processingMessage:{type:String,default:function(){return this.$t("exporter.processing")}}},data:function(){return{processing:!1}},methods:{process:function(){var t=this;this.processing=!0,this.getContent().then((function(e){var s=document.createElement("a");s.setAttribute("href","data:text/plain;charset=utf-8,"+encodeURIComponent(e)),s.setAttribute("download",t.filename),s.style.display="none",document.body.appendChild(s),s.click(),document.body.removeChild(s),setTimeout((function(){t.processing=!1}),2e3)}))}}};var m=function(t){s(620)},h=Object(c.a)(p,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"exporter"},[t.processing?s("div",[s("FAIcon",{attrs:{icon:"circle-notch",size:"lg",spin:""}}),t._v(" "),s("span",[t._v(t._s(t.processingMessage))])],1):s("button",{staticClass:"btn button-default",on:{click:t.process}},[t._v("\n "+t._s(t.exportButtonLabel)+"\n ")])])}),[],!1,m,null,null).exports,v=s(59),f=s(4);function b(t,e){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),s.push.apply(s,n)}return s}var g={data:function(){return{activeTab:"profile",newDomainToMute:""}},created:function(){this.$store.dispatch("fetchTokens")},components:{Importer:d,Exporter:h,Checkbox:v.a},computed:function(t){for(var e=1;e0?s("div",{staticClass:"autosuggest-results"},[t._l(t.filtered,(function(e){return t._t("default",null,{item:e})}))],2):t._e()])}),[],!1,T,null,null).exports,P=s(42),S={props:["userId"],data:function(){return{progress:!1}},computed:{user:function(){return this.$store.getters.findUser(this.userId)},relationship:function(){return this.$store.getters.relationship(this.userId)},blocked:function(){return this.relationship.blocking}},components:{BasicUserCard:P.a},methods:{unblockUser:function(){var t=this;this.progress=!0,this.$store.dispatch("unblockUser",this.user.id).then((function(){t.progress=!1}))},blockUser:function(){var t=this;this.progress=!0,this.$store.dispatch("blockUser",this.user.id).then((function(){t.progress=!1}))}}};var I=function(t){s(626)},j=Object(c.a)(S,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("basic-user-card",{attrs:{user:t.user}},[s("div",{staticClass:"block-card-content-container"},[t.blocked?s("button",{staticClass:"btn button-default",attrs:{disabled:t.progress},on:{click:t.unblockUser}},[t.progress?[t._v("\n "+t._s(t.$t("user_card.unblock_progress"))+"\n ")]:[t._v("\n "+t._s(t.$t("user_card.unblock"))+"\n ")]],2):s("button",{staticClass:"btn button-default",attrs:{disabled:t.progress},on:{click:t.blockUser}},[t.progress?[t._v("\n "+t._s(t.$t("user_card.block_progress"))+"\n ")]:[t._v("\n "+t._s(t.$t("user_card.block"))+"\n ")]],2)])])}),[],!1,I,null,null).exports,B={props:["userId"],data:function(){return{progress:!1}},computed:{user:function(){return this.$store.getters.findUser(this.userId)},relationship:function(){return this.$store.getters.relationship(this.userId)},muted:function(){return this.relationship.muting}},components:{BasicUserCard:P.a},methods:{unmuteUser:function(){var t=this;this.progress=!0,this.$store.dispatch("unmuteUser",this.userId).then((function(){t.progress=!1}))},muteUser:function(){var t=this;this.progress=!0,this.$store.dispatch("muteUser",this.userId).then((function(){t.progress=!1}))}}};var F=function(t){s(628)},R=Object(c.a)(B,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("basic-user-card",{attrs:{user:t.user}},[s("div",{staticClass:"mute-card-content-container"},[t.muted?s("button",{staticClass:"btn button-default",attrs:{disabled:t.progress},on:{click:t.unmuteUser}},[t.progress?[t._v("\n "+t._s(t.$t("user_card.unmute_progress"))+"\n ")]:[t._v("\n "+t._s(t.$t("user_card.unmute"))+"\n ")]],2):s("button",{staticClass:"btn button-default",attrs:{disabled:t.progress},on:{click:t.muteUser}},[t.progress?[t._v("\n "+t._s(t.$t("user_card.mute_progress"))+"\n ")]:[t._v("\n "+t._s(t.$t("user_card.mute"))+"\n ")]],2)])])}),[],!1,F,null,null).exports,E=s(88),A={props:["domain"],components:{ProgressButton:E.a},computed:{user:function(){return this.$store.state.users.currentUser},muted:function(){return this.user.domainMutes.includes(this.domain)}},methods:{unmuteDomain:function(){return this.$store.dispatch("unmuteDomain",this.domain)},muteDomain:function(){return this.$store.dispatch("muteDomain",this.domain)}}};var M=function(t){s(630)},D=Object(c.a)(A,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"domain-mute-card"},[s("div",{staticClass:"domain-mute-card-domain"},[t._v("\n "+t._s(t.domain)+"\n ")]),t._v(" "),t.muted?s("ProgressButton",{staticClass:"btn button-default",attrs:{click:t.unmuteDomain},scopedSlots:t._u([{key:"progress",fn:function(){return[t._v("\n "+t._s(t.$t("domain_mute_card.unmute_progress"))+"\n ")]},proxy:!0}],null,!1,11670719)},[t._v("\n "+t._s(t.$t("domain_mute_card.unmute"))+"\n ")]):s("ProgressButton",{staticClass:"btn button-default",attrs:{click:t.muteDomain},scopedSlots:t._u([{key:"progress",fn:function(){return[t._v("\n "+t._s(t.$t("domain_mute_card.mute_progress"))+"\n ")]},proxy:!0}])},[t._v("\n "+t._s(t.$t("domain_mute_card.mute"))+"\n ")])],1)}),[],!1,M,null,null).exports,U={components:{List:s(58).a,Checkbox:v.a},props:{items:{type:Array,default:function(){return[]}},getKey:{type:Function,default:function(t){return t.id}}},data:function(){return{selected:[]}},computed:{allKeys:function(){return this.items.map(this.getKey)},filteredSelected:function(){var t=this;return this.allKeys.filter((function(e){return-1!==t.selected.indexOf(e)}))},allSelected:function(){return this.filteredSelected.length===this.items.length},noneSelected:function(){return 0===this.filteredSelected.length},someSelected:function(){return!this.allSelected&&!this.noneSelected}},methods:{isSelected:function(t){return-1!==this.filteredSelected.indexOf(this.getKey(t))},toggle:function(t,e){var s=this.getKey(e);t!==this.isSelected(s)&&(t?this.selected.push(s):this.selected.splice(this.selected.indexOf(s),1))},toggleAll:function(t){this.selected=t?this.allKeys.slice(0):[]}}};var N=function(t){s(632)},V=Object(c.a)(U,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"selectable-list"},[t.items.length>0?s("div",{staticClass:"selectable-list-header"},[s("div",{staticClass:"selectable-list-checkbox-wrapper"},[s("Checkbox",{attrs:{checked:t.allSelected,indeterminate:t.someSelected},on:{change:t.toggleAll}},[t._v("\n "+t._s(t.$t("selectable_list.select_all"))+"\n ")])],1),t._v(" "),s("div",{staticClass:"selectable-list-header-actions"},[t._t("header",null,{selected:t.filteredSelected})],2)]):t._e(),t._v(" "),s("List",{attrs:{items:t.items,"get-key":t.getKey},scopedSlots:t._u([{key:"item",fn:function(e){var n=e.item;return[s("div",{staticClass:"selectable-list-item-inner",class:{"selectable-list-item-selected-inner":t.isSelected(n)}},[s("div",{staticClass:"selectable-list-checkbox-wrapper"},[s("Checkbox",{attrs:{checked:t.isSelected(n)},on:{change:function(e){return t.toggle(e,n)}}})],1),t._v(" "),t._t("item",null,{item:n})],2)]}},{key:"empty",fn:function(){return[t._t("empty")]},proxy:!0}],null,!0)})],1)}),[],!1,N,null,null).exports,W=s(203),q=s.n(W),z=s(9),G=s.n(z),K=s(13),H=s.n(K),J=s(8),Q=s.n(J),X=s(204),Y=s.n(X),Z=s(205),tt=(s(634),s(57));function et(t,e){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),s.push.apply(s,n)}return s}function st(t){for(var e=1;e0?s("ProgressButton",{staticClass:"btn button-default bulk-action-button",attrs:{click:function(){return t.blockUsers(n)}},scopedSlots:t._u([{key:"progress",fn:function(){return[t._v("\n "+t._s(t.$t("user_card.block_progress"))+"\n ")]},proxy:!0}],null,!0)},[t._v("\n "+t._s(t.$t("user_card.block"))+"\n ")]):t._e(),t._v(" "),n.length>0?s("ProgressButton",{staticClass:"btn button-default",attrs:{click:function(){return t.unblockUsers(n)}},scopedSlots:t._u([{key:"progress",fn:function(){return[t._v("\n "+t._s(t.$t("user_card.unblock_progress"))+"\n ")]},proxy:!0}],null,!0)},[t._v("\n "+t._s(t.$t("user_card.unblock"))+"\n ")]):t._e()],1)]}},{key:"item",fn:function(t){var e=t.item;return[s("BlockCard",{attrs:{"user-id":e}})]}},{key:"empty",fn:function(){return[t._v("\n "+t._s(t.$t("settings.no_blocks"))+"\n ")]},proxy:!0}])})],1),t._v(" "),s("div",{attrs:{label:t.$t("settings.mutes_tab")}},[s("tab-switcher",[s("div",{attrs:{label:"Users"}},[s("div",{staticClass:"usersearch-wrapper"},[s("Autosuggest",{attrs:{filter:t.filterUnMutedUsers,query:t.queryUserIds,placeholder:t.$t("settings.search_user_to_mute")},scopedSlots:t._u([{key:"default",fn:function(t){return[s("MuteCard",{attrs:{"user-id":t.item}})]}}])})],1),t._v(" "),s("MuteList",{attrs:{refresh:!0,"get-key":function(t){return t}},scopedSlots:t._u([{key:"header",fn:function(e){var n=e.selected;return[s("div",{staticClass:"bulk-actions"},[n.length>0?s("ProgressButton",{staticClass:"btn button-default",attrs:{click:function(){return t.muteUsers(n)}},scopedSlots:t._u([{key:"progress",fn:function(){return[t._v("\n "+t._s(t.$t("user_card.mute_progress"))+"\n ")]},proxy:!0}],null,!0)},[t._v("\n "+t._s(t.$t("user_card.mute"))+"\n ")]):t._e(),t._v(" "),n.length>0?s("ProgressButton",{staticClass:"btn button-default",attrs:{click:function(){return t.unmuteUsers(n)}},scopedSlots:t._u([{key:"progress",fn:function(){return[t._v("\n "+t._s(t.$t("user_card.unmute_progress"))+"\n ")]},proxy:!0}],null,!0)},[t._v("\n "+t._s(t.$t("user_card.unmute"))+"\n ")]):t._e()],1)]}},{key:"item",fn:function(t){var e=t.item;return[s("MuteCard",{attrs:{"user-id":e}})]}},{key:"empty",fn:function(){return[t._v("\n "+t._s(t.$t("settings.no_mutes"))+"\n ")]},proxy:!0}])})],1),t._v(" "),s("div",{attrs:{label:t.$t("settings.domain_mutes")}},[s("div",{staticClass:"domain-mute-form"},[s("Autosuggest",{attrs:{filter:t.filterUnMutedDomains,query:t.queryKnownDomains,placeholder:t.$t("settings.type_domains_to_mute")},scopedSlots:t._u([{key:"default",fn:function(t){return[s("DomainMuteCard",{attrs:{domain:t.item}})]}}])})],1),t._v(" "),s("DomainMuteList",{attrs:{refresh:!0,"get-key":function(t){return t}},scopedSlots:t._u([{key:"header",fn:function(e){var n=e.selected;return[s("div",{staticClass:"bulk-actions"},[n.length>0?s("ProgressButton",{staticClass:"btn button-default",attrs:{click:function(){return t.unmuteDomains(n)}},scopedSlots:t._u([{key:"progress",fn:function(){return[t._v("\n "+t._s(t.$t("domain_mute_card.unmute_progress"))+"\n ")]},proxy:!0}],null,!0)},[t._v("\n "+t._s(t.$t("domain_mute_card.unmute"))+"\n ")]):t._e()],1)]}},{key:"item",fn:function(t){var e=t.item;return[s("DomainMuteCard",{attrs:{domain:e}})]}},{key:"empty",fn:function(){return[t._v("\n "+t._s(t.$t("settings.no_mutes"))+"\n ")]},proxy:!0}])})],1)])],1)])}),[],!1,lt,null,null).exports,ut={data:function(){return{activeTab:"profile",notificationSettings:this.$store.state.users.currentUser.notification_settings,newDomainToMute:""}},components:{Checkbox:v.a},computed:{user:function(){return this.$store.state.users.currentUser}},methods:{updateNotificationSettings:function(){this.$store.state.api.backendInteractor.updateNotificationSettings({settings:this.notificationSettings})}}},dt=Object(c.a)(ut,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{attrs:{label:t.$t("settings.notifications")}},[s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.notification_setting_filters")))]),t._v(" "),s("p",[s("Checkbox",{model:{value:t.notificationSettings.block_from_strangers,callback:function(e){t.$set(t.notificationSettings,"block_from_strangers",e)},expression:"notificationSettings.block_from_strangers"}},[t._v("\n "+t._s(t.$t("settings.notification_setting_block_from_strangers"))+"\n ")])],1)]),t._v(" "),s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.notification_setting_privacy")))]),t._v(" "),s("p",[s("Checkbox",{model:{value:t.notificationSettings.hide_notification_contents,callback:function(e){t.$set(t.notificationSettings,"hide_notification_contents",e)},expression:"notificationSettings.hide_notification_contents"}},[t._v("\n "+t._s(t.$t("settings.notification_setting_hide_notification_contents"))+"\n ")])],1)]),t._v(" "),s("div",{staticClass:"setting-item"},[s("p",[t._v(t._s(t.$t("settings.notification_mutes")))]),t._v(" "),s("p",[t._v(t._s(t.$t("settings.notification_blocks")))]),t._v(" "),s("button",{staticClass:"btn button-default",on:{click:t.updateNotificationSettings}},[t._v("\n "+t._s(t.$t("settings.save"))+"\n ")])])])}),[],!1,null,null,null).exports,pt=s(635),mt=s.n(pt),ht=s(40),vt=s.n(ht),ft=s(613),bt=s.n(ft),gt=s(152),_t=s.n(gt),wt=s(21);i.c.add(r.pb);var Ct={components:{Popover:wt.default},props:["changed"]};var xt=function(t){s(638)},kt=Object(c.a)(Ct,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.changed?s("span",{staticClass:"ModifiedIndicator"},[s("Popover",{attrs:{trigger:"hover"},scopedSlots:t._u([{key:"trigger",fn:function(){return[t._v("\n  \n "),s("FAIcon",{attrs:{icon:"wrench","aria-label":t.$t("settings.setting_changed")}})]},proxy:!0},{key:"content",fn:function(){return[s("div",{staticClass:"modified-tooltip"},[t._v("\n "+t._s(t.$t("settings.setting_changed"))+"\n ")])]},proxy:!0}],null,!1,1710729471)})],1):t._e()}),[],!1,xt,null,null).exports,yt={components:{Checkbox:v.a,ModifiedIndicator:kt},props:["path","disabled"],computed:{pathDefault:function(){var t=this.path.split("."),e=bt()(t),s=e[0],n=e.slice(1);return[s+"DefaultValue"].concat(H()(n)).join(".")},state:function(){var t=C()(this.$parent,this.path);return void 0===t?this.defaultState:t},defaultState:function(){return C()(this.$parent,this.pathDefault)},isChanged:function(){return this.state!==this.defaultState}},methods:{update:function(t){_t()(this.$parent,this.path,t)}}},$t=Object(c.a)(yt,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("label",{staticClass:"BooleanSetting"},[s("Checkbox",{attrs:{checked:t.state,disabled:t.disabled},on:{change:t.update}},[t.$slots.default?s("span",{staticClass:"label"},[t._t("default")],2):t._e(),t._v(" "),s("ModifiedIndicator",{attrs:{changed:t.isChanged}})],1)],1)}),[],!1,null,null,null).exports,Lt=s(60),Tt={components:{Select:Lt.a,ModifiedIndicator:kt},props:["path","disabled","options"],computed:{pathDefault:function(){var t=this.path.split("."),e=bt()(t),s=e[0],n=e.slice(1);return[s+"DefaultValue"].concat(H()(n)).join(".")},state:function(){var t=C()(this.$parent,this.path);return void 0===t?this.defaultState:t},defaultState:function(){return C()(this.$parent,this.pathDefault)},isChanged:function(){return this.state!==this.defaultState}},methods:{update:function(t){_t()(this.$parent,this.path,t)}}};var Ot=function(t){s(640)},Pt=Object(c.a)(Tt,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("label",{staticClass:"ChoiceSetting"},[t._t("default"),t._v(" "),s("Select",{attrs:{value:t.state,disabled:t.disabled},on:{change:t.update}},t._l(t.options,(function(e){return s("option",{key:e.key,domProps:{value:e.value}},[t._v("\n "+t._s(e.label)+"\n "+t._s(e.value===t.defaultState?t.$t("settings.instance_default_simple"):"")+"\n ")])})),0),t._v(" "),s("ModifiedIndicator",{attrs:{changed:t.isChanged}})],2)}),[],!1,Ot,null,null).exports,St=s(105);function It(t,e){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),s.push.apply(s,n)}return s}function jt(t){for(var e=1;e0}))})}}}),watch:{notificationVisibility:{handler:function(t){this.$store.dispatch("setOption",{name:"notificationVisibility",value:this.$store.getters.mergedConfig.notificationVisibility})},deep:!0},replyVisibility:function(){this.$store.dispatch("queueFlushAll")}}},Et=Object(c.a)(Rt,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{attrs:{label:t.$t("settings.filtering")}},[s("div",{staticClass:"setting-item"},[s("div",{staticClass:"select-multiple"},[s("span",{staticClass:"label"},[t._v(t._s(t.$t("settings.notification_visibility")))]),t._v(" "),s("ul",{staticClass:"option-list"},[s("li",[s("BooleanSetting",{attrs:{path:"notificationVisibility.likes"}},[t._v("\n "+t._s(t.$t("settings.notification_visibility_likes"))+"\n ")])],1),t._v(" "),s("li",[s("BooleanSetting",{attrs:{path:"notificationVisibility.repeats"}},[t._v("\n "+t._s(t.$t("settings.notification_visibility_repeats"))+"\n ")])],1),t._v(" "),s("li",[s("BooleanSetting",{attrs:{path:"notificationVisibility.follows"}},[t._v("\n "+t._s(t.$t("settings.notification_visibility_follows"))+"\n ")])],1),t._v(" "),s("li",[s("BooleanSetting",{attrs:{path:"notificationVisibility.mentions"}},[t._v("\n "+t._s(t.$t("settings.notification_visibility_mentions"))+"\n ")])],1),t._v(" "),s("li",[s("BooleanSetting",{attrs:{path:"notificationVisibility.moves"}},[t._v("\n "+t._s(t.$t("settings.notification_visibility_moves"))+"\n ")])],1),t._v(" "),s("li",[s("BooleanSetting",{attrs:{path:"notificationVisibility.emojiReactions"}},[t._v("\n "+t._s(t.$t("settings.notification_visibility_emoji_reactions"))+"\n ")])],1)])]),t._v(" "),s("ChoiceSetting",{attrs:{id:"replyVisibility",path:"replyVisibility",options:t.replyVisibilityOptions}},[t._v("\n "+t._s(t.$t("settings.replies_in_timeline"))+"\n ")]),t._v(" "),s("div",[s("BooleanSetting",{attrs:{path:"hidePostStats"}},[t._v("\n "+t._s(t.$t("settings.hide_post_stats"))+"\n ")])],1),t._v(" "),s("div",[s("BooleanSetting",{attrs:{path:"hideUserStats"}},[t._v("\n "+t._s(t.$t("settings.hide_user_stats"))+"\n ")])],1)],1),t._v(" "),s("div",{staticClass:"setting-item"},[s("div",[s("p",[t._v(t._s(t.$t("settings.filtering_explanation")))]),t._v(" "),s("textarea",{directives:[{name:"model",rawName:"v-model",value:t.muteWordsString,expression:"muteWordsString"}],staticClass:"resize-height",attrs:{id:"muteWords"},domProps:{value:t.muteWordsString},on:{input:function(e){e.target.composing||(t.muteWordsString=e.target.value)}}})]),t._v(" "),s("div",[s("BooleanSetting",{attrs:{path:"hideFilteredStatuses"}},[t._v("\n "+t._s(t.$t("settings.hide_filtered_statuses"))+"\n ")])],1)])])}),[],!1,null,null,null).exports,At=s(5),Mt=s.n(At),Dt={props:{backupCodes:{type:Object,default:function(){return{inProgress:!1,codes:[]}}}},data:function(){return{}},computed:{inProgress:function(){return this.backupCodes.inProgress},ready:function(){return this.backupCodes.codes.length>0},displayTitle:function(){return this.inProgress||this.ready}}};var Ut=function(t){s(644)},Nt=Object(c.a)(Dt,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"mfa-backup-codes"},[t.displayTitle?s("h4",[t._v("\n "+t._s(t.$t("settings.mfa.recovery_codes"))+"\n ")]):t._e(),t._v(" "),t.inProgress?s("i",[t._v(t._s(t.$t("settings.mfa.waiting_a_recovery_codes")))]):t._e(),t._v(" "),t.ready?[s("p",{staticClass:"alert warning"},[t._v("\n "+t._s(t.$t("settings.mfa.recovery_codes_warning"))+"\n ")]),t._v(" "),s("ul",{staticClass:"backup-codes"},t._l(t.backupCodes.codes,(function(e){return s("li",{key:e},[t._v("\n "+t._s(e)+"\n ")])})),0)]:t._e()],2)}),[],!1,Ut,null,null).exports,Vt={props:["disabled"],data:function(){return{}},methods:{confirm:function(){this.$emit("confirm")},cancel:function(){this.$emit("cancel")}}},Wt=Object(c.a)(Vt,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",[t._t("default"),t._v(" "),s("button",{staticClass:"btn button-default",attrs:{disabled:t.disabled},on:{click:t.confirm}},[t._v("\n "+t._s(t.$t("general.confirm"))+"\n ")]),t._v(" "),s("button",{staticClass:"btn button-default",attrs:{disabled:t.disabled},on:{click:t.cancel}},[t._v("\n "+t._s(t.$t("general.cancel"))+"\n ")])],2)}),[],!1,null,null,null).exports;function qt(t,e){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),s.push.apply(s,n)}return s}var zt={props:["settings"],data:function(){return{error:!1,currentPassword:"",deactivate:!1,inProgress:!1}},components:{confirm:Wt},computed:function(t){for(var e=1;e0},confirmNewBackupCodes:function(){return this.backupCodes.getNewCodes}},Object(f.e)({backendInteractor:function(t){return t.api.backendInteractor}})),methods:{activateOTP:function(){this.settings.enabled||(this.setupState.state="getBackupcodes",this.fetchBackupCodes())},fetchBackupCodes:function(){var t=this;return this.backupCodes.inProgress=!0,this.backupCodes.codes=[],this.backendInteractor.generateMfaBackupCodes().then((function(e){t.backupCodes.codes=e.codes,t.backupCodes.inProgress=!1}))},getBackupCodes:function(){this.backupCodes.getNewCodes=!0},confirmBackupCodes:function(){var t=this;this.fetchBackupCodes().then((function(e){t.backupCodes.getNewCodes=!1}))},cancelBackupCodes:function(){this.backupCodes.getNewCodes=!1},setupOTP:function(){var t=this;this.setupState.state="setupOTP",this.setupState.setupOTPState="prepare",this.backendInteractor.mfaSetupOTP().then((function(e){t.otpSettings=e,t.setupState.setupOTPState="confirm"}))},doConfirmOTP:function(){var t=this;this.error=null,this.backendInteractor.mfaConfirmOTP({token:this.otpConfirmToken,password:this.currentPassword}).then((function(e){e.error?t.error=e.error:t.completeSetup()}))},completeSetup:function(){this.setupState.setupOTPState="complete",this.setupState.state="complete",this.currentPassword=null,this.error=null,this.fetchSettings()},cancelSetup:function(){this.setupState.setupOTPState="",this.setupState.state="",this.currentPassword=null,this.error=null},fetchSettings:function(){var t;return Mt.a.async((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,Mt.a.awrap(this.backendInteractor.settingsMFA());case 2:if(!(t=e.sent).error){e.next=5;break}return e.abrupt("return");case 5:return this.settings=t.settings,this.settings.available=!0,e.abrupt("return",t);case 8:case"end":return e.stop()}}),null,this)}},mounted:function(){var t=this;this.fetchSettings().then((function(){t.readyInit=!0}))}};var Ht=function(t){s(642)},Jt=Object(c.a)(Kt,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.readyInit&&t.settings.available?s("div",{staticClass:"setting-item mfa-settings"},[s("div",{staticClass:"mfa-heading"},[s("h2",[t._v(t._s(t.$t("settings.mfa.title")))])]),t._v(" "),s("div",[t.setupInProgress?t._e():s("div",{staticClass:"setting-item"},[s("h3",[t._v(t._s(t.$t("settings.mfa.authentication_methods")))]),t._v(" "),s("totp-item",{attrs:{settings:t.settings},on:{deactivate:t.fetchSettings,activate:t.activateOTP}}),t._v(" "),s("br"),t._v(" "),t.settings.enabled?s("div",[t.confirmNewBackupCodes?t._e():s("recovery-codes",{attrs:{"backup-codes":t.backupCodes}}),t._v(" "),t.confirmNewBackupCodes?t._e():s("button",{staticClass:"btn button-default",on:{click:t.getBackupCodes}},[t._v("\n "+t._s(t.$t("settings.mfa.generate_new_recovery_codes"))+"\n ")]),t._v(" "),t.confirmNewBackupCodes?s("div",[s("confirm",{attrs:{disabled:t.backupCodes.inProgress},on:{confirm:t.confirmBackupCodes,cancel:t.cancelBackupCodes}},[s("p",{staticClass:"warning"},[t._v("\n "+t._s(t.$t("settings.mfa.warning_of_generate_new_codes"))+"\n ")])])],1):t._e()],1):t._e()],1),t._v(" "),t.setupInProgress?s("div",[s("h3",[t._v(t._s(t.$t("settings.mfa.setup_otp")))]),t._v(" "),t.setupOTPInProgress?t._e():s("recovery-codes",{attrs:{"backup-codes":t.backupCodes}}),t._v(" "),t.canSetupOTP?s("button",{staticClass:"btn button-default",on:{click:t.cancelSetup}},[t._v("\n "+t._s(t.$t("general.cancel"))+"\n ")]):t._e(),t._v(" "),t.canSetupOTP?s("button",{staticClass:"btn button-default",on:{click:t.setupOTP}},[t._v("\n "+t._s(t.$t("settings.mfa.setup_otp"))+"\n ")]):t._e(),t._v(" "),t.setupOTPInProgress?[t.prepareOTP?s("i",[t._v(t._s(t.$t("settings.mfa.wait_pre_setup_otp")))]):t._e(),t._v(" "),t.confirmOTP?s("div",[s("div",{staticClass:"setup-otp"},[s("div",{staticClass:"qr-code"},[s("h4",[t._v(t._s(t.$t("settings.mfa.scan.title")))]),t._v(" "),s("p",[t._v(t._s(t.$t("settings.mfa.scan.desc")))]),t._v(" "),s("qrcode",{attrs:{value:t.otpSettings.provisioning_uri,options:{width:200}}}),t._v(" "),s("p",[t._v("\n "+t._s(t.$t("settings.mfa.scan.secret_code"))+":\n "+t._s(t.otpSettings.key)+"\n ")])],1),t._v(" "),s("div",{staticClass:"verify"},[s("h4",[t._v(t._s(t.$t("general.verify")))]),t._v(" "),s("p",[t._v(t._s(t.$t("settings.mfa.verify.desc")))]),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.otpConfirmToken,expression:"otpConfirmToken"}],attrs:{type:"text"},domProps:{value:t.otpConfirmToken},on:{input:function(e){e.target.composing||(t.otpConfirmToken=e.target.value)}}}),t._v(" "),s("p",[t._v(t._s(t.$t("settings.enter_current_password_to_confirm"))+":")]),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.currentPassword,expression:"currentPassword"}],attrs:{type:"password"},domProps:{value:t.currentPassword},on:{input:function(e){e.target.composing||(t.currentPassword=e.target.value)}}}),t._v(" "),s("div",{staticClass:"confirm-otp-actions"},[s("button",{staticClass:"btn button-default",on:{click:t.doConfirmOTP}},[t._v("\n "+t._s(t.$t("settings.mfa.confirm_and_enable"))+"\n ")]),t._v(" "),s("button",{staticClass:"btn button-default",on:{click:t.cancelSetup}},[t._v("\n "+t._s(t.$t("general.cancel"))+"\n ")])]),t._v(" "),t.error?s("div",{staticClass:"alert error"},[t._v("\n "+t._s(t.error)+"\n ")]):t._e()])])]):t._e()]:t._e()],2):t._e()])]):t._e()}),[],!1,Ht,null,null).exports,Qt=s(104),Xt={data:function(){return{newEmail:"",changeEmailError:!1,changeEmailPassword:"",changedEmail:!1,deletingAccount:!1,deleteAccountConfirmPasswordInput:"",deleteAccountError:!1,changePasswordInputs:["","",""],changedPassword:!1,changePasswordError:!1}},created:function(){this.$store.dispatch("fetchTokens")},components:{ProgressButton:E.a,Mfa:Jt,Checkbox:v.a},computed:{user:function(){return this.$store.state.users.currentUser},pleromaBackend:function(){return this.$store.state.instance.pleromaBackend},oauthTokens:function(){var t=this;return this.$store.state.oauthTokens.tokens.map((function(e){return{id:e.id,appName:e.app_name,validUntil:new Date(e.valid_until).toLocaleDateString(Qt.a.internalToBrowserLocale(t.$i18n.locale))}}))}},methods:{confirmDelete:function(){this.deletingAccount=!0},deleteAccount:function(){var t=this;this.$store.state.api.backendInteractor.deleteAccount({password:this.deleteAccountConfirmPasswordInput}).then((function(e){"success"===e.status?(t.$store.dispatch("logout"),t.$router.push({name:"root"})):t.deleteAccountError=e.error}))},changePassword:function(){var t=this,e={password:this.changePasswordInputs[0],newPassword:this.changePasswordInputs[1],newPasswordConfirmation:this.changePasswordInputs[2]};this.$store.state.api.backendInteractor.changePassword(e).then((function(e){"success"===e.status?(t.changedPassword=!0,t.changePasswordError=!1,t.logout()):(t.changedPassword=!1,t.changePasswordError=e.error)}))},changeEmail:function(){var t=this,e={email:this.newEmail,password:this.changeEmailPassword};this.$store.state.api.backendInteractor.changeEmail(e).then((function(e){"success"===e.status?(t.changedEmail=!0,t.changeEmailError=!1):(t.changedEmail=!1,t.changeEmailError=e.error)}))},logout:function(){this.$store.dispatch("logout"),this.$router.replace("/")},revokeToken:function(t){window.confirm("".concat(this.$i18n.t("settings.revoke_token"),"?"))&&this.$store.dispatch("revokeToken",t)}}},Yt=Object(c.a)(Xt,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{attrs:{label:t.$t("settings.security_tab")}},[s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.change_email")))]),t._v(" "),s("div",[s("p",[t._v(t._s(t.$t("settings.new_email")))]),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.newEmail,expression:"newEmail"}],attrs:{type:"email",autocomplete:"email"},domProps:{value:t.newEmail},on:{input:function(e){e.target.composing||(t.newEmail=e.target.value)}}})]),t._v(" "),s("div",[s("p",[t._v(t._s(t.$t("settings.current_password")))]),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.changeEmailPassword,expression:"changeEmailPassword"}],attrs:{type:"password",autocomplete:"current-password"},domProps:{value:t.changeEmailPassword},on:{input:function(e){e.target.composing||(t.changeEmailPassword=e.target.value)}}})]),t._v(" "),s("button",{staticClass:"btn button-default",on:{click:t.changeEmail}},[t._v("\n "+t._s(t.$t("settings.save"))+"\n ")]),t._v(" "),t.changedEmail?s("p",[t._v("\n "+t._s(t.$t("settings.changed_email"))+"\n ")]):t._e(),t._v(" "),!1!==t.changeEmailError?[s("p",[t._v(t._s(t.$t("settings.change_email_error")))]),t._v(" "),s("p",[t._v(t._s(t.changeEmailError))])]:t._e()],2),t._v(" "),s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.change_password")))]),t._v(" "),s("div",[s("p",[t._v(t._s(t.$t("settings.current_password")))]),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.changePasswordInputs[0],expression:"changePasswordInputs[0]"}],attrs:{type:"password"},domProps:{value:t.changePasswordInputs[0]},on:{input:function(e){e.target.composing||t.$set(t.changePasswordInputs,0,e.target.value)}}})]),t._v(" "),s("div",[s("p",[t._v(t._s(t.$t("settings.new_password")))]),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.changePasswordInputs[1],expression:"changePasswordInputs[1]"}],attrs:{type:"password"},domProps:{value:t.changePasswordInputs[1]},on:{input:function(e){e.target.composing||t.$set(t.changePasswordInputs,1,e.target.value)}}})]),t._v(" "),s("div",[s("p",[t._v(t._s(t.$t("settings.confirm_new_password")))]),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.changePasswordInputs[2],expression:"changePasswordInputs[2]"}],attrs:{type:"password"},domProps:{value:t.changePasswordInputs[2]},on:{input:function(e){e.target.composing||t.$set(t.changePasswordInputs,2,e.target.value)}}})]),t._v(" "),s("button",{staticClass:"btn button-default",on:{click:t.changePassword}},[t._v("\n "+t._s(t.$t("settings.save"))+"\n ")]),t._v(" "),t.changedPassword?s("p",[t._v("\n "+t._s(t.$t("settings.changed_password"))+"\n ")]):!1!==t.changePasswordError?s("p",[t._v("\n "+t._s(t.$t("settings.change_password_error"))+"\n ")]):t._e(),t._v(" "),t.changePasswordError?s("p",[t._v("\n "+t._s(t.changePasswordError)+"\n ")]):t._e()]),t._v(" "),s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.oauth_tokens")))]),t._v(" "),s("table",{staticClass:"oauth-tokens"},[s("thead",[s("tr",[s("th",[t._v(t._s(t.$t("settings.app_name")))]),t._v(" "),s("th",[t._v(t._s(t.$t("settings.valid_until")))]),t._v(" "),s("th")])]),t._v(" "),s("tbody",t._l(t.oauthTokens,(function(e){return s("tr",{key:e.id},[s("td",[t._v(t._s(e.appName))]),t._v(" "),s("td",[t._v(t._s(e.validUntil))]),t._v(" "),s("td",{staticClass:"actions"},[s("button",{staticClass:"btn button-default",on:{click:function(s){return t.revokeToken(e.id)}}},[t._v("\n "+t._s(t.$t("settings.revoke_token"))+"\n ")])])])})),0)])]),t._v(" "),s("mfa"),t._v(" "),s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.delete_account")))]),t._v(" "),t.deletingAccount?t._e():s("p",[t._v("\n "+t._s(t.$t("settings.delete_account_description"))+"\n ")]),t._v(" "),t.deletingAccount?s("div",[s("p",[t._v(t._s(t.$t("settings.delete_account_instructions")))]),t._v(" "),s("p",[t._v(t._s(t.$t("login.password")))]),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.deleteAccountConfirmPasswordInput,expression:"deleteAccountConfirmPasswordInput"}],attrs:{type:"password"},domProps:{value:t.deleteAccountConfirmPasswordInput},on:{input:function(e){e.target.composing||(t.deleteAccountConfirmPasswordInput=e.target.value)}}}),t._v(" "),s("button",{staticClass:"btn button-default",on:{click:t.deleteAccount}},[t._v("\n "+t._s(t.$t("settings.delete_account"))+"\n ")])]):t._e(),t._v(" "),!1!==t.deleteAccountError?s("p",[t._v("\n "+t._s(t.$t("settings.delete_account_error"))+"\n ")]):t._e(),t._v(" "),t.deleteAccountError?s("p",[t._v("\n "+t._s(t.deleteAccountError)+"\n ")]):t._e(),t._v(" "),t.deletingAccount?t._e():s("button",{staticClass:"btn button-default",on:{click:t.confirmDelete}},[t._v("\n "+t._s(t.$t("settings.save"))+"\n ")])])],1)}),[],!1,null,null,null).exports,Zt=s(200),te=s.n(Zt),ee=s(106),se=s.n(ee),ne=s(26),ae=s.n(ne),oe=s(651);s(652);i.c.add(r.m);var ie={props:{trigger:{type:[String,window.Element],required:!0},submitHandler:{type:Function,required:!0},cropperOptions:{type:Object,default:function(){return{aspectRatio:1,autoCropArea:1,viewMode:1,movable:!1,zoomable:!1,guides:!1}}},mimes:{type:String,default:"image/png, image/gif, image/jpeg, image/bmp, image/x-icon"},saveButtonLabel:{type:String},saveWithoutCroppingButtonlabel:{type:String},cancelButtonLabel:{type:String}},data:function(){return{cropper:void 0,dataUrl:void 0,filename:void 0,submitting:!1}},computed:{saveText:function(){return this.saveButtonLabel||this.$t("image_cropper.save")},saveWithoutCroppingText:function(){return this.saveWithoutCroppingButtonlabel||this.$t("image_cropper.save_without_cropping")},cancelText:function(){return this.cancelButtonLabel||this.$t("image_cropper.cancel")}},methods:{destroy:function(){this.cropper&&this.cropper.destroy(),this.$refs.input.value="",this.dataUrl=void 0,this.$emit("close")},submit:function(){var t=this,e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.submitting=!0,this.submitHandler(e&&this.cropper,this.file).then((function(){return t.destroy()})).finally((function(){t.submitting=!1}))},pickImage:function(){this.$refs.input.click()},createCropper:function(){this.cropper=new oe.a(this.$refs.img,this.cropperOptions)},getTriggerDOM:function(){return"object"===ae()(this.trigger)?this.trigger:document.querySelector(this.trigger)},readFile:function(){var t=this,e=this.$refs.input;if(null!=e.files&&null!=e.files[0]){this.file=e.files[0];var s=new window.FileReader;s.onload=function(e){t.dataUrl=e.target.result,t.$emit("open")},s.readAsDataURL(this.file),this.$emit("changed",this.file,s)}}},mounted:function(){var t=this.getTriggerDOM();t?t.addEventListener("click",this.pickImage):this.$emit("error","No image make trigger found.","user"),this.$refs.input.addEventListener("change",this.readFile)},beforeDestroy:function(){var t=this.getTriggerDOM();t&&t.removeEventListener("click",this.pickImage),this.$refs.input.removeEventListener("change",this.readFile)}};var re=function(t){s(649)},le=Object(c.a)(ie,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"image-cropper"},[t.dataUrl?s("div",[s("div",{staticClass:"image-cropper-image-container"},[s("img",{ref:"img",attrs:{src:t.dataUrl,alt:""},on:{load:function(e){return e.stopPropagation(),t.createCropper(e)}}})]),t._v(" "),s("div",{staticClass:"image-cropper-buttons-wrapper"},[s("button",{staticClass:"button-default btn",attrs:{type:"button",disabled:t.submitting},domProps:{textContent:t._s(t.saveText)},on:{click:function(e){return t.submit()}}}),t._v(" "),s("button",{staticClass:"button-default btn",attrs:{type:"button",disabled:t.submitting},domProps:{textContent:t._s(t.cancelText)},on:{click:t.destroy}}),t._v(" "),s("button",{staticClass:"button-default btn",attrs:{type:"button",disabled:t.submitting},domProps:{textContent:t._s(t.saveWithoutCroppingText)},on:{click:function(e){return t.submit(!1)}}}),t._v(" "),t.submitting?s("FAIcon",{attrs:{spin:"",icon:"circle-notch"}}):t._e()],1)]):t._e(),t._v(" "),s("input",{ref:"input",staticClass:"image-cropper-img-input",attrs:{type:"file",accept:t.mimes}})])}),[],!1,re,null,null).exports,ce=s(209),ue=s(81),de=s(208),pe=s(144);i.c.add(r.jb,r.P,r.m);var me={data:function(){return{newName:this.$store.state.users.currentUser.name,newBio:te()(this.$store.state.users.currentUser.description),newLocked:this.$store.state.users.currentUser.locked,newNoRichText:this.$store.state.users.currentUser.no_rich_text,newDefaultScope:this.$store.state.users.currentUser.default_scope,newFields:this.$store.state.users.currentUser.fields.map((function(t){return{name:t.name,value:t.value}})),hideFollows:this.$store.state.users.currentUser.hide_follows,hideFollowers:this.$store.state.users.currentUser.hide_followers,hideFollowsCount:this.$store.state.users.currentUser.hide_follows_count,hideFollowersCount:this.$store.state.users.currentUser.hide_followers_count,showRole:this.$store.state.users.currentUser.show_role,role:this.$store.state.users.currentUser.role,discoverable:this.$store.state.users.currentUser.discoverable,bot:this.$store.state.users.currentUser.bot,allowFollowingMove:this.$store.state.users.currentUser.allow_following_move,pickAvatarBtnVisible:!0,bannerUploading:!1,backgroundUploading:!1,banner:null,bannerPreview:null,background:null,backgroundPreview:null}},components:{ScopeSelector:ce.a,ImageCropper:le,EmojiInput:de.a,Autosuggest:O,ProgressButton:E.a,Checkbox:v.a},computed:{user:function(){return this.$store.state.users.currentUser},emojiUserSuggestor:function(){return Object(pe.a)({emoji:[].concat(H()(this.$store.state.instance.emoji),H()(this.$store.state.instance.customEmoji)),store:this.$store})},emojiSuggestor:function(){return Object(pe.a)({emoji:[].concat(H()(this.$store.state.instance.emoji),H()(this.$store.state.instance.customEmoji))})},userSuggestor:function(){return Object(pe.a)({store:this.$store})},fieldsLimits:function(){return this.$store.state.instance.fieldsLimits},maxFields:function(){return this.fieldsLimits?this.fieldsLimits.maxFields:0},defaultAvatar:function(){return this.$store.state.instance.server+this.$store.state.instance.defaultAvatar},defaultBanner:function(){return this.$store.state.instance.server+this.$store.state.instance.defaultBanner},isDefaultAvatar:function(){var t=this.$store.state.instance.defaultAvatar;return!this.$store.state.users.currentUser.profile_image_url||this.$store.state.users.currentUser.profile_image_url.includes(t)},isDefaultBanner:function(){var t=this.$store.state.instance.defaultBanner;return!this.$store.state.users.currentUser.cover_photo||this.$store.state.users.currentUser.cover_photo.includes(t)},isDefaultBackground:function(){return!this.$store.state.users.currentUser.background_image},avatarImgSrc:function(){var t=this.$store.state.users.currentUser.profile_image_url_original;return t||this.defaultAvatar},bannerImgSrc:function(){var t=this.$store.state.users.currentUser.cover_photo;return t||this.defaultBanner}},methods:{updateProfile:function(){var t=this;this.$store.state.api.backendInteractor.updateProfile({params:{note:this.newBio,locked:this.newLocked,display_name:this.newName,fields_attributes:this.newFields.filter((function(t){return null!=t})),default_scope:this.newDefaultScope,no_rich_text:this.newNoRichText,hide_follows:this.hideFollows,hide_followers:this.hideFollowers,discoverable:this.discoverable,bot:this.bot,allow_following_move:this.allowFollowingMove,hide_follows_count:this.hideFollowsCount,hide_followers_count:this.hideFollowersCount,show_role:this.showRole}}).then((function(e){t.newFields.splice(e.fields.length),se()(t.newFields,e.fields),t.$store.commit("addNewUsers",[e]),t.$store.commit("setCurrentUser",e)}))},changeVis:function(t){this.newDefaultScope=t},addField:function(){return this.newFields.lengththis.$store.state.instance[t+"limit"]){var a=ue.a.fileSizeFormat(n.size),o=ue.a.fileSizeFormat(this.$store.state.instance[t+"limit"]);this.$store.dispatch("pushGlobalNotice",{messageKey:"upload.error.message",messageArgs:[this.$t("upload.error.file_too_big",{filesize:a.num,filesizeunit:a.unit,allowedsize:o.num,allowedsizeunit:o.unit})],level:"error"})}else{var i=new FileReader;i.onload=function(e){var a=e.target.result;s[t+"Preview"]=a,s[t]=n},i.readAsDataURL(n)}},resetAvatar:function(){window.confirm(this.$t("settings.reset_avatar_confirm"))&&this.submitAvatar(void 0,"")},resetBanner:function(){window.confirm(this.$t("settings.reset_banner_confirm"))&&this.submitBanner("")},resetBackground:function(){window.confirm(this.$t("settings.reset_background_confirm"))&&this.submitBackground("")},submitAvatar:function(t,e){var s=this;return new Promise((function(n,a){function o(t){s.$store.state.api.backendInteractor.updateProfileImages({avatar:t}).then((function(t){s.$store.commit("addNewUsers",[t]),s.$store.commit("setCurrentUser",t),n()})).catch((function(t){s.displayUploadError(t),a(t)}))}t?t.getCroppedCanvas().toBlob(o,e.type):o(e)}))},submitBanner:function(t){var e=this;(this.bannerPreview||""===t)&&(this.bannerUploading=!0,this.$store.state.api.backendInteractor.updateProfileImages({banner:t}).then((function(t){e.$store.commit("addNewUsers",[t]),e.$store.commit("setCurrentUser",t),e.bannerPreview=null})).catch(this.displayUploadError).finally((function(){e.bannerUploading=!1})))},submitBackground:function(t){var e=this;(this.backgroundPreview||""===t)&&(this.backgroundUploading=!0,this.$store.state.api.backendInteractor.updateProfileImages({background:t}).then((function(t){e.$store.commit("addNewUsers",[t]),e.$store.commit("setCurrentUser",t),e.backgroundPreview=null})).catch(this.displayUploadError).finally((function(){e.backgroundUploading=!1})))},displayUploadError:function(t){this.$store.dispatch("pushGlobalNotice",{messageKey:"upload.error.message",messageArgs:[t.message],level:"error"})}}};var he=function(t){s(647)},ve=Object(c.a)(me,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"profile-tab"},[s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.name_bio")))]),t._v(" "),s("p",[t._v(t._s(t.$t("settings.name")))]),t._v(" "),s("EmojiInput",{attrs:{"enable-emoji-picker":"",suggest:t.emojiSuggestor},model:{value:t.newName,callback:function(e){t.newName=e},expression:"newName"}},[s("input",{directives:[{name:"model",rawName:"v-model",value:t.newName,expression:"newName"}],staticClass:"name-changer",attrs:{id:"username"},domProps:{value:t.newName},on:{input:function(e){e.target.composing||(t.newName=e.target.value)}}})]),t._v(" "),s("p",[t._v(t._s(t.$t("settings.bio")))]),t._v(" "),s("EmojiInput",{attrs:{"enable-emoji-picker":"",suggest:t.emojiUserSuggestor},model:{value:t.newBio,callback:function(e){t.newBio=e},expression:"newBio"}},[s("textarea",{directives:[{name:"model",rawName:"v-model",value:t.newBio,expression:"newBio"}],staticClass:"bio resize-height",domProps:{value:t.newBio},on:{input:function(e){e.target.composing||(t.newBio=e.target.value)}}})]),t._v(" "),s("p",[s("Checkbox",{model:{value:t.newLocked,callback:function(e){t.newLocked=e},expression:"newLocked"}},[t._v("\n "+t._s(t.$t("settings.lock_account_description"))+"\n ")])],1),t._v(" "),s("div",[s("label",{attrs:{for:"default-vis"}},[t._v(t._s(t.$t("settings.default_vis")))]),t._v(" "),s("div",{staticClass:"visibility-tray",attrs:{id:"default-vis"}},[s("scope-selector",{attrs:{"show-all":!0,"user-default":t.newDefaultScope,"initial-scope":t.newDefaultScope,"on-scope-change":t.changeVis}})],1)]),t._v(" "),s("p",[s("Checkbox",{model:{value:t.newNoRichText,callback:function(e){t.newNoRichText=e},expression:"newNoRichText"}},[t._v("\n "+t._s(t.$t("settings.no_rich_text_description"))+"\n ")])],1),t._v(" "),s("p",[s("Checkbox",{model:{value:t.hideFollows,callback:function(e){t.hideFollows=e},expression:"hideFollows"}},[t._v("\n "+t._s(t.$t("settings.hide_follows_description"))+"\n ")])],1),t._v(" "),s("p",{staticClass:"setting-subitem"},[s("Checkbox",{attrs:{disabled:!t.hideFollows},model:{value:t.hideFollowsCount,callback:function(e){t.hideFollowsCount=e},expression:"hideFollowsCount"}},[t._v("\n "+t._s(t.$t("settings.hide_follows_count_description"))+"\n ")])],1),t._v(" "),s("p",[s("Checkbox",{model:{value:t.hideFollowers,callback:function(e){t.hideFollowers=e},expression:"hideFollowers"}},[t._v("\n "+t._s(t.$t("settings.hide_followers_description"))+"\n ")])],1),t._v(" "),s("p",{staticClass:"setting-subitem"},[s("Checkbox",{attrs:{disabled:!t.hideFollowers},model:{value:t.hideFollowersCount,callback:function(e){t.hideFollowersCount=e},expression:"hideFollowersCount"}},[t._v("\n "+t._s(t.$t("settings.hide_followers_count_description"))+"\n ")])],1),t._v(" "),s("p",[s("Checkbox",{model:{value:t.allowFollowingMove,callback:function(e){t.allowFollowingMove=e},expression:"allowFollowingMove"}},[t._v("\n "+t._s(t.$t("settings.allow_following_move"))+"\n ")])],1),t._v(" "),"admin"===t.role||"moderator"===t.role?s("p",[s("Checkbox",{model:{value:t.showRole,callback:function(e){t.showRole=e},expression:"showRole"}},["admin"===t.role?[t._v("\n "+t._s(t.$t("settings.show_admin_badge"))+"\n ")]:t._e(),t._v(" "),"moderator"===t.role?[t._v("\n "+t._s(t.$t("settings.show_moderator_badge"))+"\n ")]:t._e()],2)],1):t._e(),t._v(" "),s("p",[s("Checkbox",{model:{value:t.discoverable,callback:function(e){t.discoverable=e},expression:"discoverable"}},[t._v("\n "+t._s(t.$t("settings.discoverable"))+"\n ")])],1),t._v(" "),t.maxFields>0?s("div",[s("p",[t._v(t._s(t.$t("settings.profile_fields.label")))]),t._v(" "),t._l(t.newFields,(function(e,n){return s("div",{key:n,staticClass:"profile-fields"},[s("EmojiInput",{attrs:{"enable-emoji-picker":"","hide-emoji-button":"",suggest:t.userSuggestor},model:{value:t.newFields[n].name,callback:function(e){t.$set(t.newFields[n],"name",e)},expression:"newFields[i].name"}},[s("input",{directives:[{name:"model",rawName:"v-model",value:t.newFields[n].name,expression:"newFields[i].name"}],attrs:{placeholder:t.$t("settings.profile_fields.name")},domProps:{value:t.newFields[n].name},on:{input:function(e){e.target.composing||t.$set(t.newFields[n],"name",e.target.value)}}})]),t._v(" "),s("EmojiInput",{attrs:{"enable-emoji-picker":"","hide-emoji-button":"",suggest:t.userSuggestor},model:{value:t.newFields[n].value,callback:function(e){t.$set(t.newFields[n],"value",e)},expression:"newFields[i].value"}},[s("input",{directives:[{name:"model",rawName:"v-model",value:t.newFields[n].value,expression:"newFields[i].value"}],attrs:{placeholder:t.$t("settings.profile_fields.value")},domProps:{value:t.newFields[n].value},on:{input:function(e){e.target.composing||t.$set(t.newFields[n],"value",e.target.value)}}})]),t._v(" "),s("button",{staticClass:"delete-field button-unstyled -hover-highlight",on:{click:function(e){return t.deleteField(n)}}},[s("FAIcon",{directives:[{name:"show",rawName:"v-show",value:t.newFields.length>1,expression:"newFields.length > 1"}],attrs:{icon:"times"}})],1)],1)})),t._v(" "),t.newFields.length0?s("li",[s("ChoiceSetting",{attrs:{id:"postContentType",path:"postContentType",options:t.postContentOptions}},[t._v("\n "+t._s(t.$t("settings.post_status_content_type"))+"\n ")])],1):t._e(),t._v(" "),s("li",[s("BooleanSetting",{attrs:{path:"minimalScopesMode"}},[t._v("\n "+t._s(t.$t("settings.minimal_scopes_mode"))+"\n ")])],1),t._v(" "),s("li",[s("BooleanSetting",{attrs:{path:"sensitiveByDefault"}},[t._v("\n "+t._s(t.$t("settings.sensitive_by_default"))+"\n ")])],1),t._v(" "),s("li",[s("BooleanSetting",{attrs:{path:"autohideFloatingPostButton"}},[t._v("\n "+t._s(t.$t("settings.autohide_floating_post_button"))+"\n ")])],1),t._v(" "),s("li",[s("BooleanSetting",{attrs:{path:"padEmoji"}},[t._v("\n "+t._s(t.$t("settings.pad_emoji"))+"\n ")])],1)])]),t._v(" "),s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.attachments")))]),t._v(" "),s("ul",{staticClass:"setting-list"},[s("li",[s("BooleanSetting",{attrs:{path:"hideAttachments"}},[t._v("\n "+t._s(t.$t("settings.hide_attachments_in_tl"))+"\n ")])],1),t._v(" "),s("li",[s("BooleanSetting",{attrs:{path:"hideAttachmentsInConv"}},[t._v("\n "+t._s(t.$t("settings.hide_attachments_in_convo"))+"\n ")])],1),t._v(" "),s("li",[s("label",{attrs:{for:"maxThumbnails"}},[t._v("\n "+t._s(t.$t("settings.max_thumbnails"))+"\n ")]),t._v(" "),s("input",{staticClass:"number-input",attrs:{id:"maxThumbnails","path.number":"maxThumbnails",type:"number",min:"0",step:"1"}})]),t._v(" "),s("li",[s("BooleanSetting",{attrs:{path:"hideNsfw"}},[t._v("\n "+t._s(t.$t("settings.nsfw_clickthrough"))+"\n ")])],1),t._v(" "),s("ul",{staticClass:"setting-list suboptions"},[s("li",[s("BooleanSetting",{attrs:{path:"preloadImage",disabled:!t.hideNsfw}},[t._v("\n "+t._s(t.$t("settings.preload_images"))+"\n ")])],1),t._v(" "),s("li",[s("BooleanSetting",{attrs:{path:"useOneClickNsfw",disabled:!t.hideNsfw}},[t._v("\n "+t._s(t.$t("settings.use_one_click_nsfw"))+"\n ")])],1)]),t._v(" "),s("li",[s("BooleanSetting",{attrs:{path:"stopGifs"}},[t._v("\n "+t._s(t.$t("settings.stop_gifs"))+"\n ")])],1),t._v(" "),s("li",[s("BooleanSetting",{attrs:{path:"loopVideo"}},[t._v("\n "+t._s(t.$t("settings.loop_video"))+"\n ")]),t._v(" "),s("ul",{staticClass:"setting-list suboptions",class:[{disabled:!t.streaming}]},[s("li",[s("BooleanSetting",{attrs:{path:"loopVideoSilentOnly",disabled:!t.loopVideo||!t.loopSilentAvailable}},[t._v("\n "+t._s(t.$t("settings.loop_video_silent_only"))+"\n ")]),t._v(" "),t.loopSilentAvailable?t._e():s("div",{staticClass:"unavailable"},[s("FAIcon",{attrs:{icon:"globe"}}),t._v("! "+t._s(t.$t("settings.limited_availability"))+"\n ")],1)],1)])],1),t._v(" "),s("li",[s("BooleanSetting",{attrs:{path:"playVideosInModal"}},[t._v("\n "+t._s(t.$t("settings.play_videos_in_modal"))+"\n ")])],1),t._v(" "),s("li",[s("BooleanSetting",{attrs:{path:"useContainFit"}},[t._v("\n "+t._s(t.$t("settings.use_contain_fit"))+"\n ")])],1)])]),t._v(" "),s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.notifications")))]),t._v(" "),s("ul",{staticClass:"setting-list"},[s("li",[s("BooleanSetting",{attrs:{path:"webPushNotifications"}},[t._v("\n "+t._s(t.$t("settings.enable_web_push_notifications"))+"\n ")])],1)])]),t._v(" "),s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.fun")))]),t._v(" "),s("ul",{staticClass:"setting-list"},[s("li",[s("BooleanSetting",{attrs:{path:"greentext"}},[t._v("\n "+t._s(t.$t("settings.greentext"))+"\n ")])],1)])])])}),[],!1,null,null,null).exports,ke={data:function(){var t=this.$store.state.instance;return{backendVersion:t.backendVersion,frontendVersion:t.frontendVersion}},computed:{frontendVersionLink:function(){return"https://git.pleroma.social/pleroma/pleroma-fe/commit/"+this.frontendVersion},backendVersionLink:function(){return"https://git.pleroma.social/pleroma/pleroma/commit/"+(t=this.backendVersion,(e=t.match(/-g(\w+)/i))?e[1]:"");var t,e}}},ye=Object(c.a)(ke,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{attrs:{label:t.$t("settings.version.title")}},[s("div",{staticClass:"setting-item"},[s("ul",{staticClass:"setting-list"},[s("li",[s("p",[t._v(t._s(t.$t("settings.version.backend_version")))]),t._v(" "),s("ul",{staticClass:"option-list"},[s("li",[s("a",{attrs:{href:t.backendVersionLink,target:"_blank"}},[t._v(t._s(t.backendVersion))])])])]),t._v(" "),s("li",[s("p",[t._v(t._s(t.$t("settings.version.frontend_version")))]),t._v(" "),s("ul",{staticClass:"option-list"},[s("li",[s("a",{attrs:{href:t.frontendVersionLink,target:"_blank"}},[t._v(t._s(t.frontendVersion))])])])])])])])}),[],!1,null,null,null).exports,$e=s(12),Le=s(35),Te=s(117),Oe=s(31),Pe=s(43),Se={components:{Checkbox:v.a},props:{name:{required:!0,type:String},label:{required:!0,type:String},value:{required:!1,type:String,default:void 0},fallback:{required:!1,type:String,default:void 0},disabled:{required:!1,type:Boolean,default:!1},showOptionalTickbox:{required:!1,type:Boolean,default:!0}},computed:{present:function(){return void 0!==this.value},validColor:function(){return Object($e.f)(this.value||this.fallback)},transparentColor:function(){return"transparent"===this.value},computedColor:function(){return this.value&&this.value.startsWith("--")}}};var Ie=function(t){s(655),s(657)},je=Object(c.a)(Se,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"color-input style-control",class:{disabled:!t.present||t.disabled}},[s("label",{staticClass:"label",attrs:{for:t.name}},[t._v("\n "+t._s(t.label)+"\n ")]),t._v(" "),void 0!==t.fallback&&t.showOptionalTickbox?s("Checkbox",{staticClass:"opt",attrs:{checked:t.present,disabled:t.disabled},on:{change:function(e){return t.$emit("input",void 0===t.value?t.fallback:void 0)}}}):t._e(),t._v(" "),s("div",{staticClass:"input color-input-field"},[s("input",{staticClass:"textColor unstyled",attrs:{id:t.name+"-t",type:"text",disabled:!t.present||t.disabled},domProps:{value:t.value||t.fallback},on:{input:function(e){return t.$emit("input",e.target.value)}}}),t._v(" "),t.validColor?s("input",{staticClass:"nativeColor unstyled",attrs:{id:t.name,type:"color",disabled:!t.present||t.disabled},domProps:{value:t.value||t.fallback},on:{input:function(e){return t.$emit("input",e.target.value)}}}):t._e(),t._v(" "),t.transparentColor?s("div",{staticClass:"transparentIndicator"}):t._e(),t._v(" "),t.computedColor?s("div",{staticClass:"computedIndicator",style:{backgroundColor:t.fallback}}):t._e()])],1)}),[],!1,Ie,null,null).exports,Be=Object(c.a)({props:["name","value","fallback","disabled","label","max","min","step","hardMin","hardMax"],computed:{present:function(){return void 0!==this.value}}},(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"range-control style-control",class:{disabled:!t.present||t.disabled}},[s("label",{staticClass:"label",attrs:{for:t.name}},[t._v("\n "+t._s(t.label)+"\n ")]),t._v(" "),void 0!==t.fallback?s("input",{staticClass:"opt",attrs:{id:t.name+"-o",type:"checkbox"},domProps:{checked:t.present},on:{input:function(e){return t.$emit("input",t.present?void 0:t.fallback)}}}):t._e(),t._v(" "),void 0!==t.fallback?s("label",{staticClass:"opt-l",attrs:{for:t.name+"-o"}}):t._e(),t._v(" "),s("input",{staticClass:"input-number",attrs:{id:t.name,type:"range",disabled:!t.present||t.disabled,max:t.max||t.hardMax||100,min:t.min||t.hardMin||0,step:t.step||1},domProps:{value:t.value||t.fallback},on:{input:function(e){return t.$emit("input",e.target.value)}}}),t._v(" "),s("input",{staticClass:"input-number",attrs:{id:t.name,type:"number",disabled:!t.present||t.disabled,max:t.hardMax,min:t.hardMin,step:t.step||1},domProps:{value:t.value||t.fallback},on:{input:function(e){return t.$emit("input",e.target.value)}}})])}),[],!1,null,null,null).exports,Fe={components:{Checkbox:v.a},props:["name","value","fallback","disabled"],computed:{present:function(){return void 0!==this.value}}},Re=Object(c.a)(Fe,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"opacity-control style-control",class:{disabled:!t.present||t.disabled}},[s("label",{staticClass:"label",attrs:{for:t.name}},[t._v("\n "+t._s(t.$t("settings.style.common.opacity"))+"\n ")]),t._v(" "),void 0!==t.fallback?s("Checkbox",{staticClass:"opt",attrs:{checked:t.present,disabled:t.disabled},on:{change:function(e){return t.$emit("input",t.present?void 0:t.fallback)}}}):t._e(),t._v(" "),s("input",{staticClass:"input-number",attrs:{id:t.name,type:"number",disabled:!t.present||t.disabled,max:"1",min:"0",step:".05"},domProps:{value:t.value||t.fallback},on:{input:function(e){return t.$emit("input",e.target.value)}}})],1)}),[],!1,null,null,null).exports;function Ee(t,e){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),s.push.apply(s,n)}return s}function Ae(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:{};return Ae({x:0,y:0,blur:0,spread:0,inset:!1,color:"#000000",alpha:1},t)},De={props:["value","fallback","ready"],data:function(){return{selectedId:0,cValue:(this.value||this.fallback||[]).map(Me)}},components:{ColorInput:je,OpacityInput:Re,Select:Lt.a},methods:{add:function(){this.cValue.push(Me(this.selected)),this.selectedId=this.cValue.length-1},del:function(){this.cValue.splice(this.selectedId,1),this.selectedId=0===this.cValue.length?void 0:Math.max(this.selectedId-1,0)},moveUp:function(){var t=this.cValue.splice(this.selectedId,1)[0];this.cValue.splice(this.selectedId-1,0,t),this.selectedId-=1},moveDn:function(){var t=this.cValue.splice(this.selectedId,1)[0];this.cValue.splice(this.selectedId+1,0,t),this.selectedId+=1}},beforeUpdate:function(){this.cValue=this.value||this.fallback},computed:{anyShadows:function(){return this.cValue.length>0},anyShadowsFallback:function(){return this.fallback.length>0},selected:function(){return this.ready&&this.anyShadows?this.cValue[this.selectedId]:Me({})},currentFallback:function(){return this.ready&&this.anyShadowsFallback?this.fallback[this.selectedId]:Me({})},moveUpValid:function(){return this.ready&&this.selectedId>0},moveDnValid:function(){return this.ready&&this.selectedId-1:t.selected.inset},on:{change:function(e){var s=t.selected.inset,n=e.target,a=!!n.checked;if(Array.isArray(s)){var o=t._i(s,null);n.checked?o<0&&t.$set(t.selected,"inset",s.concat([null])):o>-1&&t.$set(t.selected,"inset",s.slice(0,o).concat(s.slice(o+1)))}else t.$set(t.selected,"inset",a)}}}),t._v(" "),s("label",{staticClass:"checkbox-label",attrs:{for:"inset"}})]),t._v(" "),s("div",{staticClass:"blur-control style-control",attrs:{disabled:!t.present}},[s("label",{staticClass:"label",attrs:{for:"spread"}},[t._v("\n "+t._s(t.$t("settings.style.shadows.blur"))+"\n ")]),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.selected.blur,expression:"selected.blur"}],staticClass:"input-range",attrs:{id:"blur",disabled:!t.present,name:"blur",type:"range",max:"20",min:"0"},domProps:{value:t.selected.blur},on:{__r:function(e){return t.$set(t.selected,"blur",e.target.value)}}}),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.selected.blur,expression:"selected.blur"}],staticClass:"input-number",attrs:{disabled:!t.present,type:"number",min:"0"},domProps:{value:t.selected.blur},on:{input:function(e){e.target.composing||t.$set(t.selected,"blur",e.target.value)}}})]),t._v(" "),s("div",{staticClass:"spread-control style-control",attrs:{disabled:!t.present}},[s("label",{staticClass:"label",attrs:{for:"spread"}},[t._v("\n "+t._s(t.$t("settings.style.shadows.spread"))+"\n ")]),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.selected.spread,expression:"selected.spread"}],staticClass:"input-range",attrs:{id:"spread",disabled:!t.present,name:"spread",type:"range",max:"20",min:"-20"},domProps:{value:t.selected.spread},on:{__r:function(e){return t.$set(t.selected,"spread",e.target.value)}}}),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.selected.spread,expression:"selected.spread"}],staticClass:"input-number",attrs:{disabled:!t.present,type:"number"},domProps:{value:t.selected.spread},on:{input:function(e){e.target.composing||t.$set(t.selected,"spread",e.target.value)}}})]),t._v(" "),s("ColorInput",{attrs:{disabled:!t.present,label:t.$t("settings.style.common.color"),fallback:t.currentFallback.color,"show-optional-tickbox":!1,name:"shadow"},model:{value:t.selected.color,callback:function(e){t.$set(t.selected,"color",e)},expression:"selected.color"}}),t._v(" "),s("OpacityInput",{attrs:{disabled:!t.present},model:{value:t.selected.alpha,callback:function(e){t.$set(t.selected,"alpha",e)},expression:"selected.alpha"}}),t._v(" "),s("i18n",{attrs:{path:"settings.style.shadows.hintV3",tag:"p"}},[s("code",[t._v("--variable,mod")])])],1)])}),[],!1,Ue,null,null).exports,Ve={components:{Select:Lt.a},props:["name","label","value","fallback","options","no-inherit"],data:function(){return{lValue:this.value,availableOptions:[this.noInherit?"":"inherit","custom"].concat(H()(this.options||[]),["serif","monospace","sans-serif"]).filter((function(t){return t}))}},beforeUpdate:function(){this.lValue=this.value},computed:{present:function(){return void 0!==this.lValue},dValue:function(){return this.lValue||this.fallback||{}},family:{get:function(){return this.dValue.family},set:function(t){Object(J.set)(this.lValue,"family",t),this.$emit("input",this.lValue)}},isCustom:function(){return"custom"===this.preset},preset:{get:function(){return"serif"===this.family||"sans-serif"===this.family||"monospace"===this.family||"inherit"===this.family?this.family:"custom"},set:function(t){this.family="custom"===t?"":t}}}};var We=function(t){s(661)},qe=Object(c.a)(Ve,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"font-control style-control",class:{custom:t.isCustom}},[s("label",{staticClass:"label",attrs:{for:"custom"===t.preset?t.name:t.name+"-font-switcher"}},[t._v("\n "+t._s(t.label)+"\n ")]),t._v(" "),void 0!==t.fallback?s("input",{staticClass:"opt exlcude-disabled",attrs:{id:t.name+"-o",type:"checkbox"},domProps:{checked:t.present},on:{input:function(e){return t.$emit("input",void 0===t.value?t.fallback:void 0)}}}):t._e(),t._v(" "),void 0!==t.fallback?s("label",{staticClass:"opt-l",attrs:{for:t.name+"-o"}}):t._e(),t._v(" "),s("Select",{staticClass:"font-switcher",attrs:{id:t.name+"-font-switcher",disabled:!t.present},model:{value:t.preset,callback:function(e){t.preset=e},expression:"preset"}},t._l(t.availableOptions,(function(e){return s("option",{key:e,domProps:{value:e}},[t._v("\n "+t._s("custom"===e?t.$t("settings.style.fonts.custom"):e)+"\n ")])})),0),t._v(" "),t.isCustom?s("input",{directives:[{name:"model",rawName:"v-model",value:t.family,expression:"family"}],staticClass:"custom-font",attrs:{id:t.name,type:"text"},domProps:{value:t.family},on:{input:function(e){e.target.composing||(t.family=e.target.value)}}}):t._e()],1)}),[],!1,We,null,null).exports;i.c.add(r.a,r.u,r.hb);var ze={props:{large:{required:!1,type:Boolean,default:!1},contrast:{required:!1,type:Object,default:function(){return{}}}},computed:{hint:function(){var t=this.contrast.aaa?"aaa":this.contrast.aa?"aa":"bad",e=this.$t("settings.style.common.contrast.level.".concat(t)),s=this.$t("settings.style.common.contrast.context.text"),n=this.contrast.text;return this.$t("settings.style.common.contrast.hint",{level:e,context:s,ratio:n})},hint_18pt:function(){var t=this.contrast.laaa?"aaa":this.contrast.laa?"aa":"bad",e=this.$t("settings.style.common.contrast.level.".concat(t)),s=this.$t("settings.style.common.contrast.context.18pt"),n=this.contrast.text;return this.$t("settings.style.common.contrast.hint",{level:e,context:s,ratio:n})}}};var Ge=function(t){s(663)},Ke=Object(c.a)(ze,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.contrast?s("span",{staticClass:"contrast-ratio"},[s("span",{staticClass:"rating",attrs:{title:t.hint}},[t.contrast.aaa?s("span",[s("FAIcon",{attrs:{icon:"thumbs-up"}})],1):t._e(),t._v(" "),!t.contrast.aaa&&t.contrast.aa?s("span",[s("FAIcon",{attrs:{icon:"adjust"}})],1):t._e(),t._v(" "),t.contrast.aaa||t.contrast.aa?t._e():s("span",[s("FAIcon",{attrs:{icon:"exclamation-triangle"}})],1)]),t._v(" "),t.contrast&&t.large?s("span",{staticClass:"rating",attrs:{title:t.hint_18pt}},[t.contrast.laaa?s("span",[s("FAIcon",{attrs:{icon:"thumbs-up"}})],1):t._e(),t._v(" "),!t.contrast.laaa&&t.contrast.laa?s("span",[s("FAIcon",{attrs:{icon:"adjust"}})],1):t._e(),t._v(" "),t.contrast.laaa||t.contrast.laa?t._e():s("span",[s("FAIcon",{attrs:{icon:"exclamation-triangle"}})],1)]):t._e()]):t._e()}),[],!1,Ge,null,null).exports;i.c.add(r.jb,r.bb,r.T,r.S);var He=function(t){s(665)},Je=Object(c.a)({},(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"preview-container"},[s("div",{staticClass:"underlay underlay-preview"}),t._v(" "),s("div",{staticClass:"panel dummy"},[s("div",{staticClass:"panel-heading"},[s("div",{staticClass:"title"},[t._v("\n "+t._s(t.$t("settings.style.preview.header"))+"\n "),s("span",{staticClass:"badge badge-notification"},[t._v("\n 99\n ")])]),t._v(" "),s("span",{staticClass:"faint"},[t._v("\n "+t._s(t.$t("settings.style.preview.header_faint"))+"\n ")]),t._v(" "),s("span",{staticClass:"alert error"},[t._v("\n "+t._s(t.$t("settings.style.preview.error"))+"\n ")]),t._v(" "),s("button",{staticClass:"btn button-default"},[t._v("\n "+t._s(t.$t("settings.style.preview.button"))+"\n ")])]),t._v(" "),s("div",{staticClass:"panel-body theme-preview-content"},[s("div",{staticClass:"post"},[s("div",{staticClass:"avatar still-image"},[t._v("\n ( ͡° ͜ʖ ͡°)\n ")]),t._v(" "),s("div",{staticClass:"content"},[s("h4",[t._v("\n "+t._s(t.$t("settings.style.preview.content"))+"\n ")]),t._v(" "),s("i18n",{attrs:{path:"settings.style.preview.text"}},[s("code",{staticStyle:{"font-family":"var(--postCodeFont)"}},[t._v("\n "+t._s(t.$t("settings.style.preview.mono"))+"\n ")]),t._v(" "),s("a",{staticStyle:{color:"var(--link)"}},[t._v("\n "+t._s(t.$t("settings.style.preview.link"))+"\n ")])]),t._v(" "),s("div",{staticClass:"icons"},[s("FAIcon",{staticClass:"fa-scale-110 fa-old-padding",staticStyle:{color:"var(--cBlue)"},attrs:{"fixed-width":"",icon:"reply"}}),t._v(" "),s("FAIcon",{staticClass:"fa-scale-110 fa-old-padding",staticStyle:{color:"var(--cGreen)"},attrs:{"fixed-width":"",icon:"retweet"}}),t._v(" "),s("FAIcon",{staticClass:"fa-scale-110 fa-old-padding",staticStyle:{color:"var(--cOrange)"},attrs:{"fixed-width":"",icon:"star"}}),t._v(" "),s("FAIcon",{staticClass:"fa-scale-110 fa-old-padding",staticStyle:{color:"var(--cRed)"},attrs:{"fixed-width":"",icon:"times"}})],1)],1)]),t._v(" "),s("div",{staticClass:"after-post"},[s("div",{staticClass:"avatar-alt"},[t._v("\n :^)\n ")]),t._v(" "),s("div",{staticClass:"content"},[s("i18n",{staticClass:"faint",attrs:{path:"settings.style.preview.fine_print",tag:"span"}},[s("a",{staticStyle:{color:"var(--faintLink)"}},[t._v("\n "+t._s(t.$t("settings.style.preview.faint_link"))+"\n ")])])],1)]),t._v(" "),s("div",{staticClass:"separator"}),t._v(" "),s("span",{staticClass:"alert error"},[t._v("\n "+t._s(t.$t("settings.style.preview.error"))+"\n ")]),t._v(" "),s("input",{attrs:{type:"text"},domProps:{value:t.$t("settings.style.preview.input")}}),t._v(" "),s("div",{staticClass:"actions"},[s("span",{staticClass:"checkbox"},[s("input",{attrs:{id:"preview_checkbox",checked:"very yes",type:"checkbox"}}),t._v(" "),s("label",{attrs:{for:"preview_checkbox"}},[t._v(t._s(t.$t("settings.style.preview.checkbox")))])]),t._v(" "),s("button",{staticClass:"btn button-default"},[t._v("\n "+t._s(t.$t("settings.style.preview.button"))+"\n ")])])])])])}),[],!1,He,null,null).exports;function Qe(t,e){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),s.push.apply(s,n)}return s}function Xe(t){for(var e=1;ePe.a)return t(e+"future_version_imported")+" "+t(i?e+"snapshot_missing":e+"snapshot_present");if(aPe.a)return t(e+"fe_downgraded")+" "+t(i?e+"migration_snapshot_ok":e+"migration_snapshot_gone");if(a=4.5,aaa:s>=7,laa:s>=3,laaa:s>=4.5},t}),{})}catch(t){console.warn("Failure computing contrasts",t)}},previewRules:function(){return this.preview.rules?[].concat(H()(Object.values(this.preview.rules)),["color: var(--text)","font-family: var(--interfaceFont, sans-serif)"]).join(";"):""},shadowsAvailable:function(){return Object.keys(Le.a).sort()},currentShadowOverriden:{get:function(){return!!this.currentShadow},set:function(t){t?Object(J.set)(this.shadowsLocal,this.shadowSelected,this.currentShadowFallback.map((function(t){return Object.assign({},t)}))):Object(J.delete)(this.shadowsLocal,this.shadowSelected)}},currentShadowFallback:function(){return(this.previewTheme.shadows||{})[this.shadowSelected]},currentShadow:{get:function(){return this.shadowsLocal[this.shadowSelected]},set:function(t){Object(J.set)(this.shadowsLocal,this.shadowSelected,t)}},themeValid:function(){return!this.shadowsInvalid&&!this.colorsInvalid&&!this.radiiInvalid},exportedTheme:function(){var t=!(this.keepFonts||this.keepShadows||this.keepOpacity||this.keepRoundness||this.keepColor),e={themeEngineVersion:Pe.a};return(this.keepFonts||t)&&(e.fonts=this.fontsLocal),(this.keepShadows||t)&&(e.shadows=this.shadowsLocal),(this.keepOpacity||t)&&(e.opacity=this.currentOpacity),(this.keepColor||t)&&(e.colors=this.currentColors),(this.keepRoundness||t)&&(e.radii=this.currentRadii),{_pleroma_theme_version:2,theme:Xe({themeEngineVersion:Pe.a},this.previewTheme),source:e}}},components:{ColorInput:je,OpacityInput:Re,RangeInput:Be,ContrastRatio:Ke,ShadowControl:Ne,FontControl:qe,TabSwitcher:n.a,Preview:Je,Checkbox:v.a,Select:Lt.a},methods:{loadTheme:function(t,e){var s=t.theme,n=t.source,a=t._pleroma_theme_version,o=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(this.dismissWarning(),!n&&!s)throw new Error("Can't load theme: empty");var i="localStorage"!==e||s.colors?a:"l1",r=(s||{}).themeEngineVersion,l=(n||{}).themeEngineVersion||2,c=l===Pe.a,u=void 0!==s&&void 0!==n&&l!==r,d=n&&o||!s;c&&!u||d||"l1"===i||"defaults"===e||(u&&"localStorage"===e?this.themeWarning={origin:e,themeEngineVersion:l,type:"snapshot_source_mismatch"}:s?c||(this.themeWarning={origin:e,noActionsPossible:!n,themeEngineVersion:l,type:"wrong_version"}):this.themeWarning={origin:e,noActionsPossible:!0,themeEngineVersion:l,type:"no_snapshot_old_version"}),this.normalizeLocalState(s,i,n,d)},forceLoadLocalStorage:function(){this.loadThemeFromLocalStorage(!0)},dismissWarning:function(){this.themeWarning=void 0,this.tempImportFile=void 0},forceLoad:function(){switch(this.themeWarning.origin){case"localStorage":this.loadThemeFromLocalStorage(!0);break;case"file":this.onImport(this.tempImportFile,!0)}this.dismissWarning()},forceSnapshot:function(){switch(this.themeWarning.origin){case"localStorage":this.loadThemeFromLocalStorage(!1,!0);break;case"file":console.err("Forcing snapshout from file is not supported yet")}this.dismissWarning()},loadThemeFromLocalStorage:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],s=this.$store.getters.mergedConfig,n=s.customTheme,a=s.customThemeSource;n||a?this.loadTheme({theme:n,source:e?n:a},"localStorage",t):this.loadTheme(this.$store.state.instance.themeData,"defaults",t)},setCustomTheme:function(){this.$store.dispatch("setOption",{name:"customTheme",value:Xe({themeEngineVersion:Pe.a},this.previewTheme)}),this.$store.dispatch("setOption",{name:"customThemeSource",value:{themeEngineVersion:Pe.a,shadows:this.shadowsLocal,fonts:this.fontsLocal,opacity:this.currentOpacity,colors:this.currentColors,radii:this.currentRadii}})},updatePreviewColorsAndShadows:function(){this.previewColors=Object(Le.e)({opacity:this.currentOpacity,colors:this.currentColors}),this.previewShadows=Object(Le.h)({shadows:this.shadowsLocal,opacity:this.previewTheme.opacity,themeEngineVersion:this.engineVersion},this.previewColors.theme.colors,this.previewColors.mod)},importTheme:function(){this.themeImporter.importData()},exportTheme:function(){this.themeExporter.exportData()},onImport:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.tempImportFile=t,this.loadTheme(t,"file",e)},onImportFailure:function(t){this.$store.dispatch("pushGlobalNotice",{messageKey:"settings.invalid_theme_imported",level:"error"})},importValidator:function(t){var e=t._pleroma_theme_version;return e>=1||e<=2},clearAll:function(){this.loadThemeFromLocalStorage()},clearV1:function(){var t=this;Object.keys(this.$data).filter((function(t){return t.endsWith("ColorLocal")||t.endsWith("OpacityLocal")})).filter((function(t){return!Ye.includes(t)})).forEach((function(e){Object(J.set)(t.$data,e,void 0)}))},clearRoundness:function(){var t=this;Object.keys(this.$data).filter((function(t){return t.endsWith("RadiusLocal")})).forEach((function(e){Object(J.set)(t.$data,e,void 0)}))},clearOpacity:function(){var t=this;Object.keys(this.$data).filter((function(t){return t.endsWith("OpacityLocal")})).forEach((function(e){Object(J.set)(t.$data,e,void 0)}))},clearShadows:function(){this.shadowsLocal={}},clearFonts:function(){this.fontsLocal={}},normalizeLocalState:function(t){var e,s=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,a=arguments.length>2?arguments[2]:void 0,o=arguments.length>3&&void 0!==arguments[3]&&arguments[3];void 0!==a&&(o||a.themeEngineVersion===Pe.a)?(e=a,n=a.themeEngineVersion):e=t;var i=e.radii||e,r=e.opacity,l=e.shadows||{},c=e.fonts||{},u=e.themeEngineVersion?e.colors||e:Object(Le.c)(e.colors||e);if(0===n&&(e.version&&(n=e.version),void 0===u.text&&void 0!==u.fg&&(n=1),void 0!==u.text&&void 0!==u.fg&&(n=2)),this.engineVersion=n,1===n&&(this.fgColorLocal=Object($e.i)(u.btn),this.textColorLocal=Object($e.i)(u.fg)),!this.keepColor){this.clearV1();var d=new Set(1!==n?Object.keys(Oe.c):[]);1!==n&&"l1"!==n||d.add("bg").add("link").add("cRed").add("cBlue").add("cGreen").add("cOrange"),d.forEach((function(t){var e=u[t],n=Object($e.i)(u[t]);s[t+"ColorLocal"]="#aN"===n?e:n}))}r&&!this.keepOpacity&&(this.clearOpacity(),Object.entries(r).forEach((function(t){var e=G()(t,2),n=e[0],a=e[1];null==a||Number.isNaN(a)||(s[n+"OpacityLocal"]=a)}))),this.keepRoundness||(this.clearRoundness(),Object.entries(i).forEach((function(t){var e=G()(t,2),n=e[0],a=e[1],o=n.endsWith("Radius")?n.split("Radius")[0]:n;s[o+"RadiusLocal"]=a}))),this.keepShadows||(this.clearShadows(),this.shadowsLocal=2===n?Object(Le.m)(l,this.previewTheme.opacity):l,this.shadowSelected=this.shadowsAvailable[0]),this.keepFonts||(this.clearFonts(),this.fontsLocal=c)}},watch:{currentRadii:function(){try{this.previewRadii=Object(Le.g)({radii:this.currentRadii}),this.radiiInvalid=!1}catch(t){this.radiiInvalid=!0,console.warn(t)}},shadowsLocal:{handler:function(){if(1!==Object.getOwnPropertyNames(this.previewColors).length)try{this.updatePreviewColorsAndShadows(),this.shadowsInvalid=!1}catch(t){this.shadowsInvalid=!0,console.warn(t)}},deep:!0},fontsLocal:{handler:function(){try{this.previewFonts=Object(Le.f)({fonts:this.fontsLocal}),this.fontsInvalid=!1}catch(t){this.fontsInvalid=!0,console.warn(t)}},deep:!0},currentColors:function(){try{this.updatePreviewColorsAndShadows(),this.colorsInvalid=!1,this.shadowsInvalid=!1}catch(t){this.colorsInvalid=!0,this.shadowsInvalid=!0,console.warn(t)}},currentOpacity:function(){try{this.updatePreviewColorsAndShadows()}catch(t){console.warn(t)}},selected:function(){var t=this;this.selectedTheme=Object.entries(this.availableStyles).find((function(e){var s=G()(e,2),n=(s[0],s[1]);return Array.isArray(n)?(console.log(n[0]===t.selected,t.selected),n[0]===t.selected):n.name===t.selected}))[1]},selectedTheme:function(){this.dismissWarning(),1===this.selectedVersion?(this.keepRoundness||this.clearRoundness(),this.keepShadows||this.clearShadows(),this.keepOpacity||this.clearOpacity(),this.keepColor||(this.clearV1(),this.bgColorLocal=this.selectedTheme[1],this.fgColorLocal=this.selectedTheme[2],this.textColorLocal=this.selectedTheme[3],this.linkColorLocal=this.selectedTheme[4],this.cRedColorLocal=this.selectedTheme[5],this.cGreenColorLocal=this.selectedTheme[6],this.cBlueColorLocal=this.selectedTheme[7],this.cOrangeColorLocal=this.selectedTheme[8])):this.selectedVersion>=2&&this.normalizeLocalState(this.selectedTheme.theme,2,this.selectedTheme.source)}}};var ts=function(t){s(653)},es=Object(c.a)(Ze,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"theme-tab"},[s("div",{staticClass:"presets-container"},[s("div",{staticClass:"save-load"},[t.themeWarning?s("div",{staticClass:"theme-warning"},[s("div",{staticClass:"alert warning"},[t._v("\n "+t._s(t.themeWarningHelp)+"\n ")]),t._v(" "),s("div",{staticClass:"buttons"},["snapshot_source_mismatch"===t.themeWarning.type?[s("button",{staticClass:"btn button-default",on:{click:t.forceLoad}},[t._v("\n "+t._s(t.$t("settings.style.switcher.use_source"))+"\n ")]),t._v(" "),s("button",{staticClass:"btn button-default",on:{click:t.forceSnapshot}},[t._v("\n "+t._s(t.$t("settings.style.switcher.use_snapshot"))+"\n ")])]:t.themeWarning.noActionsPossible?[s("button",{staticClass:"btn button-default",on:{click:t.dismissWarning}},[t._v("\n "+t._s(t.$t("general.dismiss"))+"\n ")])]:[s("button",{staticClass:"btn button-default",on:{click:t.forceLoad}},[t._v("\n "+t._s(t.$t("settings.style.switcher.load_theme"))+"\n ")]),t._v(" "),s("button",{staticClass:"btn button-default",on:{click:t.dismissWarning}},[t._v("\n "+t._s(t.$t("settings.style.switcher.keep_as_is"))+"\n ")])]],2)]):t._e(),t._v(" "),s("div",{staticClass:"top"},[s("div",{staticClass:"presets"},[t._v("\n "+t._s(t.$t("settings.presets"))+"\n "),s("label",{staticClass:"select",attrs:{for:"preset-switcher"}},[s("Select",{staticClass:"preset-switcher",attrs:{id:"preset-switcher"},model:{value:t.selected,callback:function(e){t.selected=e},expression:"selected"}},t._l(t.availableStyles,(function(e){return s("option",{key:e.name,style:{backgroundColor:e[1]||(e.theme||e.source).colors.bg,color:e[3]||(e.theme||e.source).colors.text},domProps:{value:e.name||e[0]}},[t._v("\n "+t._s(e[0]||e.name)+"\n ")])})),0)],1)]),t._v(" "),s("div",{staticClass:"export-import"},[s("button",{staticClass:"btn button-default",on:{click:t.importTheme}},[t._v("\n "+t._s(t.$t("settings.import_theme"))+"\n ")]),t._v(" "),s("button",{staticClass:"btn button-default",on:{click:t.exportTheme}},[t._v("\n "+t._s(t.$t("settings.export_theme"))+"\n ")])])])]),t._v(" "),s("div",{staticClass:"save-load-options"},[s("span",{staticClass:"keep-option"},[s("Checkbox",{model:{value:t.keepColor,callback:function(e){t.keepColor=e},expression:"keepColor"}},[t._v("\n "+t._s(t.$t("settings.style.switcher.keep_color"))+"\n ")])],1),t._v(" "),s("span",{staticClass:"keep-option"},[s("Checkbox",{model:{value:t.keepShadows,callback:function(e){t.keepShadows=e},expression:"keepShadows"}},[t._v("\n "+t._s(t.$t("settings.style.switcher.keep_shadows"))+"\n ")])],1),t._v(" "),s("span",{staticClass:"keep-option"},[s("Checkbox",{model:{value:t.keepOpacity,callback:function(e){t.keepOpacity=e},expression:"keepOpacity"}},[t._v("\n "+t._s(t.$t("settings.style.switcher.keep_opacity"))+"\n ")])],1),t._v(" "),s("span",{staticClass:"keep-option"},[s("Checkbox",{model:{value:t.keepRoundness,callback:function(e){t.keepRoundness=e},expression:"keepRoundness"}},[t._v("\n "+t._s(t.$t("settings.style.switcher.keep_roundness"))+"\n ")])],1),t._v(" "),s("span",{staticClass:"keep-option"},[s("Checkbox",{model:{value:t.keepFonts,callback:function(e){t.keepFonts=e},expression:"keepFonts"}},[t._v("\n "+t._s(t.$t("settings.style.switcher.keep_fonts"))+"\n ")])],1),t._v(" "),s("p",[t._v(t._s(t.$t("settings.style.switcher.save_load_hint")))])])]),t._v(" "),s("preview",{style:t.previewRules}),t._v(" "),s("keep-alive",[s("tab-switcher",{key:"style-tweak"},[s("div",{staticClass:"color-container",attrs:{label:t.$t("settings.style.common_colors._tab_label")}},[s("div",{staticClass:"tab-header"},[s("p",[t._v(t._s(t.$t("settings.theme_help")))]),t._v(" "),s("div",{staticClass:"tab-header-buttons"},[s("button",{staticClass:"btn button-default",on:{click:t.clearOpacity}},[t._v("\n "+t._s(t.$t("settings.style.switcher.clear_opacity"))+"\n ")]),t._v(" "),s("button",{staticClass:"btn button-default",on:{click:t.clearV1}},[t._v("\n "+t._s(t.$t("settings.style.switcher.clear_all"))+"\n ")])])]),t._v(" "),s("p",[t._v(t._s(t.$t("settings.theme_help_v2_1")))]),t._v(" "),s("h4",[t._v(t._s(t.$t("settings.style.common_colors.main")))]),t._v(" "),s("div",{staticClass:"color-item"},[s("ColorInput",{attrs:{name:"bgColor",label:t.$t("settings.background")},model:{value:t.bgColorLocal,callback:function(e){t.bgColorLocal=e},expression:"bgColorLocal"}}),t._v(" "),s("OpacityInput",{attrs:{name:"bgOpacity",fallback:t.previewTheme.opacity.bg},model:{value:t.bgOpacityLocal,callback:function(e){t.bgOpacityLocal=e},expression:"bgOpacityLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"textColor",label:t.$t("settings.text")},model:{value:t.textColorLocal,callback:function(e){t.textColorLocal=e},expression:"textColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.bgText}}),t._v(" "),s("ColorInput",{attrs:{name:"accentColor",fallback:t.previewTheme.colors.link,label:t.$t("settings.accent"),"show-optional-tickbox":void 0!==t.linkColorLocal},model:{value:t.accentColorLocal,callback:function(e){t.accentColorLocal=e},expression:"accentColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"linkColor",fallback:t.previewTheme.colors.accent,label:t.$t("settings.links"),"show-optional-tickbox":void 0!==t.accentColorLocal},model:{value:t.linkColorLocal,callback:function(e){t.linkColorLocal=e},expression:"linkColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.bgLink}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("ColorInput",{attrs:{name:"fgColor",label:t.$t("settings.foreground")},model:{value:t.fgColorLocal,callback:function(e){t.fgColorLocal=e},expression:"fgColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"fgTextColor",label:t.$t("settings.text"),fallback:t.previewTheme.colors.fgText},model:{value:t.fgTextColorLocal,callback:function(e){t.fgTextColorLocal=e},expression:"fgTextColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"fgLinkColor",label:t.$t("settings.links"),fallback:t.previewTheme.colors.fgLink},model:{value:t.fgLinkColorLocal,callback:function(e){t.fgLinkColorLocal=e},expression:"fgLinkColorLocal"}}),t._v(" "),s("p",[t._v(t._s(t.$t("settings.style.common_colors.foreground_hint")))])],1),t._v(" "),s("h4",[t._v(t._s(t.$t("settings.style.common_colors.rgbo")))]),t._v(" "),s("div",{staticClass:"color-item"},[s("ColorInput",{attrs:{name:"cRedColor",label:t.$t("settings.cRed")},model:{value:t.cRedColorLocal,callback:function(e){t.cRedColorLocal=e},expression:"cRedColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.bgCRed}}),t._v(" "),s("ColorInput",{attrs:{name:"cBlueColor",label:t.$t("settings.cBlue")},model:{value:t.cBlueColorLocal,callback:function(e){t.cBlueColorLocal=e},expression:"cBlueColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.bgCBlue}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("ColorInput",{attrs:{name:"cGreenColor",label:t.$t("settings.cGreen")},model:{value:t.cGreenColorLocal,callback:function(e){t.cGreenColorLocal=e},expression:"cGreenColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.bgCGreen}}),t._v(" "),s("ColorInput",{attrs:{name:"cOrangeColor",label:t.$t("settings.cOrange")},model:{value:t.cOrangeColorLocal,callback:function(e){t.cOrangeColorLocal=e},expression:"cOrangeColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.bgCOrange}})],1),t._v(" "),s("p",[t._v(t._s(t.$t("settings.theme_help_v2_2")))])]),t._v(" "),s("div",{staticClass:"color-container",attrs:{label:t.$t("settings.style.advanced_colors._tab_label")}},[s("div",{staticClass:"tab-header"},[s("p",[t._v(t._s(t.$t("settings.theme_help")))]),t._v(" "),s("button",{staticClass:"btn button-default",on:{click:t.clearOpacity}},[t._v("\n "+t._s(t.$t("settings.style.switcher.clear_opacity"))+"\n ")]),t._v(" "),s("button",{staticClass:"btn button-default",on:{click:t.clearV1}},[t._v("\n "+t._s(t.$t("settings.style.switcher.clear_all"))+"\n ")])]),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.post")))]),t._v(" "),s("ColorInput",{attrs:{name:"postLinkColor",fallback:t.previewTheme.colors.accent,label:t.$t("settings.links")},model:{value:t.postLinkColorLocal,callback:function(e){t.postLinkColorLocal=e},expression:"postLinkColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.postLink}}),t._v(" "),s("ColorInput",{attrs:{name:"postGreentextColor",fallback:t.previewTheme.colors.cGreen,label:t.$t("settings.greentext")},model:{value:t.postGreentextColorLocal,callback:function(e){t.postGreentextColorLocal=e},expression:"postGreentextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.postGreentext}}),t._v(" "),s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.alert")))]),t._v(" "),s("ColorInput",{attrs:{name:"alertError",label:t.$t("settings.style.advanced_colors.alert_error"),fallback:t.previewTheme.colors.alertError},model:{value:t.alertErrorColorLocal,callback:function(e){t.alertErrorColorLocal=e},expression:"alertErrorColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"alertErrorText",label:t.$t("settings.text"),fallback:t.previewTheme.colors.alertErrorText},model:{value:t.alertErrorTextColorLocal,callback:function(e){t.alertErrorTextColorLocal=e},expression:"alertErrorTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.alertErrorText,large:""}}),t._v(" "),s("ColorInput",{attrs:{name:"alertWarning",label:t.$t("settings.style.advanced_colors.alert_warning"),fallback:t.previewTheme.colors.alertWarning},model:{value:t.alertWarningColorLocal,callback:function(e){t.alertWarningColorLocal=e},expression:"alertWarningColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"alertWarningText",label:t.$t("settings.text"),fallback:t.previewTheme.colors.alertWarningText},model:{value:t.alertWarningTextColorLocal,callback:function(e){t.alertWarningTextColorLocal=e},expression:"alertWarningTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.alertWarningText,large:""}}),t._v(" "),s("ColorInput",{attrs:{name:"alertNeutral",label:t.$t("settings.style.advanced_colors.alert_neutral"),fallback:t.previewTheme.colors.alertNeutral},model:{value:t.alertNeutralColorLocal,callback:function(e){t.alertNeutralColorLocal=e},expression:"alertNeutralColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"alertNeutralText",label:t.$t("settings.text"),fallback:t.previewTheme.colors.alertNeutralText},model:{value:t.alertNeutralTextColorLocal,callback:function(e){t.alertNeutralTextColorLocal=e},expression:"alertNeutralTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.alertNeutralText,large:""}}),t._v(" "),s("OpacityInput",{attrs:{name:"alertOpacity",fallback:t.previewTheme.opacity.alert},model:{value:t.alertOpacityLocal,callback:function(e){t.alertOpacityLocal=e},expression:"alertOpacityLocal"}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.badge")))]),t._v(" "),s("ColorInput",{attrs:{name:"badgeNotification",label:t.$t("settings.style.advanced_colors.badge_notification"),fallback:t.previewTheme.colors.badgeNotification},model:{value:t.badgeNotificationColorLocal,callback:function(e){t.badgeNotificationColorLocal=e},expression:"badgeNotificationColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"badgeNotificationText",label:t.$t("settings.text"),fallback:t.previewTheme.colors.badgeNotificationText},model:{value:t.badgeNotificationTextColorLocal,callback:function(e){t.badgeNotificationTextColorLocal=e},expression:"badgeNotificationTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.badgeNotificationText,large:""}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.panel_header")))]),t._v(" "),s("ColorInput",{attrs:{name:"panelColor",fallback:t.previewTheme.colors.panel,label:t.$t("settings.background")},model:{value:t.panelColorLocal,callback:function(e){t.panelColorLocal=e},expression:"panelColorLocal"}}),t._v(" "),s("OpacityInput",{attrs:{name:"panelOpacity",fallback:t.previewTheme.opacity.panel,disabled:"transparent"===t.panelColorLocal},model:{value:t.panelOpacityLocal,callback:function(e){t.panelOpacityLocal=e},expression:"panelOpacityLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"panelTextColor",fallback:t.previewTheme.colors.panelText,label:t.$t("settings.text")},model:{value:t.panelTextColorLocal,callback:function(e){t.panelTextColorLocal=e},expression:"panelTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.panelText,large:""}}),t._v(" "),s("ColorInput",{attrs:{name:"panelLinkColor",fallback:t.previewTheme.colors.panelLink,label:t.$t("settings.links")},model:{value:t.panelLinkColorLocal,callback:function(e){t.panelLinkColorLocal=e},expression:"panelLinkColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.panelLink,large:""}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.top_bar")))]),t._v(" "),s("ColorInput",{attrs:{name:"topBarColor",fallback:t.previewTheme.colors.topBar,label:t.$t("settings.background")},model:{value:t.topBarColorLocal,callback:function(e){t.topBarColorLocal=e},expression:"topBarColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"topBarTextColor",fallback:t.previewTheme.colors.topBarText,label:t.$t("settings.text")},model:{value:t.topBarTextColorLocal,callback:function(e){t.topBarTextColorLocal=e},expression:"topBarTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.topBarText}}),t._v(" "),s("ColorInput",{attrs:{name:"topBarLinkColor",fallback:t.previewTheme.colors.topBarLink,label:t.$t("settings.links")},model:{value:t.topBarLinkColorLocal,callback:function(e){t.topBarLinkColorLocal=e},expression:"topBarLinkColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.topBarLink}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.inputs")))]),t._v(" "),s("ColorInput",{attrs:{name:"inputColor",fallback:t.previewTheme.colors.input,label:t.$t("settings.background")},model:{value:t.inputColorLocal,callback:function(e){t.inputColorLocal=e},expression:"inputColorLocal"}}),t._v(" "),s("OpacityInput",{attrs:{name:"inputOpacity",fallback:t.previewTheme.opacity.input,disabled:"transparent"===t.inputColorLocal},model:{value:t.inputOpacityLocal,callback:function(e){t.inputOpacityLocal=e},expression:"inputOpacityLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"inputTextColor",fallback:t.previewTheme.colors.inputText,label:t.$t("settings.text")},model:{value:t.inputTextColorLocal,callback:function(e){t.inputTextColorLocal=e},expression:"inputTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.inputText}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.buttons")))]),t._v(" "),s("ColorInput",{attrs:{name:"btnColor",fallback:t.previewTheme.colors.btn,label:t.$t("settings.background")},model:{value:t.btnColorLocal,callback:function(e){t.btnColorLocal=e},expression:"btnColorLocal"}}),t._v(" "),s("OpacityInput",{attrs:{name:"btnOpacity",fallback:t.previewTheme.opacity.btn,disabled:"transparent"===t.btnColorLocal},model:{value:t.btnOpacityLocal,callback:function(e){t.btnOpacityLocal=e},expression:"btnOpacityLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"btnTextColor",fallback:t.previewTheme.colors.btnText,label:t.$t("settings.text")},model:{value:t.btnTextColorLocal,callback:function(e){t.btnTextColorLocal=e},expression:"btnTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.btnText}}),t._v(" "),s("ColorInput",{attrs:{name:"btnPanelTextColor",fallback:t.previewTheme.colors.btnPanelText,label:t.$t("settings.style.advanced_colors.panel_header")},model:{value:t.btnPanelTextColorLocal,callback:function(e){t.btnPanelTextColorLocal=e},expression:"btnPanelTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.btnPanelText}}),t._v(" "),s("ColorInput",{attrs:{name:"btnTopBarTextColor",fallback:t.previewTheme.colors.btnTopBarText,label:t.$t("settings.style.advanced_colors.top_bar")},model:{value:t.btnTopBarTextColorLocal,callback:function(e){t.btnTopBarTextColorLocal=e},expression:"btnTopBarTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.btnTopBarText}}),t._v(" "),s("h5",[t._v(t._s(t.$t("settings.style.advanced_colors.pressed")))]),t._v(" "),s("ColorInput",{attrs:{name:"btnPressedColor",fallback:t.previewTheme.colors.btnPressed,label:t.$t("settings.background")},model:{value:t.btnPressedColorLocal,callback:function(e){t.btnPressedColorLocal=e},expression:"btnPressedColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"btnPressedTextColor",fallback:t.previewTheme.colors.btnPressedText,label:t.$t("settings.text")},model:{value:t.btnPressedTextColorLocal,callback:function(e){t.btnPressedTextColorLocal=e},expression:"btnPressedTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.btnPressedText}}),t._v(" "),s("ColorInput",{attrs:{name:"btnPressedPanelTextColor",fallback:t.previewTheme.colors.btnPressedPanelText,label:t.$t("settings.style.advanced_colors.panel_header")},model:{value:t.btnPressedPanelTextColorLocal,callback:function(e){t.btnPressedPanelTextColorLocal=e},expression:"btnPressedPanelTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.btnPressedPanelText}}),t._v(" "),s("ColorInput",{attrs:{name:"btnPressedTopBarTextColor",fallback:t.previewTheme.colors.btnPressedTopBarText,label:t.$t("settings.style.advanced_colors.top_bar")},model:{value:t.btnPressedTopBarTextColorLocal,callback:function(e){t.btnPressedTopBarTextColorLocal=e},expression:"btnPressedTopBarTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.btnPressedTopBarText}}),t._v(" "),s("h5",[t._v(t._s(t.$t("settings.style.advanced_colors.disabled")))]),t._v(" "),s("ColorInput",{attrs:{name:"btnDisabledColor",fallback:t.previewTheme.colors.btnDisabled,label:t.$t("settings.background")},model:{value:t.btnDisabledColorLocal,callback:function(e){t.btnDisabledColorLocal=e},expression:"btnDisabledColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"btnDisabledTextColor",fallback:t.previewTheme.colors.btnDisabledText,label:t.$t("settings.text")},model:{value:t.btnDisabledTextColorLocal,callback:function(e){t.btnDisabledTextColorLocal=e},expression:"btnDisabledTextColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"btnDisabledPanelTextColor",fallback:t.previewTheme.colors.btnDisabledPanelText,label:t.$t("settings.style.advanced_colors.panel_header")},model:{value:t.btnDisabledPanelTextColorLocal,callback:function(e){t.btnDisabledPanelTextColorLocal=e},expression:"btnDisabledPanelTextColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"btnDisabledTopBarTextColor",fallback:t.previewTheme.colors.btnDisabledTopBarText,label:t.$t("settings.style.advanced_colors.top_bar")},model:{value:t.btnDisabledTopBarTextColorLocal,callback:function(e){t.btnDisabledTopBarTextColorLocal=e},expression:"btnDisabledTopBarTextColorLocal"}}),t._v(" "),s("h5",[t._v(t._s(t.$t("settings.style.advanced_colors.toggled")))]),t._v(" "),s("ColorInput",{attrs:{name:"btnToggledColor",fallback:t.previewTheme.colors.btnToggled,label:t.$t("settings.background")},model:{value:t.btnToggledColorLocal,callback:function(e){t.btnToggledColorLocal=e},expression:"btnToggledColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"btnToggledTextColor",fallback:t.previewTheme.colors.btnToggledText,label:t.$t("settings.text")},model:{value:t.btnToggledTextColorLocal,callback:function(e){t.btnToggledTextColorLocal=e},expression:"btnToggledTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.btnToggledText}}),t._v(" "),s("ColorInput",{attrs:{name:"btnToggledPanelTextColor",fallback:t.previewTheme.colors.btnToggledPanelText,label:t.$t("settings.style.advanced_colors.panel_header")},model:{value:t.btnToggledPanelTextColorLocal,callback:function(e){t.btnToggledPanelTextColorLocal=e},expression:"btnToggledPanelTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.btnToggledPanelText}}),t._v(" "),s("ColorInput",{attrs:{name:"btnToggledTopBarTextColor",fallback:t.previewTheme.colors.btnToggledTopBarText,label:t.$t("settings.style.advanced_colors.top_bar")},model:{value:t.btnToggledTopBarTextColorLocal,callback:function(e){t.btnToggledTopBarTextColorLocal=e},expression:"btnToggledTopBarTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.btnToggledTopBarText}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.tabs")))]),t._v(" "),s("ColorInput",{attrs:{name:"tabColor",fallback:t.previewTheme.colors.tab,label:t.$t("settings.background")},model:{value:t.tabColorLocal,callback:function(e){t.tabColorLocal=e},expression:"tabColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"tabTextColor",fallback:t.previewTheme.colors.tabText,label:t.$t("settings.text")},model:{value:t.tabTextColorLocal,callback:function(e){t.tabTextColorLocal=e},expression:"tabTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.tabText}}),t._v(" "),s("ColorInput",{attrs:{name:"tabActiveTextColor",fallback:t.previewTheme.colors.tabActiveText,label:t.$t("settings.text")},model:{value:t.tabActiveTextColorLocal,callback:function(e){t.tabActiveTextColorLocal=e},expression:"tabActiveTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.tabActiveText}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.borders")))]),t._v(" "),s("ColorInput",{attrs:{name:"borderColor",fallback:t.previewTheme.colors.border,label:t.$t("settings.style.common.color")},model:{value:t.borderColorLocal,callback:function(e){t.borderColorLocal=e},expression:"borderColorLocal"}}),t._v(" "),s("OpacityInput",{attrs:{name:"borderOpacity",fallback:t.previewTheme.opacity.border,disabled:"transparent"===t.borderColorLocal},model:{value:t.borderOpacityLocal,callback:function(e){t.borderOpacityLocal=e},expression:"borderOpacityLocal"}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.faint_text")))]),t._v(" "),s("ColorInput",{attrs:{name:"faintColor",fallback:t.previewTheme.colors.faint,label:t.$t("settings.text")},model:{value:t.faintColorLocal,callback:function(e){t.faintColorLocal=e},expression:"faintColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"faintLinkColor",fallback:t.previewTheme.colors.faintLink,label:t.$t("settings.links")},model:{value:t.faintLinkColorLocal,callback:function(e){t.faintLinkColorLocal=e},expression:"faintLinkColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"panelFaintColor",fallback:t.previewTheme.colors.panelFaint,label:t.$t("settings.style.advanced_colors.panel_header")},model:{value:t.panelFaintColorLocal,callback:function(e){t.panelFaintColorLocal=e},expression:"panelFaintColorLocal"}}),t._v(" "),s("OpacityInput",{attrs:{name:"faintOpacity",fallback:t.previewTheme.opacity.faint},model:{value:t.faintOpacityLocal,callback:function(e){t.faintOpacityLocal=e},expression:"faintOpacityLocal"}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.underlay")))]),t._v(" "),s("ColorInput",{attrs:{name:"underlay",label:t.$t("settings.style.advanced_colors.underlay"),fallback:t.previewTheme.colors.underlay},model:{value:t.underlayColorLocal,callback:function(e){t.underlayColorLocal=e},expression:"underlayColorLocal"}}),t._v(" "),s("OpacityInput",{attrs:{name:"underlayOpacity",fallback:t.previewTheme.opacity.underlay,disabled:"transparent"===t.underlayOpacityLocal},model:{value:t.underlayOpacityLocal,callback:function(e){t.underlayOpacityLocal=e},expression:"underlayOpacityLocal"}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.wallpaper")))]),t._v(" "),s("ColorInput",{attrs:{name:"wallpaper",label:t.$t("settings.style.advanced_colors.wallpaper"),fallback:t.previewTheme.colors.wallpaper},model:{value:t.wallpaperColorLocal,callback:function(e){t.wallpaperColorLocal=e},expression:"wallpaperColorLocal"}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.poll")))]),t._v(" "),s("ColorInput",{attrs:{name:"poll",label:t.$t("settings.background"),fallback:t.previewTheme.colors.poll},model:{value:t.pollColorLocal,callback:function(e){t.pollColorLocal=e},expression:"pollColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"pollText",label:t.$t("settings.text"),fallback:t.previewTheme.colors.pollText},model:{value:t.pollTextColorLocal,callback:function(e){t.pollTextColorLocal=e},expression:"pollTextColorLocal"}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.icons")))]),t._v(" "),s("ColorInput",{attrs:{name:"icon",label:t.$t("settings.style.advanced_colors.icons"),fallback:t.previewTheme.colors.icon},model:{value:t.iconColorLocal,callback:function(e){t.iconColorLocal=e},expression:"iconColorLocal"}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.highlight")))]),t._v(" "),s("ColorInput",{attrs:{name:"highlight",label:t.$t("settings.background"),fallback:t.previewTheme.colors.highlight},model:{value:t.highlightColorLocal,callback:function(e){t.highlightColorLocal=e},expression:"highlightColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"highlightText",label:t.$t("settings.text"),fallback:t.previewTheme.colors.highlightText},model:{value:t.highlightTextColorLocal,callback:function(e){t.highlightTextColorLocal=e},expression:"highlightTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.highlightText}}),t._v(" "),s("ColorInput",{attrs:{name:"highlightLink",label:t.$t("settings.links"),fallback:t.previewTheme.colors.highlightLink},model:{value:t.highlightLinkColorLocal,callback:function(e){t.highlightLinkColorLocal=e},expression:"highlightLinkColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.highlightLink}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.popover")))]),t._v(" "),s("ColorInput",{attrs:{name:"popover",label:t.$t("settings.background"),fallback:t.previewTheme.colors.popover},model:{value:t.popoverColorLocal,callback:function(e){t.popoverColorLocal=e},expression:"popoverColorLocal"}}),t._v(" "),s("OpacityInput",{attrs:{name:"popoverOpacity",fallback:t.previewTheme.opacity.popover,disabled:"transparent"===t.popoverOpacityLocal},model:{value:t.popoverOpacityLocal,callback:function(e){t.popoverOpacityLocal=e},expression:"popoverOpacityLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"popoverText",label:t.$t("settings.text"),fallback:t.previewTheme.colors.popoverText},model:{value:t.popoverTextColorLocal,callback:function(e){t.popoverTextColorLocal=e},expression:"popoverTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.popoverText}}),t._v(" "),s("ColorInput",{attrs:{name:"popoverLink",label:t.$t("settings.links"),fallback:t.previewTheme.colors.popoverLink},model:{value:t.popoverLinkColorLocal,callback:function(e){t.popoverLinkColorLocal=e},expression:"popoverLinkColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.popoverLink}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.selectedPost")))]),t._v(" "),s("ColorInput",{attrs:{name:"selectedPost",label:t.$t("settings.background"),fallback:t.previewTheme.colors.selectedPost},model:{value:t.selectedPostColorLocal,callback:function(e){t.selectedPostColorLocal=e},expression:"selectedPostColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"selectedPostText",label:t.$t("settings.text"),fallback:t.previewTheme.colors.selectedPostText},model:{value:t.selectedPostTextColorLocal,callback:function(e){t.selectedPostTextColorLocal=e},expression:"selectedPostTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.selectedPostText}}),t._v(" "),s("ColorInput",{attrs:{name:"selectedPostLink",label:t.$t("settings.links"),fallback:t.previewTheme.colors.selectedPostLink},model:{value:t.selectedPostLinkColorLocal,callback:function(e){t.selectedPostLinkColorLocal=e},expression:"selectedPostLinkColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.selectedPostLink}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.selectedMenu")))]),t._v(" "),s("ColorInput",{attrs:{name:"selectedMenu",label:t.$t("settings.background"),fallback:t.previewTheme.colors.selectedMenu},model:{value:t.selectedMenuColorLocal,callback:function(e){t.selectedMenuColorLocal=e},expression:"selectedMenuColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"selectedMenuText",label:t.$t("settings.text"),fallback:t.previewTheme.colors.selectedMenuText},model:{value:t.selectedMenuTextColorLocal,callback:function(e){t.selectedMenuTextColorLocal=e},expression:"selectedMenuTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.selectedMenuText}}),t._v(" "),s("ColorInput",{attrs:{name:"selectedMenuLink",label:t.$t("settings.links"),fallback:t.previewTheme.colors.selectedMenuLink},model:{value:t.selectedMenuLinkColorLocal,callback:function(e){t.selectedMenuLinkColorLocal=e},expression:"selectedMenuLinkColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.selectedMenuLink}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("chats.chats")))]),t._v(" "),s("ColorInput",{attrs:{name:"chatBgColor",fallback:t.previewTheme.colors.bg,label:t.$t("settings.background")},model:{value:t.chatBgColorLocal,callback:function(e){t.chatBgColorLocal=e},expression:"chatBgColorLocal"}}),t._v(" "),s("h5",[t._v(t._s(t.$t("settings.style.advanced_colors.chat.incoming")))]),t._v(" "),s("ColorInput",{attrs:{name:"chatMessageIncomingBgColor",fallback:t.previewTheme.colors.bg,label:t.$t("settings.background")},model:{value:t.chatMessageIncomingBgColorLocal,callback:function(e){t.chatMessageIncomingBgColorLocal=e},expression:"chatMessageIncomingBgColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"chatMessageIncomingTextColor",fallback:t.previewTheme.colors.text,label:t.$t("settings.text")},model:{value:t.chatMessageIncomingTextColorLocal,callback:function(e){t.chatMessageIncomingTextColorLocal=e},expression:"chatMessageIncomingTextColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"chatMessageIncomingLinkColor",fallback:t.previewTheme.colors.link,label:t.$t("settings.links")},model:{value:t.chatMessageIncomingLinkColorLocal,callback:function(e){t.chatMessageIncomingLinkColorLocal=e},expression:"chatMessageIncomingLinkColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"chatMessageIncomingBorderLinkColor",fallback:t.previewTheme.colors.fg,label:t.$t("settings.style.advanced_colors.chat.border")},model:{value:t.chatMessageIncomingBorderColorLocal,callback:function(e){t.chatMessageIncomingBorderColorLocal=e},expression:"chatMessageIncomingBorderColorLocal"}}),t._v(" "),s("h5",[t._v(t._s(t.$t("settings.style.advanced_colors.chat.outgoing")))]),t._v(" "),s("ColorInput",{attrs:{name:"chatMessageOutgoingBgColor",fallback:t.previewTheme.colors.bg,label:t.$t("settings.background")},model:{value:t.chatMessageOutgoingBgColorLocal,callback:function(e){t.chatMessageOutgoingBgColorLocal=e},expression:"chatMessageOutgoingBgColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"chatMessageOutgoingTextColor",fallback:t.previewTheme.colors.text,label:t.$t("settings.text")},model:{value:t.chatMessageOutgoingTextColorLocal,callback:function(e){t.chatMessageOutgoingTextColorLocal=e},expression:"chatMessageOutgoingTextColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"chatMessageOutgoingLinkColor",fallback:t.previewTheme.colors.link,label:t.$t("settings.links")},model:{value:t.chatMessageOutgoingLinkColorLocal,callback:function(e){t.chatMessageOutgoingLinkColorLocal=e},expression:"chatMessageOutgoingLinkColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"chatMessageOutgoingBorderLinkColor",fallback:t.previewTheme.colors.bg,label:t.$t("settings.style.advanced_colors.chat.border")},model:{value:t.chatMessageOutgoingBorderColorLocal,callback:function(e){t.chatMessageOutgoingBorderColorLocal=e},expression:"chatMessageOutgoingBorderColorLocal"}})],1)]),t._v(" "),s("div",{staticClass:"radius-container",attrs:{label:t.$t("settings.style.radii._tab_label")}},[s("div",{staticClass:"tab-header"},[s("p",[t._v(t._s(t.$t("settings.radii_help")))]),t._v(" "),s("button",{staticClass:"btn button-default",on:{click:t.clearRoundness}},[t._v("\n "+t._s(t.$t("settings.style.switcher.clear_all"))+"\n ")])]),t._v(" "),s("RangeInput",{attrs:{name:"btnRadius",label:t.$t("settings.btnRadius"),fallback:t.previewTheme.radii.btn,max:"16","hard-min":"0"},model:{value:t.btnRadiusLocal,callback:function(e){t.btnRadiusLocal=e},expression:"btnRadiusLocal"}}),t._v(" "),s("RangeInput",{attrs:{name:"inputRadius",label:t.$t("settings.inputRadius"),fallback:t.previewTheme.radii.input,max:"9","hard-min":"0"},model:{value:t.inputRadiusLocal,callback:function(e){t.inputRadiusLocal=e},expression:"inputRadiusLocal"}}),t._v(" "),s("RangeInput",{attrs:{name:"checkboxRadius",label:t.$t("settings.checkboxRadius"),fallback:t.previewTheme.radii.checkbox,max:"16","hard-min":"0"},model:{value:t.checkboxRadiusLocal,callback:function(e){t.checkboxRadiusLocal=e},expression:"checkboxRadiusLocal"}}),t._v(" "),s("RangeInput",{attrs:{name:"panelRadius",label:t.$t("settings.panelRadius"),fallback:t.previewTheme.radii.panel,max:"50","hard-min":"0"},model:{value:t.panelRadiusLocal,callback:function(e){t.panelRadiusLocal=e},expression:"panelRadiusLocal"}}),t._v(" "),s("RangeInput",{attrs:{name:"avatarRadius",label:t.$t("settings.avatarRadius"),fallback:t.previewTheme.radii.avatar,max:"28","hard-min":"0"},model:{value:t.avatarRadiusLocal,callback:function(e){t.avatarRadiusLocal=e},expression:"avatarRadiusLocal"}}),t._v(" "),s("RangeInput",{attrs:{name:"avatarAltRadius",label:t.$t("settings.avatarAltRadius"),fallback:t.previewTheme.radii.avatarAlt,max:"28","hard-min":"0"},model:{value:t.avatarAltRadiusLocal,callback:function(e){t.avatarAltRadiusLocal=e},expression:"avatarAltRadiusLocal"}}),t._v(" "),s("RangeInput",{attrs:{name:"attachmentRadius",label:t.$t("settings.attachmentRadius"),fallback:t.previewTheme.radii.attachment,max:"50","hard-min":"0"},model:{value:t.attachmentRadiusLocal,callback:function(e){t.attachmentRadiusLocal=e},expression:"attachmentRadiusLocal"}}),t._v(" "),s("RangeInput",{attrs:{name:"tooltipRadius",label:t.$t("settings.tooltipRadius"),fallback:t.previewTheme.radii.tooltip,max:"50","hard-min":"0"},model:{value:t.tooltipRadiusLocal,callback:function(e){t.tooltipRadiusLocal=e},expression:"tooltipRadiusLocal"}}),t._v(" "),s("RangeInput",{attrs:{name:"chatMessageRadius",label:t.$t("settings.chatMessageRadius"),fallback:t.previewTheme.radii.chatMessage||2,max:"50","hard-min":"0"},model:{value:t.chatMessageRadiusLocal,callback:function(e){t.chatMessageRadiusLocal=e},expression:"chatMessageRadiusLocal"}})],1),t._v(" "),s("div",{staticClass:"shadow-container",attrs:{label:t.$t("settings.style.shadows._tab_label")}},[s("div",{staticClass:"tab-header shadow-selector"},[s("div",{staticClass:"select-container"},[t._v("\n "+t._s(t.$t("settings.style.shadows.component"))+"\n "),s("Select",{staticClass:"shadow-switcher",attrs:{id:"shadow-switcher"},model:{value:t.shadowSelected,callback:function(e){t.shadowSelected=e},expression:"shadowSelected"}},t._l(t.shadowsAvailable,(function(e){return s("option",{key:e,domProps:{value:e}},[t._v("\n "+t._s(t.$t("settings.style.shadows.components."+e))+"\n ")])})),0)],1),t._v(" "),s("div",{staticClass:"override"},[s("label",{staticClass:"label",attrs:{for:"override"}},[t._v("\n "+t._s(t.$t("settings.style.shadows.override"))+"\n ")]),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.currentShadowOverriden,expression:"currentShadowOverriden"}],staticClass:"input-override",attrs:{id:"override",name:"override",type:"checkbox"},domProps:{checked:Array.isArray(t.currentShadowOverriden)?t._i(t.currentShadowOverriden,null)>-1:t.currentShadowOverriden},on:{change:function(e){var s=t.currentShadowOverriden,n=e.target,a=!!n.checked;if(Array.isArray(s)){var o=t._i(s,null);n.checked?o<0&&(t.currentShadowOverriden=s.concat([null])):o>-1&&(t.currentShadowOverriden=s.slice(0,o).concat(s.slice(o+1)))}else t.currentShadowOverriden=a}}}),t._v(" "),s("label",{staticClass:"checkbox-label",attrs:{for:"override"}})]),t._v(" "),s("button",{staticClass:"btn button-default",on:{click:t.clearShadows}},[t._v("\n "+t._s(t.$t("settings.style.switcher.clear_all"))+"\n ")])]),t._v(" "),s("ShadowControl",{attrs:{ready:!!t.currentShadowFallback,fallback:t.currentShadowFallback},model:{value:t.currentShadow,callback:function(e){t.currentShadow=e},expression:"currentShadow"}}),t._v(" "),"avatar"===t.shadowSelected||"avatarStatus"===t.shadowSelected?s("div",[s("i18n",{attrs:{path:"settings.style.shadows.filter_hint.always_drop_shadow",tag:"p"}},[s("code",[t._v("filter: drop-shadow()")])]),t._v(" "),s("p",[t._v(t._s(t.$t("settings.style.shadows.filter_hint.avatar_inset")))]),t._v(" "),s("i18n",{attrs:{path:"settings.style.shadows.filter_hint.drop_shadow_syntax",tag:"p"}},[s("code",[t._v("drop-shadow")]),t._v(" "),s("code",[t._v("spread-radius")]),t._v(" "),s("code",[t._v("inset")])]),t._v(" "),s("i18n",{attrs:{path:"settings.style.shadows.filter_hint.inset_classic",tag:"p"}},[s("code",[t._v("box-shadow")])]),t._v(" "),s("p",[t._v(t._s(t.$t("settings.style.shadows.filter_hint.spread_zero")))])],1):t._e()],1),t._v(" "),s("div",{staticClass:"fonts-container",attrs:{label:t.$t("settings.style.fonts._tab_label")}},[s("div",{staticClass:"tab-header"},[s("p",[t._v(t._s(t.$t("settings.style.fonts.help")))]),t._v(" "),s("button",{staticClass:"btn button-default",on:{click:t.clearFonts}},[t._v("\n "+t._s(t.$t("settings.style.switcher.clear_all"))+"\n ")])]),t._v(" "),s("FontControl",{attrs:{name:"ui",label:t.$t("settings.style.fonts.components.interface"),fallback:t.previewTheme.fonts.interface,"no-inherit":"1"},model:{value:t.fontsLocal.interface,callback:function(e){t.$set(t.fontsLocal,"interface",e)},expression:"fontsLocal.interface"}}),t._v(" "),s("FontControl",{attrs:{name:"input",label:t.$t("settings.style.fonts.components.input"),fallback:t.previewTheme.fonts.input},model:{value:t.fontsLocal.input,callback:function(e){t.$set(t.fontsLocal,"input",e)},expression:"fontsLocal.input"}}),t._v(" "),s("FontControl",{attrs:{name:"post",label:t.$t("settings.style.fonts.components.post"),fallback:t.previewTheme.fonts.post},model:{value:t.fontsLocal.post,callback:function(e){t.$set(t.fontsLocal,"post",e)},expression:"fontsLocal.post"}}),t._v(" "),s("FontControl",{attrs:{name:"postCode",label:t.$t("settings.style.fonts.components.postCode"),fallback:t.previewTheme.fonts.postCode},model:{value:t.fontsLocal.postCode,callback:function(e){t.$set(t.fontsLocal,"postCode",e)},expression:"fontsLocal.postCode"}})],1)])],1),t._v(" "),s("div",{staticClass:"apply-container"},[s("button",{staticClass:"btn button-default submit",attrs:{disabled:!t.themeValid},on:{click:t.setCustomTheme}},[t._v("\n "+t._s(t.$t("general.apply"))+"\n ")]),t._v(" "),s("button",{staticClass:"btn button-default",on:{click:t.clearAll}},[t._v("\n "+t._s(t.$t("settings.style.switcher.reset"))+"\n ")])])],1)}),[],!1,ts,null,null).exports;i.c.add(r.pb,r.lb,r.B,r.M,r.d,r.p,r.x,r.G);var ss={components:{TabSwitcher:n.a,DataImportExportTab:_,MutesAndBlocksTab:ct,NotificationsTab:dt,FilteringTab:Et,SecurityTab:Yt,ProfileTab:ve,GeneralTab:xe,VersionTab:ye,ThemeTab:es},computed:{isLoggedIn:function(){return!!this.$store.state.users.currentUser},open:function(){return"hidden"!==this.$store.state.interface.settingsModalState}},methods:{onOpen:function(){var t=this.$store.state.interface.settingsModalTargetTab;if(t){var e=this.$refs.tabSwitcher.$slots.default.findIndex((function(e){return e.data&&e.data.attrs["data-tab-name"]===t}));e>=0&&this.$refs.tabSwitcher.setTab(e)}this.$store.dispatch("clearSettingsModalTargetTab")}},mounted:function(){this.onOpen()},watch:{open:function(t){t&&this.onOpen()}}};var ns=function(t){s(616)},as=Object(c.a)(ss,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("tab-switcher",{ref:"tabSwitcher",staticClass:"settings_tab-switcher",attrs:{"side-tab-bar":!0,"scrollable-tabs":!0}},[s("div",{attrs:{label:t.$t("settings.general"),icon:"wrench","data-tab-name":"general"}},[s("GeneralTab")],1),t._v(" "),t.isLoggedIn?s("div",{attrs:{label:t.$t("settings.profile_tab"),icon:"user","data-tab-name":"profile"}},[s("ProfileTab")],1):t._e(),t._v(" "),t.isLoggedIn?s("div",{attrs:{label:t.$t("settings.security_tab"),icon:"lock","data-tab-name":"security"}},[s("SecurityTab")],1):t._e(),t._v(" "),s("div",{attrs:{label:t.$t("settings.filtering"),icon:"filter","data-tab-name":"filtering"}},[s("FilteringTab")],1),t._v(" "),s("div",{attrs:{label:t.$t("settings.theme"),icon:"paint-brush","data-tab-name":"theme"}},[s("ThemeTab")],1),t._v(" "),t.isLoggedIn?s("div",{attrs:{label:t.$t("settings.notifications"),icon:"bell","data-tab-name":"notifications"}},[s("NotificationsTab")],1):t._e(),t._v(" "),t.isLoggedIn?s("div",{attrs:{label:t.$t("settings.data_import_export_tab"),icon:"download","data-tab-name":"dataImportExport"}},[s("DataImportExportTab")],1):t._e(),t._v(" "),t.isLoggedIn?s("div",{attrs:{label:t.$t("settings.mutes_and_blocks"),fullHeight:!0,icon:"eye-slash","data-tab-name":"mutesAndBlocks"}},[s("MutesAndBlocksTab")],1):t._e(),t._v(" "),s("div",{attrs:{label:t.$t("settings.version.title"),icon:"info","data-tab-name":"version"}},[s("VersionTab")],1)])}),[],!1,ns,null,null);e.default=as.exports}}]); -//# sourceMappingURL=2.5f3ceb7bdf08fadacf00.js.map \ No newline at end of file diff --git a/priv/static/static/js/2.5f3ceb7bdf08fadacf00.js.map b/priv/static/static/js/2.5f3ceb7bdf08fadacf00.js.map deleted file mode 100644 index 06d872608..000000000 --- a/priv/static/static/js/2.5f3ceb7bdf08fadacf00.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///./src/components/settings_modal/settings_modal_content.scss?d424","webpack:///./src/components/settings_modal/settings_modal_content.scss","webpack:///./src/components/importer/importer.vue?7798","webpack:///./src/components/importer/importer.vue?6af6","webpack:///./src/components/exporter/exporter.vue?dea3","webpack:///./src/components/exporter/exporter.vue?cc2b","webpack:///./src/components/settings_modal/tabs/mutes_and_blocks_tab.scss?4d0c","webpack:///./src/components/settings_modal/tabs/mutes_and_blocks_tab.scss","webpack:///./src/components/autosuggest/autosuggest.vue?9908","webpack:///./src/components/autosuggest/autosuggest.vue?9383","webpack:///./src/components/block_card/block_card.vue?7ad7","webpack:///./src/components/block_card/block_card.vue?ddc8","webpack:///./src/components/mute_card/mute_card.vue?c72f","webpack:///./src/components/mute_card/mute_card.vue?1268","webpack:///./src/components/domain_mute_card/domain_mute_card.vue?a613","webpack:///./src/components/domain_mute_card/domain_mute_card.vue?c85e","webpack:///./src/components/selectable_list/selectable_list.vue?a6e3","webpack:///./src/components/selectable_list/selectable_list.vue?c2f8","webpack:///./src/components/settings_modal/helpers/modified_indicator.vue?c223","webpack:///./src/components/settings_modal/helpers/modified_indicator.vue?81f6","webpack:///./src/components/settings_modal/helpers/choice_setting.vue?44d1","webpack:///./src/components/settings_modal/helpers/choice_setting.vue?17b7","webpack:///./src/components/settings_modal/tabs/security_tab/mfa.vue?540b","webpack:///./src/components/settings_modal/tabs/security_tab/mfa.vue?cd9f","webpack:///./src/components/settings_modal/tabs/security_tab/mfa_backup_codes.vue?da3d","webpack:///./src/components/settings_modal/tabs/security_tab/mfa_backup_codes.vue?57b8","webpack:///./src/components/settings_modal/tabs/profile_tab.scss?588b","webpack:///./src/components/settings_modal/tabs/profile_tab.scss","webpack:///./src/components/image_cropper/image_cropper.vue?f169","webpack:///./src/components/image_cropper/image_cropper.vue?6235","webpack:///./src/components/settings_modal/tabs/theme_tab/theme_tab.scss?080d","webpack:///./src/components/settings_modal/tabs/theme_tab/theme_tab.scss","webpack:///./src/components/color_input/color_input.scss?c457","webpack:///./src/components/color_input/color_input.scss","webpack:///./src/components/color_input/color_input.vue?6a4c","webpack:///./src/components/color_input/color_input.vue?bb22","webpack:///./src/components/shadow_control/shadow_control.vue?bfd4","webpack:///./src/components/shadow_control/shadow_control.vue?78ef","webpack:///./src/components/font_control/font_control.vue?5f33","webpack:///./src/components/font_control/font_control.vue?bef4","webpack:///./src/components/contrast_ratio/contrast_ratio.vue?a340","webpack:///./src/components/contrast_ratio/contrast_ratio.vue?32fa","webpack:///./src/components/settings_modal/tabs/theme_tab/preview.vue?1ae8","webpack:///./src/components/settings_modal/tabs/theme_tab/preview.vue?ab81","webpack:///./src/components/importer/importer.js","webpack:///./src/components/importer/importer.vue","webpack:///./src/components/importer/importer.vue?11c1","webpack:///./src/components/exporter/exporter.js","webpack:///./src/components/exporter/exporter.vue","webpack:///./src/components/exporter/exporter.vue?8ccc","webpack:///./src/components/settings_modal/tabs/data_import_export_tab.js","webpack:///./src/components/settings_modal/tabs/data_import_export_tab.vue","webpack:///./src/components/settings_modal/tabs/data_import_export_tab.vue?eb14","webpack:///./src/components/autosuggest/autosuggest.js","webpack:///./src/components/autosuggest/autosuggest.vue","webpack:///./src/components/autosuggest/autosuggest.vue?b400","webpack:///./src/components/block_card/block_card.js","webpack:///./src/components/block_card/block_card.vue","webpack:///./src/components/block_card/block_card.vue?c0ce","webpack:///./src/components/mute_card/mute_card.js","webpack:///./src/components/mute_card/mute_card.vue","webpack:///./src/components/mute_card/mute_card.vue?1fcb","webpack:///./src/components/domain_mute_card/domain_mute_card.js","webpack:///./src/components/domain_mute_card/domain_mute_card.vue","webpack:///./src/components/domain_mute_card/domain_mute_card.vue?bd8a","webpack:///./src/components/selectable_list/selectable_list.js","webpack:///./src/components/selectable_list/selectable_list.vue","webpack:///./src/components/selectable_list/selectable_list.vue?012d","webpack:///./src/hocs/with_subscription/with_subscription.js","webpack:///./src/components/settings_modal/tabs/mutes_and_blocks_tab.js","webpack:///./src/components/settings_modal/tabs/mutes_and_blocks_tab.vue","webpack:///./src/components/settings_modal/tabs/mutes_and_blocks_tab.vue?ef8c","webpack:///./src/components/settings_modal/tabs/notifications_tab.js","webpack:///./src/components/settings_modal/tabs/notifications_tab.vue","webpack:///./src/components/settings_modal/tabs/notifications_tab.vue?79e8","webpack:///src/components/settings_modal/helpers/modified_indicator.vue","webpack:///./src/components/settings_modal/helpers/modified_indicator.vue","webpack:///./src/components/settings_modal/helpers/modified_indicator.vue?e06d","webpack:///./src/components/settings_modal/helpers/boolean_setting.js","webpack:///./src/components/settings_modal/helpers/boolean_setting.vue","webpack:///./src/components/settings_modal/helpers/boolean_setting.vue?03b6","webpack:///./src/components/settings_modal/helpers/choice_setting.js","webpack:///./src/components/settings_modal/helpers/choice_setting.vue","webpack:///./src/components/settings_modal/helpers/choice_setting.vue?bf0a","webpack:///./src/components/settings_modal/helpers/shared_computed_object.js","webpack:///./src/components/settings_modal/tabs/filtering_tab.js","webpack:///./src/components/settings_modal/tabs/filtering_tab.vue","webpack:///./src/components/settings_modal/tabs/filtering_tab.vue?8eaf","webpack:///./src/components/settings_modal/tabs/security_tab/mfa_backup_codes.js","webpack:///./src/components/settings_modal/tabs/security_tab/mfa_backup_codes.vue","webpack:///./src/components/settings_modal/tabs/security_tab/mfa_backup_codes.vue?198f","webpack:///./src/components/settings_modal/tabs/security_tab/confirm.js","webpack:///./src/components/settings_modal/tabs/security_tab/confirm.vue","webpack:///./src/components/settings_modal/tabs/security_tab/confirm.vue?14b1","webpack:///./src/components/settings_modal/tabs/security_tab/mfa_totp.js","webpack:///./src/components/settings_modal/tabs/security_tab/mfa.js","webpack:///./src/components/settings_modal/tabs/security_tab/mfa_totp.vue","webpack:///./src/components/settings_modal/tabs/security_tab/mfa_totp.vue?5e8d","webpack:///./src/components/settings_modal/tabs/security_tab/mfa.vue","webpack:///./src/components/settings_modal/tabs/security_tab/mfa.vue?ab3a","webpack:///./src/components/settings_modal/tabs/security_tab/security_tab.js","webpack:///./src/components/settings_modal/tabs/security_tab/security_tab.vue","webpack:///./src/components/settings_modal/tabs/security_tab/security_tab.vue?2be5","webpack:///./src/components/image_cropper/image_cropper.js","webpack:///./src/components/image_cropper/image_cropper.vue","webpack:///./src/components/image_cropper/image_cropper.vue?f953","webpack:///./src/components/settings_modal/tabs/profile_tab.js","webpack:///./src/components/settings_modal/tabs/profile_tab.vue","webpack:///./src/components/settings_modal/tabs/profile_tab.vue?cec7","webpack:///src/components/interface_language_switcher/interface_language_switcher.vue","webpack:///./src/components/interface_language_switcher/interface_language_switcher.vue","webpack:///./src/components/interface_language_switcher/interface_language_switcher.vue?f146","webpack:///./src/components/settings_modal/tabs/general_tab.js","webpack:///./src/components/settings_modal/tabs/general_tab.vue","webpack:///./src/components/settings_modal/tabs/general_tab.vue?f786","webpack:///./src/components/settings_modal/tabs/version_tab.js","webpack:///./src/services/version/version.service.js","webpack:///./src/components/settings_modal/tabs/version_tab.vue","webpack:///./src/components/settings_modal/tabs/version_tab.vue?7cbe","webpack:///src/components/color_input/color_input.vue","webpack:///./src/components/color_input/color_input.vue","webpack:///./src/components/color_input/color_input.vue?3d5b","webpack:///./src/components/range_input/range_input.vue","webpack:///src/components/range_input/range_input.vue","webpack:///./src/components/range_input/range_input.vue?202a","webpack:///src/components/opacity_input/opacity_input.vue","webpack:///./src/components/opacity_input/opacity_input.vue","webpack:///./src/components/opacity_input/opacity_input.vue?0078","webpack:///./src/components/shadow_control/shadow_control.js","webpack:///./src/components/shadow_control/shadow_control.vue","webpack:///./src/components/shadow_control/shadow_control.vue?1399","webpack:///./src/components/font_control/font_control.js","webpack:///./src/components/font_control/font_control.vue","webpack:///./src/components/font_control/font_control.vue?b0ba","webpack:///src/components/contrast_ratio/contrast_ratio.vue","webpack:///./src/components/contrast_ratio/contrast_ratio.vue","webpack:///./src/components/contrast_ratio/contrast_ratio.vue?dc36","webpack:///src/components/settings_modal/tabs/theme_tab/preview.vue","webpack:///./src/components/settings_modal/tabs/theme_tab/preview.vue","webpack:///./src/components/settings_modal/tabs/theme_tab/preview.vue?f344","webpack:///./src/components/settings_modal/tabs/theme_tab/theme_tab.js","webpack:///./src/components/settings_modal/tabs/theme_tab/theme_tab.vue","webpack:///./src/components/settings_modal/tabs/theme_tab/theme_tab.vue?8594","webpack:///./src/components/settings_modal/settings_modal_content.js","webpack:///./src/components/settings_modal/settings_modal_content.vue","webpack:///./src/components/settings_modal/settings_modal_content.vue?277c"],"names":["content","module","i","locals","exports","add","default","push","library","faCircleNotch","faTimes","Importer","props","submitHandler","type","Function","required","submitButtonLabel","String","this","$t","successMessage","errorMessage","data","file","error","success","submitting","methods","change","$refs","input","files","submit","dismiss","then","__vue_styles__","context","_vm","_h","$createElement","_c","_self","staticClass","ref","attrs","on","_v","_s","_e","Exporter","getContent","filename","exportButtonLabel","processingMessage","processing","process","fileToDownload","document","createElement","setAttribute","encodeURIComponent","style","display","body","appendChild","click","removeChild","setTimeout","DataImportExportTab","activeTab","newDomainToMute","created","$store","dispatch","components","Checkbox","computed","mapState","backendInteractor","state","api","user","users","currentUser","getFollowsContent","exportFriends","id","generateExportableUsersContent","getBlocksContent","fetchBlocks","getMutesContent","fetchMutes","importFollows","status","Error","importBlocks","importMutes","map","is_local","screen_name","location","hostname","join","query","filter","placeholder","term","timeout","results","resultsVisible","filtered","watch","val","fetchResults","clearTimeout","onInputClick","onClickOutside","directives","name","rawName","value","expression","domProps","$event","target","composing","length","_l","item","_t","BlockCard","progress","getters","findUser","userId","relationship","blocked","blocking","BasicUserCard","unblockUser","blockUser","MuteCard","muted","muting","unmuteUser","muteUser","DomainMuteCard","ProgressButton","domainMutes","includes","domain","unmuteDomain","muteDomain","scopedSlots","_u","key","fn","proxy","SelectableList","List","items","Array","getKey","selected","allKeys","filteredSelected","indexOf","allSelected","noneSelected","someSelected","isSelected","toggle","checked","splice","toggleAll","slice","class","withSubscription","fetch","select","childPropName","additionalPropNames","WrappedComponent","Object","keys","getComponentProps","v","concat","Vue","component","loading","fetchedData","$props","refresh","isEmpty","fetchData","render","h","$listeners","$scopedSlots","children","entries","$slots","slot","BlockList","get","MuteList","DomainMuteList","MutesAndBlocks","TabSwitcher","Autosuggest","knownDomains","instance","activateTab","tabName","filterUnblockedUsers","userIds","reject","filterUnMutedUsers","queryUserIds","blockUsers","ids","unblockUsers","muteUsers","unmuteUsers","filterUnMutedDomains","urls","url","queryKnownDomains","Promise","resolve","toLowerCase","unmuteDomains","domains","row","NotificationsTab","notificationSettings","notification_settings","updateNotificationSettings","settings","model","callback","$$v","$set","ModifiedIndicator","pathDefault","path","split","firstSegment","rest","$parent","undefined","defaultState","isChanged","update","e","disabled","Select","option","label","SharedComputedObject","configDefaultState","defaultConfig","reduce","acc","mergedConfig","set","useStreamingApi","console","FilteringTab","muteWordsStringLocal","muteWords","replyVisibilityOptions","mode","BooleanSetting","ChoiceSetting","muteWordsString","word","notificationVisibility","handler","deep","replyVisibility","backupCodes","inProgress","codes","ready","displayTitle","code","Confirm","confirm","$emit","cancel","currentPassword","deactivate","isActivated","totp","doActivate","cancelDeactivate","doDeactivate","confirmDeactivate","mfaDisableOTP","password","res","Mfa","available","enabled","setupState","setupOTPState","getNewCodes","otpSettings","provisioning_uri","otpConfirmToken","readyInit","RecoveryCodes","VueQrcode","canSetupOTP","setupInProgress","backupCodesPrepared","setupOTPInProgress","completedOTP","prepareOTP","confirmOTP","confirmNewBackupCodes","activateOTP","fetchBackupCodes","generateMfaBackupCodes","getBackupCodes","confirmBackupCodes","cancelBackupCodes","setupOTP","mfaSetupOTP","doConfirmOTP","mfaConfirmOTP","token","completeSetup","fetchSettings","cancelSetup","settingsMFA","result","mounted","width","SecurityTab","newEmail","changeEmailError","changeEmailPassword","changedEmail","deletingAccount","deleteAccountConfirmPasswordInput","deleteAccountError","changePasswordInputs","changedPassword","changePasswordError","pleromaBackend","oauthTokens","tokens","oauthToken","appName","app_name","validUntil","Date","valid_until","toLocaleDateString","localeService","internalToBrowserLocale","$i18n","locale","confirmDelete","deleteAccount","$router","changePassword","params","newPassword","newPasswordConfirmation","logout","changeEmail","email","replace","revokeToken","window","t","ImageCropper","trigger","Element","cropperOptions","aspectRatio","autoCropArea","viewMode","movable","zoomable","guides","mimes","saveButtonLabel","saveWithoutCroppingButtonlabel","cancelButtonLabel","cropper","dataUrl","saveText","saveWithoutCroppingText","cancelText","destroy","cropping","pickImage","createCropper","Cropper","img","getTriggerDOM","querySelector","readFile","fileInput","reader","FileReader","onload","readAsDataURL","addEventListener","beforeDestroy","removeEventListener","stopPropagation","faPlus","ProfileTab","newName","newBio","unescape","description","newLocked","locked","newNoRichText","no_rich_text","newDefaultScope","default_scope","newFields","fields","field","hideFollows","hide_follows","hideFollowers","hide_followers","hideFollowsCount","hide_follows_count","hideFollowersCount","hide_followers_count","showRole","show_role","role","discoverable","bot","allowFollowingMove","allow_following_move","pickAvatarBtnVisible","bannerUploading","backgroundUploading","banner","bannerPreview","background","backgroundPreview","ScopeSelector","EmojiInput","emojiUserSuggestor","suggestor","emoji","customEmoji","store","emojiSuggestor","userSuggestor","fieldsLimits","maxFields","defaultAvatar","server","defaultBanner","isDefaultAvatar","baseAvatar","profile_image_url","isDefaultBanner","baseBanner","cover_photo","isDefaultBackground","background_image","avatarImgSrc","src","profile_image_url_original","bannerImgSrc","updateProfile","note","display_name","fields_attributes","el","merge","commit","changeVis","visibility","addField","deleteField","index","event","$delete","uploadFile","size","filesize","fileSizeFormatService","fileSizeFormat","allowedsize","messageKey","messageArgs","num","filesizeunit","unit","allowedsizeunit","level","resetAvatar","submitAvatar","resetBanner","submitBanner","resetBackground","submitBackground","that","updateAvatar","avatar","updateProfileImages","displayUploadError","getCroppedCanvas","toBlob","message","_","languages","language","getLanguageName","languageName","charAt","toLocaleUpperCase","browserLocale","lang","faGlobe","GeneralTab","subjectLineOptions","loopSilentAvailable","getOwnPropertyDescriptor","HTMLVideoElement","prototype","HTMLMediaElement","InterfaceLanguageSwitcher","postFormats","postContentOptions","format","instanceSpecificPanelPresent","showInstanceSpecificPanel","instanceWallpaperUsed","instanceShoutboxPresent","shoutAvailable","streaming","hideNsfw","loopVideo","VersionTab","backendVersion","frontendVersion","frontendVersionLink","backendVersionLink","versionString","matches","match","fallback","Boolean","showOptionalTickbox","present","validColor","transparentColor","computedColor","startsWith","backgroundColor","max","hardMax","min","hardMin","step","faChevronDown","faChevronUp","toModel","object","x","y","blur","spread","inset","color","alpha","selectedId","cValue","ColorInput","OpacityInput","del","Math","moveUp","moveDn","beforeUpdate","anyShadows","anyShadowsFallback","currentFallback","moveUpValid","moveDnValid","usingFallback","rgb","hex2rgb","boxShadow","getCssShadow","shadow","isArray","_i","$$a","$$el","$$c","$$i","lValue","availableOptions","noInherit","options","dValue","family","isCustom","preset","custom","large","contrast","hint","hint_18pt","aaa","aa","laaa","laa","staticStyle","v1OnlyNames","themeImporter","newImporter","validator","importValidator","onImport","onImportFailure","themeExporter","newExporter","getExportedObject","exportedTheme","availableStyles","selectedTheme","theme","themeWarning","tempImportFile","engineVersion","previewShadows","previewColors","previewRadii","previewFonts","shadowsInvalid","colorsInvalid","radiiInvalid","keepColor","keepShadows","keepOpacity","keepRoundness","keepFonts","SLOT_INHERITANCE","OPACITIES","shadowSelected","shadowsLocal","fontsLocal","btnRadiusLocal","inputRadiusLocal","checkboxRadiusLocal","panelRadiusLocal","avatarRadiusLocal","avatarAltRadiusLocal","attachmentRadiusLocal","tooltipRadiusLocal","chatMessageRadiusLocal","self","getThemes","promises","all","k","themes","themesComplete","loadThemeFromLocalStorage","shadowsAvailable","themeWarningHelp","pre","origin","themeEngineVersion","noActionsPossible","CURRENT_VERSION","selectedVersion","currentColors","currentOpacity","currentRadii","btn","checkbox","panel","avatarAlt","tooltip","attachment","chatMessage","preview","composePreset","previewTheme","colors","opacity","radii","shadows","fonts","previewContrast","bg","colorsConverted","ratios","slotIsBaseText","textColor","layer","variant","opacitySlot","getOpacitySlot","textColors","layers","getLayers","textColorKey","newKey","toUpperCase","getContrastRatioLayers","ratio","text","toPrecision","warn","previewRules","rules","values","DEFAULT_SHADOWS","sort","currentShadowOverriden","currentShadow","currentShadowFallback","assign","themeValid","saveEverything","source","_pleroma_theme_version","RangeInput","ContrastRatio","ShadowControl","FontControl","Preview","loadTheme","fileVersion","forceUseSource","dismissWarning","version","snapshotEngineVersion","versionsMatch","sourceSnapshotMismatch","forcedSourceLoad","normalizeLocalState","forceLoadLocalStorage","forceLoad","forceSnapshot","err","confirmLoadSource","customTheme","customThemeSource","themeData","setCustomTheme","updatePreviewColorsAndShadows","generateColors","generateShadows","mod","importTheme","importData","exportTheme","exportData","parsed","forceSource","clearAll","clearV1","$data","endsWith","forEach","clearRoundness","clearOpacity","clearShadows","clearFonts","colors2to3","fg","fgColorLocal","rgb2hex","textColorLocal","Set","hex","Number","isNaN","shadows2to3","generateRadii","getOwnPropertyNames","generateFonts","fontsInvalid","find","s","log","bgColorLocal","linkColorLocal","cRedColorLocal","cGreenColorLocal","cBlueColorLocal","cOrangeColorLocal","bgOpacityLocal","bgText","link","accentColorLocal","accent","bgLink","fgText","fgTextColorLocal","fgLink","fgLinkColorLocal","bgCRed","bgCBlue","bgCGreen","bgCOrange","postLinkColorLocal","postLink","cGreen","postGreentextColorLocal","postGreentext","alertError","alertErrorColorLocal","alertErrorText","alertErrorTextColorLocal","alertWarning","alertWarningColorLocal","alertWarningText","alertWarningTextColorLocal","alertNeutral","alertNeutralColorLocal","alertNeutralText","alertNeutralTextColorLocal","alert","alertOpacityLocal","badgeNotification","badgeNotificationColorLocal","badgeNotificationText","badgeNotificationTextColorLocal","panelColorLocal","panelOpacityLocal","panelText","panelTextColorLocal","panelLink","panelLinkColorLocal","topBar","topBarColorLocal","topBarText","topBarTextColorLocal","topBarLink","topBarLinkColorLocal","inputColorLocal","inputOpacityLocal","inputText","inputTextColorLocal","btnColorLocal","btnOpacityLocal","btnText","btnTextColorLocal","btnPanelText","btnPanelTextColorLocal","btnTopBarText","btnTopBarTextColorLocal","btnPressed","btnPressedColorLocal","btnPressedText","btnPressedTextColorLocal","btnPressedPanelText","btnPressedPanelTextColorLocal","btnPressedTopBarText","btnPressedTopBarTextColorLocal","btnDisabled","btnDisabledColorLocal","btnDisabledText","btnDisabledTextColorLocal","btnDisabledPanelText","btnDisabledPanelTextColorLocal","btnDisabledTopBarText","btnDisabledTopBarTextColorLocal","btnToggled","btnToggledColorLocal","btnToggledText","btnToggledTextColorLocal","btnToggledPanelText","btnToggledPanelTextColorLocal","btnToggledTopBarText","btnToggledTopBarTextColorLocal","tab","tabColorLocal","tabText","tabTextColorLocal","tabActiveText","tabActiveTextColorLocal","border","borderColorLocal","borderOpacityLocal","faint","faintColorLocal","faintLink","faintLinkColorLocal","panelFaint","panelFaintColorLocal","faintOpacityLocal","underlay","underlayColorLocal","underlayOpacityLocal","wallpaper","wallpaperColorLocal","poll","pollColorLocal","pollText","pollTextColorLocal","icon","iconColorLocal","highlight","highlightColorLocal","highlightText","highlightTextColorLocal","highlightLink","highlightLinkColorLocal","popover","popoverColorLocal","popoverOpacityLocal","popoverText","popoverTextColorLocal","popoverLink","popoverLinkColorLocal","selectedPost","selectedPostColorLocal","selectedPostText","selectedPostTextColorLocal","selectedPostLink","selectedPostLinkColorLocal","selectedMenu","selectedMenuColorLocal","selectedMenuText","selectedMenuTextColorLocal","selectedMenuLink","selectedMenuLinkColorLocal","chatBgColorLocal","chatMessageIncomingBgColorLocal","chatMessageIncomingTextColorLocal","chatMessageIncomingLinkColorLocal","chatMessageIncomingBorderColorLocal","chatMessageOutgoingBgColorLocal","chatMessageOutgoingTextColorLocal","chatMessageOutgoingLinkColorLocal","chatMessageOutgoingBorderColorLocal","interface","post","postCode","faWrench","faUser","faFilter","faPaintBrush","faBell","faDownload","faEyeSlash","faInfo","SettingsModalContent","MutesAndBlocksTab","ThemeTab","isLoggedIn","open","settingsModalState","onOpen","targetTab","settingsModalTargetTab","tabIndex","tabSwitcher","findIndex","elm","setTab"],"mappings":"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","file":"static/js/2.5f3ceb7bdf08fadacf00.js","sourcesContent":["// style-loader: Adds some css to the DOM by adding a \n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./modified_indicator.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!../../../../node_modules/vue-loader/lib/selector?type=script&index=0!./modified_indicator.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../../node_modules/vue-loader/lib/selector?type=script&index=0!./modified_indicator.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-be0aa34e\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../../node_modules/vue-loader/lib/selector?type=template&index=0!./modified_indicator.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.changed)?_c('span',{staticClass:\"ModifiedIndicator\"},[_c('Popover',{attrs:{\"trigger\":\"hover\"},scopedSlots:_vm._u([{key:\"trigger\",fn:function(){return [_vm._v(\"\\n  \\n \"),_c('FAIcon',{attrs:{\"icon\":\"wrench\",\"aria-label\":_vm.$t('settings.setting_changed')}})]},proxy:true},{key:\"content\",fn:function(){return [_c('div',{staticClass:\"modified-tooltip\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.setting_changed'))+\"\\n \")])]},proxy:true}],null,false,1710729471)})],1):_vm._e()}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import { get, set } from 'lodash'\nimport Checkbox from 'src/components/checkbox/checkbox.vue'\nimport ModifiedIndicator from './modified_indicator.vue'\nexport default {\n components: {\n Checkbox,\n ModifiedIndicator\n },\n props: [\n 'path',\n 'disabled'\n ],\n computed: {\n pathDefault () {\n const [firstSegment, ...rest] = this.path.split('.')\n return [firstSegment + 'DefaultValue', ...rest].join('.')\n },\n state () {\n const value = get(this.$parent, this.path)\n if (value === undefined) {\n return this.defaultState\n } else {\n return value\n }\n },\n defaultState () {\n return get(this.$parent, this.pathDefault)\n },\n isChanged () {\n return this.state !== this.defaultState\n }\n },\n methods: {\n update (e) {\n set(this.$parent, this.path, e)\n }\n }\n}\n","/* script */\nexport * from \"!!babel-loader!./boolean_setting.js\"\nimport __vue_script__ from \"!!babel-loader!./boolean_setting.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-5036f1bc\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../../node_modules/vue-loader/lib/selector?type=template&index=0!./boolean_setting.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('label',{staticClass:\"BooleanSetting\"},[_c('Checkbox',{attrs:{\"checked\":_vm.state,\"disabled\":_vm.disabled},on:{\"change\":_vm.update}},[(!!_vm.$slots.default)?_c('span',{staticClass:\"label\"},[_vm._t(\"default\")],2):_vm._e(),_vm._v(\" \"),_c('ModifiedIndicator',{attrs:{\"changed\":_vm.isChanged}})],1)],1)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import { get, set } from 'lodash'\nimport Select from 'src/components/select/select.vue'\nimport ModifiedIndicator from './modified_indicator.vue'\nexport default {\n components: {\n Select,\n ModifiedIndicator\n },\n props: [\n 'path',\n 'disabled',\n 'options'\n ],\n computed: {\n pathDefault () {\n const [firstSegment, ...rest] = this.path.split('.')\n return [firstSegment + 'DefaultValue', ...rest].join('.')\n },\n state () {\n const value = get(this.$parent, this.path)\n if (value === undefined) {\n return this.defaultState\n } else {\n return value\n }\n },\n defaultState () {\n return get(this.$parent, this.pathDefault)\n },\n isChanged () {\n return this.state !== this.defaultState\n }\n },\n methods: {\n update (e) {\n set(this.$parent, this.path, e)\n }\n }\n}\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./choice_setting.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./choice_setting.js\"\nimport __vue_script__ from \"!!babel-loader!./choice_setting.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-4ff93bac\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../../node_modules/vue-loader/lib/selector?type=template&index=0!./choice_setting.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('label',{staticClass:\"ChoiceSetting\"},[_vm._t(\"default\"),_vm._v(\" \"),_c('Select',{attrs:{\"value\":_vm.state,\"disabled\":_vm.disabled},on:{\"change\":_vm.update}},_vm._l((_vm.options),function(option){return _c('option',{key:option.key,domProps:{\"value\":option.value}},[_vm._v(\"\\n \"+_vm._s(option.label)+\"\\n \"+_vm._s(option.value === _vm.defaultState ? _vm.$t('settings.instance_default_simple') : '')+\"\\n \")])}),0),_vm._v(\" \"),_c('ModifiedIndicator',{attrs:{\"changed\":_vm.isChanged}})],2)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import { defaultState as configDefaultState } from 'src/modules/config.js'\n\nconst SharedComputedObject = () => ({\n user () {\n return this.$store.state.users.currentUser\n },\n // Getting values for default properties\n ...Object.keys(configDefaultState)\n .map(key => [\n key + 'DefaultValue',\n function () {\n return this.$store.getters.defaultConfig[key]\n }\n ])\n .reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {}),\n // Generating computed values for vuex properties\n ...Object.keys(configDefaultState)\n .map(key => [key, {\n get () { return this.$store.getters.mergedConfig[key] },\n set (value) {\n this.$store.dispatch('setOption', { name: key, value })\n }\n }])\n .reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {}),\n // Special cases (need to transform values or perform actions first)\n useStreamingApi: {\n get () { return this.$store.getters.mergedConfig.useStreamingApi },\n set (value) {\n const promise = value\n ? this.$store.dispatch('enableMastoSockets')\n : this.$store.dispatch('disableMastoSockets')\n\n promise.then(() => {\n this.$store.dispatch('setOption', { name: 'useStreamingApi', value })\n }).catch((e) => {\n console.error('Failed starting MastoAPI Streaming socket', e)\n this.$store.dispatch('disableMastoSockets')\n this.$store.dispatch('setOption', { name: 'useStreamingApi', value: false })\n })\n }\n }\n})\n\nexport default SharedComputedObject\n","import { filter, trim } from 'lodash'\nimport BooleanSetting from '../helpers/boolean_setting.vue'\nimport ChoiceSetting from '../helpers/choice_setting.vue'\n\nimport SharedComputedObject from '../helpers/shared_computed_object.js'\n\nconst FilteringTab = {\n data () {\n return {\n muteWordsStringLocal: this.$store.getters.mergedConfig.muteWords.join('\\n'),\n replyVisibilityOptions: ['all', 'following', 'self'].map(mode => ({\n key: mode,\n value: mode,\n label: this.$t(`settings.reply_visibility_${mode}`)\n }))\n }\n },\n components: {\n BooleanSetting,\n ChoiceSetting\n },\n computed: {\n ...SharedComputedObject(),\n muteWordsString: {\n get () {\n return this.muteWordsStringLocal\n },\n set (value) {\n this.muteWordsStringLocal = value\n this.$store.dispatch('setOption', {\n name: 'muteWords',\n value: filter(value.split('\\n'), (word) => trim(word).length > 0)\n })\n }\n }\n },\n // Updating nested properties\n watch: {\n notificationVisibility: {\n handler (value) {\n this.$store.dispatch('setOption', {\n name: 'notificationVisibility',\n value: this.$store.getters.mergedConfig.notificationVisibility\n })\n },\n deep: true\n },\n replyVisibility () {\n this.$store.dispatch('queueFlushAll')\n }\n }\n}\n\nexport default FilteringTab\n","/* script */\nexport * from \"!!babel-loader!./filtering_tab.js\"\nimport __vue_script__ from \"!!babel-loader!./filtering_tab.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-6f76ed3c\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../../node_modules/vue-loader/lib/selector?type=template&index=0!./filtering_tab.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"label\":_vm.$t('settings.filtering')}},[_c('div',{staticClass:\"setting-item\"},[_c('div',{staticClass:\"select-multiple\"},[_c('span',{staticClass:\"label\"},[_vm._v(_vm._s(_vm.$t('settings.notification_visibility')))]),_vm._v(\" \"),_c('ul',{staticClass:\"option-list\"},[_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"notificationVisibility.likes\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.notification_visibility_likes'))+\"\\n \")])],1),_vm._v(\" \"),_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"notificationVisibility.repeats\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.notification_visibility_repeats'))+\"\\n \")])],1),_vm._v(\" \"),_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"notificationVisibility.follows\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.notification_visibility_follows'))+\"\\n \")])],1),_vm._v(\" \"),_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"notificationVisibility.mentions\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.notification_visibility_mentions'))+\"\\n \")])],1),_vm._v(\" \"),_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"notificationVisibility.moves\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.notification_visibility_moves'))+\"\\n \")])],1),_vm._v(\" \"),_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"notificationVisibility.emojiReactions\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.notification_visibility_emoji_reactions'))+\"\\n \")])],1)])]),_vm._v(\" \"),_c('ChoiceSetting',{attrs:{\"id\":\"replyVisibility\",\"path\":\"replyVisibility\",\"options\":_vm.replyVisibilityOptions}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.replies_in_timeline'))+\"\\n \")]),_vm._v(\" \"),_c('div',[_c('BooleanSetting',{attrs:{\"path\":\"hidePostStats\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.hide_post_stats'))+\"\\n \")])],1),_vm._v(\" \"),_c('div',[_c('BooleanSetting',{attrs:{\"path\":\"hideUserStats\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.hide_user_stats'))+\"\\n \")])],1)],1),_vm._v(\" \"),_c('div',{staticClass:\"setting-item\"},[_c('div',[_c('p',[_vm._v(_vm._s(_vm.$t('settings.filtering_explanation')))]),_vm._v(\" \"),_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.muteWordsString),expression:\"muteWordsString\"}],staticClass:\"resize-height\",attrs:{\"id\":\"muteWords\"},domProps:{\"value\":(_vm.muteWordsString)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.muteWordsString=$event.target.value}}})]),_vm._v(\" \"),_c('div',[_c('BooleanSetting',{attrs:{\"path\":\"hideFilteredStatuses\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.hide_filtered_statuses'))+\"\\n \")])],1)])])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","export default {\n props: {\n backupCodes: {\n type: Object,\n default: () => ({\n inProgress: false,\n codes: []\n })\n }\n },\n data: () => ({}),\n computed: {\n inProgress () { return this.backupCodes.inProgress },\n ready () { return this.backupCodes.codes.length > 0 },\n displayTitle () { return this.inProgress || this.ready }\n }\n}\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./mfa_backup_codes.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./mfa_backup_codes.js\"\nimport __vue_script__ from \"!!babel-loader!./mfa_backup_codes.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-1284fe74\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../../../node_modules/vue-loader/lib/selector?type=template&index=0!./mfa_backup_codes.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"mfa-backup-codes\"},[(_vm.displayTitle)?_c('h4',[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.mfa.recovery_codes'))+\"\\n \")]):_vm._e(),_vm._v(\" \"),(_vm.inProgress)?_c('i',[_vm._v(_vm._s(_vm.$t('settings.mfa.waiting_a_recovery_codes')))]):_vm._e(),_vm._v(\" \"),(_vm.ready)?[_c('p',{staticClass:\"alert warning\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.mfa.recovery_codes_warning'))+\"\\n \")]),_vm._v(\" \"),_c('ul',{staticClass:\"backup-codes\"},_vm._l((_vm.backupCodes.codes),function(code){return _c('li',{key:code},[_vm._v(\"\\n \"+_vm._s(code)+\"\\n \")])}),0)]:_vm._e()],2)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","const Confirm = {\n props: ['disabled'],\n data: () => ({}),\n methods: {\n confirm () { this.$emit('confirm') },\n cancel () { this.$emit('cancel') }\n }\n}\nexport default Confirm\n","/* script */\nexport * from \"!!babel-loader!./confirm.js\"\nimport __vue_script__ from \"!!babel-loader!./confirm.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-232a09eb\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../../../node_modules/vue-loader/lib/selector?type=template&index=0!./confirm.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_vm._t(\"default\"),_vm._v(\" \"),_c('button',{staticClass:\"btn button-default\",attrs:{\"disabled\":_vm.disabled},on:{\"click\":_vm.confirm}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('general.confirm'))+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn button-default\",attrs:{\"disabled\":_vm.disabled},on:{\"click\":_vm.cancel}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('general.cancel'))+\"\\n \")])],2)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import Confirm from './confirm.vue'\nimport { mapState } from 'vuex'\n\nexport default {\n props: ['settings'],\n data: () => ({\n error: false,\n currentPassword: '',\n deactivate: false,\n inProgress: false // progress peform request to disable otp method\n }),\n components: {\n 'confirm': Confirm\n },\n computed: {\n isActivated () {\n return this.settings.totp\n },\n ...mapState({\n backendInteractor: (state) => state.api.backendInteractor\n })\n },\n methods: {\n doActivate () {\n this.$emit('activate')\n },\n cancelDeactivate () { this.deactivate = false },\n doDeactivate () {\n this.error = null\n this.deactivate = true\n },\n confirmDeactivate () { // confirm deactivate TOTP method\n this.error = null\n this.inProgress = true\n this.backendInteractor.mfaDisableOTP({\n password: this.currentPassword\n })\n .then((res) => {\n this.inProgress = false\n if (res.error) {\n this.error = res.error\n return\n }\n this.deactivate = false\n this.$emit('deactivate')\n })\n }\n }\n}\n","import RecoveryCodes from './mfa_backup_codes.vue'\nimport TOTP from './mfa_totp.vue'\nimport Confirm from './confirm.vue'\nimport VueQrcode from '@chenfengyuan/vue-qrcode'\nimport { mapState } from 'vuex'\n\nconst Mfa = {\n data: () => ({\n settings: { // current settings of MFA\n available: false,\n enabled: false,\n totp: false\n },\n setupState: { // setup mfa\n state: '', // state of setup. '' -> 'getBackupCodes' -> 'setupOTP' -> 'complete'\n setupOTPState: '' // state of setup otp. '' -> 'prepare' -> 'confirm' -> 'complete'\n },\n backupCodes: {\n getNewCodes: false,\n inProgress: false, // progress of fetch codes\n codes: []\n },\n otpSettings: { // pre-setup setting of OTP. secret key, qrcode url.\n provisioning_uri: '',\n key: ''\n },\n currentPassword: null,\n otpConfirmToken: null,\n error: null,\n readyInit: false\n }),\n components: {\n 'recovery-codes': RecoveryCodes,\n 'totp-item': TOTP,\n 'qrcode': VueQrcode,\n 'confirm': Confirm\n },\n computed: {\n canSetupOTP () {\n return (\n (this.setupInProgress && this.backupCodesPrepared) ||\n this.settings.enabled\n ) && !this.settings.totp && !this.setupOTPInProgress\n },\n setupInProgress () {\n return this.setupState.state !== '' && this.setupState.state !== 'complete'\n },\n setupOTPInProgress () {\n return this.setupState.state === 'setupOTP' && !this.completedOTP\n },\n prepareOTP () {\n return this.setupState.setupOTPState === 'prepare'\n },\n confirmOTP () {\n return this.setupState.setupOTPState === 'confirm'\n },\n completedOTP () {\n return this.setupState.setupOTPState === 'completed'\n },\n backupCodesPrepared () {\n return !this.backupCodes.inProgress && this.backupCodes.codes.length > 0\n },\n confirmNewBackupCodes () {\n return this.backupCodes.getNewCodes\n },\n ...mapState({\n backendInteractor: (state) => state.api.backendInteractor\n })\n },\n\n methods: {\n activateOTP () {\n if (!this.settings.enabled) {\n this.setupState.state = 'getBackupcodes'\n this.fetchBackupCodes()\n }\n },\n fetchBackupCodes () {\n this.backupCodes.inProgress = true\n this.backupCodes.codes = []\n\n return this.backendInteractor.generateMfaBackupCodes()\n .then((res) => {\n this.backupCodes.codes = res.codes\n this.backupCodes.inProgress = false\n })\n },\n getBackupCodes () { // get a new backup codes\n this.backupCodes.getNewCodes = true\n },\n confirmBackupCodes () { // confirm getting new backup codes\n this.fetchBackupCodes().then((res) => {\n this.backupCodes.getNewCodes = false\n })\n },\n cancelBackupCodes () { // cancel confirm form of new backup codes\n this.backupCodes.getNewCodes = false\n },\n\n // Setup OTP\n setupOTP () { // prepare setup OTP\n this.setupState.state = 'setupOTP'\n this.setupState.setupOTPState = 'prepare'\n this.backendInteractor.mfaSetupOTP()\n .then((res) => {\n this.otpSettings = res\n this.setupState.setupOTPState = 'confirm'\n })\n },\n doConfirmOTP () { // handler confirm enable OTP\n this.error = null\n this.backendInteractor.mfaConfirmOTP({\n token: this.otpConfirmToken,\n password: this.currentPassword\n })\n .then((res) => {\n if (res.error) {\n this.error = res.error\n return\n }\n this.completeSetup()\n })\n },\n\n completeSetup () {\n this.setupState.setupOTPState = 'complete'\n this.setupState.state = 'complete'\n this.currentPassword = null\n this.error = null\n this.fetchSettings()\n },\n cancelSetup () { // cancel setup\n this.setupState.setupOTPState = ''\n this.setupState.state = ''\n this.currentPassword = null\n this.error = null\n },\n // end Setup OTP\n\n // fetch settings from server\n async fetchSettings () {\n let result = await this.backendInteractor.settingsMFA()\n if (result.error) return\n this.settings = result.settings\n this.settings.available = true\n return result\n }\n },\n mounted () {\n this.fetchSettings().then(() => {\n this.readyInit = true\n })\n }\n}\nexport default Mfa\n","/* script */\nexport * from \"!!babel-loader!./mfa_totp.js\"\nimport __vue_script__ from \"!!babel-loader!./mfa_totp.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-5466d3a1\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../../../node_modules/vue-loader/lib/selector?type=template&index=0!./mfa_totp.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:\"method-item\"},[_c('strong',[_vm._v(_vm._s(_vm.$t('settings.mfa.otp')))]),_vm._v(\" \"),(!_vm.isActivated)?_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.doActivate}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('general.enable'))+\"\\n \")]):_vm._e(),_vm._v(\" \"),(_vm.isActivated)?_c('button',{staticClass:\"btn button-default\",attrs:{\"disabled\":_vm.deactivate},on:{\"click\":_vm.doDeactivate}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('general.disable'))+\"\\n \")]):_vm._e()]),_vm._v(\" \"),(_vm.deactivate)?_c('confirm',{attrs:{\"disabled\":_vm.inProgress},on:{\"confirm\":_vm.confirmDeactivate,\"cancel\":_vm.cancelDeactivate}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.enter_current_password_to_confirm'))+\":\\n \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.currentPassword),expression:\"currentPassword\"}],attrs:{\"type\":\"password\"},domProps:{\"value\":(_vm.currentPassword)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.currentPassword=$event.target.value}}})]):_vm._e(),_vm._v(\" \"),(_vm.error)?_c('div',{staticClass:\"alert error\"},[_vm._v(\"\\n \"+_vm._s(_vm.error)+\"\\n \")]):_vm._e()],1)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./mfa.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./mfa.js\"\nimport __vue_script__ from \"!!babel-loader!./mfa.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-c62074fa\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../../../node_modules/vue-loader/lib/selector?type=template&index=0!./mfa.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.readyInit && _vm.settings.available)?_c('div',{staticClass:\"setting-item mfa-settings\"},[_c('div',{staticClass:\"mfa-heading\"},[_c('h2',[_vm._v(_vm._s(_vm.$t('settings.mfa.title')))])]),_vm._v(\" \"),_c('div',[(!_vm.setupInProgress)?_c('div',{staticClass:\"setting-item\"},[_c('h3',[_vm._v(_vm._s(_vm.$t('settings.mfa.authentication_methods')))]),_vm._v(\" \"),_c('totp-item',{attrs:{\"settings\":_vm.settings},on:{\"deactivate\":_vm.fetchSettings,\"activate\":_vm.activateOTP}}),_vm._v(\" \"),_c('br'),_vm._v(\" \"),(_vm.settings.enabled)?_c('div',[(!_vm.confirmNewBackupCodes)?_c('recovery-codes',{attrs:{\"backup-codes\":_vm.backupCodes}}):_vm._e(),_vm._v(\" \"),(!_vm.confirmNewBackupCodes)?_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.getBackupCodes}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.mfa.generate_new_recovery_codes'))+\"\\n \")]):_vm._e(),_vm._v(\" \"),(_vm.confirmNewBackupCodes)?_c('div',[_c('confirm',{attrs:{\"disabled\":_vm.backupCodes.inProgress},on:{\"confirm\":_vm.confirmBackupCodes,\"cancel\":_vm.cancelBackupCodes}},[_c('p',{staticClass:\"warning\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.mfa.warning_of_generate_new_codes'))+\"\\n \")])])],1):_vm._e()],1):_vm._e()],1):_vm._e(),_vm._v(\" \"),(_vm.setupInProgress)?_c('div',[_c('h3',[_vm._v(_vm._s(_vm.$t('settings.mfa.setup_otp')))]),_vm._v(\" \"),(!_vm.setupOTPInProgress)?_c('recovery-codes',{attrs:{\"backup-codes\":_vm.backupCodes}}):_vm._e(),_vm._v(\" \"),(_vm.canSetupOTP)?_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.cancelSetup}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('general.cancel'))+\"\\n \")]):_vm._e(),_vm._v(\" \"),(_vm.canSetupOTP)?_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.setupOTP}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.mfa.setup_otp'))+\"\\n \")]):_vm._e(),_vm._v(\" \"),(_vm.setupOTPInProgress)?[(_vm.prepareOTP)?_c('i',[_vm._v(_vm._s(_vm.$t('settings.mfa.wait_pre_setup_otp')))]):_vm._e(),_vm._v(\" \"),(_vm.confirmOTP)?_c('div',[_c('div',{staticClass:\"setup-otp\"},[_c('div',{staticClass:\"qr-code\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.mfa.scan.title')))]),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.$t('settings.mfa.scan.desc')))]),_vm._v(\" \"),_c('qrcode',{attrs:{\"value\":_vm.otpSettings.provisioning_uri,\"options\":{ width: 200 }}}),_vm._v(\" \"),_c('p',[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.mfa.scan.secret_code'))+\":\\n \"+_vm._s(_vm.otpSettings.key)+\"\\n \")])],1),_vm._v(\" \"),_c('div',{staticClass:\"verify\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('general.verify')))]),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.$t('settings.mfa.verify.desc')))]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.otpConfirmToken),expression:\"otpConfirmToken\"}],attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.otpConfirmToken)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.otpConfirmToken=$event.target.value}}}),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.$t('settings.enter_current_password_to_confirm'))+\":\")]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.currentPassword),expression:\"currentPassword\"}],attrs:{\"type\":\"password\"},domProps:{\"value\":(_vm.currentPassword)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.currentPassword=$event.target.value}}}),_vm._v(\" \"),_c('div',{staticClass:\"confirm-otp-actions\"},[_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.doConfirmOTP}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.mfa.confirm_and_enable'))+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.cancelSetup}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('general.cancel'))+\"\\n \")])]),_vm._v(\" \"),(_vm.error)?_c('div',{staticClass:\"alert error\"},[_vm._v(\"\\n \"+_vm._s(_vm.error)+\"\\n \")]):_vm._e()])])]):_vm._e()]:_vm._e()],2):_vm._e()])]):_vm._e()}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import ProgressButton from 'src/components/progress_button/progress_button.vue'\nimport Checkbox from 'src/components/checkbox/checkbox.vue'\nimport Mfa from './mfa.vue'\nimport localeService from 'src/services/locale/locale.service.js'\n\nconst SecurityTab = {\n data () {\n return {\n newEmail: '',\n changeEmailError: false,\n changeEmailPassword: '',\n changedEmail: false,\n deletingAccount: false,\n deleteAccountConfirmPasswordInput: '',\n deleteAccountError: false,\n changePasswordInputs: [ '', '', '' ],\n changedPassword: false,\n changePasswordError: false\n }\n },\n created () {\n this.$store.dispatch('fetchTokens')\n },\n components: {\n ProgressButton,\n Mfa,\n Checkbox\n },\n computed: {\n user () {\n return this.$store.state.users.currentUser\n },\n pleromaBackend () {\n return this.$store.state.instance.pleromaBackend\n },\n oauthTokens () {\n return this.$store.state.oauthTokens.tokens.map(oauthToken => {\n return {\n id: oauthToken.id,\n appName: oauthToken.app_name,\n validUntil: new Date(oauthToken.valid_until).toLocaleDateString(localeService.internalToBrowserLocale(this.$i18n.locale))\n }\n })\n }\n },\n methods: {\n confirmDelete () {\n this.deletingAccount = true\n },\n deleteAccount () {\n this.$store.state.api.backendInteractor.deleteAccount({ password: this.deleteAccountConfirmPasswordInput })\n .then((res) => {\n if (res.status === 'success') {\n this.$store.dispatch('logout')\n this.$router.push({ name: 'root' })\n } else {\n this.deleteAccountError = res.error\n }\n })\n },\n changePassword () {\n const params = {\n password: this.changePasswordInputs[0],\n newPassword: this.changePasswordInputs[1],\n newPasswordConfirmation: this.changePasswordInputs[2]\n }\n this.$store.state.api.backendInteractor.changePassword(params)\n .then((res) => {\n if (res.status === 'success') {\n this.changedPassword = true\n this.changePasswordError = false\n this.logout()\n } else {\n this.changedPassword = false\n this.changePasswordError = res.error\n }\n })\n },\n changeEmail () {\n const params = {\n email: this.newEmail,\n password: this.changeEmailPassword\n }\n this.$store.state.api.backendInteractor.changeEmail(params)\n .then((res) => {\n if (res.status === 'success') {\n this.changedEmail = true\n this.changeEmailError = false\n } else {\n this.changedEmail = false\n this.changeEmailError = res.error\n }\n })\n },\n logout () {\n this.$store.dispatch('logout')\n this.$router.replace('/')\n },\n revokeToken (id) {\n if (window.confirm(`${this.$i18n.t('settings.revoke_token')}?`)) {\n this.$store.dispatch('revokeToken', id)\n }\n }\n }\n}\n\nexport default SecurityTab\n","/* script */\nexport * from \"!!babel-loader!./security_tab.js\"\nimport __vue_script__ from \"!!babel-loader!./security_tab.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-dc4ec0ae\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../../../node_modules/vue-loader/lib/selector?type=template&index=0!./security_tab.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"label\":_vm.$t('settings.security_tab')}},[_c('div',{staticClass:\"setting-item\"},[_c('h2',[_vm._v(_vm._s(_vm.$t('settings.change_email')))]),_vm._v(\" \"),_c('div',[_c('p',[_vm._v(_vm._s(_vm.$t('settings.new_email')))]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newEmail),expression:\"newEmail\"}],attrs:{\"type\":\"email\",\"autocomplete\":\"email\"},domProps:{\"value\":(_vm.newEmail)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.newEmail=$event.target.value}}})]),_vm._v(\" \"),_c('div',[_c('p',[_vm._v(_vm._s(_vm.$t('settings.current_password')))]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.changeEmailPassword),expression:\"changeEmailPassword\"}],attrs:{\"type\":\"password\",\"autocomplete\":\"current-password\"},domProps:{\"value\":(_vm.changeEmailPassword)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.changeEmailPassword=$event.target.value}}})]),_vm._v(\" \"),_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.changeEmail}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.save'))+\"\\n \")]),_vm._v(\" \"),(_vm.changedEmail)?_c('p',[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.changed_email'))+\"\\n \")]):_vm._e(),_vm._v(\" \"),(_vm.changeEmailError !== false)?[_c('p',[_vm._v(_vm._s(_vm.$t('settings.change_email_error')))]),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.changeEmailError))])]:_vm._e()],2),_vm._v(\" \"),_c('div',{staticClass:\"setting-item\"},[_c('h2',[_vm._v(_vm._s(_vm.$t('settings.change_password')))]),_vm._v(\" \"),_c('div',[_c('p',[_vm._v(_vm._s(_vm.$t('settings.current_password')))]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.changePasswordInputs[0]),expression:\"changePasswordInputs[0]\"}],attrs:{\"type\":\"password\"},domProps:{\"value\":(_vm.changePasswordInputs[0])},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.changePasswordInputs, 0, $event.target.value)}}})]),_vm._v(\" \"),_c('div',[_c('p',[_vm._v(_vm._s(_vm.$t('settings.new_password')))]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.changePasswordInputs[1]),expression:\"changePasswordInputs[1]\"}],attrs:{\"type\":\"password\"},domProps:{\"value\":(_vm.changePasswordInputs[1])},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.changePasswordInputs, 1, $event.target.value)}}})]),_vm._v(\" \"),_c('div',[_c('p',[_vm._v(_vm._s(_vm.$t('settings.confirm_new_password')))]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.changePasswordInputs[2]),expression:\"changePasswordInputs[2]\"}],attrs:{\"type\":\"password\"},domProps:{\"value\":(_vm.changePasswordInputs[2])},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.changePasswordInputs, 2, $event.target.value)}}})]),_vm._v(\" \"),_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.changePassword}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.save'))+\"\\n \")]),_vm._v(\" \"),(_vm.changedPassword)?_c('p',[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.changed_password'))+\"\\n \")]):(_vm.changePasswordError !== false)?_c('p',[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.change_password_error'))+\"\\n \")]):_vm._e(),_vm._v(\" \"),(_vm.changePasswordError)?_c('p',[_vm._v(\"\\n \"+_vm._s(_vm.changePasswordError)+\"\\n \")]):_vm._e()]),_vm._v(\" \"),_c('div',{staticClass:\"setting-item\"},[_c('h2',[_vm._v(_vm._s(_vm.$t('settings.oauth_tokens')))]),_vm._v(\" \"),_c('table',{staticClass:\"oauth-tokens\"},[_c('thead',[_c('tr',[_c('th',[_vm._v(_vm._s(_vm.$t('settings.app_name')))]),_vm._v(\" \"),_c('th',[_vm._v(_vm._s(_vm.$t('settings.valid_until')))]),_vm._v(\" \"),_c('th')])]),_vm._v(\" \"),_c('tbody',_vm._l((_vm.oauthTokens),function(oauthToken){return _c('tr',{key:oauthToken.id},[_c('td',[_vm._v(_vm._s(oauthToken.appName))]),_vm._v(\" \"),_c('td',[_vm._v(_vm._s(oauthToken.validUntil))]),_vm._v(\" \"),_c('td',{staticClass:\"actions\"},[_c('button',{staticClass:\"btn button-default\",on:{\"click\":function($event){return _vm.revokeToken(oauthToken.id)}}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.revoke_token'))+\"\\n \")])])])}),0)])]),_vm._v(\" \"),_c('mfa'),_vm._v(\" \"),_c('div',{staticClass:\"setting-item\"},[_c('h2',[_vm._v(_vm._s(_vm.$t('settings.delete_account')))]),_vm._v(\" \"),(!_vm.deletingAccount)?_c('p',[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.delete_account_description'))+\"\\n \")]):_vm._e(),_vm._v(\" \"),(_vm.deletingAccount)?_c('div',[_c('p',[_vm._v(_vm._s(_vm.$t('settings.delete_account_instructions')))]),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.$t('login.password')))]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.deleteAccountConfirmPasswordInput),expression:\"deleteAccountConfirmPasswordInput\"}],attrs:{\"type\":\"password\"},domProps:{\"value\":(_vm.deleteAccountConfirmPasswordInput)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.deleteAccountConfirmPasswordInput=$event.target.value}}}),_vm._v(\" \"),_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.deleteAccount}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.delete_account'))+\"\\n \")])]):_vm._e(),_vm._v(\" \"),(_vm.deleteAccountError !== false)?_c('p',[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.delete_account_error'))+\"\\n \")]):_vm._e(),_vm._v(\" \"),(_vm.deleteAccountError)?_c('p',[_vm._v(\"\\n \"+_vm._s(_vm.deleteAccountError)+\"\\n \")]):_vm._e(),_vm._v(\" \"),(!_vm.deletingAccount)?_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.confirmDelete}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.save'))+\"\\n \")]):_vm._e()])],1)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import Cropper from 'cropperjs'\nimport 'cropperjs/dist/cropper.css'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faCircleNotch\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faCircleNotch\n)\n\nconst ImageCropper = {\n props: {\n trigger: {\n type: [String, window.Element],\n required: true\n },\n submitHandler: {\n type: Function,\n required: true\n },\n cropperOptions: {\n type: Object,\n default () {\n return {\n aspectRatio: 1,\n autoCropArea: 1,\n viewMode: 1,\n movable: false,\n zoomable: false,\n guides: false\n }\n }\n },\n mimes: {\n type: String,\n default: 'image/png, image/gif, image/jpeg, image/bmp, image/x-icon'\n },\n saveButtonLabel: {\n type: String\n },\n saveWithoutCroppingButtonlabel: {\n type: String\n },\n cancelButtonLabel: {\n type: String\n }\n },\n data () {\n return {\n cropper: undefined,\n dataUrl: undefined,\n filename: undefined,\n submitting: false\n }\n },\n computed: {\n saveText () {\n return this.saveButtonLabel || this.$t('image_cropper.save')\n },\n saveWithoutCroppingText () {\n return this.saveWithoutCroppingButtonlabel || this.$t('image_cropper.save_without_cropping')\n },\n cancelText () {\n return this.cancelButtonLabel || this.$t('image_cropper.cancel')\n }\n },\n methods: {\n destroy () {\n if (this.cropper) {\n this.cropper.destroy()\n }\n this.$refs.input.value = ''\n this.dataUrl = undefined\n this.$emit('close')\n },\n submit (cropping = true) {\n this.submitting = true\n this.submitHandler(cropping && this.cropper, this.file)\n .then(() => this.destroy())\n .finally(() => {\n this.submitting = false\n })\n },\n pickImage () {\n this.$refs.input.click()\n },\n createCropper () {\n this.cropper = new Cropper(this.$refs.img, this.cropperOptions)\n },\n getTriggerDOM () {\n return typeof this.trigger === 'object' ? this.trigger : document.querySelector(this.trigger)\n },\n readFile () {\n const fileInput = this.$refs.input\n if (fileInput.files != null && fileInput.files[0] != null) {\n this.file = fileInput.files[0]\n let reader = new window.FileReader()\n reader.onload = (e) => {\n this.dataUrl = e.target.result\n this.$emit('open')\n }\n reader.readAsDataURL(this.file)\n this.$emit('changed', this.file, reader)\n }\n }\n },\n mounted () {\n // listen for click event on trigger\n const trigger = this.getTriggerDOM()\n if (!trigger) {\n this.$emit('error', 'No image make trigger found.', 'user')\n } else {\n trigger.addEventListener('click', this.pickImage)\n }\n // listen for input file changes\n const fileInput = this.$refs.input\n fileInput.addEventListener('change', this.readFile)\n },\n beforeDestroy: function () {\n // remove the event listeners\n const trigger = this.getTriggerDOM()\n if (trigger) {\n trigger.removeEventListener('click', this.pickImage)\n }\n const fileInput = this.$refs.input\n fileInput.removeEventListener('change', this.readFile)\n }\n}\n\nexport default ImageCropper\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./image_cropper.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./image_cropper.js\"\nimport __vue_script__ from \"!!babel-loader!./image_cropper.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-0bac39f0\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./image_cropper.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"image-cropper\"},[(_vm.dataUrl)?_c('div',[_c('div',{staticClass:\"image-cropper-image-container\"},[_c('img',{ref:\"img\",attrs:{\"src\":_vm.dataUrl,\"alt\":\"\"},on:{\"load\":function($event){$event.stopPropagation();return _vm.createCropper($event)}}})]),_vm._v(\" \"),_c('div',{staticClass:\"image-cropper-buttons-wrapper\"},[_c('button',{staticClass:\"button-default btn\",attrs:{\"type\":\"button\",\"disabled\":_vm.submitting},domProps:{\"textContent\":_vm._s(_vm.saveText)},on:{\"click\":function($event){return _vm.submit()}}}),_vm._v(\" \"),_c('button',{staticClass:\"button-default btn\",attrs:{\"type\":\"button\",\"disabled\":_vm.submitting},domProps:{\"textContent\":_vm._s(_vm.cancelText)},on:{\"click\":_vm.destroy}}),_vm._v(\" \"),_c('button',{staticClass:\"button-default btn\",attrs:{\"type\":\"button\",\"disabled\":_vm.submitting},domProps:{\"textContent\":_vm._s(_vm.saveWithoutCroppingText)},on:{\"click\":function($event){return _vm.submit(false)}}}),_vm._v(\" \"),(_vm.submitting)?_c('FAIcon',{attrs:{\"spin\":\"\",\"icon\":\"circle-notch\"}}):_vm._e()],1)]):_vm._e(),_vm._v(\" \"),_c('input',{ref:\"input\",staticClass:\"image-cropper-img-input\",attrs:{\"type\":\"file\",\"accept\":_vm.mimes}})])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import unescape from 'lodash/unescape'\nimport merge from 'lodash/merge'\nimport ImageCropper from 'src/components/image_cropper/image_cropper.vue'\nimport ScopeSelector from 'src/components/scope_selector/scope_selector.vue'\nimport fileSizeFormatService from 'src/components/../services/file_size_format/file_size_format.js'\nimport ProgressButton from 'src/components/progress_button/progress_button.vue'\nimport EmojiInput from 'src/components/emoji_input/emoji_input.vue'\nimport suggestor from 'src/components/emoji_input/suggestor.js'\nimport Autosuggest from 'src/components/autosuggest/autosuggest.vue'\nimport Checkbox from 'src/components/checkbox/checkbox.vue'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faTimes,\n faPlus,\n faCircleNotch\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faTimes,\n faPlus,\n faCircleNotch\n)\n\nconst ProfileTab = {\n data () {\n return {\n newName: this.$store.state.users.currentUser.name,\n newBio: unescape(this.$store.state.users.currentUser.description),\n newLocked: this.$store.state.users.currentUser.locked,\n newNoRichText: this.$store.state.users.currentUser.no_rich_text,\n newDefaultScope: this.$store.state.users.currentUser.default_scope,\n newFields: this.$store.state.users.currentUser.fields.map(field => ({ name: field.name, value: field.value })),\n hideFollows: this.$store.state.users.currentUser.hide_follows,\n hideFollowers: this.$store.state.users.currentUser.hide_followers,\n hideFollowsCount: this.$store.state.users.currentUser.hide_follows_count,\n hideFollowersCount: this.$store.state.users.currentUser.hide_followers_count,\n showRole: this.$store.state.users.currentUser.show_role,\n role: this.$store.state.users.currentUser.role,\n discoverable: this.$store.state.users.currentUser.discoverable,\n bot: this.$store.state.users.currentUser.bot,\n allowFollowingMove: this.$store.state.users.currentUser.allow_following_move,\n pickAvatarBtnVisible: true,\n bannerUploading: false,\n backgroundUploading: false,\n banner: null,\n bannerPreview: null,\n background: null,\n backgroundPreview: null\n }\n },\n components: {\n ScopeSelector,\n ImageCropper,\n EmojiInput,\n Autosuggest,\n ProgressButton,\n Checkbox\n },\n computed: {\n user () {\n return this.$store.state.users.currentUser\n },\n emojiUserSuggestor () {\n return suggestor({\n emoji: [\n ...this.$store.state.instance.emoji,\n ...this.$store.state.instance.customEmoji\n ],\n store: this.$store\n })\n },\n emojiSuggestor () {\n return suggestor({ emoji: [\n ...this.$store.state.instance.emoji,\n ...this.$store.state.instance.customEmoji\n ] })\n },\n userSuggestor () {\n return suggestor({ store: this.$store })\n },\n fieldsLimits () {\n return this.$store.state.instance.fieldsLimits\n },\n maxFields () {\n return this.fieldsLimits ? this.fieldsLimits.maxFields : 0\n },\n defaultAvatar () {\n return this.$store.state.instance.server + this.$store.state.instance.defaultAvatar\n },\n defaultBanner () {\n return this.$store.state.instance.server + this.$store.state.instance.defaultBanner\n },\n isDefaultAvatar () {\n const baseAvatar = this.$store.state.instance.defaultAvatar\n return !(this.$store.state.users.currentUser.profile_image_url) ||\n this.$store.state.users.currentUser.profile_image_url.includes(baseAvatar)\n },\n isDefaultBanner () {\n const baseBanner = this.$store.state.instance.defaultBanner\n return !(this.$store.state.users.currentUser.cover_photo) ||\n this.$store.state.users.currentUser.cover_photo.includes(baseBanner)\n },\n isDefaultBackground () {\n return !(this.$store.state.users.currentUser.background_image)\n },\n avatarImgSrc () {\n const src = this.$store.state.users.currentUser.profile_image_url_original\n return (!src) ? this.defaultAvatar : src\n },\n bannerImgSrc () {\n const src = this.$store.state.users.currentUser.cover_photo\n return (!src) ? this.defaultBanner : src\n }\n },\n methods: {\n updateProfile () {\n this.$store.state.api.backendInteractor\n .updateProfile({\n params: {\n note: this.newBio,\n locked: this.newLocked,\n // Backend notation.\n /* eslint-disable camelcase */\n display_name: this.newName,\n fields_attributes: this.newFields.filter(el => el != null),\n default_scope: this.newDefaultScope,\n no_rich_text: this.newNoRichText,\n hide_follows: this.hideFollows,\n hide_followers: this.hideFollowers,\n discoverable: this.discoverable,\n bot: this.bot,\n allow_following_move: this.allowFollowingMove,\n hide_follows_count: this.hideFollowsCount,\n hide_followers_count: this.hideFollowersCount,\n show_role: this.showRole\n /* eslint-enable camelcase */\n } }).then((user) => {\n this.newFields.splice(user.fields.length)\n merge(this.newFields, user.fields)\n this.$store.commit('addNewUsers', [user])\n this.$store.commit('setCurrentUser', user)\n })\n },\n changeVis (visibility) {\n this.newDefaultScope = visibility\n },\n addField () {\n if (this.newFields.length < this.maxFields) {\n this.newFields.push({ name: '', value: '' })\n return true\n }\n return false\n },\n deleteField (index, event) {\n this.$delete(this.newFields, index)\n },\n uploadFile (slot, e) {\n const file = e.target.files[0]\n if (!file) { return }\n if (file.size > this.$store.state.instance[slot + 'limit']) {\n const filesize = fileSizeFormatService.fileSizeFormat(file.size)\n const allowedsize = fileSizeFormatService.fileSizeFormat(this.$store.state.instance[slot + 'limit'])\n this.$store.dispatch('pushGlobalNotice', {\n messageKey: 'upload.error.message',\n messageArgs: [\n this.$t('upload.error.file_too_big', {\n filesize: filesize.num,\n filesizeunit: filesize.unit,\n allowedsize: allowedsize.num,\n allowedsizeunit: allowedsize.unit\n })\n ],\n level: 'error'\n })\n return\n }\n // eslint-disable-next-line no-undef\n const reader = new FileReader()\n reader.onload = ({ target }) => {\n const img = target.result\n this[slot + 'Preview'] = img\n this[slot] = file\n }\n reader.readAsDataURL(file)\n },\n resetAvatar () {\n const confirmed = window.confirm(this.$t('settings.reset_avatar_confirm'))\n if (confirmed) {\n this.submitAvatar(undefined, '')\n }\n },\n resetBanner () {\n const confirmed = window.confirm(this.$t('settings.reset_banner_confirm'))\n if (confirmed) {\n this.submitBanner('')\n }\n },\n resetBackground () {\n const confirmed = window.confirm(this.$t('settings.reset_background_confirm'))\n if (confirmed) {\n this.submitBackground('')\n }\n },\n submitAvatar (cropper, file) {\n const that = this\n return new Promise((resolve, reject) => {\n function updateAvatar (avatar) {\n that.$store.state.api.backendInteractor.updateProfileImages({ avatar })\n .then((user) => {\n that.$store.commit('addNewUsers', [user])\n that.$store.commit('setCurrentUser', user)\n resolve()\n })\n .catch((error) => {\n that.displayUploadError(error)\n reject(error)\n })\n }\n\n if (cropper) {\n cropper.getCroppedCanvas().toBlob(updateAvatar, file.type)\n } else {\n updateAvatar(file)\n }\n })\n },\n submitBanner (banner) {\n if (!this.bannerPreview && banner !== '') { return }\n\n this.bannerUploading = true\n this.$store.state.api.backendInteractor.updateProfileImages({ banner })\n .then((user) => {\n this.$store.commit('addNewUsers', [user])\n this.$store.commit('setCurrentUser', user)\n this.bannerPreview = null\n })\n .catch(this.displayUploadError)\n .finally(() => { this.bannerUploading = false })\n },\n submitBackground (background) {\n if (!this.backgroundPreview && background !== '') { return }\n\n this.backgroundUploading = true\n this.$store.state.api.backendInteractor.updateProfileImages({ background })\n .then((data) => {\n this.$store.commit('addNewUsers', [data])\n this.$store.commit('setCurrentUser', data)\n this.backgroundPreview = null\n })\n .catch(this.displayUploadError)\n .finally(() => { this.backgroundUploading = false })\n },\n displayUploadError (error) {\n this.$store.dispatch('pushGlobalNotice', {\n messageKey: 'upload.error.message',\n messageArgs: [error.message],\n level: 'error'\n })\n }\n }\n}\n\nexport default ProfileTab\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!./profile_tab.scss\")\n}\n/* script */\nexport * from \"!!babel-loader!./profile_tab.js\"\nimport __vue_script__ from \"!!babel-loader!./profile_tab.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-12b56c32\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../../node_modules/vue-loader/lib/selector?type=template&index=0!./profile_tab.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"profile-tab\"},[_c('div',{staticClass:\"setting-item\"},[_c('h2',[_vm._v(_vm._s(_vm.$t('settings.name_bio')))]),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.$t('settings.name')))]),_vm._v(\" \"),_c('EmojiInput',{attrs:{\"enable-emoji-picker\":\"\",\"suggest\":_vm.emojiSuggestor},model:{value:(_vm.newName),callback:function ($$v) {_vm.newName=$$v},expression:\"newName\"}},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newName),expression:\"newName\"}],staticClass:\"name-changer\",attrs:{\"id\":\"username\"},domProps:{\"value\":(_vm.newName)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.newName=$event.target.value}}})]),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.$t('settings.bio')))]),_vm._v(\" \"),_c('EmojiInput',{attrs:{\"enable-emoji-picker\":\"\",\"suggest\":_vm.emojiUserSuggestor},model:{value:(_vm.newBio),callback:function ($$v) {_vm.newBio=$$v},expression:\"newBio\"}},[_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newBio),expression:\"newBio\"}],staticClass:\"bio resize-height\",domProps:{\"value\":(_vm.newBio)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.newBio=$event.target.value}}})]),_vm._v(\" \"),_c('p',[_c('Checkbox',{model:{value:(_vm.newLocked),callback:function ($$v) {_vm.newLocked=$$v},expression:\"newLocked\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.lock_account_description'))+\"\\n \")])],1),_vm._v(\" \"),_c('div',[_c('label',{attrs:{\"for\":\"default-vis\"}},[_vm._v(_vm._s(_vm.$t('settings.default_vis')))]),_vm._v(\" \"),_c('div',{staticClass:\"visibility-tray\",attrs:{\"id\":\"default-vis\"}},[_c('scope-selector',{attrs:{\"show-all\":true,\"user-default\":_vm.newDefaultScope,\"initial-scope\":_vm.newDefaultScope,\"on-scope-change\":_vm.changeVis}})],1)]),_vm._v(\" \"),_c('p',[_c('Checkbox',{model:{value:(_vm.newNoRichText),callback:function ($$v) {_vm.newNoRichText=$$v},expression:\"newNoRichText\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.no_rich_text_description'))+\"\\n \")])],1),_vm._v(\" \"),_c('p',[_c('Checkbox',{model:{value:(_vm.hideFollows),callback:function ($$v) {_vm.hideFollows=$$v},expression:\"hideFollows\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.hide_follows_description'))+\"\\n \")])],1),_vm._v(\" \"),_c('p',{staticClass:\"setting-subitem\"},[_c('Checkbox',{attrs:{\"disabled\":!_vm.hideFollows},model:{value:(_vm.hideFollowsCount),callback:function ($$v) {_vm.hideFollowsCount=$$v},expression:\"hideFollowsCount\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.hide_follows_count_description'))+\"\\n \")])],1),_vm._v(\" \"),_c('p',[_c('Checkbox',{model:{value:(_vm.hideFollowers),callback:function ($$v) {_vm.hideFollowers=$$v},expression:\"hideFollowers\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.hide_followers_description'))+\"\\n \")])],1),_vm._v(\" \"),_c('p',{staticClass:\"setting-subitem\"},[_c('Checkbox',{attrs:{\"disabled\":!_vm.hideFollowers},model:{value:(_vm.hideFollowersCount),callback:function ($$v) {_vm.hideFollowersCount=$$v},expression:\"hideFollowersCount\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.hide_followers_count_description'))+\"\\n \")])],1),_vm._v(\" \"),_c('p',[_c('Checkbox',{model:{value:(_vm.allowFollowingMove),callback:function ($$v) {_vm.allowFollowingMove=$$v},expression:\"allowFollowingMove\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.allow_following_move'))+\"\\n \")])],1),_vm._v(\" \"),(_vm.role === 'admin' || _vm.role === 'moderator')?_c('p',[_c('Checkbox',{model:{value:(_vm.showRole),callback:function ($$v) {_vm.showRole=$$v},expression:\"showRole\"}},[(_vm.role === 'admin')?[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.show_admin_badge'))+\"\\n \")]:_vm._e(),_vm._v(\" \"),(_vm.role === 'moderator')?[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.show_moderator_badge'))+\"\\n \")]:_vm._e()],2)],1):_vm._e(),_vm._v(\" \"),_c('p',[_c('Checkbox',{model:{value:(_vm.discoverable),callback:function ($$v) {_vm.discoverable=$$v},expression:\"discoverable\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.discoverable'))+\"\\n \")])],1),_vm._v(\" \"),(_vm.maxFields > 0)?_c('div',[_c('p',[_vm._v(_vm._s(_vm.$t('settings.profile_fields.label')))]),_vm._v(\" \"),_vm._l((_vm.newFields),function(_,i){return _c('div',{key:i,staticClass:\"profile-fields\"},[_c('EmojiInput',{attrs:{\"enable-emoji-picker\":\"\",\"hide-emoji-button\":\"\",\"suggest\":_vm.userSuggestor},model:{value:(_vm.newFields[i].name),callback:function ($$v) {_vm.$set(_vm.newFields[i], \"name\", $$v)},expression:\"newFields[i].name\"}},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newFields[i].name),expression:\"newFields[i].name\"}],attrs:{\"placeholder\":_vm.$t('settings.profile_fields.name')},domProps:{\"value\":(_vm.newFields[i].name)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.newFields[i], \"name\", $event.target.value)}}})]),_vm._v(\" \"),_c('EmojiInput',{attrs:{\"enable-emoji-picker\":\"\",\"hide-emoji-button\":\"\",\"suggest\":_vm.userSuggestor},model:{value:(_vm.newFields[i].value),callback:function ($$v) {_vm.$set(_vm.newFields[i], \"value\", $$v)},expression:\"newFields[i].value\"}},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newFields[i].value),expression:\"newFields[i].value\"}],attrs:{\"placeholder\":_vm.$t('settings.profile_fields.value')},domProps:{\"value\":(_vm.newFields[i].value)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.newFields[i], \"value\", $event.target.value)}}})]),_vm._v(\" \"),_c('button',{staticClass:\"delete-field button-unstyled -hover-highlight\",on:{\"click\":function($event){return _vm.deleteField(i)}}},[_c('FAIcon',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.newFields.length > 1),expression:\"newFields.length > 1\"}],attrs:{\"icon\":\"times\"}})],1)],1)}),_vm._v(\" \"),(_vm.newFields.length < _vm.maxFields)?_c('button',{staticClass:\"add-field faint button-unstyled -hover-highlight\",on:{\"click\":_vm.addField}},[_c('FAIcon',{attrs:{\"icon\":\"plus\"}}),_vm._v(\"\\n \"+_vm._s(_vm.$t(\"settings.profile_fields.add_field\"))+\"\\n \")],1):_vm._e()],2):_vm._e(),_vm._v(\" \"),_c('p',[_c('Checkbox',{model:{value:(_vm.bot),callback:function ($$v) {_vm.bot=$$v},expression:\"bot\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.bot'))+\"\\n \")])],1),_vm._v(\" \"),_c('button',{staticClass:\"btn button-default\",attrs:{\"disabled\":_vm.newName && _vm.newName.length === 0},on:{\"click\":_vm.updateProfile}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.save'))+\"\\n \")])],1),_vm._v(\" \"),_c('div',{staticClass:\"setting-item\"},[_c('h2',[_vm._v(_vm._s(_vm.$t('settings.avatar')))]),_vm._v(\" \"),_c('p',{staticClass:\"visibility-notice\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.avatar_size_instruction'))+\"\\n \")]),_vm._v(\" \"),_c('div',{staticClass:\"current-avatar-container\"},[_c('img',{staticClass:\"current-avatar\",attrs:{\"src\":_vm.user.profile_image_url_original}}),_vm._v(\" \"),(!_vm.isDefaultAvatar && _vm.pickAvatarBtnVisible)?_c('FAIcon',{staticClass:\"reset-button\",attrs:{\"title\":_vm.$t('settings.reset_avatar'),\"icon\":\"times\",\"type\":\"button\"},on:{\"click\":_vm.resetAvatar}}):_vm._e()],1),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.$t('settings.set_new_avatar')))]),_vm._v(\" \"),_c('button',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.pickAvatarBtnVisible),expression:\"pickAvatarBtnVisible\"}],staticClass:\"button-default btn\",attrs:{\"id\":\"pick-avatar\",\"type\":\"button\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.upload_a_photo'))+\"\\n \")]),_vm._v(\" \"),_c('image-cropper',{attrs:{\"trigger\":\"#pick-avatar\",\"submit-handler\":_vm.submitAvatar},on:{\"open\":function($event){_vm.pickAvatarBtnVisible=false},\"close\":function($event){_vm.pickAvatarBtnVisible=true}}})],1),_vm._v(\" \"),_c('div',{staticClass:\"setting-item\"},[_c('h2',[_vm._v(_vm._s(_vm.$t('settings.profile_banner')))]),_vm._v(\" \"),_c('div',{staticClass:\"banner-background-preview\"},[_c('img',{attrs:{\"src\":_vm.user.cover_photo}}),_vm._v(\" \"),(!_vm.isDefaultBanner)?_c('FAIcon',{staticClass:\"reset-button\",attrs:{\"title\":_vm.$t('settings.reset_profile_banner'),\"icon\":\"times\",\"type\":\"button\"},on:{\"click\":_vm.resetBanner}}):_vm._e()],1),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.$t('settings.set_new_profile_banner')))]),_vm._v(\" \"),(_vm.bannerPreview)?_c('img',{staticClass:\"banner-background-preview\",attrs:{\"src\":_vm.bannerPreview}}):_vm._e(),_vm._v(\" \"),_c('div',[_c('input',{attrs:{\"type\":\"file\"},on:{\"change\":function($event){return _vm.uploadFile('banner', $event)}}})]),_vm._v(\" \"),(_vm.bannerUploading)?_c('FAIcon',{staticClass:\"uploading\",attrs:{\"spin\":\"\",\"icon\":\"circle-notch\"}}):(_vm.bannerPreview)?_c('button',{staticClass:\"btn button-default\",on:{\"click\":function($event){return _vm.submitBanner(_vm.banner)}}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.save'))+\"\\n \")]):_vm._e()],1),_vm._v(\" \"),_c('div',{staticClass:\"setting-item\"},[_c('h2',[_vm._v(_vm._s(_vm.$t('settings.profile_background')))]),_vm._v(\" \"),_c('div',{staticClass:\"banner-background-preview\"},[_c('img',{attrs:{\"src\":_vm.user.background_image}}),_vm._v(\" \"),(!_vm.isDefaultBackground)?_c('FAIcon',{staticClass:\"reset-button\",attrs:{\"title\":_vm.$t('settings.reset_profile_background'),\"icon\":\"times\",\"type\":\"button\"},on:{\"click\":_vm.resetBackground}}):_vm._e()],1),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.$t('settings.set_new_profile_background')))]),_vm._v(\" \"),(_vm.backgroundPreview)?_c('img',{staticClass:\"banner-background-preview\",attrs:{\"src\":_vm.backgroundPreview}}):_vm._e(),_vm._v(\" \"),_c('div',[_c('input',{attrs:{\"type\":\"file\"},on:{\"change\":function($event){return _vm.uploadFile('background', $event)}}})]),_vm._v(\" \"),(_vm.backgroundUploading)?_c('FAIcon',{staticClass:\"uploading\",attrs:{\"spin\":\"\",\"icon\":\"circle-notch\"}}):(_vm.backgroundPreview)?_c('button',{staticClass:\"btn button-default\",on:{\"click\":function($event){return _vm.submitBackground(_vm.background)}}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.save'))+\"\\n \")]):_vm._e()],1)])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","\n\n\n","/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./interface_language_switcher.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./interface_language_switcher.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-72cb1bd2\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./interface_language_switcher.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('label',{attrs:{\"for\":\"interface-language-switcher\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.interfaceLanguage'))+\"\\n \")]),_vm._v(\" \"),_c('Select',{attrs:{\"id\":\"interface-language-switcher\"},model:{value:(_vm.language),callback:function ($$v) {_vm.language=$$v},expression:\"language\"}},_vm._l((_vm.languages),function(lang){return _c('option',{key:lang.code,domProps:{\"value\":lang.code}},[_vm._v(\"\\n \"+_vm._s(lang.name)+\"\\n \")])}),0)],1)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import BooleanSetting from '../helpers/boolean_setting.vue'\nimport ChoiceSetting from '../helpers/choice_setting.vue'\nimport InterfaceLanguageSwitcher from 'src/components/interface_language_switcher/interface_language_switcher.vue'\n\nimport SharedComputedObject from '../helpers/shared_computed_object.js'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faGlobe\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faGlobe\n)\n\nconst GeneralTab = {\n data () {\n return {\n subjectLineOptions: ['email', 'noop', 'masto'].map(mode => ({\n key: mode,\n value: mode,\n label: this.$t(`settings.subject_line_${mode === 'masto' ? 'mastodon' : mode}`)\n })),\n loopSilentAvailable:\n // Firefox\n Object.getOwnPropertyDescriptor(HTMLVideoElement.prototype, 'mozHasAudio') ||\n // Chrome-likes\n Object.getOwnPropertyDescriptor(HTMLMediaElement.prototype, 'webkitAudioDecodedByteCount') ||\n // Future spec, still not supported in Nightly 63 as of 08/2018\n Object.getOwnPropertyDescriptor(HTMLMediaElement.prototype, 'audioTracks')\n }\n },\n components: {\n BooleanSetting,\n ChoiceSetting,\n InterfaceLanguageSwitcher\n },\n computed: {\n postFormats () {\n return this.$store.state.instance.postFormats || []\n },\n postContentOptions () {\n return this.postFormats.map(format => ({\n key: format,\n value: format,\n label: this.$t(`post_status.content_type[\"${format}\"]`)\n }))\n },\n instanceSpecificPanelPresent () { return this.$store.state.instance.showInstanceSpecificPanel },\n instanceWallpaperUsed () {\n return this.$store.state.instance.background &&\n !this.$store.state.users.currentUser.background_image\n },\n instanceShoutboxPresent () { return this.$store.state.instance.shoutAvailable },\n ...SharedComputedObject()\n }\n}\n\nexport default GeneralTab\n","/* script */\nexport * from \"!!babel-loader!./general_tab.js\"\nimport __vue_script__ from \"!!babel-loader!./general_tab.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-dc1c5d9a\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../../node_modules/vue-loader/lib/selector?type=template&index=0!./general_tab.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"label\":_vm.$t('settings.general')}},[_c('div',{staticClass:\"setting-item\"},[_c('h2',[_vm._v(_vm._s(_vm.$t('settings.interface')))]),_vm._v(\" \"),_c('ul',{staticClass:\"setting-list\"},[_c('li',[_c('interface-language-switcher')],1),_vm._v(\" \"),(_vm.instanceSpecificPanelPresent)?_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"hideISP\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.hide_isp'))+\"\\n \")])],1):_vm._e(),_vm._v(\" \"),_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"sidebarRight\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.right_sidebar'))+\"\\n \")])],1),_vm._v(\" \"),(_vm.instanceWallpaperUsed)?_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"hideInstanceWallpaper\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.hide_wallpaper'))+\"\\n \")])],1):_vm._e(),_vm._v(\" \"),(_vm.instanceShoutboxPresent)?_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"hideShoutbox\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.hide_shoutbox'))+\"\\n \")])],1):_vm._e()])]),_vm._v(\" \"),_c('div',{staticClass:\"setting-item\"},[_c('h2',[_vm._v(_vm._s(_vm.$t('nav.timeline')))]),_vm._v(\" \"),_c('ul',{staticClass:\"setting-list\"},[_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"hideMutedPosts\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.hide_muted_posts'))+\"\\n \")])],1),_vm._v(\" \"),_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"collapseMessageWithSubject\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.collapse_subject'))+\"\\n \")])],1),_vm._v(\" \"),_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"streaming\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.streaming'))+\"\\n \")]),_vm._v(\" \"),_c('ul',{staticClass:\"setting-list suboptions\",class:[{disabled: !_vm.streaming}]},[_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"pauseOnUnfocused\",\"disabled\":!_vm.streaming}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.pause_on_unfocused'))+\"\\n \")])],1)])],1),_vm._v(\" \"),_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"useStreamingApi\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.useStreamingApi'))+\"\\n \"),_c('br'),_vm._v(\" \"),_c('small',[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.useStreamingApiWarning'))+\"\\n \")])])],1),_vm._v(\" \"),_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"emojiReactionsOnTimeline\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.emoji_reactions_on_timeline'))+\"\\n \")])],1),_vm._v(\" \"),_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"virtualScrolling\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.virtual_scrolling'))+\"\\n \")])],1)])]),_vm._v(\" \"),_c('div',{staticClass:\"setting-item\"},[_c('h2',[_vm._v(_vm._s(_vm.$t('settings.composing')))]),_vm._v(\" \"),_c('ul',{staticClass:\"setting-list\"},[_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"scopeCopy\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.scope_copy'))+\"\\n \")])],1),_vm._v(\" \"),_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"alwaysShowSubjectInput\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.subject_input_always_show'))+\"\\n \")])],1),_vm._v(\" \"),_c('li',[_c('ChoiceSetting',{attrs:{\"id\":\"subjectLineBehavior\",\"path\":\"subjectLineBehavior\",\"options\":_vm.subjectLineOptions}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.subject_line_behavior'))+\"\\n \")])],1),_vm._v(\" \"),(_vm.postFormats.length > 0)?_c('li',[_c('ChoiceSetting',{attrs:{\"id\":\"postContentType\",\"path\":\"postContentType\",\"options\":_vm.postContentOptions}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.post_status_content_type'))+\"\\n \")])],1):_vm._e(),_vm._v(\" \"),_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"minimalScopesMode\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.minimal_scopes_mode'))+\"\\n \")])],1),_vm._v(\" \"),_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"sensitiveByDefault\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.sensitive_by_default'))+\"\\n \")])],1),_vm._v(\" \"),_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"autohideFloatingPostButton\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.autohide_floating_post_button'))+\"\\n \")])],1),_vm._v(\" \"),_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"padEmoji\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.pad_emoji'))+\"\\n \")])],1)])]),_vm._v(\" \"),_c('div',{staticClass:\"setting-item\"},[_c('h2',[_vm._v(_vm._s(_vm.$t('settings.attachments')))]),_vm._v(\" \"),_c('ul',{staticClass:\"setting-list\"},[_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"hideAttachments\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.hide_attachments_in_tl'))+\"\\n \")])],1),_vm._v(\" \"),_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"hideAttachmentsInConv\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.hide_attachments_in_convo'))+\"\\n \")])],1),_vm._v(\" \"),_c('li',[_c('label',{attrs:{\"for\":\"maxThumbnails\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.max_thumbnails'))+\"\\n \")]),_vm._v(\" \"),_c('input',{staticClass:\"number-input\",attrs:{\"id\":\"maxThumbnails\",\"path.number\":\"maxThumbnails\",\"type\":\"number\",\"min\":\"0\",\"step\":\"1\"}})]),_vm._v(\" \"),_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"hideNsfw\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.nsfw_clickthrough'))+\"\\n \")])],1),_vm._v(\" \"),_c('ul',{staticClass:\"setting-list suboptions\"},[_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"preloadImage\",\"disabled\":!_vm.hideNsfw}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.preload_images'))+\"\\n \")])],1),_vm._v(\" \"),_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"useOneClickNsfw\",\"disabled\":!_vm.hideNsfw}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.use_one_click_nsfw'))+\"\\n \")])],1)]),_vm._v(\" \"),_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"stopGifs\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.stop_gifs'))+\"\\n \")])],1),_vm._v(\" \"),_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"loopVideo\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.loop_video'))+\"\\n \")]),_vm._v(\" \"),_c('ul',{staticClass:\"setting-list suboptions\",class:[{disabled: !_vm.streaming}]},[_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"loopVideoSilentOnly\",\"disabled\":!_vm.loopVideo || !_vm.loopSilentAvailable}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.loop_video_silent_only'))+\"\\n \")]),_vm._v(\" \"),(!_vm.loopSilentAvailable)?_c('div',{staticClass:\"unavailable\"},[_c('FAIcon',{attrs:{\"icon\":\"globe\"}}),_vm._v(\"! \"+_vm._s(_vm.$t('settings.limited_availability'))+\"\\n \")],1):_vm._e()],1)])],1),_vm._v(\" \"),_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"playVideosInModal\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.play_videos_in_modal'))+\"\\n \")])],1),_vm._v(\" \"),_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"useContainFit\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.use_contain_fit'))+\"\\n \")])],1)])]),_vm._v(\" \"),_c('div',{staticClass:\"setting-item\"},[_c('h2',[_vm._v(_vm._s(_vm.$t('settings.notifications')))]),_vm._v(\" \"),_c('ul',{staticClass:\"setting-list\"},[_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"webPushNotifications\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.enable_web_push_notifications'))+\"\\n \")])],1)])]),_vm._v(\" \"),_c('div',{staticClass:\"setting-item\"},[_c('h2',[_vm._v(_vm._s(_vm.$t('settings.fun')))]),_vm._v(\" \"),_c('ul',{staticClass:\"setting-list\"},[_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"greentext\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.greentext'))+\"\\n \")])],1)])])])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import { extractCommit } from 'src/services/version/version.service'\n\nconst pleromaFeCommitUrl = 'https://git.pleroma.social/pleroma/pleroma-fe/commit/'\nconst pleromaBeCommitUrl = 'https://git.pleroma.social/pleroma/pleroma/commit/'\n\nconst VersionTab = {\n data () {\n const instance = this.$store.state.instance\n return {\n backendVersion: instance.backendVersion,\n frontendVersion: instance.frontendVersion\n }\n },\n computed: {\n frontendVersionLink () {\n return pleromaFeCommitUrl + this.frontendVersion\n },\n backendVersionLink () {\n return pleromaBeCommitUrl + extractCommit(this.backendVersion)\n }\n }\n}\n\nexport default VersionTab\n","\nexport const extractCommit = versionString => {\n const regex = /-g(\\w+)/i\n const matches = versionString.match(regex)\n return matches ? matches[1] : ''\n}\n","/* script */\nexport * from \"!!babel-loader!./version_tab.js\"\nimport __vue_script__ from \"!!babel-loader!./version_tab.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-ce257d26\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../../node_modules/vue-loader/lib/selector?type=template&index=0!./version_tab.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"label\":_vm.$t('settings.version.title')}},[_c('div',{staticClass:\"setting-item\"},[_c('ul',{staticClass:\"setting-list\"},[_c('li',[_c('p',[_vm._v(_vm._s(_vm.$t('settings.version.backend_version')))]),_vm._v(\" \"),_c('ul',{staticClass:\"option-list\"},[_c('li',[_c('a',{attrs:{\"href\":_vm.backendVersionLink,\"target\":\"_blank\"}},[_vm._v(_vm._s(_vm.backendVersion))])])])]),_vm._v(\" \"),_c('li',[_c('p',[_vm._v(_vm._s(_vm.$t('settings.version.frontend_version')))]),_vm._v(\" \"),_c('ul',{staticClass:\"option-list\"},[_c('li',[_c('a',{attrs:{\"href\":_vm.frontendVersionLink,\"target\":\"_blank\"}},[_vm._v(_vm._s(_vm.frontendVersion))])])])])])])])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","\n\n\n\n\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!./color_input.scss\")\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=1!./color_input.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./color_input.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./color_input.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-77e407b6\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./color_input.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"color-input style-control\",class:{ disabled: !_vm.present || _vm.disabled }},[_c('label',{staticClass:\"label\",attrs:{\"for\":_vm.name}},[_vm._v(\"\\n \"+_vm._s(_vm.label)+\"\\n \")]),_vm._v(\" \"),(typeof _vm.fallback !== 'undefined' && _vm.showOptionalTickbox)?_c('Checkbox',{staticClass:\"opt\",attrs:{\"checked\":_vm.present,\"disabled\":_vm.disabled},on:{\"change\":function($event){return _vm.$emit('input', typeof _vm.value === 'undefined' ? _vm.fallback : undefined)}}}):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"input color-input-field\"},[_c('input',{staticClass:\"textColor unstyled\",attrs:{\"id\":_vm.name + '-t',\"type\":\"text\",\"disabled\":!_vm.present || _vm.disabled},domProps:{\"value\":_vm.value || _vm.fallback},on:{\"input\":function($event){return _vm.$emit('input', $event.target.value)}}}),_vm._v(\" \"),(_vm.validColor)?_c('input',{staticClass:\"nativeColor unstyled\",attrs:{\"id\":_vm.name,\"type\":\"color\",\"disabled\":!_vm.present || _vm.disabled},domProps:{\"value\":_vm.value || _vm.fallback},on:{\"input\":function($event){return _vm.$emit('input', $event.target.value)}}}):_vm._e(),_vm._v(\" \"),(_vm.transparentColor)?_c('div',{staticClass:\"transparentIndicator\"}):_vm._e(),_vm._v(\" \"),(_vm.computedColor)?_c('div',{staticClass:\"computedIndicator\",style:({backgroundColor: _vm.fallback})}):_vm._e()])],1)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./range_input.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./range_input.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-6a3c1a26\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./range_input.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","\n\n\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"range-control style-control\",class:{ disabled: !_vm.present || _vm.disabled }},[_c('label',{staticClass:\"label\",attrs:{\"for\":_vm.name}},[_vm._v(\"\\n \"+_vm._s(_vm.label)+\"\\n \")]),_vm._v(\" \"),(typeof _vm.fallback !== 'undefined')?_c('input',{staticClass:\"opt\",attrs:{\"id\":_vm.name + '-o',\"type\":\"checkbox\"},domProps:{\"checked\":_vm.present},on:{\"input\":function($event){return _vm.$emit('input', !_vm.present ? _vm.fallback : undefined)}}}):_vm._e(),_vm._v(\" \"),(typeof _vm.fallback !== 'undefined')?_c('label',{staticClass:\"opt-l\",attrs:{\"for\":_vm.name + '-o'}}):_vm._e(),_vm._v(\" \"),_c('input',{staticClass:\"input-number\",attrs:{\"id\":_vm.name,\"type\":\"range\",\"disabled\":!_vm.present || _vm.disabled,\"max\":_vm.max || _vm.hardMax || 100,\"min\":_vm.min || _vm.hardMin || 0,\"step\":_vm.step || 1},domProps:{\"value\":_vm.value || _vm.fallback},on:{\"input\":function($event){return _vm.$emit('input', $event.target.value)}}}),_vm._v(\" \"),_c('input',{staticClass:\"input-number\",attrs:{\"id\":_vm.name,\"type\":\"number\",\"disabled\":!_vm.present || _vm.disabled,\"max\":_vm.hardMax,\"min\":_vm.hardMin,\"step\":_vm.step || 1},domProps:{\"value\":_vm.value || _vm.fallback},on:{\"input\":function($event){return _vm.$emit('input', $event.target.value)}}})])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","\n\n\n","/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./opacity_input.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./opacity_input.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-3b48fa39\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./opacity_input.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"opacity-control style-control\",class:{ disabled: !_vm.present || _vm.disabled }},[_c('label',{staticClass:\"label\",attrs:{\"for\":_vm.name}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.common.opacity'))+\"\\n \")]),_vm._v(\" \"),(typeof _vm.fallback !== 'undefined')?_c('Checkbox',{staticClass:\"opt\",attrs:{\"checked\":_vm.present,\"disabled\":_vm.disabled},on:{\"change\":function($event){return _vm.$emit('input', !_vm.present ? _vm.fallback : undefined)}}}):_vm._e(),_vm._v(\" \"),_c('input',{staticClass:\"input-number\",attrs:{\"id\":_vm.name,\"type\":\"number\",\"disabled\":!_vm.present || _vm.disabled,\"max\":\"1\",\"min\":\"0\",\"step\":\".05\"},domProps:{\"value\":_vm.value || _vm.fallback},on:{\"input\":function($event){return _vm.$emit('input', $event.target.value)}}})],1)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import ColorInput from '../color_input/color_input.vue'\nimport OpacityInput from '../opacity_input/opacity_input.vue'\nimport Select from '../select/select.vue'\nimport { getCssShadow } from '../../services/style_setter/style_setter.js'\nimport { hex2rgb } from '../../services/color_convert/color_convert.js'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faTimes,\n faChevronDown,\n faChevronUp,\n faPlus\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faChevronDown,\n faChevronUp,\n faTimes,\n faPlus\n)\n\nconst toModel = (object = {}) => ({\n x: 0,\n y: 0,\n blur: 0,\n spread: 0,\n inset: false,\n color: '#000000',\n alpha: 1,\n ...object\n})\n\nexport default {\n // 'Value' and 'Fallback' can be undefined, but if they are\n // initially vue won't detect it when they become something else\n // therefore i'm using \"ready\" which should be passed as true when\n // data becomes available\n props: [\n 'value', 'fallback', 'ready'\n ],\n data () {\n return {\n selectedId: 0,\n // TODO there are some bugs regarding display of array (it's not getting updated when deleting for some reason)\n cValue: (this.value || this.fallback || []).map(toModel)\n }\n },\n components: {\n ColorInput,\n OpacityInput,\n Select\n },\n methods: {\n add () {\n this.cValue.push(toModel(this.selected))\n this.selectedId = this.cValue.length - 1\n },\n del () {\n this.cValue.splice(this.selectedId, 1)\n this.selectedId = this.cValue.length === 0 ? undefined : Math.max(this.selectedId - 1, 0)\n },\n moveUp () {\n const movable = this.cValue.splice(this.selectedId, 1)[0]\n this.cValue.splice(this.selectedId - 1, 0, movable)\n this.selectedId -= 1\n },\n moveDn () {\n const movable = this.cValue.splice(this.selectedId, 1)[0]\n this.cValue.splice(this.selectedId + 1, 0, movable)\n this.selectedId += 1\n }\n },\n beforeUpdate () {\n this.cValue = this.value || this.fallback\n },\n computed: {\n anyShadows () {\n return this.cValue.length > 0\n },\n anyShadowsFallback () {\n return this.fallback.length > 0\n },\n selected () {\n if (this.ready && this.anyShadows) {\n return this.cValue[this.selectedId]\n } else {\n return toModel({})\n }\n },\n currentFallback () {\n if (this.ready && this.anyShadowsFallback) {\n return this.fallback[this.selectedId]\n } else {\n return toModel({})\n }\n },\n moveUpValid () {\n return this.ready && this.selectedId > 0\n },\n moveDnValid () {\n return this.ready && this.selectedId < this.cValue.length - 1\n },\n present () {\n return this.ready &&\n typeof this.cValue[this.selectedId] !== 'undefined' &&\n !this.usingFallback\n },\n usingFallback () {\n return typeof this.value === 'undefined'\n },\n rgb () {\n return hex2rgb(this.selected.color)\n },\n style () {\n return this.ready ? {\n boxShadow: getCssShadow(this.fallback)\n } : {}\n }\n }\n}\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./shadow_control.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./shadow_control.js\"\nimport __vue_script__ from \"!!babel-loader!./shadow_control.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-ee55a534\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./shadow_control.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"shadow-control\",class:{ disabled: !_vm.present }},[_c('div',{staticClass:\"shadow-preview-container\"},[_c('div',{staticClass:\"y-shift-control\",attrs:{\"disabled\":!_vm.present}},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selected.y),expression:\"selected.y\"}],staticClass:\"input-number\",attrs:{\"disabled\":!_vm.present,\"type\":\"number\"},domProps:{\"value\":(_vm.selected.y)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.selected, \"y\", $event.target.value)}}}),_vm._v(\" \"),_c('div',{staticClass:\"wrap\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selected.y),expression:\"selected.y\"}],staticClass:\"input-range\",attrs:{\"disabled\":!_vm.present,\"type\":\"range\",\"max\":\"20\",\"min\":\"-20\"},domProps:{\"value\":(_vm.selected.y)},on:{\"__r\":function($event){return _vm.$set(_vm.selected, \"y\", $event.target.value)}}})])]),_vm._v(\" \"),_c('div',{staticClass:\"preview-window\"},[_c('div',{staticClass:\"preview-block\",style:(_vm.style)})]),_vm._v(\" \"),_c('div',{staticClass:\"x-shift-control\",attrs:{\"disabled\":!_vm.present}},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selected.x),expression:\"selected.x\"}],staticClass:\"input-number\",attrs:{\"disabled\":!_vm.present,\"type\":\"number\"},domProps:{\"value\":(_vm.selected.x)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.selected, \"x\", $event.target.value)}}}),_vm._v(\" \"),_c('div',{staticClass:\"wrap\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selected.x),expression:\"selected.x\"}],staticClass:\"input-range\",attrs:{\"disabled\":!_vm.present,\"type\":\"range\",\"max\":\"20\",\"min\":\"-20\"},domProps:{\"value\":(_vm.selected.x)},on:{\"__r\":function($event){return _vm.$set(_vm.selected, \"x\", $event.target.value)}}})])])]),_vm._v(\" \"),_c('div',{staticClass:\"shadow-tweak\"},[_c('div',{staticClass:\"id-control style-control\",attrs:{\"disabled\":_vm.usingFallback}},[_c('Select',{staticClass:\"shadow-switcher\",attrs:{\"id\":\"shadow-switcher\",\"disabled\":!_vm.ready || _vm.usingFallback},model:{value:(_vm.selectedId),callback:function ($$v) {_vm.selectedId=$$v},expression:\"selectedId\"}},_vm._l((_vm.cValue),function(shadow,index){return _c('option',{key:index,domProps:{\"value\":index}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.shadows.shadow_id', { value: index }))+\"\\n \")])}),0),_vm._v(\" \"),_c('button',{staticClass:\"btn button-default\",attrs:{\"disabled\":!_vm.ready || !_vm.present},on:{\"click\":_vm.del}},[_c('FAIcon',{attrs:{\"fixed-width\":\"\",\"icon\":\"times\"}})],1),_vm._v(\" \"),_c('button',{staticClass:\"btn button-default\",attrs:{\"disabled\":!_vm.moveUpValid},on:{\"click\":_vm.moveUp}},[_c('FAIcon',{attrs:{\"fixed-width\":\"\",\"icon\":\"chevron-up\"}})],1),_vm._v(\" \"),_c('button',{staticClass:\"btn button-default\",attrs:{\"disabled\":!_vm.moveDnValid},on:{\"click\":_vm.moveDn}},[_c('FAIcon',{attrs:{\"fixed-width\":\"\",\"icon\":\"chevron-down\"}})],1),_vm._v(\" \"),_c('button',{staticClass:\"btn button-default\",attrs:{\"disabled\":_vm.usingFallback},on:{\"click\":_vm.add}},[_c('FAIcon',{attrs:{\"fixed-width\":\"\",\"icon\":\"plus\"}})],1)],1),_vm._v(\" \"),_c('div',{staticClass:\"inset-control style-control\",attrs:{\"disabled\":!_vm.present}},[_c('label',{staticClass:\"label\",attrs:{\"for\":\"inset\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.shadows.inset'))+\"\\n \")]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selected.inset),expression:\"selected.inset\"}],staticClass:\"input-inset\",attrs:{\"id\":\"inset\",\"disabled\":!_vm.present,\"name\":\"inset\",\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.selected.inset)?_vm._i(_vm.selected.inset,null)>-1:(_vm.selected.inset)},on:{\"change\":function($event){var $$a=_vm.selected.inset,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.$set(_vm.selected, \"inset\", $$a.concat([$$v])))}else{$$i>-1&&(_vm.$set(_vm.selected, \"inset\", $$a.slice(0,$$i).concat($$a.slice($$i+1))))}}else{_vm.$set(_vm.selected, \"inset\", $$c)}}}}),_vm._v(\" \"),_c('label',{staticClass:\"checkbox-label\",attrs:{\"for\":\"inset\"}})]),_vm._v(\" \"),_c('div',{staticClass:\"blur-control style-control\",attrs:{\"disabled\":!_vm.present}},[_c('label',{staticClass:\"label\",attrs:{\"for\":\"spread\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.shadows.blur'))+\"\\n \")]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selected.blur),expression:\"selected.blur\"}],staticClass:\"input-range\",attrs:{\"id\":\"blur\",\"disabled\":!_vm.present,\"name\":\"blur\",\"type\":\"range\",\"max\":\"20\",\"min\":\"0\"},domProps:{\"value\":(_vm.selected.blur)},on:{\"__r\":function($event){return _vm.$set(_vm.selected, \"blur\", $event.target.value)}}}),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selected.blur),expression:\"selected.blur\"}],staticClass:\"input-number\",attrs:{\"disabled\":!_vm.present,\"type\":\"number\",\"min\":\"0\"},domProps:{\"value\":(_vm.selected.blur)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.selected, \"blur\", $event.target.value)}}})]),_vm._v(\" \"),_c('div',{staticClass:\"spread-control style-control\",attrs:{\"disabled\":!_vm.present}},[_c('label',{staticClass:\"label\",attrs:{\"for\":\"spread\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.shadows.spread'))+\"\\n \")]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selected.spread),expression:\"selected.spread\"}],staticClass:\"input-range\",attrs:{\"id\":\"spread\",\"disabled\":!_vm.present,\"name\":\"spread\",\"type\":\"range\",\"max\":\"20\",\"min\":\"-20\"},domProps:{\"value\":(_vm.selected.spread)},on:{\"__r\":function($event){return _vm.$set(_vm.selected, \"spread\", $event.target.value)}}}),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selected.spread),expression:\"selected.spread\"}],staticClass:\"input-number\",attrs:{\"disabled\":!_vm.present,\"type\":\"number\"},domProps:{\"value\":(_vm.selected.spread)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.selected, \"spread\", $event.target.value)}}})]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"disabled\":!_vm.present,\"label\":_vm.$t('settings.style.common.color'),\"fallback\":_vm.currentFallback.color,\"show-optional-tickbox\":false,\"name\":\"shadow\"},model:{value:(_vm.selected.color),callback:function ($$v) {_vm.$set(_vm.selected, \"color\", $$v)},expression:\"selected.color\"}}),_vm._v(\" \"),_c('OpacityInput',{attrs:{\"disabled\":!_vm.present},model:{value:(_vm.selected.alpha),callback:function ($$v) {_vm.$set(_vm.selected, \"alpha\", $$v)},expression:\"selected.alpha\"}}),_vm._v(\" \"),_c('i18n',{attrs:{\"path\":\"settings.style.shadows.hintV3\",\"tag\":\"p\"}},[_c('code',[_vm._v(\"--variable,mod\")])])],1)])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import { set } from 'vue'\nimport Select from '../select/select.vue'\n\nexport default {\n components: {\n Select\n },\n props: [\n 'name', 'label', 'value', 'fallback', 'options', 'no-inherit'\n ],\n data () {\n return {\n lValue: this.value,\n availableOptions: [\n this.noInherit ? '' : 'inherit',\n 'custom',\n ...(this.options || []),\n 'serif',\n 'monospace',\n 'sans-serif'\n ].filter(_ => _)\n }\n },\n beforeUpdate () {\n this.lValue = this.value\n },\n computed: {\n present () {\n return typeof this.lValue !== 'undefined'\n },\n dValue () {\n return this.lValue || this.fallback || {}\n },\n family: {\n get () {\n return this.dValue.family\n },\n set (v) {\n set(this.lValue, 'family', v)\n this.$emit('input', this.lValue)\n }\n },\n isCustom () {\n return this.preset === 'custom'\n },\n preset: {\n get () {\n if (this.family === 'serif' ||\n this.family === 'sans-serif' ||\n this.family === 'monospace' ||\n this.family === 'inherit') {\n return this.family\n } else {\n return 'custom'\n }\n },\n set (v) {\n this.family = v === 'custom' ? '' : v\n }\n }\n }\n}\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./font_control.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./font_control.js\"\nimport __vue_script__ from \"!!babel-loader!./font_control.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-132a42de\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./font_control.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"font-control style-control\",class:{ custom: _vm.isCustom }},[_c('label',{staticClass:\"label\",attrs:{\"for\":_vm.preset === 'custom' ? _vm.name : _vm.name + '-font-switcher'}},[_vm._v(\"\\n \"+_vm._s(_vm.label)+\"\\n \")]),_vm._v(\" \"),(typeof _vm.fallback !== 'undefined')?_c('input',{staticClass:\"opt exlcude-disabled\",attrs:{\"id\":_vm.name + '-o',\"type\":\"checkbox\"},domProps:{\"checked\":_vm.present},on:{\"input\":function($event){return _vm.$emit('input', typeof _vm.value === 'undefined' ? _vm.fallback : undefined)}}}):_vm._e(),_vm._v(\" \"),(typeof _vm.fallback !== 'undefined')?_c('label',{staticClass:\"opt-l\",attrs:{\"for\":_vm.name + '-o'}}):_vm._e(),_vm._v(\" \"),_c('Select',{staticClass:\"font-switcher\",attrs:{\"id\":_vm.name + '-font-switcher',\"disabled\":!_vm.present},model:{value:(_vm.preset),callback:function ($$v) {_vm.preset=$$v},expression:\"preset\"}},_vm._l((_vm.availableOptions),function(option){return _c('option',{key:option,domProps:{\"value\":option}},[_vm._v(\"\\n \"+_vm._s(option === 'custom' ? _vm.$t('settings.style.fonts.custom') : option)+\"\\n \")])}),0),_vm._v(\" \"),(_vm.isCustom)?_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.family),expression:\"family\"}],staticClass:\"custom-font\",attrs:{\"id\":_vm.name,\"type\":\"text\"},domProps:{\"value\":(_vm.family)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.family=$event.target.value}}}):_vm._e()],1)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","\n\n\n\n\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./contrast_ratio.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./contrast_ratio.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./contrast_ratio.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-6d90b7c4\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./contrast_ratio.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.contrast)?_c('span',{staticClass:\"contrast-ratio\"},[_c('span',{staticClass:\"rating\",attrs:{\"title\":_vm.hint}},[(_vm.contrast.aaa)?_c('span',[_c('FAIcon',{attrs:{\"icon\":\"thumbs-up\"}})],1):_vm._e(),_vm._v(\" \"),(!_vm.contrast.aaa && _vm.contrast.aa)?_c('span',[_c('FAIcon',{attrs:{\"icon\":\"adjust\"}})],1):_vm._e(),_vm._v(\" \"),(!_vm.contrast.aaa && !_vm.contrast.aa)?_c('span',[_c('FAIcon',{attrs:{\"icon\":\"exclamation-triangle\"}})],1):_vm._e()]),_vm._v(\" \"),(_vm.contrast && _vm.large)?_c('span',{staticClass:\"rating\",attrs:{\"title\":_vm.hint_18pt}},[(_vm.contrast.laaa)?_c('span',[_c('FAIcon',{attrs:{\"icon\":\"thumbs-up\"}})],1):_vm._e(),_vm._v(\" \"),(!_vm.contrast.laaa && _vm.contrast.laa)?_c('span',[_c('FAIcon',{attrs:{\"icon\":\"adjust\"}})],1):_vm._e(),_vm._v(\" \"),(!_vm.contrast.laaa && !_vm.contrast.laa)?_c('span',[_c('FAIcon',{attrs:{\"icon\":\"exclamation-triangle\"}})],1):_vm._e()]):_vm._e()]):_vm._e()}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","\n\n\n\n\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./preview.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!../../../../../node_modules/vue-loader/lib/selector?type=script&index=0!./preview.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../../../node_modules/vue-loader/lib/selector?type=script&index=0!./preview.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-1d0bb165\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../../../node_modules/vue-loader/lib/selector?type=template&index=0!./preview.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"preview-container\"},[_c('div',{staticClass:\"underlay underlay-preview\"}),_vm._v(\" \"),_c('div',{staticClass:\"panel dummy\"},[_c('div',{staticClass:\"panel-heading\"},[_c('div',{staticClass:\"title\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.preview.header'))+\"\\n \"),_c('span',{staticClass:\"badge badge-notification\"},[_vm._v(\"\\n 99\\n \")])]),_vm._v(\" \"),_c('span',{staticClass:\"faint\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.preview.header_faint'))+\"\\n \")]),_vm._v(\" \"),_c('span',{staticClass:\"alert error\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.preview.error'))+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn button-default\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.preview.button'))+\"\\n \")])]),_vm._v(\" \"),_c('div',{staticClass:\"panel-body theme-preview-content\"},[_c('div',{staticClass:\"post\"},[_c('div',{staticClass:\"avatar still-image\"},[_vm._v(\"\\n ( ͡° ͜ʖ ͡°)\\n \")]),_vm._v(\" \"),_c('div',{staticClass:\"content\"},[_c('h4',[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.preview.content'))+\"\\n \")]),_vm._v(\" \"),_c('i18n',{attrs:{\"path\":\"settings.style.preview.text\"}},[_c('code',{staticStyle:{\"font-family\":\"var(--postCodeFont)\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.preview.mono'))+\"\\n \")]),_vm._v(\" \"),_c('a',{staticStyle:{\"color\":\"var(--link)\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.preview.link'))+\"\\n \")])]),_vm._v(\" \"),_c('div',{staticClass:\"icons\"},[_c('FAIcon',{staticClass:\"fa-scale-110 fa-old-padding\",staticStyle:{\"color\":\"var(--cBlue)\"},attrs:{\"fixed-width\":\"\",\"icon\":\"reply\"}}),_vm._v(\" \"),_c('FAIcon',{staticClass:\"fa-scale-110 fa-old-padding\",staticStyle:{\"color\":\"var(--cGreen)\"},attrs:{\"fixed-width\":\"\",\"icon\":\"retweet\"}}),_vm._v(\" \"),_c('FAIcon',{staticClass:\"fa-scale-110 fa-old-padding\",staticStyle:{\"color\":\"var(--cOrange)\"},attrs:{\"fixed-width\":\"\",\"icon\":\"star\"}}),_vm._v(\" \"),_c('FAIcon',{staticClass:\"fa-scale-110 fa-old-padding\",staticStyle:{\"color\":\"var(--cRed)\"},attrs:{\"fixed-width\":\"\",\"icon\":\"times\"}})],1)],1)]),_vm._v(\" \"),_c('div',{staticClass:\"after-post\"},[_c('div',{staticClass:\"avatar-alt\"},[_vm._v(\"\\n :^)\\n \")]),_vm._v(\" \"),_c('div',{staticClass:\"content\"},[_c('i18n',{staticClass:\"faint\",attrs:{\"path\":\"settings.style.preview.fine_print\",\"tag\":\"span\"}},[_c('a',{staticStyle:{\"color\":\"var(--faintLink)\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.preview.faint_link'))+\"\\n \")])])],1)]),_vm._v(\" \"),_c('div',{staticClass:\"separator\"}),_vm._v(\" \"),_c('span',{staticClass:\"alert error\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.preview.error'))+\"\\n \")]),_vm._v(\" \"),_c('input',{attrs:{\"type\":\"text\"},domProps:{\"value\":_vm.$t('settings.style.preview.input')}}),_vm._v(\" \"),_c('div',{staticClass:\"actions\"},[_c('span',{staticClass:\"checkbox\"},[_c('input',{attrs:{\"id\":\"preview_checkbox\",\"checked\":\"very yes\",\"type\":\"checkbox\"}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":\"preview_checkbox\"}},[_vm._v(_vm._s(_vm.$t('settings.style.preview.checkbox')))])]),_vm._v(\" \"),_c('button',{staticClass:\"btn button-default\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.preview.button'))+\"\\n \")])])])])])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import { set, delete as del } from 'vue'\nimport {\n rgb2hex,\n hex2rgb,\n getContrastRatioLayers\n} from 'src/services/color_convert/color_convert.js'\nimport {\n DEFAULT_SHADOWS,\n generateColors,\n generateShadows,\n generateRadii,\n generateFonts,\n composePreset,\n getThemes,\n shadows2to3,\n colors2to3\n} from 'src/services/style_setter/style_setter.js'\nimport {\n newImporter,\n newExporter\n} from 'src/services/export_import/export_import.js'\nimport {\n SLOT_INHERITANCE\n} from 'src/services/theme_data/pleromafe.js'\nimport {\n CURRENT_VERSION,\n OPACITIES,\n getLayers,\n getOpacitySlot\n} from 'src/services/theme_data/theme_data.service.js'\nimport ColorInput from 'src/components/color_input/color_input.vue'\nimport RangeInput from 'src/components/range_input/range_input.vue'\nimport OpacityInput from 'src/components/opacity_input/opacity_input.vue'\nimport ShadowControl from 'src/components/shadow_control/shadow_control.vue'\nimport FontControl from 'src/components/font_control/font_control.vue'\nimport ContrastRatio from 'src/components/contrast_ratio/contrast_ratio.vue'\nimport TabSwitcher from 'src/components/tab_switcher/tab_switcher.js'\nimport Checkbox from 'src/components/checkbox/checkbox.vue'\nimport Select from 'src/components/select/select.vue'\n\nimport Preview from './preview.vue'\n\n// List of color values used in v1\nconst v1OnlyNames = [\n 'bg',\n 'fg',\n 'text',\n 'link',\n 'cRed',\n 'cGreen',\n 'cBlue',\n 'cOrange'\n].map(_ => _ + 'ColorLocal')\n\nconst colorConvert = (color) => {\n if (color.startsWith('--') || color === 'transparent') {\n return color\n } else {\n return hex2rgb(color)\n }\n}\n\nexport default {\n data () {\n return {\n themeImporter: newImporter({\n validator: this.importValidator,\n onImport: this.onImport,\n onImportFailure: this.onImportFailure\n }),\n themeExporter: newExporter({\n filename: 'pleroma_theme',\n getExportedObject: () => this.exportedTheme\n }),\n availableStyles: [],\n selected: '',\n selectedTheme: this.$store.getters.mergedConfig.theme,\n themeWarning: undefined,\n tempImportFile: undefined,\n engineVersion: 0,\n\n previewShadows: {},\n previewColors: {},\n previewRadii: {},\n previewFonts: {},\n\n shadowsInvalid: true,\n colorsInvalid: true,\n radiiInvalid: true,\n\n keepColor: false,\n keepShadows: false,\n keepOpacity: false,\n keepRoundness: false,\n keepFonts: false,\n\n ...Object.keys(SLOT_INHERITANCE)\n .map(key => [key, ''])\n .reduce((acc, [key, val]) => ({ ...acc, [ key + 'ColorLocal' ]: val }), {}),\n\n ...Object.keys(OPACITIES)\n .map(key => [key, ''])\n .reduce((acc, [key, val]) => ({ ...acc, [ key + 'OpacityLocal' ]: val }), {}),\n\n shadowSelected: undefined,\n shadowsLocal: {},\n fontsLocal: {},\n\n btnRadiusLocal: '',\n inputRadiusLocal: '',\n checkboxRadiusLocal: '',\n panelRadiusLocal: '',\n avatarRadiusLocal: '',\n avatarAltRadiusLocal: '',\n attachmentRadiusLocal: '',\n tooltipRadiusLocal: '',\n chatMessageRadiusLocal: ''\n }\n },\n created () {\n const self = this\n\n getThemes()\n .then((promises) => {\n return Promise.all(\n Object.entries(promises)\n .map(([k, v]) => v.then(res => [k, res]))\n )\n })\n .then(themes => themes.reduce((acc, [k, v]) => {\n if (v) {\n return {\n ...acc,\n [k]: v\n }\n } else {\n return acc\n }\n }, {}))\n .then((themesComplete) => {\n self.availableStyles = themesComplete\n })\n },\n mounted () {\n this.loadThemeFromLocalStorage()\n if (typeof this.shadowSelected === 'undefined') {\n this.shadowSelected = this.shadowsAvailable[0]\n }\n },\n computed: {\n themeWarningHelp () {\n if (!this.themeWarning) return\n const t = this.$t\n const pre = 'settings.style.switcher.help.'\n const {\n origin,\n themeEngineVersion,\n type,\n noActionsPossible\n } = this.themeWarning\n if (origin === 'file') {\n // Loaded v2 theme from file\n if (themeEngineVersion === 2 && type === 'wrong_version') {\n return t(pre + 'v2_imported')\n }\n if (themeEngineVersion > CURRENT_VERSION) {\n return t(pre + 'future_version_imported') + ' ' +\n (\n noActionsPossible\n ? t(pre + 'snapshot_missing')\n : t(pre + 'snapshot_present')\n )\n }\n if (themeEngineVersion < CURRENT_VERSION) {\n return t(pre + 'future_version_imported') + ' ' +\n (\n noActionsPossible\n ? t(pre + 'snapshot_missing')\n : t(pre + 'snapshot_present')\n )\n }\n } else if (origin === 'localStorage') {\n if (type === 'snapshot_source_mismatch') {\n return t(pre + 'snapshot_source_mismatch')\n }\n // FE upgraded from v2\n if (themeEngineVersion === 2) {\n return t(pre + 'upgraded_from_v2')\n }\n // Admin downgraded FE\n if (themeEngineVersion > CURRENT_VERSION) {\n return t(pre + 'fe_downgraded') + ' ' +\n (\n noActionsPossible\n ? t(pre + 'migration_snapshot_ok')\n : t(pre + 'migration_snapshot_gone')\n )\n }\n // Admin upgraded FE\n if (themeEngineVersion < CURRENT_VERSION) {\n return t(pre + 'fe_upgraded') + ' ' +\n (\n noActionsPossible\n ? t(pre + 'migration_snapshot_ok')\n : t(pre + 'migration_snapshot_gone')\n )\n }\n }\n },\n selectedVersion () {\n return Array.isArray(this.selectedTheme) ? 1 : 2\n },\n currentColors () {\n return Object.keys(SLOT_INHERITANCE)\n .map(key => [key, this[key + 'ColorLocal']])\n .reduce((acc, [key, val]) => ({ ...acc, [ key ]: val }), {})\n },\n currentOpacity () {\n return Object.keys(OPACITIES)\n .map(key => [key, this[key + 'OpacityLocal']])\n .reduce((acc, [key, val]) => ({ ...acc, [ key ]: val }), {})\n },\n currentRadii () {\n return {\n btn: this.btnRadiusLocal,\n input: this.inputRadiusLocal,\n checkbox: this.checkboxRadiusLocal,\n panel: this.panelRadiusLocal,\n avatar: this.avatarRadiusLocal,\n avatarAlt: this.avatarAltRadiusLocal,\n tooltip: this.tooltipRadiusLocal,\n attachment: this.attachmentRadiusLocal,\n chatMessage: this.chatMessageRadiusLocal\n }\n },\n preview () {\n return composePreset(this.previewColors, this.previewRadii, this.previewShadows, this.previewFonts)\n },\n previewTheme () {\n if (!this.preview.theme.colors) return { colors: {}, opacity: {}, radii: {}, shadows: {}, fonts: {} }\n return this.preview.theme\n },\n // This needs optimization maybe\n previewContrast () {\n try {\n if (!this.previewTheme.colors.bg) return {}\n const colors = this.previewTheme.colors\n const opacity = this.previewTheme.opacity\n if (!colors.bg) return {}\n const hints = (ratio) => ({\n text: ratio.toPrecision(3) + ':1',\n // AA level, AAA level\n aa: ratio >= 4.5,\n aaa: ratio >= 7,\n // same but for 18pt+ texts\n laa: ratio >= 3,\n laaa: ratio >= 4.5\n })\n const colorsConverted = Object.entries(colors).reduce((acc, [key, value]) => ({ ...acc, [key]: colorConvert(value) }), {})\n\n const ratios = Object.entries(SLOT_INHERITANCE).reduce((acc, [key, value]) => {\n const slotIsBaseText = key === 'text' || key === 'link'\n const slotIsText = slotIsBaseText || (\n typeof value === 'object' && value !== null && value.textColor\n )\n if (!slotIsText) return acc\n const { layer, variant } = slotIsBaseText ? { layer: 'bg' } : value\n const background = variant || layer\n const opacitySlot = getOpacitySlot(background)\n const textColors = [\n key,\n ...(background === 'bg' ? ['cRed', 'cGreen', 'cBlue', 'cOrange'] : [])\n ]\n\n const layers = getLayers(\n layer,\n variant || layer,\n opacitySlot,\n colorsConverted,\n opacity\n )\n\n return {\n ...acc,\n ...textColors.reduce((acc, textColorKey) => {\n const newKey = slotIsBaseText\n ? 'bg' + textColorKey[0].toUpperCase() + textColorKey.slice(1)\n : textColorKey\n return {\n ...acc,\n [newKey]: getContrastRatioLayers(\n colorsConverted[textColorKey],\n layers,\n colorsConverted[textColorKey]\n )\n }\n }, {})\n }\n }, {})\n\n return Object.entries(ratios).reduce((acc, [k, v]) => { acc[k] = hints(v); return acc }, {})\n } catch (e) {\n console.warn('Failure computing contrasts', e)\n }\n },\n previewRules () {\n if (!this.preview.rules) return ''\n return [\n ...Object.values(this.preview.rules),\n 'color: var(--text)',\n 'font-family: var(--interfaceFont, sans-serif)'\n ].join(';')\n },\n shadowsAvailable () {\n return Object.keys(DEFAULT_SHADOWS).sort()\n },\n currentShadowOverriden: {\n get () {\n return !!this.currentShadow\n },\n set (val) {\n if (val) {\n set(this.shadowsLocal, this.shadowSelected, this.currentShadowFallback.map(_ => Object.assign({}, _)))\n } else {\n del(this.shadowsLocal, this.shadowSelected)\n }\n }\n },\n currentShadowFallback () {\n return (this.previewTheme.shadows || {})[this.shadowSelected]\n },\n currentShadow: {\n get () {\n return this.shadowsLocal[this.shadowSelected]\n },\n set (v) {\n set(this.shadowsLocal, this.shadowSelected, v)\n }\n },\n themeValid () {\n return !this.shadowsInvalid && !this.colorsInvalid && !this.radiiInvalid\n },\n exportedTheme () {\n const saveEverything = (\n !this.keepFonts &&\n !this.keepShadows &&\n !this.keepOpacity &&\n !this.keepRoundness &&\n !this.keepColor\n )\n\n const source = {\n themeEngineVersion: CURRENT_VERSION\n }\n\n if (this.keepFonts || saveEverything) {\n source.fonts = this.fontsLocal\n }\n if (this.keepShadows || saveEverything) {\n source.shadows = this.shadowsLocal\n }\n if (this.keepOpacity || saveEverything) {\n source.opacity = this.currentOpacity\n }\n if (this.keepColor || saveEverything) {\n source.colors = this.currentColors\n }\n if (this.keepRoundness || saveEverything) {\n source.radii = this.currentRadii\n }\n\n const theme = {\n themeEngineVersion: CURRENT_VERSION,\n ...this.previewTheme\n }\n\n return {\n // To separate from other random JSON files and possible future source formats\n _pleroma_theme_version: 2, theme, source\n }\n }\n },\n components: {\n ColorInput,\n OpacityInput,\n RangeInput,\n ContrastRatio,\n ShadowControl,\n FontControl,\n TabSwitcher,\n Preview,\n Checkbox,\n Select\n },\n methods: {\n loadTheme (\n {\n theme,\n source,\n _pleroma_theme_version: fileVersion\n },\n origin,\n forceUseSource = false\n ) {\n this.dismissWarning()\n if (!source && !theme) {\n throw new Error('Can\\'t load theme: empty')\n }\n const version = (origin === 'localStorage' && !theme.colors)\n ? 'l1'\n : fileVersion\n const snapshotEngineVersion = (theme || {}).themeEngineVersion\n const themeEngineVersion = (source || {}).themeEngineVersion || 2\n const versionsMatch = themeEngineVersion === CURRENT_VERSION\n const sourceSnapshotMismatch = (\n theme !== undefined &&\n source !== undefined &&\n themeEngineVersion !== snapshotEngineVersion\n )\n // Force loading of source if user requested it or if snapshot\n // is unavailable\n const forcedSourceLoad = (source && forceUseSource) || !theme\n if (!(versionsMatch && !sourceSnapshotMismatch) &&\n !forcedSourceLoad &&\n version !== 'l1' &&\n origin !== 'defaults'\n ) {\n if (sourceSnapshotMismatch && origin === 'localStorage') {\n this.themeWarning = {\n origin,\n themeEngineVersion,\n type: 'snapshot_source_mismatch'\n }\n } else if (!theme) {\n this.themeWarning = {\n origin,\n noActionsPossible: true,\n themeEngineVersion,\n type: 'no_snapshot_old_version'\n }\n } else if (!versionsMatch) {\n this.themeWarning = {\n origin,\n noActionsPossible: !source,\n themeEngineVersion,\n type: 'wrong_version'\n }\n }\n }\n this.normalizeLocalState(theme, version, source, forcedSourceLoad)\n },\n forceLoadLocalStorage () {\n this.loadThemeFromLocalStorage(true)\n },\n dismissWarning () {\n this.themeWarning = undefined\n this.tempImportFile = undefined\n },\n forceLoad () {\n const { origin } = this.themeWarning\n switch (origin) {\n case 'localStorage':\n this.loadThemeFromLocalStorage(true)\n break\n case 'file':\n this.onImport(this.tempImportFile, true)\n break\n }\n this.dismissWarning()\n },\n forceSnapshot () {\n const { origin } = this.themeWarning\n switch (origin) {\n case 'localStorage':\n this.loadThemeFromLocalStorage(false, true)\n break\n case 'file':\n console.err('Forcing snapshout from file is not supported yet')\n break\n }\n this.dismissWarning()\n },\n loadThemeFromLocalStorage (confirmLoadSource = false, forceSnapshot = false) {\n const {\n customTheme: theme,\n customThemeSource: source\n } = this.$store.getters.mergedConfig\n if (!theme && !source) {\n // Anon user or never touched themes\n this.loadTheme(\n this.$store.state.instance.themeData,\n 'defaults',\n confirmLoadSource\n )\n } else {\n this.loadTheme(\n {\n theme,\n source: forceSnapshot ? theme : source\n },\n 'localStorage',\n confirmLoadSource\n )\n }\n },\n setCustomTheme () {\n this.$store.dispatch('setOption', {\n name: 'customTheme',\n value: {\n themeEngineVersion: CURRENT_VERSION,\n ...this.previewTheme\n }\n })\n this.$store.dispatch('setOption', {\n name: 'customThemeSource',\n value: {\n themeEngineVersion: CURRENT_VERSION,\n shadows: this.shadowsLocal,\n fonts: this.fontsLocal,\n opacity: this.currentOpacity,\n colors: this.currentColors,\n radii: this.currentRadii\n }\n })\n },\n updatePreviewColorsAndShadows () {\n this.previewColors = generateColors({\n opacity: this.currentOpacity,\n colors: this.currentColors\n })\n this.previewShadows = generateShadows(\n { shadows: this.shadowsLocal, opacity: this.previewTheme.opacity, themeEngineVersion: this.engineVersion },\n this.previewColors.theme.colors,\n this.previewColors.mod\n )\n },\n importTheme () { this.themeImporter.importData() },\n exportTheme () { this.themeExporter.exportData() },\n onImport (parsed, forceSource = false) {\n this.tempImportFile = parsed\n this.loadTheme(parsed, 'file', forceSource)\n },\n onImportFailure (result) {\n this.$store.dispatch('pushGlobalNotice', { messageKey: 'settings.invalid_theme_imported', level: 'error' })\n },\n importValidator (parsed) {\n const version = parsed._pleroma_theme_version\n return version >= 1 || version <= 2\n },\n clearAll () {\n this.loadThemeFromLocalStorage()\n },\n\n // Clears all the extra stuff when loading V1 theme\n clearV1 () {\n Object.keys(this.$data)\n .filter(_ => _.endsWith('ColorLocal') || _.endsWith('OpacityLocal'))\n .filter(_ => !v1OnlyNames.includes(_))\n .forEach(key => {\n set(this.$data, key, undefined)\n })\n },\n\n clearRoundness () {\n Object.keys(this.$data)\n .filter(_ => _.endsWith('RadiusLocal'))\n .forEach(key => {\n set(this.$data, key, undefined)\n })\n },\n\n clearOpacity () {\n Object.keys(this.$data)\n .filter(_ => _.endsWith('OpacityLocal'))\n .forEach(key => {\n set(this.$data, key, undefined)\n })\n },\n\n clearShadows () {\n this.shadowsLocal = {}\n },\n\n clearFonts () {\n this.fontsLocal = {}\n },\n\n /**\n * This applies stored theme data onto form. Supports three versions of data:\n * v3 (version >= 3) - newest version of themes which supports snapshots for better compatiblity\n * v2 (version = 2) - newer version of themes.\n * v1 (version = 1) - older version of themes (import from file)\n * v1l (version = l1) - older version of theme (load from local storage)\n * v1 and v1l differ because of way themes were stored/exported.\n * @param {Object} theme - theme data (snapshot)\n * @param {Number} version - version of data. 0 means try to guess based on data. \"l1\" means v1, locastorage type\n * @param {Object} source - theme source - this will be used if compatible\n * @param {Boolean} source - by default source won't be used if version doesn't match since it might render differently\n * this allows importing source anyway\n */\n normalizeLocalState (theme, version = 0, source, forceSource = false) {\n let input\n if (typeof source !== 'undefined') {\n if (forceSource || source.themeEngineVersion === CURRENT_VERSION) {\n input = source\n version = source.themeEngineVersion\n } else {\n input = theme\n }\n } else {\n input = theme\n }\n\n const radii = input.radii || input\n const opacity = input.opacity\n const shadows = input.shadows || {}\n const fonts = input.fonts || {}\n const colors = !input.themeEngineVersion\n ? colors2to3(input.colors || input)\n : input.colors || input\n\n if (version === 0) {\n if (input.version) version = input.version\n // Old v1 naming: fg is text, btn is foreground\n if (typeof colors.text === 'undefined' && typeof colors.fg !== 'undefined') {\n version = 1\n }\n // New v2 naming: text is text, fg is foreground\n if (typeof colors.text !== 'undefined' && typeof colors.fg !== 'undefined') {\n version = 2\n }\n }\n\n this.engineVersion = version\n\n // Stuff that differs between V1 and V2\n if (version === 1) {\n this.fgColorLocal = rgb2hex(colors.btn)\n this.textColorLocal = rgb2hex(colors.fg)\n }\n\n if (!this.keepColor) {\n this.clearV1()\n const keys = new Set(version !== 1 ? Object.keys(SLOT_INHERITANCE) : [])\n if (version === 1 || version === 'l1') {\n keys\n .add('bg')\n .add('link')\n .add('cRed')\n .add('cBlue')\n .add('cGreen')\n .add('cOrange')\n }\n\n keys.forEach(key => {\n const color = colors[key]\n const hex = rgb2hex(colors[key])\n this[key + 'ColorLocal'] = hex === '#aN' ? color : hex\n })\n }\n\n if (opacity && !this.keepOpacity) {\n this.clearOpacity()\n Object.entries(opacity).forEach(([k, v]) => {\n if (typeof v === 'undefined' || v === null || Number.isNaN(v)) return\n this[k + 'OpacityLocal'] = v\n })\n }\n\n if (!this.keepRoundness) {\n this.clearRoundness()\n Object.entries(radii).forEach(([k, v]) => {\n // 'Radius' is kept mostly for v1->v2 localstorage transition\n const key = k.endsWith('Radius') ? k.split('Radius')[0] : k\n this[key + 'RadiusLocal'] = v\n })\n }\n\n if (!this.keepShadows) {\n this.clearShadows()\n if (version === 2) {\n this.shadowsLocal = shadows2to3(shadows, this.previewTheme.opacity)\n } else {\n this.shadowsLocal = shadows\n }\n this.shadowSelected = this.shadowsAvailable[0]\n }\n\n if (!this.keepFonts) {\n this.clearFonts()\n this.fontsLocal = fonts\n }\n }\n },\n watch: {\n currentRadii () {\n try {\n this.previewRadii = generateRadii({ radii: this.currentRadii })\n this.radiiInvalid = false\n } catch (e) {\n this.radiiInvalid = true\n console.warn(e)\n }\n },\n shadowsLocal: {\n handler () {\n if (Object.getOwnPropertyNames(this.previewColors).length === 1) return\n try {\n this.updatePreviewColorsAndShadows()\n this.shadowsInvalid = false\n } catch (e) {\n this.shadowsInvalid = true\n console.warn(e)\n }\n },\n deep: true\n },\n fontsLocal: {\n handler () {\n try {\n this.previewFonts = generateFonts({ fonts: this.fontsLocal })\n this.fontsInvalid = false\n } catch (e) {\n this.fontsInvalid = true\n console.warn(e)\n }\n },\n deep: true\n },\n currentColors () {\n try {\n this.updatePreviewColorsAndShadows()\n this.colorsInvalid = false\n this.shadowsInvalid = false\n } catch (e) {\n this.colorsInvalid = true\n this.shadowsInvalid = true\n console.warn(e)\n }\n },\n currentOpacity () {\n try {\n this.updatePreviewColorsAndShadows()\n } catch (e) {\n console.warn(e)\n }\n },\n selected () {\n this.selectedTheme = Object.entries(this.availableStyles).find(([k, s]) => {\n if (Array.isArray(s)) {\n console.log(s[0] === this.selected, this.selected)\n return s[0] === this.selected\n } else {\n return s.name === this.selected\n }\n })[1]\n },\n selectedTheme () {\n this.dismissWarning()\n if (this.selectedVersion === 1) {\n if (!this.keepRoundness) {\n this.clearRoundness()\n }\n\n if (!this.keepShadows) {\n this.clearShadows()\n }\n\n if (!this.keepOpacity) {\n this.clearOpacity()\n }\n\n if (!this.keepColor) {\n this.clearV1()\n\n this.bgColorLocal = this.selectedTheme[1]\n this.fgColorLocal = this.selectedTheme[2]\n this.textColorLocal = this.selectedTheme[3]\n this.linkColorLocal = this.selectedTheme[4]\n this.cRedColorLocal = this.selectedTheme[5]\n this.cGreenColorLocal = this.selectedTheme[6]\n this.cBlueColorLocal = this.selectedTheme[7]\n this.cOrangeColorLocal = this.selectedTheme[8]\n }\n } else if (this.selectedVersion >= 2) {\n this.normalizeLocalState(this.selectedTheme.theme, 2, this.selectedTheme.source)\n }\n }\n }\n}\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!./theme_tab.scss\")\n}\n/* script */\nexport * from \"!!babel-loader!./theme_tab.js\"\nimport __vue_script__ from \"!!babel-loader!./theme_tab.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-400e19a1\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../../../node_modules/vue-loader/lib/selector?type=template&index=0!./theme_tab.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"theme-tab\"},[_c('div',{staticClass:\"presets-container\"},[_c('div',{staticClass:\"save-load\"},[(_vm.themeWarning)?_c('div',{staticClass:\"theme-warning\"},[_c('div',{staticClass:\"alert warning\"},[_vm._v(\"\\n \"+_vm._s(_vm.themeWarningHelp)+\"\\n \")]),_vm._v(\" \"),_c('div',{staticClass:\"buttons\"},[(_vm.themeWarning.type === 'snapshot_source_mismatch')?[_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.forceLoad}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.use_source'))+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.forceSnapshot}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.use_snapshot'))+\"\\n \")])]:(_vm.themeWarning.noActionsPossible)?[_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.dismissWarning}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('general.dismiss'))+\"\\n \")])]:[_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.forceLoad}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.load_theme'))+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.dismissWarning}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.keep_as_is'))+\"\\n \")])]],2)]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"top\"},[_c('div',{staticClass:\"presets\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.presets'))+\"\\n \"),_c('label',{staticClass:\"select\",attrs:{\"for\":\"preset-switcher\"}},[_c('Select',{staticClass:\"preset-switcher\",attrs:{\"id\":\"preset-switcher\"},model:{value:(_vm.selected),callback:function ($$v) {_vm.selected=$$v},expression:\"selected\"}},_vm._l((_vm.availableStyles),function(style){return _c('option',{key:style.name,style:({\n backgroundColor: style[1] || (style.theme || style.source).colors.bg,\n color: style[3] || (style.theme || style.source).colors.text\n }),domProps:{\"value\":style.name || style[0]}},[_vm._v(\"\\n \"+_vm._s(style[0] || style.name)+\"\\n \")])}),0)],1)]),_vm._v(\" \"),_c('div',{staticClass:\"export-import\"},[_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.importTheme}},[_vm._v(\"\\n \"+_vm._s(_vm.$t(\"settings.import_theme\"))+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.exportTheme}},[_vm._v(\"\\n \"+_vm._s(_vm.$t(\"settings.export_theme\"))+\"\\n \")])])])]),_vm._v(\" \"),_c('div',{staticClass:\"save-load-options\"},[_c('span',{staticClass:\"keep-option\"},[_c('Checkbox',{model:{value:(_vm.keepColor),callback:function ($$v) {_vm.keepColor=$$v},expression:\"keepColor\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.keep_color'))+\"\\n \")])],1),_vm._v(\" \"),_c('span',{staticClass:\"keep-option\"},[_c('Checkbox',{model:{value:(_vm.keepShadows),callback:function ($$v) {_vm.keepShadows=$$v},expression:\"keepShadows\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.keep_shadows'))+\"\\n \")])],1),_vm._v(\" \"),_c('span',{staticClass:\"keep-option\"},[_c('Checkbox',{model:{value:(_vm.keepOpacity),callback:function ($$v) {_vm.keepOpacity=$$v},expression:\"keepOpacity\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.keep_opacity'))+\"\\n \")])],1),_vm._v(\" \"),_c('span',{staticClass:\"keep-option\"},[_c('Checkbox',{model:{value:(_vm.keepRoundness),callback:function ($$v) {_vm.keepRoundness=$$v},expression:\"keepRoundness\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.keep_roundness'))+\"\\n \")])],1),_vm._v(\" \"),_c('span',{staticClass:\"keep-option\"},[_c('Checkbox',{model:{value:(_vm.keepFonts),callback:function ($$v) {_vm.keepFonts=$$v},expression:\"keepFonts\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.keep_fonts'))+\"\\n \")])],1),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.$t('settings.style.switcher.save_load_hint')))])])]),_vm._v(\" \"),_c('preview',{style:(_vm.previewRules)}),_vm._v(\" \"),_c('keep-alive',[_c('tab-switcher',{key:\"style-tweak\"},[_c('div',{staticClass:\"color-container\",attrs:{\"label\":_vm.$t('settings.style.common_colors._tab_label')}},[_c('div',{staticClass:\"tab-header\"},[_c('p',[_vm._v(_vm._s(_vm.$t('settings.theme_help')))]),_vm._v(\" \"),_c('div',{staticClass:\"tab-header-buttons\"},[_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.clearOpacity}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.clear_opacity'))+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.clearV1}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.clear_all'))+\"\\n \")])])]),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.$t('settings.theme_help_v2_1')))]),_vm._v(\" \"),_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.common_colors.main')))]),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('ColorInput',{attrs:{\"name\":\"bgColor\",\"label\":_vm.$t('settings.background')},model:{value:(_vm.bgColorLocal),callback:function ($$v) {_vm.bgColorLocal=$$v},expression:\"bgColorLocal\"}}),_vm._v(\" \"),_c('OpacityInput',{attrs:{\"name\":\"bgOpacity\",\"fallback\":_vm.previewTheme.opacity.bg},model:{value:(_vm.bgOpacityLocal),callback:function ($$v) {_vm.bgOpacityLocal=$$v},expression:\"bgOpacityLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"textColor\",\"label\":_vm.$t('settings.text')},model:{value:(_vm.textColorLocal),callback:function ($$v) {_vm.textColorLocal=$$v},expression:\"textColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.bgText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"accentColor\",\"fallback\":_vm.previewTheme.colors.link,\"label\":_vm.$t('settings.accent'),\"show-optional-tickbox\":typeof _vm.linkColorLocal !== 'undefined'},model:{value:(_vm.accentColorLocal),callback:function ($$v) {_vm.accentColorLocal=$$v},expression:\"accentColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"linkColor\",\"fallback\":_vm.previewTheme.colors.accent,\"label\":_vm.$t('settings.links'),\"show-optional-tickbox\":typeof _vm.accentColorLocal !== 'undefined'},model:{value:(_vm.linkColorLocal),callback:function ($$v) {_vm.linkColorLocal=$$v},expression:\"linkColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.bgLink}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('ColorInput',{attrs:{\"name\":\"fgColor\",\"label\":_vm.$t('settings.foreground')},model:{value:(_vm.fgColorLocal),callback:function ($$v) {_vm.fgColorLocal=$$v},expression:\"fgColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"fgTextColor\",\"label\":_vm.$t('settings.text'),\"fallback\":_vm.previewTheme.colors.fgText},model:{value:(_vm.fgTextColorLocal),callback:function ($$v) {_vm.fgTextColorLocal=$$v},expression:\"fgTextColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"fgLinkColor\",\"label\":_vm.$t('settings.links'),\"fallback\":_vm.previewTheme.colors.fgLink},model:{value:(_vm.fgLinkColorLocal),callback:function ($$v) {_vm.fgLinkColorLocal=$$v},expression:\"fgLinkColorLocal\"}}),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.$t('settings.style.common_colors.foreground_hint')))])],1),_vm._v(\" \"),_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.common_colors.rgbo')))]),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('ColorInput',{attrs:{\"name\":\"cRedColor\",\"label\":_vm.$t('settings.cRed')},model:{value:(_vm.cRedColorLocal),callback:function ($$v) {_vm.cRedColorLocal=$$v},expression:\"cRedColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.bgCRed}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"cBlueColor\",\"label\":_vm.$t('settings.cBlue')},model:{value:(_vm.cBlueColorLocal),callback:function ($$v) {_vm.cBlueColorLocal=$$v},expression:\"cBlueColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.bgCBlue}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('ColorInput',{attrs:{\"name\":\"cGreenColor\",\"label\":_vm.$t('settings.cGreen')},model:{value:(_vm.cGreenColorLocal),callback:function ($$v) {_vm.cGreenColorLocal=$$v},expression:\"cGreenColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.bgCGreen}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"cOrangeColor\",\"label\":_vm.$t('settings.cOrange')},model:{value:(_vm.cOrangeColorLocal),callback:function ($$v) {_vm.cOrangeColorLocal=$$v},expression:\"cOrangeColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.bgCOrange}})],1),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.$t('settings.theme_help_v2_2')))])]),_vm._v(\" \"),_c('div',{staticClass:\"color-container\",attrs:{\"label\":_vm.$t('settings.style.advanced_colors._tab_label')}},[_c('div',{staticClass:\"tab-header\"},[_c('p',[_vm._v(_vm._s(_vm.$t('settings.theme_help')))]),_vm._v(\" \"),_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.clearOpacity}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.clear_opacity'))+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.clearV1}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.clear_all'))+\"\\n \")])]),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.post')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"postLinkColor\",\"fallback\":_vm.previewTheme.colors.accent,\"label\":_vm.$t('settings.links')},model:{value:(_vm.postLinkColorLocal),callback:function ($$v) {_vm.postLinkColorLocal=$$v},expression:\"postLinkColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.postLink}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"postGreentextColor\",\"fallback\":_vm.previewTheme.colors.cGreen,\"label\":_vm.$t('settings.greentext')},model:{value:(_vm.postGreentextColorLocal),callback:function ($$v) {_vm.postGreentextColorLocal=$$v},expression:\"postGreentextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.postGreentext}}),_vm._v(\" \"),_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.alert')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"alertError\",\"label\":_vm.$t('settings.style.advanced_colors.alert_error'),\"fallback\":_vm.previewTheme.colors.alertError},model:{value:(_vm.alertErrorColorLocal),callback:function ($$v) {_vm.alertErrorColorLocal=$$v},expression:\"alertErrorColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"alertErrorText\",\"label\":_vm.$t('settings.text'),\"fallback\":_vm.previewTheme.colors.alertErrorText},model:{value:(_vm.alertErrorTextColorLocal),callback:function ($$v) {_vm.alertErrorTextColorLocal=$$v},expression:\"alertErrorTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.alertErrorText,\"large\":\"\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"alertWarning\",\"label\":_vm.$t('settings.style.advanced_colors.alert_warning'),\"fallback\":_vm.previewTheme.colors.alertWarning},model:{value:(_vm.alertWarningColorLocal),callback:function ($$v) {_vm.alertWarningColorLocal=$$v},expression:\"alertWarningColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"alertWarningText\",\"label\":_vm.$t('settings.text'),\"fallback\":_vm.previewTheme.colors.alertWarningText},model:{value:(_vm.alertWarningTextColorLocal),callback:function ($$v) {_vm.alertWarningTextColorLocal=$$v},expression:\"alertWarningTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.alertWarningText,\"large\":\"\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"alertNeutral\",\"label\":_vm.$t('settings.style.advanced_colors.alert_neutral'),\"fallback\":_vm.previewTheme.colors.alertNeutral},model:{value:(_vm.alertNeutralColorLocal),callback:function ($$v) {_vm.alertNeutralColorLocal=$$v},expression:\"alertNeutralColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"alertNeutralText\",\"label\":_vm.$t('settings.text'),\"fallback\":_vm.previewTheme.colors.alertNeutralText},model:{value:(_vm.alertNeutralTextColorLocal),callback:function ($$v) {_vm.alertNeutralTextColorLocal=$$v},expression:\"alertNeutralTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.alertNeutralText,\"large\":\"\"}}),_vm._v(\" \"),_c('OpacityInput',{attrs:{\"name\":\"alertOpacity\",\"fallback\":_vm.previewTheme.opacity.alert},model:{value:(_vm.alertOpacityLocal),callback:function ($$v) {_vm.alertOpacityLocal=$$v},expression:\"alertOpacityLocal\"}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.badge')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"badgeNotification\",\"label\":_vm.$t('settings.style.advanced_colors.badge_notification'),\"fallback\":_vm.previewTheme.colors.badgeNotification},model:{value:(_vm.badgeNotificationColorLocal),callback:function ($$v) {_vm.badgeNotificationColorLocal=$$v},expression:\"badgeNotificationColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"badgeNotificationText\",\"label\":_vm.$t('settings.text'),\"fallback\":_vm.previewTheme.colors.badgeNotificationText},model:{value:(_vm.badgeNotificationTextColorLocal),callback:function ($$v) {_vm.badgeNotificationTextColorLocal=$$v},expression:\"badgeNotificationTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.badgeNotificationText,\"large\":\"\"}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.panel_header')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"panelColor\",\"fallback\":_vm.previewTheme.colors.panel,\"label\":_vm.$t('settings.background')},model:{value:(_vm.panelColorLocal),callback:function ($$v) {_vm.panelColorLocal=$$v},expression:\"panelColorLocal\"}}),_vm._v(\" \"),_c('OpacityInput',{attrs:{\"name\":\"panelOpacity\",\"fallback\":_vm.previewTheme.opacity.panel,\"disabled\":_vm.panelColorLocal === 'transparent'},model:{value:(_vm.panelOpacityLocal),callback:function ($$v) {_vm.panelOpacityLocal=$$v},expression:\"panelOpacityLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"panelTextColor\",\"fallback\":_vm.previewTheme.colors.panelText,\"label\":_vm.$t('settings.text')},model:{value:(_vm.panelTextColorLocal),callback:function ($$v) {_vm.panelTextColorLocal=$$v},expression:\"panelTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.panelText,\"large\":\"\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"panelLinkColor\",\"fallback\":_vm.previewTheme.colors.panelLink,\"label\":_vm.$t('settings.links')},model:{value:(_vm.panelLinkColorLocal),callback:function ($$v) {_vm.panelLinkColorLocal=$$v},expression:\"panelLinkColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.panelLink,\"large\":\"\"}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.top_bar')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"topBarColor\",\"fallback\":_vm.previewTheme.colors.topBar,\"label\":_vm.$t('settings.background')},model:{value:(_vm.topBarColorLocal),callback:function ($$v) {_vm.topBarColorLocal=$$v},expression:\"topBarColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"topBarTextColor\",\"fallback\":_vm.previewTheme.colors.topBarText,\"label\":_vm.$t('settings.text')},model:{value:(_vm.topBarTextColorLocal),callback:function ($$v) {_vm.topBarTextColorLocal=$$v},expression:\"topBarTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.topBarText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"topBarLinkColor\",\"fallback\":_vm.previewTheme.colors.topBarLink,\"label\":_vm.$t('settings.links')},model:{value:(_vm.topBarLinkColorLocal),callback:function ($$v) {_vm.topBarLinkColorLocal=$$v},expression:\"topBarLinkColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.topBarLink}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.inputs')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"inputColor\",\"fallback\":_vm.previewTheme.colors.input,\"label\":_vm.$t('settings.background')},model:{value:(_vm.inputColorLocal),callback:function ($$v) {_vm.inputColorLocal=$$v},expression:\"inputColorLocal\"}}),_vm._v(\" \"),_c('OpacityInput',{attrs:{\"name\":\"inputOpacity\",\"fallback\":_vm.previewTheme.opacity.input,\"disabled\":_vm.inputColorLocal === 'transparent'},model:{value:(_vm.inputOpacityLocal),callback:function ($$v) {_vm.inputOpacityLocal=$$v},expression:\"inputOpacityLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"inputTextColor\",\"fallback\":_vm.previewTheme.colors.inputText,\"label\":_vm.$t('settings.text')},model:{value:(_vm.inputTextColorLocal),callback:function ($$v) {_vm.inputTextColorLocal=$$v},expression:\"inputTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.inputText}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.buttons')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnColor\",\"fallback\":_vm.previewTheme.colors.btn,\"label\":_vm.$t('settings.background')},model:{value:(_vm.btnColorLocal),callback:function ($$v) {_vm.btnColorLocal=$$v},expression:\"btnColorLocal\"}}),_vm._v(\" \"),_c('OpacityInput',{attrs:{\"name\":\"btnOpacity\",\"fallback\":_vm.previewTheme.opacity.btn,\"disabled\":_vm.btnColorLocal === 'transparent'},model:{value:(_vm.btnOpacityLocal),callback:function ($$v) {_vm.btnOpacityLocal=$$v},expression:\"btnOpacityLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnTextColor\",\"fallback\":_vm.previewTheme.colors.btnText,\"label\":_vm.$t('settings.text')},model:{value:(_vm.btnTextColorLocal),callback:function ($$v) {_vm.btnTextColorLocal=$$v},expression:\"btnTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.btnText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnPanelTextColor\",\"fallback\":_vm.previewTheme.colors.btnPanelText,\"label\":_vm.$t('settings.style.advanced_colors.panel_header')},model:{value:(_vm.btnPanelTextColorLocal),callback:function ($$v) {_vm.btnPanelTextColorLocal=$$v},expression:\"btnPanelTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.btnPanelText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnTopBarTextColor\",\"fallback\":_vm.previewTheme.colors.btnTopBarText,\"label\":_vm.$t('settings.style.advanced_colors.top_bar')},model:{value:(_vm.btnTopBarTextColorLocal),callback:function ($$v) {_vm.btnTopBarTextColorLocal=$$v},expression:\"btnTopBarTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.btnTopBarText}}),_vm._v(\" \"),_c('h5',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.pressed')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnPressedColor\",\"fallback\":_vm.previewTheme.colors.btnPressed,\"label\":_vm.$t('settings.background')},model:{value:(_vm.btnPressedColorLocal),callback:function ($$v) {_vm.btnPressedColorLocal=$$v},expression:\"btnPressedColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnPressedTextColor\",\"fallback\":_vm.previewTheme.colors.btnPressedText,\"label\":_vm.$t('settings.text')},model:{value:(_vm.btnPressedTextColorLocal),callback:function ($$v) {_vm.btnPressedTextColorLocal=$$v},expression:\"btnPressedTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.btnPressedText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnPressedPanelTextColor\",\"fallback\":_vm.previewTheme.colors.btnPressedPanelText,\"label\":_vm.$t('settings.style.advanced_colors.panel_header')},model:{value:(_vm.btnPressedPanelTextColorLocal),callback:function ($$v) {_vm.btnPressedPanelTextColorLocal=$$v},expression:\"btnPressedPanelTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.btnPressedPanelText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnPressedTopBarTextColor\",\"fallback\":_vm.previewTheme.colors.btnPressedTopBarText,\"label\":_vm.$t('settings.style.advanced_colors.top_bar')},model:{value:(_vm.btnPressedTopBarTextColorLocal),callback:function ($$v) {_vm.btnPressedTopBarTextColorLocal=$$v},expression:\"btnPressedTopBarTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.btnPressedTopBarText}}),_vm._v(\" \"),_c('h5',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.disabled')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnDisabledColor\",\"fallback\":_vm.previewTheme.colors.btnDisabled,\"label\":_vm.$t('settings.background')},model:{value:(_vm.btnDisabledColorLocal),callback:function ($$v) {_vm.btnDisabledColorLocal=$$v},expression:\"btnDisabledColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnDisabledTextColor\",\"fallback\":_vm.previewTheme.colors.btnDisabledText,\"label\":_vm.$t('settings.text')},model:{value:(_vm.btnDisabledTextColorLocal),callback:function ($$v) {_vm.btnDisabledTextColorLocal=$$v},expression:\"btnDisabledTextColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnDisabledPanelTextColor\",\"fallback\":_vm.previewTheme.colors.btnDisabledPanelText,\"label\":_vm.$t('settings.style.advanced_colors.panel_header')},model:{value:(_vm.btnDisabledPanelTextColorLocal),callback:function ($$v) {_vm.btnDisabledPanelTextColorLocal=$$v},expression:\"btnDisabledPanelTextColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnDisabledTopBarTextColor\",\"fallback\":_vm.previewTheme.colors.btnDisabledTopBarText,\"label\":_vm.$t('settings.style.advanced_colors.top_bar')},model:{value:(_vm.btnDisabledTopBarTextColorLocal),callback:function ($$v) {_vm.btnDisabledTopBarTextColorLocal=$$v},expression:\"btnDisabledTopBarTextColorLocal\"}}),_vm._v(\" \"),_c('h5',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.toggled')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnToggledColor\",\"fallback\":_vm.previewTheme.colors.btnToggled,\"label\":_vm.$t('settings.background')},model:{value:(_vm.btnToggledColorLocal),callback:function ($$v) {_vm.btnToggledColorLocal=$$v},expression:\"btnToggledColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnToggledTextColor\",\"fallback\":_vm.previewTheme.colors.btnToggledText,\"label\":_vm.$t('settings.text')},model:{value:(_vm.btnToggledTextColorLocal),callback:function ($$v) {_vm.btnToggledTextColorLocal=$$v},expression:\"btnToggledTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.btnToggledText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnToggledPanelTextColor\",\"fallback\":_vm.previewTheme.colors.btnToggledPanelText,\"label\":_vm.$t('settings.style.advanced_colors.panel_header')},model:{value:(_vm.btnToggledPanelTextColorLocal),callback:function ($$v) {_vm.btnToggledPanelTextColorLocal=$$v},expression:\"btnToggledPanelTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.btnToggledPanelText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnToggledTopBarTextColor\",\"fallback\":_vm.previewTheme.colors.btnToggledTopBarText,\"label\":_vm.$t('settings.style.advanced_colors.top_bar')},model:{value:(_vm.btnToggledTopBarTextColorLocal),callback:function ($$v) {_vm.btnToggledTopBarTextColorLocal=$$v},expression:\"btnToggledTopBarTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.btnToggledTopBarText}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.tabs')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"tabColor\",\"fallback\":_vm.previewTheme.colors.tab,\"label\":_vm.$t('settings.background')},model:{value:(_vm.tabColorLocal),callback:function ($$v) {_vm.tabColorLocal=$$v},expression:\"tabColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"tabTextColor\",\"fallback\":_vm.previewTheme.colors.tabText,\"label\":_vm.$t('settings.text')},model:{value:(_vm.tabTextColorLocal),callback:function ($$v) {_vm.tabTextColorLocal=$$v},expression:\"tabTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.tabText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"tabActiveTextColor\",\"fallback\":_vm.previewTheme.colors.tabActiveText,\"label\":_vm.$t('settings.text')},model:{value:(_vm.tabActiveTextColorLocal),callback:function ($$v) {_vm.tabActiveTextColorLocal=$$v},expression:\"tabActiveTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.tabActiveText}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.borders')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"borderColor\",\"fallback\":_vm.previewTheme.colors.border,\"label\":_vm.$t('settings.style.common.color')},model:{value:(_vm.borderColorLocal),callback:function ($$v) {_vm.borderColorLocal=$$v},expression:\"borderColorLocal\"}}),_vm._v(\" \"),_c('OpacityInput',{attrs:{\"name\":\"borderOpacity\",\"fallback\":_vm.previewTheme.opacity.border,\"disabled\":_vm.borderColorLocal === 'transparent'},model:{value:(_vm.borderOpacityLocal),callback:function ($$v) {_vm.borderOpacityLocal=$$v},expression:\"borderOpacityLocal\"}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.faint_text')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"faintColor\",\"fallback\":_vm.previewTheme.colors.faint,\"label\":_vm.$t('settings.text')},model:{value:(_vm.faintColorLocal),callback:function ($$v) {_vm.faintColorLocal=$$v},expression:\"faintColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"faintLinkColor\",\"fallback\":_vm.previewTheme.colors.faintLink,\"label\":_vm.$t('settings.links')},model:{value:(_vm.faintLinkColorLocal),callback:function ($$v) {_vm.faintLinkColorLocal=$$v},expression:\"faintLinkColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"panelFaintColor\",\"fallback\":_vm.previewTheme.colors.panelFaint,\"label\":_vm.$t('settings.style.advanced_colors.panel_header')},model:{value:(_vm.panelFaintColorLocal),callback:function ($$v) {_vm.panelFaintColorLocal=$$v},expression:\"panelFaintColorLocal\"}}),_vm._v(\" \"),_c('OpacityInput',{attrs:{\"name\":\"faintOpacity\",\"fallback\":_vm.previewTheme.opacity.faint},model:{value:(_vm.faintOpacityLocal),callback:function ($$v) {_vm.faintOpacityLocal=$$v},expression:\"faintOpacityLocal\"}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.underlay')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"underlay\",\"label\":_vm.$t('settings.style.advanced_colors.underlay'),\"fallback\":_vm.previewTheme.colors.underlay},model:{value:(_vm.underlayColorLocal),callback:function ($$v) {_vm.underlayColorLocal=$$v},expression:\"underlayColorLocal\"}}),_vm._v(\" \"),_c('OpacityInput',{attrs:{\"name\":\"underlayOpacity\",\"fallback\":_vm.previewTheme.opacity.underlay,\"disabled\":_vm.underlayOpacityLocal === 'transparent'},model:{value:(_vm.underlayOpacityLocal),callback:function ($$v) {_vm.underlayOpacityLocal=$$v},expression:\"underlayOpacityLocal\"}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.wallpaper')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"wallpaper\",\"label\":_vm.$t('settings.style.advanced_colors.wallpaper'),\"fallback\":_vm.previewTheme.colors.wallpaper},model:{value:(_vm.wallpaperColorLocal),callback:function ($$v) {_vm.wallpaperColorLocal=$$v},expression:\"wallpaperColorLocal\"}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.poll')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"poll\",\"label\":_vm.$t('settings.background'),\"fallback\":_vm.previewTheme.colors.poll},model:{value:(_vm.pollColorLocal),callback:function ($$v) {_vm.pollColorLocal=$$v},expression:\"pollColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"pollText\",\"label\":_vm.$t('settings.text'),\"fallback\":_vm.previewTheme.colors.pollText},model:{value:(_vm.pollTextColorLocal),callback:function ($$v) {_vm.pollTextColorLocal=$$v},expression:\"pollTextColorLocal\"}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.icons')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"icon\",\"label\":_vm.$t('settings.style.advanced_colors.icons'),\"fallback\":_vm.previewTheme.colors.icon},model:{value:(_vm.iconColorLocal),callback:function ($$v) {_vm.iconColorLocal=$$v},expression:\"iconColorLocal\"}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.highlight')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"highlight\",\"label\":_vm.$t('settings.background'),\"fallback\":_vm.previewTheme.colors.highlight},model:{value:(_vm.highlightColorLocal),callback:function ($$v) {_vm.highlightColorLocal=$$v},expression:\"highlightColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"highlightText\",\"label\":_vm.$t('settings.text'),\"fallback\":_vm.previewTheme.colors.highlightText},model:{value:(_vm.highlightTextColorLocal),callback:function ($$v) {_vm.highlightTextColorLocal=$$v},expression:\"highlightTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.highlightText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"highlightLink\",\"label\":_vm.$t('settings.links'),\"fallback\":_vm.previewTheme.colors.highlightLink},model:{value:(_vm.highlightLinkColorLocal),callback:function ($$v) {_vm.highlightLinkColorLocal=$$v},expression:\"highlightLinkColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.highlightLink}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.popover')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"popover\",\"label\":_vm.$t('settings.background'),\"fallback\":_vm.previewTheme.colors.popover},model:{value:(_vm.popoverColorLocal),callback:function ($$v) {_vm.popoverColorLocal=$$v},expression:\"popoverColorLocal\"}}),_vm._v(\" \"),_c('OpacityInput',{attrs:{\"name\":\"popoverOpacity\",\"fallback\":_vm.previewTheme.opacity.popover,\"disabled\":_vm.popoverOpacityLocal === 'transparent'},model:{value:(_vm.popoverOpacityLocal),callback:function ($$v) {_vm.popoverOpacityLocal=$$v},expression:\"popoverOpacityLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"popoverText\",\"label\":_vm.$t('settings.text'),\"fallback\":_vm.previewTheme.colors.popoverText},model:{value:(_vm.popoverTextColorLocal),callback:function ($$v) {_vm.popoverTextColorLocal=$$v},expression:\"popoverTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.popoverText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"popoverLink\",\"label\":_vm.$t('settings.links'),\"fallback\":_vm.previewTheme.colors.popoverLink},model:{value:(_vm.popoverLinkColorLocal),callback:function ($$v) {_vm.popoverLinkColorLocal=$$v},expression:\"popoverLinkColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.popoverLink}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.selectedPost')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"selectedPost\",\"label\":_vm.$t('settings.background'),\"fallback\":_vm.previewTheme.colors.selectedPost},model:{value:(_vm.selectedPostColorLocal),callback:function ($$v) {_vm.selectedPostColorLocal=$$v},expression:\"selectedPostColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"selectedPostText\",\"label\":_vm.$t('settings.text'),\"fallback\":_vm.previewTheme.colors.selectedPostText},model:{value:(_vm.selectedPostTextColorLocal),callback:function ($$v) {_vm.selectedPostTextColorLocal=$$v},expression:\"selectedPostTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.selectedPostText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"selectedPostLink\",\"label\":_vm.$t('settings.links'),\"fallback\":_vm.previewTheme.colors.selectedPostLink},model:{value:(_vm.selectedPostLinkColorLocal),callback:function ($$v) {_vm.selectedPostLinkColorLocal=$$v},expression:\"selectedPostLinkColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.selectedPostLink}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.selectedMenu')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"selectedMenu\",\"label\":_vm.$t('settings.background'),\"fallback\":_vm.previewTheme.colors.selectedMenu},model:{value:(_vm.selectedMenuColorLocal),callback:function ($$v) {_vm.selectedMenuColorLocal=$$v},expression:\"selectedMenuColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"selectedMenuText\",\"label\":_vm.$t('settings.text'),\"fallback\":_vm.previewTheme.colors.selectedMenuText},model:{value:(_vm.selectedMenuTextColorLocal),callback:function ($$v) {_vm.selectedMenuTextColorLocal=$$v},expression:\"selectedMenuTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.selectedMenuText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"selectedMenuLink\",\"label\":_vm.$t('settings.links'),\"fallback\":_vm.previewTheme.colors.selectedMenuLink},model:{value:(_vm.selectedMenuLinkColorLocal),callback:function ($$v) {_vm.selectedMenuLinkColorLocal=$$v},expression:\"selectedMenuLinkColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.selectedMenuLink}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('chats.chats')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"chatBgColor\",\"fallback\":_vm.previewTheme.colors.bg,\"label\":_vm.$t('settings.background')},model:{value:(_vm.chatBgColorLocal),callback:function ($$v) {_vm.chatBgColorLocal=$$v},expression:\"chatBgColorLocal\"}}),_vm._v(\" \"),_c('h5',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.chat.incoming')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"chatMessageIncomingBgColor\",\"fallback\":_vm.previewTheme.colors.bg,\"label\":_vm.$t('settings.background')},model:{value:(_vm.chatMessageIncomingBgColorLocal),callback:function ($$v) {_vm.chatMessageIncomingBgColorLocal=$$v},expression:\"chatMessageIncomingBgColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"chatMessageIncomingTextColor\",\"fallback\":_vm.previewTheme.colors.text,\"label\":_vm.$t('settings.text')},model:{value:(_vm.chatMessageIncomingTextColorLocal),callback:function ($$v) {_vm.chatMessageIncomingTextColorLocal=$$v},expression:\"chatMessageIncomingTextColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"chatMessageIncomingLinkColor\",\"fallback\":_vm.previewTheme.colors.link,\"label\":_vm.$t('settings.links')},model:{value:(_vm.chatMessageIncomingLinkColorLocal),callback:function ($$v) {_vm.chatMessageIncomingLinkColorLocal=$$v},expression:\"chatMessageIncomingLinkColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"chatMessageIncomingBorderLinkColor\",\"fallback\":_vm.previewTheme.colors.fg,\"label\":_vm.$t('settings.style.advanced_colors.chat.border')},model:{value:(_vm.chatMessageIncomingBorderColorLocal),callback:function ($$v) {_vm.chatMessageIncomingBorderColorLocal=$$v},expression:\"chatMessageIncomingBorderColorLocal\"}}),_vm._v(\" \"),_c('h5',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.chat.outgoing')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"chatMessageOutgoingBgColor\",\"fallback\":_vm.previewTheme.colors.bg,\"label\":_vm.$t('settings.background')},model:{value:(_vm.chatMessageOutgoingBgColorLocal),callback:function ($$v) {_vm.chatMessageOutgoingBgColorLocal=$$v},expression:\"chatMessageOutgoingBgColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"chatMessageOutgoingTextColor\",\"fallback\":_vm.previewTheme.colors.text,\"label\":_vm.$t('settings.text')},model:{value:(_vm.chatMessageOutgoingTextColorLocal),callback:function ($$v) {_vm.chatMessageOutgoingTextColorLocal=$$v},expression:\"chatMessageOutgoingTextColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"chatMessageOutgoingLinkColor\",\"fallback\":_vm.previewTheme.colors.link,\"label\":_vm.$t('settings.links')},model:{value:(_vm.chatMessageOutgoingLinkColorLocal),callback:function ($$v) {_vm.chatMessageOutgoingLinkColorLocal=$$v},expression:\"chatMessageOutgoingLinkColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"chatMessageOutgoingBorderLinkColor\",\"fallback\":_vm.previewTheme.colors.bg,\"label\":_vm.$t('settings.style.advanced_colors.chat.border')},model:{value:(_vm.chatMessageOutgoingBorderColorLocal),callback:function ($$v) {_vm.chatMessageOutgoingBorderColorLocal=$$v},expression:\"chatMessageOutgoingBorderColorLocal\"}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"radius-container\",attrs:{\"label\":_vm.$t('settings.style.radii._tab_label')}},[_c('div',{staticClass:\"tab-header\"},[_c('p',[_vm._v(_vm._s(_vm.$t('settings.radii_help')))]),_vm._v(\" \"),_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.clearRoundness}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.clear_all'))+\"\\n \")])]),_vm._v(\" \"),_c('RangeInput',{attrs:{\"name\":\"btnRadius\",\"label\":_vm.$t('settings.btnRadius'),\"fallback\":_vm.previewTheme.radii.btn,\"max\":\"16\",\"hard-min\":\"0\"},model:{value:(_vm.btnRadiusLocal),callback:function ($$v) {_vm.btnRadiusLocal=$$v},expression:\"btnRadiusLocal\"}}),_vm._v(\" \"),_c('RangeInput',{attrs:{\"name\":\"inputRadius\",\"label\":_vm.$t('settings.inputRadius'),\"fallback\":_vm.previewTheme.radii.input,\"max\":\"9\",\"hard-min\":\"0\"},model:{value:(_vm.inputRadiusLocal),callback:function ($$v) {_vm.inputRadiusLocal=$$v},expression:\"inputRadiusLocal\"}}),_vm._v(\" \"),_c('RangeInput',{attrs:{\"name\":\"checkboxRadius\",\"label\":_vm.$t('settings.checkboxRadius'),\"fallback\":_vm.previewTheme.radii.checkbox,\"max\":\"16\",\"hard-min\":\"0\"},model:{value:(_vm.checkboxRadiusLocal),callback:function ($$v) {_vm.checkboxRadiusLocal=$$v},expression:\"checkboxRadiusLocal\"}}),_vm._v(\" \"),_c('RangeInput',{attrs:{\"name\":\"panelRadius\",\"label\":_vm.$t('settings.panelRadius'),\"fallback\":_vm.previewTheme.radii.panel,\"max\":\"50\",\"hard-min\":\"0\"},model:{value:(_vm.panelRadiusLocal),callback:function ($$v) {_vm.panelRadiusLocal=$$v},expression:\"panelRadiusLocal\"}}),_vm._v(\" \"),_c('RangeInput',{attrs:{\"name\":\"avatarRadius\",\"label\":_vm.$t('settings.avatarRadius'),\"fallback\":_vm.previewTheme.radii.avatar,\"max\":\"28\",\"hard-min\":\"0\"},model:{value:(_vm.avatarRadiusLocal),callback:function ($$v) {_vm.avatarRadiusLocal=$$v},expression:\"avatarRadiusLocal\"}}),_vm._v(\" \"),_c('RangeInput',{attrs:{\"name\":\"avatarAltRadius\",\"label\":_vm.$t('settings.avatarAltRadius'),\"fallback\":_vm.previewTheme.radii.avatarAlt,\"max\":\"28\",\"hard-min\":\"0\"},model:{value:(_vm.avatarAltRadiusLocal),callback:function ($$v) {_vm.avatarAltRadiusLocal=$$v},expression:\"avatarAltRadiusLocal\"}}),_vm._v(\" \"),_c('RangeInput',{attrs:{\"name\":\"attachmentRadius\",\"label\":_vm.$t('settings.attachmentRadius'),\"fallback\":_vm.previewTheme.radii.attachment,\"max\":\"50\",\"hard-min\":\"0\"},model:{value:(_vm.attachmentRadiusLocal),callback:function ($$v) {_vm.attachmentRadiusLocal=$$v},expression:\"attachmentRadiusLocal\"}}),_vm._v(\" \"),_c('RangeInput',{attrs:{\"name\":\"tooltipRadius\",\"label\":_vm.$t('settings.tooltipRadius'),\"fallback\":_vm.previewTheme.radii.tooltip,\"max\":\"50\",\"hard-min\":\"0\"},model:{value:(_vm.tooltipRadiusLocal),callback:function ($$v) {_vm.tooltipRadiusLocal=$$v},expression:\"tooltipRadiusLocal\"}}),_vm._v(\" \"),_c('RangeInput',{attrs:{\"name\":\"chatMessageRadius\",\"label\":_vm.$t('settings.chatMessageRadius'),\"fallback\":_vm.previewTheme.radii.chatMessage || 2,\"max\":\"50\",\"hard-min\":\"0\"},model:{value:(_vm.chatMessageRadiusLocal),callback:function ($$v) {_vm.chatMessageRadiusLocal=$$v},expression:\"chatMessageRadiusLocal\"}})],1),_vm._v(\" \"),_c('div',{staticClass:\"shadow-container\",attrs:{\"label\":_vm.$t('settings.style.shadows._tab_label')}},[_c('div',{staticClass:\"tab-header shadow-selector\"},[_c('div',{staticClass:\"select-container\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.shadows.component'))+\"\\n \"),_c('Select',{staticClass:\"shadow-switcher\",attrs:{\"id\":\"shadow-switcher\"},model:{value:(_vm.shadowSelected),callback:function ($$v) {_vm.shadowSelected=$$v},expression:\"shadowSelected\"}},_vm._l((_vm.shadowsAvailable),function(shadow){return _c('option',{key:shadow,domProps:{\"value\":shadow}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.shadows.components.' + shadow))+\"\\n \")])}),0)],1),_vm._v(\" \"),_c('div',{staticClass:\"override\"},[_c('label',{staticClass:\"label\",attrs:{\"for\":\"override\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.shadows.override'))+\"\\n \")]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.currentShadowOverriden),expression:\"currentShadowOverriden\"}],staticClass:\"input-override\",attrs:{\"id\":\"override\",\"name\":\"override\",\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.currentShadowOverriden)?_vm._i(_vm.currentShadowOverriden,null)>-1:(_vm.currentShadowOverriden)},on:{\"change\":function($event){var $$a=_vm.currentShadowOverriden,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.currentShadowOverriden=$$a.concat([$$v]))}else{$$i>-1&&(_vm.currentShadowOverriden=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.currentShadowOverriden=$$c}}}}),_vm._v(\" \"),_c('label',{staticClass:\"checkbox-label\",attrs:{\"for\":\"override\"}})]),_vm._v(\" \"),_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.clearShadows}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.clear_all'))+\"\\n \")])]),_vm._v(\" \"),_c('ShadowControl',{attrs:{\"ready\":!!_vm.currentShadowFallback,\"fallback\":_vm.currentShadowFallback},model:{value:(_vm.currentShadow),callback:function ($$v) {_vm.currentShadow=$$v},expression:\"currentShadow\"}}),_vm._v(\" \"),(_vm.shadowSelected === 'avatar' || _vm.shadowSelected === 'avatarStatus')?_c('div',[_c('i18n',{attrs:{\"path\":\"settings.style.shadows.filter_hint.always_drop_shadow\",\"tag\":\"p\"}},[_c('code',[_vm._v(\"filter: drop-shadow()\")])]),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.$t('settings.style.shadows.filter_hint.avatar_inset')))]),_vm._v(\" \"),_c('i18n',{attrs:{\"path\":\"settings.style.shadows.filter_hint.drop_shadow_syntax\",\"tag\":\"p\"}},[_c('code',[_vm._v(\"drop-shadow\")]),_vm._v(\" \"),_c('code',[_vm._v(\"spread-radius\")]),_vm._v(\" \"),_c('code',[_vm._v(\"inset\")])]),_vm._v(\" \"),_c('i18n',{attrs:{\"path\":\"settings.style.shadows.filter_hint.inset_classic\",\"tag\":\"p\"}},[_c('code',[_vm._v(\"box-shadow\")])]),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.$t('settings.style.shadows.filter_hint.spread_zero')))])],1):_vm._e()],1),_vm._v(\" \"),_c('div',{staticClass:\"fonts-container\",attrs:{\"label\":_vm.$t('settings.style.fonts._tab_label')}},[_c('div',{staticClass:\"tab-header\"},[_c('p',[_vm._v(_vm._s(_vm.$t('settings.style.fonts.help')))]),_vm._v(\" \"),_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.clearFonts}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.clear_all'))+\"\\n \")])]),_vm._v(\" \"),_c('FontControl',{attrs:{\"name\":\"ui\",\"label\":_vm.$t('settings.style.fonts.components.interface'),\"fallback\":_vm.previewTheme.fonts.interface,\"no-inherit\":\"1\"},model:{value:(_vm.fontsLocal.interface),callback:function ($$v) {_vm.$set(_vm.fontsLocal, \"interface\", $$v)},expression:\"fontsLocal.interface\"}}),_vm._v(\" \"),_c('FontControl',{attrs:{\"name\":\"input\",\"label\":_vm.$t('settings.style.fonts.components.input'),\"fallback\":_vm.previewTheme.fonts.input},model:{value:(_vm.fontsLocal.input),callback:function ($$v) {_vm.$set(_vm.fontsLocal, \"input\", $$v)},expression:\"fontsLocal.input\"}}),_vm._v(\" \"),_c('FontControl',{attrs:{\"name\":\"post\",\"label\":_vm.$t('settings.style.fonts.components.post'),\"fallback\":_vm.previewTheme.fonts.post},model:{value:(_vm.fontsLocal.post),callback:function ($$v) {_vm.$set(_vm.fontsLocal, \"post\", $$v)},expression:\"fontsLocal.post\"}}),_vm._v(\" \"),_c('FontControl',{attrs:{\"name\":\"postCode\",\"label\":_vm.$t('settings.style.fonts.components.postCode'),\"fallback\":_vm.previewTheme.fonts.postCode},model:{value:(_vm.fontsLocal.postCode),callback:function ($$v) {_vm.$set(_vm.fontsLocal, \"postCode\", $$v)},expression:\"fontsLocal.postCode\"}})],1)])],1),_vm._v(\" \"),_c('div',{staticClass:\"apply-container\"},[_c('button',{staticClass:\"btn button-default submit\",attrs:{\"disabled\":!_vm.themeValid},on:{\"click\":_vm.setCustomTheme}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('general.apply'))+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.clearAll}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.reset'))+\"\\n \")])])],1)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import TabSwitcher from 'src/components/tab_switcher/tab_switcher.js'\n\nimport DataImportExportTab from './tabs/data_import_export_tab.vue'\nimport MutesAndBlocksTab from './tabs/mutes_and_blocks_tab.vue'\nimport NotificationsTab from './tabs/notifications_tab.vue'\nimport FilteringTab from './tabs/filtering_tab.vue'\nimport SecurityTab from './tabs/security_tab/security_tab.vue'\nimport ProfileTab from './tabs/profile_tab.vue'\nimport GeneralTab from './tabs/general_tab.vue'\nimport VersionTab from './tabs/version_tab.vue'\nimport ThemeTab from './tabs/theme_tab/theme_tab.vue'\n\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faWrench,\n faUser,\n faFilter,\n faPaintBrush,\n faBell,\n faDownload,\n faEyeSlash,\n faInfo\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faWrench,\n faUser,\n faFilter,\n faPaintBrush,\n faBell,\n faDownload,\n faEyeSlash,\n faInfo\n)\n\nconst SettingsModalContent = {\n components: {\n TabSwitcher,\n\n DataImportExportTab,\n MutesAndBlocksTab,\n NotificationsTab,\n FilteringTab,\n SecurityTab,\n ProfileTab,\n GeneralTab,\n VersionTab,\n ThemeTab\n },\n computed: {\n isLoggedIn () {\n return !!this.$store.state.users.currentUser\n },\n open () {\n return this.$store.state.interface.settingsModalState !== 'hidden'\n }\n },\n methods: {\n onOpen () {\n const targetTab = this.$store.state.interface.settingsModalTargetTab\n // We're being told to open in specific tab\n if (targetTab) {\n const tabIndex = this.$refs.tabSwitcher.$slots.default.findIndex(elm => {\n return elm.data && elm.data.attrs['data-tab-name'] === targetTab\n })\n if (tabIndex >= 0) {\n this.$refs.tabSwitcher.setTab(tabIndex)\n }\n }\n // Clear the state of target tab, so that next time settings is opened\n // it doesn't force it.\n this.$store.dispatch('clearSettingsModalTargetTab')\n }\n },\n mounted () {\n this.onOpen()\n },\n watch: {\n open: function (value) {\n if (value) this.onOpen()\n }\n }\n}\n\nexport default SettingsModalContent\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!./settings_modal_content.scss\")\n}\n/* script */\nexport * from \"!!babel-loader!./settings_modal_content.js\"\nimport __vue_script__ from \"!!babel-loader!./settings_modal_content.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-c173d428\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./settings_modal_content.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('tab-switcher',{ref:\"tabSwitcher\",staticClass:\"settings_tab-switcher\",attrs:{\"side-tab-bar\":true,\"scrollable-tabs\":true}},[_c('div',{attrs:{\"label\":_vm.$t('settings.general'),\"icon\":\"wrench\",\"data-tab-name\":\"general\"}},[_c('GeneralTab')],1),_vm._v(\" \"),(_vm.isLoggedIn)?_c('div',{attrs:{\"label\":_vm.$t('settings.profile_tab'),\"icon\":\"user\",\"data-tab-name\":\"profile\"}},[_c('ProfileTab')],1):_vm._e(),_vm._v(\" \"),(_vm.isLoggedIn)?_c('div',{attrs:{\"label\":_vm.$t('settings.security_tab'),\"icon\":\"lock\",\"data-tab-name\":\"security\"}},[_c('SecurityTab')],1):_vm._e(),_vm._v(\" \"),_c('div',{attrs:{\"label\":_vm.$t('settings.filtering'),\"icon\":\"filter\",\"data-tab-name\":\"filtering\"}},[_c('FilteringTab')],1),_vm._v(\" \"),_c('div',{attrs:{\"label\":_vm.$t('settings.theme'),\"icon\":\"paint-brush\",\"data-tab-name\":\"theme\"}},[_c('ThemeTab')],1),_vm._v(\" \"),(_vm.isLoggedIn)?_c('div',{attrs:{\"label\":_vm.$t('settings.notifications'),\"icon\":\"bell\",\"data-tab-name\":\"notifications\"}},[_c('NotificationsTab')],1):_vm._e(),_vm._v(\" \"),(_vm.isLoggedIn)?_c('div',{attrs:{\"label\":_vm.$t('settings.data_import_export_tab'),\"icon\":\"download\",\"data-tab-name\":\"dataImportExport\"}},[_c('DataImportExportTab')],1):_vm._e(),_vm._v(\" \"),(_vm.isLoggedIn)?_c('div',{attrs:{\"label\":_vm.$t('settings.mutes_and_blocks'),\"fullHeight\":true,\"icon\":\"eye-slash\",\"data-tab-name\":\"mutesAndBlocks\"}},[_c('MutesAndBlocksTab')],1):_vm._e(),_vm._v(\" \"),_c('div',{attrs:{\"label\":_vm.$t('settings.version.title'),\"icon\":\"info\",\"data-tab-name\":\"version\"}},[_c('VersionTab')],1)])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }"],"sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/2.fec2056b00b4fa3921ba.js b/priv/static/static/js/2.fec2056b00b4fa3921ba.js new file mode 100644 index 000000000..483720e2f --- /dev/null +++ b/priv/static/static/js/2.fec2056b00b4fa3921ba.js @@ -0,0 +1,2 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{629:function(t,e,s){var n=s(630);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);(0,s(6).default)("a45e17ec",n,!0,{})},630:function(t,e,s){(t.exports=s(5)(!1)).push([t.i,".settings_tab-switcher{height:100%}.settings_tab-switcher .setting-item{border-bottom:2px solid var(--fg,#182230);margin:1em 1em 1.4em;padding-bottom:1.4em}.settings_tab-switcher .setting-item>div,.settings_tab-switcher .setting-item>label{display:block;margin-bottom:.5em}.settings_tab-switcher .setting-item>div:last-child,.settings_tab-switcher .setting-item>label:last-child{margin-bottom:0}.settings_tab-switcher .setting-item .select-multiple{display:-ms-flexbox;display:flex}.settings_tab-switcher .setting-item .select-multiple .option-list{margin:0;padding-left:.5em}.settings_tab-switcher .setting-item:last-child{border-bottom:none;padding-bottom:0;margin-bottom:1em}.settings_tab-switcher .setting-item select{min-width:10em}.settings_tab-switcher .setting-item textarea{width:100%;max-width:100%;height:100px}.settings_tab-switcher .setting-item .unavailable,.settings_tab-switcher .setting-item .unavailable svg{color:var(--cRed,red);color:red}.settings_tab-switcher .setting-item .number-input{max-width:6em}",""])},631:function(t,e,s){var n=s(632);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);(0,s(6).default)("5bed876c",n,!0,{})},632:function(t,e,s){(t.exports=s(5)(!1)).push([t.i,".importer-uploading{font-size:1.5em;margin:.25em}",""])},633:function(t,e,s){var n=s(634);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);(0,s(6).default)("432fc7c6",n,!0,{})},634:function(t,e,s){(t.exports=s(5)(!1)).push([t.i,".exporter-processing{margin:.25em}",""])},635:function(t,e,s){var n=s(636);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);(0,s(6).default)("33ca0d90",n,!0,{})},636:function(t,e,s){(t.exports=s(5)(!1)).push([t.i,".mutes-and-blocks-tab{height:100%}.mutes-and-blocks-tab .usersearch-wrapper{padding:1em}.mutes-and-blocks-tab .bulk-actions{text-align:right;padding:0 1em;min-height:28px}.mutes-and-blocks-tab .bulk-action-button{width:10em}.mutes-and-blocks-tab .domain-mute-form{padding:1em;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.mutes-and-blocks-tab .domain-mute-button{-ms-flex-item-align:end;align-self:flex-end;margin-top:1em;width:10em}",""])},637:function(t,e,s){var n=s(638);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);(0,s(6).default)("3a9ec1bf",n,!0,{})},638:function(t,e,s){(t.exports=s(5)(!1)).push([t.i,".autosuggest{position:relative}.autosuggest-input{display:block;width:100%}.autosuggest-results{position:absolute;left:0;top:100%;right:0;max-height:400px;background-color:#121a24;background-color:var(--bg,#121a24);border-color:#222;border:1px solid var(--border,#222);border-radius:4px;border-radius:var(--inputRadius,4px);border-top-left-radius:0;border-top-right-radius:0;box-shadow:1px 1px 4px rgba(0,0,0,.6);box-shadow:var(--panelShadow);overflow-y:auto;z-index:1}",""])},639:function(t,e,s){var n=s(640);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);(0,s(6).default)("211aa67c",n,!0,{})},640:function(t,e,s){(t.exports=s(5)(!1)).push([t.i,".block-card-content-container{margin-top:.5em;text-align:right}.block-card-content-container button{width:10em}",""])},641:function(t,e,s){var n=s(642);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);(0,s(6).default)("7ea980e0",n,!0,{})},642:function(t,e,s){(t.exports=s(5)(!1)).push([t.i,".mute-card-content-container{margin-top:.5em;text-align:right}.mute-card-content-container button{width:10em}",""])},643:function(t,e,s){var n=s(644);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);(0,s(6).default)("39a942c3",n,!0,{})},644:function(t,e,s){(t.exports=s(5)(!1)).push([t.i,".domain-mute-card{-ms-flex:1 0;flex:1 0;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-align:center;align-items:center;padding:.6em 1em .6em 0}.domain-mute-card-domain{margin-right:1em;overflow:hidden;text-overflow:ellipsis}.domain-mute-card button{width:10em}.autosuggest-results .domain-mute-card{padding-left:1em}",""])},645:function(t,e,s){var n=s(646);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);(0,s(6).default)("3724291e",n,!0,{})},646:function(t,e,s){(t.exports=s(5)(!1)).push([t.i,".selectable-list-item-inner{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.selectable-list-item-inner>*{min-width:0}.selectable-list-item-selected-inner{background-color:#151e2a;background-color:var(--selectedMenu,#151e2a);color:var(--selectedMenuText,#b9b9ba);--faint:var(--selectedMenuFaintText,$fallback--faint);--faintLink:var(--selectedMenuFaintLink,$fallback--faint);--lightText:var(--selectedMenuLightText,$fallback--lightText);--icon:var(--selectedMenuIcon,$fallback--icon)}.selectable-list-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.6em 0;border-bottom:2px solid;border-bottom-color:#222;border-bottom-color:var(--border,#222)}.selectable-list-header-actions{-ms-flex:1;flex:1}.selectable-list-checkbox-wrapper{padding:0 10px;-ms-flex:none;flex:none}",""])},647:function(t,e,s){},651:function(t,e,s){var n=s(652);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);(0,s(6).default)("1fa434a2",n,!0,{})},652:function(t,e,s){(t.exports=s(5)(!1)).push([t.i,".ModifiedIndicator{display:inline-block;position:relative}.ModifiedIndicator .modified-tooltip{margin:.5em 1em;min-width:10em;text-align:center}",""])},653:function(t,e,s){var n=s(654);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);(0,s(6).default)("9374f1e2",n,!0,{})},654:function(t,e,s){(t.exports=s(5)(!1)).push([t.i,"",""])},655:function(t,e,s){var n=s(656);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);(0,s(6).default)("a588473e",n,!0,{})},656:function(t,e,s){(t.exports=s(5)(!1)).push([t.i,".mfa-settings .method-item,.mfa-settings .mfa-heading{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-align:baseline;align-items:baseline}.mfa-settings .warning{color:orange;color:var(--cOrange,orange)}.mfa-settings .setup-otp{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-wrap:wrap;flex-wrap:wrap}.mfa-settings .setup-otp .qr-code{-ms-flex:1;flex:1;padding-right:10px}.mfa-settings .setup-otp .verify{-ms-flex:1;flex:1}.mfa-settings .setup-otp .error{margin:4px 0 0}.mfa-settings .setup-otp .confirm-otp-actions button{width:15em;margin-top:5px}",""])},657:function(t,e,s){var n=s(658);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);(0,s(6).default)("4065bf15",n,!0,{})},658:function(t,e,s){(t.exports=s(5)(!1)).push([t.i,".mfa-backup-codes .warning{color:orange;color:var(--cOrange,orange)}.mfa-backup-codes .backup-codes{font-family:var(--postCodeFont,monospace)}",""])},660:function(t,e,s){var n=s(661);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);(0,s(6).default)("27925ae8",n,!0,{})},661:function(t,e,s){(t.exports=s(5)(!1)).push([t.i,".profile-tab .bio{margin:0}.profile-tab .visibility-tray{padding-top:5px}.profile-tab input[type=file]{padding:5px;height:auto}.profile-tab .banner-background-preview{max-width:100%;width:300px;position:relative}.profile-tab .banner-background-preview img{width:100%}.profile-tab .uploading{font-size:1.5em;margin:.25em}.profile-tab .name-changer{width:100%}.profile-tab .current-avatar-container{position:relative;width:150px;height:150px}.profile-tab .current-avatar{display:block;width:100%;height:100%;border-radius:4px;border-radius:var(--avatarRadius,4px)}.profile-tab .reset-button{position:absolute;top:.2em;right:.2em;border-radius:5px;border-radius:var(--tooltipRadius,5px);background-color:rgba(0,0,0,.6);opacity:.7;color:#fff;width:1.5em;height:1.5em;text-align:center;line-height:1.5em;font-size:1.5em;cursor:pointer}.profile-tab .reset-button:hover{opacity:1}.profile-tab .oauth-tokens{width:100%}.profile-tab .oauth-tokens th{text-align:left}.profile-tab .oauth-tokens .actions{text-align:right}.profile-tab-usersearch-wrapper{padding:1em}.profile-tab-bulk-actions{text-align:right;padding:0 1em;min-height:28px}.profile-tab-bulk-actions button{width:10em}.profile-tab-domain-mute-form{padding:1em;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.profile-tab-domain-mute-form button{-ms-flex-item-align:end;align-self:flex-end;margin-top:1em;width:10em}.profile-tab .setting-subitem{margin-left:1.75em}.profile-tab .profile-fields{display:-ms-flexbox;display:flex}.profile-tab .profile-fields>.emoji-input{-ms-flex:1 1 auto;flex:1 1 auto;margin:0 .2em .5em;min-width:0}.profile-tab .profile-fields .delete-field{width:20px;-ms-flex-item-align:center;-ms-grid-row-align:center;align-self:center;margin:0 .2em .5em;padding:0 .5em}",""])},662:function(t,e,s){var n=s(663);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);(0,s(6).default)("0dfd0b33",n,!0,{})},663:function(t,e,s){(t.exports=s(5)(!1)).push([t.i,".image-cropper-img-input{display:none}.image-cropper-image-container{position:relative}.image-cropper-image-container img{display:block;max-width:100%}.image-cropper-buttons-wrapper{margin-top:10px}.image-cropper-buttons-wrapper button{margin-top:5px}",""])},666:function(t,e,s){var n=s(667);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);(0,s(6).default)("4fafab12",n,!0,{})},667:function(t,e,s){(t.exports=s(5)(!1)).push([t.i,".theme-tab{padding-bottom:2em}.theme-tab .theme-warning{display:-ms-flexbox;display:flex;-ms-flex-align:baseline;align-items:baseline;margin-bottom:.5em}.theme-tab .theme-warning .buttons .btn{margin-bottom:.5em}.theme-tab .preset-switcher{margin-right:1em}.theme-tab .style-control{display:-ms-flexbox;display:flex;-ms-flex-align:baseline;align-items:baseline;margin-bottom:5px}.theme-tab .style-control .label{-ms-flex:1;flex:1}.theme-tab .style-control.disabled input,.theme-tab .style-control.disabled select{opacity:.5}.theme-tab .style-control .opt{margin:.5em}.theme-tab .style-control .color-input{-ms-flex:0 0 0px;flex:0 0 0}.theme-tab .style-control input,.theme-tab .style-control select{min-width:3em;margin:0;-ms-flex:0;flex:0}.theme-tab .style-control input[type=number],.theme-tab .style-control select[type=number]{min-width:5em}.theme-tab .style-control input[type=range],.theme-tab .style-control select[type=range]{-ms-flex:1;flex:1;min-width:3em;-ms-flex-item-align:start;align-self:flex-start}.theme-tab .reset-container{-ms-flex-wrap:wrap;flex-wrap:wrap}.theme-tab .apply-container,.theme-tab .color-container,.theme-tab .fonts-container,.theme-tab .radius-container,.theme-tab .reset-container{display:-ms-flexbox;display:flex}.theme-tab .fonts-container,.theme-tab .radius-container{-ms-flex-direction:column;flex-direction:column}.theme-tab .color-container{-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:justify;justify-content:space-between}.theme-tab .color-container>h4{width:99%}.theme-tab .color-container,.theme-tab .fonts-container,.theme-tab .presets-container,.theme-tab .radius-container,.theme-tab .shadow-container{margin:1em 1em 0}.theme-tab .tab-header{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-align:baseline;align-items:baseline;width:100%;min-height:30px;margin-bottom:1em}.theme-tab .tab-header p{-ms-flex:1;flex:1;margin:0;margin-right:.5em}.theme-tab .tab-header-buttons{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.theme-tab .tab-header-buttons .btn{min-width:1px;-ms-flex:0 auto;flex:0 auto;padding:0 1em;margin-bottom:.5em}.theme-tab .shadow-selector .override{-ms-flex:1;flex:1;margin-left:.5em}.theme-tab .shadow-selector .select-container{margin-top:-4px;margin-bottom:-3px}.theme-tab .save-load,.theme-tab .save-load-options{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:baseline;align-items:baseline;-ms-flex-wrap:wrap;flex-wrap:wrap}.theme-tab .save-load-options .import-export,.theme-tab .save-load-options .presets,.theme-tab .save-load .import-export,.theme-tab .save-load .presets{margin-bottom:.5em}.theme-tab .save-load-options .import-export,.theme-tab .save-load .import-export{display:-ms-flexbox;display:flex}.theme-tab .save-load-options .override,.theme-tab .save-load .override{margin-left:.5em}.theme-tab .save-load-options{-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:.5em;-ms-flex-pack:center;justify-content:center}.theme-tab .save-load-options .keep-option{margin:0 .5em .5em;min-width:25%}.theme-tab .preview-container{border-top:1px dashed;border-bottom:1px dashed;border-color:#222;border-color:var(--border,#222);margin:1em 0;padding:1em;background-color:var(--wallpaper);background-image:var(--body-background-image);background-size:cover;background-position:50% 50%}.theme-tab .preview-container .dummy .post{font-family:var(--postFont);display:-ms-flexbox;display:flex}.theme-tab .preview-container .dummy .post .content{-ms-flex:1;flex:1}.theme-tab .preview-container .dummy .post .content h4{margin-bottom:.25em}.theme-tab .preview-container .dummy .post .content .icons{margin-top:.5em;display:-ms-flexbox;display:flex}.theme-tab .preview-container .dummy .post .content .icons i{margin-right:1em}.theme-tab .preview-container .dummy .after-post{margin-top:1em;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.theme-tab .preview-container .dummy .avatar,.theme-tab .preview-container .dummy .avatar-alt{background:linear-gradient(135deg,#b8e1fc,#a9d2f3 10%,#90bae4 25%,#90bcea 37%,#90bff0 50%,#6ba8e5 51%,#a2daf5 83%,#bdf3fd);color:#000;font-family:sans-serif;text-align:center;margin-right:1em}.theme-tab .preview-container .dummy .avatar-alt{-ms-flex:0 auto;flex:0 auto;margin-left:28px;font-size:12px;min-width:20px;min-height:20px;line-height:20px;border-radius:10px;border-radius:var(--avatarAltRadius,10px)}.theme-tab .preview-container .dummy .avatar{-ms-flex:0 auto;flex:0 auto;width:48px;height:48px;font-size:14px;line-height:48px}.theme-tab .preview-container .dummy .actions{display:-ms-flexbox;display:flex;-ms-flex-align:baseline;align-items:baseline}.theme-tab .preview-container .dummy .actions .checkbox{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:baseline;align-items:baseline;margin-right:1em;-ms-flex:1;flex:1}.theme-tab .preview-container .dummy .separator{margin:1em;border-bottom:1px solid;border-color:#222;border-color:var(--border,#222)}.theme-tab .preview-container .dummy .panel-heading .alert,.theme-tab .preview-container .dummy .panel-heading .badge,.theme-tab .preview-container .dummy .panel-heading .btn,.theme-tab .preview-container .dummy .panel-heading .faint{margin-left:1em;white-space:nowrap}.theme-tab .preview-container .dummy .panel-heading .faint{text-overflow:ellipsis;min-width:2em;overflow-x:hidden}.theme-tab .preview-container .dummy .panel-heading .flex-spacer{-ms-flex:1;flex:1}.theme-tab .preview-container .dummy .btn{margin-left:0;padding:0 1em;min-width:3em;min-height:30px}.theme-tab .apply-container{-ms-flex-pack:center;justify-content:center;position:absolute;bottom:8px;right:5px}.theme-tab .color-item,.theme-tab .radius-item{min-width:20em;margin:5px 6px 0 0;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex:1 1 0px;flex:1 1 0}.theme-tab .color-item.wide,.theme-tab .radius-item.wide{min-width:60%}.theme-tab .color-item:not(.wide):nth-child(odd),.theme-tab .radius-item:not(.wide):nth-child(odd){margin-right:7px}.theme-tab .color-item .color,.theme-tab .color-item .opacity,.theme-tab .radius-item .color,.theme-tab .radius-item .opacity{display:-ms-flexbox;display:flex;-ms-flex-align:baseline;align-items:baseline}.theme-tab .radius-item{-ms-flex-preferred-size:auto;flex-basis:auto}.theme-tab .theme-color-cl,.theme-tab .theme-radius-rn{border:0;box-shadow:none;background:transparent;color:var(--faint,hsla(240,1%,73%,.5));-ms-flex-item-align:stretch;-ms-grid-row-align:stretch;align-self:stretch}.theme-tab .theme-color-cl,.theme-tab .theme-color-in,.theme-tab .theme-radius-in{margin-left:4px}.theme-tab .theme-radius-in{min-width:1em;max-width:7em;-ms-flex:1;flex:1}.theme-tab .theme-radius-lb{max-width:50em}.theme-tab .theme-preview-content{padding:20px}.theme-tab .apply-container .btn{min-height:28px;min-width:10em;padding:0 2em}.theme-tab .btn{margin-left:.25em;margin-right:.25em}",""])},668:function(t,e,s){var n=s(669);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);(0,s(6).default)("7e57f952",n,!0,{})},669:function(t,e,s){(t.exports=s(5)(!1)).push([t.i,'.color-input,.color-input-field.input{display:-ms-inline-flexbox;display:inline-flex}.color-input-field.input{-ms-flex:0 0 0px;flex:0 0 0;max-width:9em;-ms-flex-align:stretch;align-items:stretch;padding:.2em 8px}.color-input-field.input input{background:none;color:#b9b9ba;color:var(--inputText,#b9b9ba);border:none;padding:0;margin:0}.color-input-field.input input.textColor{-ms-flex:1 0 3em;flex:1 0 3em;min-width:3em;padding:0}.color-input-field.input .computedIndicator,.color-input-field.input .transparentIndicator,.color-input-field.input input.nativeColor{-ms-flex:0 0 2em;flex:0 0 2em;min-width:2em;-ms-flex-item-align:center;-ms-grid-row-align:center;align-self:center;height:100%}.color-input-field.input .transparentIndicator{background-color:#f0f;position:relative}.color-input-field.input .transparentIndicator:after,.color-input-field.input .transparentIndicator:before{display:block;content:"";background-color:#000;position:absolute;height:50%;width:50%}.color-input-field.input .transparentIndicator:after{top:0;left:0}.color-input-field.input .transparentIndicator:before{bottom:0;right:0}.color-input .label{-ms-flex:1 1 auto;flex:1 1 auto}',""])},670:function(t,e,s){var n=s(671);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);(0,s(6).default)("6c632637",n,!0,{})},671:function(t,e,s){(t.exports=s(5)(!1)).push([t.i,".color-control input.text-input{max-width:7em;-ms-flex:1;flex:1}",""])},672:function(t,e,s){var n=s(673);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);(0,s(6).default)("d219da80",n,!0,{})},673:function(t,e,s){(t.exports=s(5)(!1)).push([t.i,".shadow-control{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;margin-bottom:1em}.shadow-control .shadow-preview-container,.shadow-control .shadow-tweak{margin:5px 6px 0 0}.shadow-control .shadow-preview-container{-ms-flex:0;flex:0;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.shadow-control .shadow-preview-container input[type=number]{width:5em;min-width:2em}.shadow-control .shadow-preview-container .x-shift-control,.shadow-control .shadow-preview-container .y-shift-control{display:-ms-flexbox;display:flex;-ms-flex:0;flex:0}.shadow-control .shadow-preview-container .x-shift-control[disabled=disabled] *,.shadow-control .shadow-preview-container .y-shift-control[disabled=disabled] *{opacity:.5}.shadow-control .shadow-preview-container .x-shift-control{-ms-flex-align:start;align-items:flex-start}.shadow-control .shadow-preview-container .x-shift-control .wrap,.shadow-control .shadow-preview-container input[type=range]{margin:0;width:15em;height:2em}.shadow-control .shadow-preview-container .y-shift-control{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:end;align-items:flex-end}.shadow-control .shadow-preview-container .y-shift-control .wrap{width:2em;height:15em}.shadow-control .shadow-preview-container .y-shift-control input[type=range]{transform-origin:1em 1em;transform:rotate(90deg)}.shadow-control .shadow-preview-container .preview-window{-ms-flex:1;flex:1;background-color:#999;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;background-image:linear-gradient(45deg,#666 25%,transparent 0),linear-gradient(-45deg,#666 25%,transparent 0),linear-gradient(45deg,transparent 75%,#666 0),linear-gradient(-45deg,transparent 75%,#666 0);background-size:20px 20px;background-position:0 0,0 10px,10px -10px,-10px 0;border-radius:4px;border-radius:var(--inputRadius,4px)}.shadow-control .shadow-preview-container .preview-window .preview-block{width:33%;height:33%;background-color:#121a24;background-color:var(--bg,#121a24);border-radius:10px;border-radius:var(--panelRadius,10px)}.shadow-control .shadow-tweak{-ms-flex:1;flex:1;min-width:280px}.shadow-control .shadow-tweak .id-control{-ms-flex-align:stretch;align-items:stretch}.shadow-control .shadow-tweak .id-control .shadow-switcher{-ms-flex:1;flex:1}.shadow-control .shadow-tweak .id-control .btn,.shadow-control .shadow-tweak .id-control .shadow-switcher{min-width:1px;margin-right:5px}.shadow-control .shadow-tweak .id-control .btn{padding:0 .4em;margin:0 .1em}",""])},674:function(t,e,s){var n=s(675);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);(0,s(6).default)("d9c0acde",n,!0,{})},675:function(t,e,s){(t.exports=s(5)(!1)).push([t.i,".font-control input.custom-font{min-width:10em}.font-control.custom .font-switcher{border-top-right-radius:0;border-bottom-right-radius:0}.font-control.custom .custom-font{border-top-left-radius:0;border-bottom-left-radius:0}",""])},676:function(t,e,s){var n=s(677);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);(0,s(6).default)("b94bc120",n,!0,{})},677:function(t,e,s){(t.exports=s(5)(!1)).push([t.i,".contrast-ratio{display:-ms-flexbox;display:flex;-ms-flex-pack:end;justify-content:flex-end;margin-top:-4px;margin-bottom:5px}.contrast-ratio .label{margin-right:1em}.contrast-ratio .rating{display:inline-block;text-align:center;margin-left:.5em}",""])},678:function(t,e,s){var n=s(679);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);(0,s(6).default)("6fe23c76",n,!0,{})},679:function(t,e,s){(t.exports=s(5)(!1)).push([t.i,".preview-container{position:relative}.underlay-preview{position:absolute;top:0;bottom:0;left:10px;right:10px}",""])},681:function(t,e,s){"use strict";s.r(e);var n=s(155),a=s(2),o=s.n(a),i=s(3),r=s(1);i.c.add(r.n,r.kb);var l={props:{submitHandler:{type:Function,required:!0},submitButtonLabel:{type:String,default:function(){return this.$t("importer.submit")}},successMessage:{type:String,default:function(){return this.$t("importer.success")}},errorMessage:{type:String,default:function(){return this.$t("importer.error")}}},data:function(){return{file:null,error:!1,success:!1,submitting:!1}},methods:{change:function(){this.file=this.$refs.input.files[0]},submit:function(){var t=this;this.dismiss(),this.submitting=!0,this.submitHandler(this.file).then((function(){t.success=!0})).catch((function(){t.error=!0})).finally((function(){t.submitting=!1}))},dismiss:function(){this.success=!1,this.error=!1}}},c=s(0);var u=function(t){s(631)},d=Object(c.a)(l,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"importer"},[s("form",[s("input",{ref:"input",attrs:{type:"file"},on:{change:t.change}})]),t._v(" "),t.submitting?s("FAIcon",{staticClass:"importer-uploading",attrs:{spin:"",icon:"circle-notch"}}):s("button",{staticClass:"btn button-default",on:{click:t.submit}},[t._v("\n "+t._s(t.submitButtonLabel)+"\n ")]),t._v(" "),t.success?s("div",[s("FAIcon",{attrs:{icon:"times"},on:{click:t.dismiss}}),t._v(" "),s("p",[t._v(t._s(t.successMessage))])],1):t.error?s("div",[s("FAIcon",{attrs:{icon:"times"},on:{click:t.dismiss}}),t._v(" "),s("p",[t._v(t._s(t.errorMessage))])],1):t._e()],1)}),[],!1,u,null,null).exports;i.c.add(r.n);var p={props:{getContent:{type:Function,required:!0},filename:{type:String,default:"export.csv"},exportButtonLabel:{type:String,default:function(){return this.$t("exporter.export")}},processingMessage:{type:String,default:function(){return this.$t("exporter.processing")}}},data:function(){return{processing:!1}},methods:{process:function(){var t=this;this.processing=!0,this.getContent().then((function(e){var s=document.createElement("a");s.setAttribute("href","data:text/plain;charset=utf-8,"+encodeURIComponent(e)),s.setAttribute("download",t.filename),s.style.display="none",document.body.appendChild(s),s.click(),document.body.removeChild(s),setTimeout((function(){t.processing=!1}),2e3)}))}}};var m=function(t){s(633)},h=Object(c.a)(p,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"exporter"},[t.processing?s("div",[s("FAIcon",{attrs:{icon:"circle-notch",size:"lg",spin:""}}),t._v(" "),s("span",[t._v(t._s(t.processingMessage))])],1):s("button",{staticClass:"btn button-default",on:{click:t.process}},[t._v("\n "+t._s(t.exportButtonLabel)+"\n ")])])}),[],!1,m,null,null).exports,v=s(62),f=s(4);function b(t,e){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),s.push.apply(s,n)}return s}var g={data:function(){return{activeTab:"profile",newDomainToMute:""}},created:function(){this.$store.dispatch("fetchTokens")},components:{Importer:d,Exporter:h,Checkbox:v.a},computed:function(t){for(var e=1;e0?s("div",{staticClass:"autosuggest-results"},[t._l(t.filtered,(function(e){return t._t("default",null,{item:e})}))],2):t._e()])}),[],!1,T,null,null).exports,P=s(45),S={props:["userId"],data:function(){return{progress:!1}},computed:{user:function(){return this.$store.getters.findUser(this.userId)},relationship:function(){return this.$store.getters.relationship(this.userId)},blocked:function(){return this.relationship.blocking}},components:{BasicUserCard:P.a},methods:{unblockUser:function(){var t=this;this.progress=!0,this.$store.dispatch("unblockUser",this.user.id).then((function(){t.progress=!1}))},blockUser:function(){var t=this;this.progress=!0,this.$store.dispatch("blockUser",this.user.id).then((function(){t.progress=!1}))}}};var I=function(t){s(639)},j=Object(c.a)(S,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("basic-user-card",{attrs:{user:t.user}},[s("div",{staticClass:"block-card-content-container"},[t.blocked?s("button",{staticClass:"btn button-default",attrs:{disabled:t.progress},on:{click:t.unblockUser}},[t.progress?[t._v("\n "+t._s(t.$t("user_card.unblock_progress"))+"\n ")]:[t._v("\n "+t._s(t.$t("user_card.unblock"))+"\n ")]],2):s("button",{staticClass:"btn button-default",attrs:{disabled:t.progress},on:{click:t.blockUser}},[t.progress?[t._v("\n "+t._s(t.$t("user_card.block_progress"))+"\n ")]:[t._v("\n "+t._s(t.$t("user_card.block"))+"\n ")]],2)])])}),[],!1,I,null,null).exports,B={props:["userId"],data:function(){return{progress:!1}},computed:{user:function(){return this.$store.getters.findUser(this.userId)},relationship:function(){return this.$store.getters.relationship(this.userId)},muted:function(){return this.relationship.muting}},components:{BasicUserCard:P.a},methods:{unmuteUser:function(){var t=this;this.progress=!0,this.$store.dispatch("unmuteUser",this.userId).then((function(){t.progress=!1}))},muteUser:function(){var t=this;this.progress=!0,this.$store.dispatch("muteUser",this.userId).then((function(){t.progress=!1}))}}};var F=function(t){s(641)},R=Object(c.a)(B,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("basic-user-card",{attrs:{user:t.user}},[s("div",{staticClass:"mute-card-content-container"},[t.muted?s("button",{staticClass:"btn button-default",attrs:{disabled:t.progress},on:{click:t.unmuteUser}},[t.progress?[t._v("\n "+t._s(t.$t("user_card.unmute_progress"))+"\n ")]:[t._v("\n "+t._s(t.$t("user_card.unmute"))+"\n ")]],2):s("button",{staticClass:"btn button-default",attrs:{disabled:t.progress},on:{click:t.muteUser}},[t.progress?[t._v("\n "+t._s(t.$t("user_card.mute_progress"))+"\n ")]:[t._v("\n "+t._s(t.$t("user_card.mute"))+"\n ")]],2)])])}),[],!1,F,null,null).exports,E=s(90),A={props:["domain"],components:{ProgressButton:E.a},computed:{user:function(){return this.$store.state.users.currentUser},muted:function(){return this.user.domainMutes.includes(this.domain)}},methods:{unmuteDomain:function(){return this.$store.dispatch("unmuteDomain",this.domain)},muteDomain:function(){return this.$store.dispatch("muteDomain",this.domain)}}};var M=function(t){s(643)},D=Object(c.a)(A,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"domain-mute-card"},[s("div",{staticClass:"domain-mute-card-domain"},[t._v("\n "+t._s(t.domain)+"\n ")]),t._v(" "),t.muted?s("ProgressButton",{staticClass:"btn button-default",attrs:{click:t.unmuteDomain},scopedSlots:t._u([{key:"progress",fn:function(){return[t._v("\n "+t._s(t.$t("domain_mute_card.unmute_progress"))+"\n ")]},proxy:!0}],null,!1,11670719)},[t._v("\n "+t._s(t.$t("domain_mute_card.unmute"))+"\n ")]):s("ProgressButton",{staticClass:"btn button-default",attrs:{click:t.muteDomain},scopedSlots:t._u([{key:"progress",fn:function(){return[t._v("\n "+t._s(t.$t("domain_mute_card.mute_progress"))+"\n ")]},proxy:!0}])},[t._v("\n "+t._s(t.$t("domain_mute_card.mute"))+"\n ")])],1)}),[],!1,M,null,null).exports,U={components:{List:s(60).a,Checkbox:v.a},props:{items:{type:Array,default:function(){return[]}},getKey:{type:Function,default:function(t){return t.id}}},data:function(){return{selected:[]}},computed:{allKeys:function(){return this.items.map(this.getKey)},filteredSelected:function(){var t=this;return this.allKeys.filter((function(e){return-1!==t.selected.indexOf(e)}))},allSelected:function(){return this.filteredSelected.length===this.items.length},noneSelected:function(){return 0===this.filteredSelected.length},someSelected:function(){return!this.allSelected&&!this.noneSelected}},methods:{isSelected:function(t){return-1!==this.filteredSelected.indexOf(this.getKey(t))},toggle:function(t,e){var s=this.getKey(e);t!==this.isSelected(s)&&(t?this.selected.push(s):this.selected.splice(this.selected.indexOf(s),1))},toggleAll:function(t){this.selected=t?this.allKeys.slice(0):[]}}};var N=function(t){s(645)},V=Object(c.a)(U,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"selectable-list"},[t.items.length>0?s("div",{staticClass:"selectable-list-header"},[s("div",{staticClass:"selectable-list-checkbox-wrapper"},[s("Checkbox",{attrs:{checked:t.allSelected,indeterminate:t.someSelected},on:{change:t.toggleAll}},[t._v("\n "+t._s(t.$t("selectable_list.select_all"))+"\n ")])],1),t._v(" "),s("div",{staticClass:"selectable-list-header-actions"},[t._t("header",null,{selected:t.filteredSelected})],2)]):t._e(),t._v(" "),s("List",{attrs:{items:t.items,"get-key":t.getKey},scopedSlots:t._u([{key:"item",fn:function(e){var n=e.item;return[s("div",{staticClass:"selectable-list-item-inner",class:{"selectable-list-item-selected-inner":t.isSelected(n)}},[s("div",{staticClass:"selectable-list-checkbox-wrapper"},[s("Checkbox",{attrs:{checked:t.isSelected(n)},on:{change:function(e){return t.toggle(e,n)}}})],1),t._v(" "),t._t("item",null,{item:n})],2)]}},{key:"empty",fn:function(){return[t._t("empty")]},proxy:!0}],null,!0)})],1)}),[],!1,N,null,null).exports,W=s(206),q=s.n(W),z=s(8),G=s.n(z),K=s(10),H=s.n(K),J=s(9),Q=s.n(J),X=s(207),Y=s.n(X),Z=s(208),tt=(s(647),s(59));function et(t,e){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),s.push.apply(s,n)}return s}function st(t){for(var e=1;e0?s("ProgressButton",{staticClass:"btn button-default bulk-action-button",attrs:{click:function(){return t.blockUsers(n)}},scopedSlots:t._u([{key:"progress",fn:function(){return[t._v("\n "+t._s(t.$t("user_card.block_progress"))+"\n ")]},proxy:!0}],null,!0)},[t._v("\n "+t._s(t.$t("user_card.block"))+"\n ")]):t._e(),t._v(" "),n.length>0?s("ProgressButton",{staticClass:"btn button-default",attrs:{click:function(){return t.unblockUsers(n)}},scopedSlots:t._u([{key:"progress",fn:function(){return[t._v("\n "+t._s(t.$t("user_card.unblock_progress"))+"\n ")]},proxy:!0}],null,!0)},[t._v("\n "+t._s(t.$t("user_card.unblock"))+"\n ")]):t._e()],1)]}},{key:"item",fn:function(t){var e=t.item;return[s("BlockCard",{attrs:{"user-id":e}})]}},{key:"empty",fn:function(){return[t._v("\n "+t._s(t.$t("settings.no_blocks"))+"\n ")]},proxy:!0}])})],1),t._v(" "),s("div",{attrs:{label:t.$t("settings.mutes_tab")}},[s("tab-switcher",[s("div",{attrs:{label:"Users"}},[s("div",{staticClass:"usersearch-wrapper"},[s("Autosuggest",{attrs:{filter:t.filterUnMutedUsers,query:t.queryUserIds,placeholder:t.$t("settings.search_user_to_mute")},scopedSlots:t._u([{key:"default",fn:function(t){return[s("MuteCard",{attrs:{"user-id":t.item}})]}}])})],1),t._v(" "),s("MuteList",{attrs:{refresh:!0,"get-key":function(t){return t}},scopedSlots:t._u([{key:"header",fn:function(e){var n=e.selected;return[s("div",{staticClass:"bulk-actions"},[n.length>0?s("ProgressButton",{staticClass:"btn button-default",attrs:{click:function(){return t.muteUsers(n)}},scopedSlots:t._u([{key:"progress",fn:function(){return[t._v("\n "+t._s(t.$t("user_card.mute_progress"))+"\n ")]},proxy:!0}],null,!0)},[t._v("\n "+t._s(t.$t("user_card.mute"))+"\n ")]):t._e(),t._v(" "),n.length>0?s("ProgressButton",{staticClass:"btn button-default",attrs:{click:function(){return t.unmuteUsers(n)}},scopedSlots:t._u([{key:"progress",fn:function(){return[t._v("\n "+t._s(t.$t("user_card.unmute_progress"))+"\n ")]},proxy:!0}],null,!0)},[t._v("\n "+t._s(t.$t("user_card.unmute"))+"\n ")]):t._e()],1)]}},{key:"item",fn:function(t){var e=t.item;return[s("MuteCard",{attrs:{"user-id":e}})]}},{key:"empty",fn:function(){return[t._v("\n "+t._s(t.$t("settings.no_mutes"))+"\n ")]},proxy:!0}])})],1),t._v(" "),s("div",{attrs:{label:t.$t("settings.domain_mutes")}},[s("div",{staticClass:"domain-mute-form"},[s("Autosuggest",{attrs:{filter:t.filterUnMutedDomains,query:t.queryKnownDomains,placeholder:t.$t("settings.type_domains_to_mute")},scopedSlots:t._u([{key:"default",fn:function(t){return[s("DomainMuteCard",{attrs:{domain:t.item}})]}}])})],1),t._v(" "),s("DomainMuteList",{attrs:{refresh:!0,"get-key":function(t){return t}},scopedSlots:t._u([{key:"header",fn:function(e){var n=e.selected;return[s("div",{staticClass:"bulk-actions"},[n.length>0?s("ProgressButton",{staticClass:"btn button-default",attrs:{click:function(){return t.unmuteDomains(n)}},scopedSlots:t._u([{key:"progress",fn:function(){return[t._v("\n "+t._s(t.$t("domain_mute_card.unmute_progress"))+"\n ")]},proxy:!0}],null,!0)},[t._v("\n "+t._s(t.$t("domain_mute_card.unmute"))+"\n ")]):t._e()],1)]}},{key:"item",fn:function(t){var e=t.item;return[s("DomainMuteCard",{attrs:{domain:e}})]}},{key:"empty",fn:function(){return[t._v("\n "+t._s(t.$t("settings.no_mutes"))+"\n ")]},proxy:!0}])})],1)])],1)])}),[],!1,lt,null,null).exports,ut={data:function(){return{activeTab:"profile",notificationSettings:this.$store.state.users.currentUser.notification_settings,newDomainToMute:""}},components:{Checkbox:v.a},computed:{user:function(){return this.$store.state.users.currentUser}},methods:{updateNotificationSettings:function(){this.$store.state.api.backendInteractor.updateNotificationSettings({settings:this.notificationSettings})}}},dt=Object(c.a)(ut,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{attrs:{label:t.$t("settings.notifications")}},[s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.notification_setting_filters")))]),t._v(" "),s("p",[s("Checkbox",{model:{value:t.notificationSettings.block_from_strangers,callback:function(e){t.$set(t.notificationSettings,"block_from_strangers",e)},expression:"notificationSettings.block_from_strangers"}},[t._v("\n "+t._s(t.$t("settings.notification_setting_block_from_strangers"))+"\n ")])],1)]),t._v(" "),s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.notification_setting_privacy")))]),t._v(" "),s("p",[s("Checkbox",{model:{value:t.notificationSettings.hide_notification_contents,callback:function(e){t.$set(t.notificationSettings,"hide_notification_contents",e)},expression:"notificationSettings.hide_notification_contents"}},[t._v("\n "+t._s(t.$t("settings.notification_setting_hide_notification_contents"))+"\n ")])],1)]),t._v(" "),s("div",{staticClass:"setting-item"},[s("p",[t._v(t._s(t.$t("settings.notification_mutes")))]),t._v(" "),s("p",[t._v(t._s(t.$t("settings.notification_blocks")))]),t._v(" "),s("button",{staticClass:"btn button-default",on:{click:t.updateNotificationSettings}},[t._v("\n "+t._s(t.$t("settings.save"))+"\n ")])])])}),[],!1,null,null,null).exports,pt=s(648),mt=s.n(pt),ht=s(42),vt=s.n(ht),ft=s(626),bt=s.n(ft),gt=s(157),_t=s.n(gt),wt=s(21);i.c.add(r.qb);var Ct={components:{Popover:wt.default},props:["changed"]};var xt=function(t){s(651)},kt=Object(c.a)(Ct,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.changed?s("span",{staticClass:"ModifiedIndicator"},[s("Popover",{attrs:{trigger:"hover"},scopedSlots:t._u([{key:"trigger",fn:function(){return[t._v("\n  \n "),s("FAIcon",{attrs:{icon:"wrench","aria-label":t.$t("settings.setting_changed")}})]},proxy:!0},{key:"content",fn:function(){return[s("div",{staticClass:"modified-tooltip"},[t._v("\n "+t._s(t.$t("settings.setting_changed"))+"\n ")])]},proxy:!0}],null,!1,1710729471)})],1):t._e()}),[],!1,xt,null,null).exports,yt={components:{Checkbox:v.a,ModifiedIndicator:kt},props:["path","disabled"],computed:{pathDefault:function(){var t=this.path.split("."),e=bt()(t),s=e[0],n=e.slice(1);return[s+"DefaultValue"].concat(H()(n)).join(".")},state:function(){var t=C()(this.$parent,this.path);return void 0===t?this.defaultState:t},defaultState:function(){return C()(this.$parent,this.pathDefault)},isChanged:function(){return this.state!==this.defaultState}},methods:{update:function(t){_t()(this.$parent,this.path,t)}}},$t=Object(c.a)(yt,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("label",{staticClass:"BooleanSetting"},[s("Checkbox",{attrs:{checked:t.state,disabled:t.disabled},on:{change:t.update}},[t.$slots.default?s("span",{staticClass:"label"},[t._t("default")],2):t._e(),t._v(" "),s("ModifiedIndicator",{attrs:{changed:t.isChanged}})],1)],1)}),[],!1,null,null,null).exports,Lt=s(63),Tt={components:{Select:Lt.a,ModifiedIndicator:kt},props:["path","disabled","options"],computed:{pathDefault:function(){var t=this.path.split("."),e=bt()(t),s=e[0],n=e.slice(1);return[s+"DefaultValue"].concat(H()(n)).join(".")},state:function(){var t=C()(this.$parent,this.path);return void 0===t?this.defaultState:t},defaultState:function(){return C()(this.$parent,this.pathDefault)},isChanged:function(){return this.state!==this.defaultState}},methods:{update:function(t){_t()(this.$parent,this.path,t)}}};var Ot=function(t){s(653)},Pt=Object(c.a)(Tt,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("label",{staticClass:"ChoiceSetting"},[t._t("default"),t._v(" "),s("Select",{attrs:{value:t.state,disabled:t.disabled},on:{change:t.update}},t._l(t.options,(function(e){return s("option",{key:e.key,domProps:{value:e.value}},[t._v("\n "+t._s(e.label)+"\n "+t._s(e.value===t.defaultState?t.$t("settings.instance_default_simple"):"")+"\n ")])})),0),t._v(" "),s("ModifiedIndicator",{attrs:{changed:t.isChanged}})],2)}),[],!1,Ot,null,null).exports,St=s(107);function It(t,e){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),s.push.apply(s,n)}return s}function jt(t){for(var e=1;e0}))})}}}),watch:{notificationVisibility:{handler:function(t){this.$store.dispatch("setOption",{name:"notificationVisibility",value:this.$store.getters.mergedConfig.notificationVisibility})},deep:!0},replyVisibility:function(){this.$store.dispatch("queueFlushAll")}}},Et=Object(c.a)(Rt,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{attrs:{label:t.$t("settings.filtering")}},[s("div",{staticClass:"setting-item"},[s("div",{staticClass:"select-multiple"},[s("span",{staticClass:"label"},[t._v(t._s(t.$t("settings.notification_visibility")))]),t._v(" "),s("ul",{staticClass:"option-list"},[s("li",[s("BooleanSetting",{attrs:{path:"notificationVisibility.likes"}},[t._v("\n "+t._s(t.$t("settings.notification_visibility_likes"))+"\n ")])],1),t._v(" "),s("li",[s("BooleanSetting",{attrs:{path:"notificationVisibility.repeats"}},[t._v("\n "+t._s(t.$t("settings.notification_visibility_repeats"))+"\n ")])],1),t._v(" "),s("li",[s("BooleanSetting",{attrs:{path:"notificationVisibility.follows"}},[t._v("\n "+t._s(t.$t("settings.notification_visibility_follows"))+"\n ")])],1),t._v(" "),s("li",[s("BooleanSetting",{attrs:{path:"notificationVisibility.mentions"}},[t._v("\n "+t._s(t.$t("settings.notification_visibility_mentions"))+"\n ")])],1),t._v(" "),s("li",[s("BooleanSetting",{attrs:{path:"notificationVisibility.moves"}},[t._v("\n "+t._s(t.$t("settings.notification_visibility_moves"))+"\n ")])],1),t._v(" "),s("li",[s("BooleanSetting",{attrs:{path:"notificationVisibility.emojiReactions"}},[t._v("\n "+t._s(t.$t("settings.notification_visibility_emoji_reactions"))+"\n ")])],1)])]),t._v(" "),s("ChoiceSetting",{attrs:{id:"replyVisibility",path:"replyVisibility",options:t.replyVisibilityOptions}},[t._v("\n "+t._s(t.$t("settings.replies_in_timeline"))+"\n ")]),t._v(" "),s("div",[s("BooleanSetting",{attrs:{path:"hidePostStats"}},[t._v("\n "+t._s(t.$t("settings.hide_post_stats"))+"\n ")])],1),t._v(" "),s("div",[s("BooleanSetting",{attrs:{path:"hideUserStats"}},[t._v("\n "+t._s(t.$t("settings.hide_user_stats"))+"\n ")])],1)],1),t._v(" "),s("div",{staticClass:"setting-item"},[s("div",[s("p",[t._v(t._s(t.$t("settings.filtering_explanation")))]),t._v(" "),s("textarea",{directives:[{name:"model",rawName:"v-model",value:t.muteWordsString,expression:"muteWordsString"}],staticClass:"resize-height",attrs:{id:"muteWords"},domProps:{value:t.muteWordsString},on:{input:function(e){e.target.composing||(t.muteWordsString=e.target.value)}}})]),t._v(" "),s("div",[s("BooleanSetting",{attrs:{path:"hideFilteredStatuses"}},[t._v("\n "+t._s(t.$t("settings.hide_filtered_statuses"))+"\n ")])],1)])])}),[],!1,null,null,null).exports,At=s(7),Mt=s.n(At),Dt={props:{backupCodes:{type:Object,default:function(){return{inProgress:!1,codes:[]}}}},data:function(){return{}},computed:{inProgress:function(){return this.backupCodes.inProgress},ready:function(){return this.backupCodes.codes.length>0},displayTitle:function(){return this.inProgress||this.ready}}};var Ut=function(t){s(657)},Nt=Object(c.a)(Dt,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"mfa-backup-codes"},[t.displayTitle?s("h4",[t._v("\n "+t._s(t.$t("settings.mfa.recovery_codes"))+"\n ")]):t._e(),t._v(" "),t.inProgress?s("i",[t._v(t._s(t.$t("settings.mfa.waiting_a_recovery_codes")))]):t._e(),t._v(" "),t.ready?[s("p",{staticClass:"alert warning"},[t._v("\n "+t._s(t.$t("settings.mfa.recovery_codes_warning"))+"\n ")]),t._v(" "),s("ul",{staticClass:"backup-codes"},t._l(t.backupCodes.codes,(function(e){return s("li",{key:e},[t._v("\n "+t._s(e)+"\n ")])})),0)]:t._e()],2)}),[],!1,Ut,null,null).exports,Vt={props:["disabled"],data:function(){return{}},methods:{confirm:function(){this.$emit("confirm")},cancel:function(){this.$emit("cancel")}}},Wt=Object(c.a)(Vt,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",[t._t("default"),t._v(" "),s("button",{staticClass:"btn button-default",attrs:{disabled:t.disabled},on:{click:t.confirm}},[t._v("\n "+t._s(t.$t("general.confirm"))+"\n ")]),t._v(" "),s("button",{staticClass:"btn button-default",attrs:{disabled:t.disabled},on:{click:t.cancel}},[t._v("\n "+t._s(t.$t("general.cancel"))+"\n ")])],2)}),[],!1,null,null,null).exports;function qt(t,e){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),s.push.apply(s,n)}return s}var zt={props:["settings"],data:function(){return{error:!1,currentPassword:"",deactivate:!1,inProgress:!1}},components:{confirm:Wt},computed:function(t){for(var e=1;e0},confirmNewBackupCodes:function(){return this.backupCodes.getNewCodes}},Object(f.e)({backendInteractor:function(t){return t.api.backendInteractor}})),methods:{activateOTP:function(){this.settings.enabled||(this.setupState.state="getBackupcodes",this.fetchBackupCodes())},fetchBackupCodes:function(){var t=this;return this.backupCodes.inProgress=!0,this.backupCodes.codes=[],this.backendInteractor.generateMfaBackupCodes().then((function(e){t.backupCodes.codes=e.codes,t.backupCodes.inProgress=!1}))},getBackupCodes:function(){this.backupCodes.getNewCodes=!0},confirmBackupCodes:function(){var t=this;this.fetchBackupCodes().then((function(e){t.backupCodes.getNewCodes=!1}))},cancelBackupCodes:function(){this.backupCodes.getNewCodes=!1},setupOTP:function(){var t=this;this.setupState.state="setupOTP",this.setupState.setupOTPState="prepare",this.backendInteractor.mfaSetupOTP().then((function(e){t.otpSettings=e,t.setupState.setupOTPState="confirm"}))},doConfirmOTP:function(){var t=this;this.error=null,this.backendInteractor.mfaConfirmOTP({token:this.otpConfirmToken,password:this.currentPassword}).then((function(e){e.error?t.error=e.error:t.completeSetup()}))},completeSetup:function(){this.setupState.setupOTPState="complete",this.setupState.state="complete",this.currentPassword=null,this.error=null,this.fetchSettings()},cancelSetup:function(){this.setupState.setupOTPState="",this.setupState.state="",this.currentPassword=null,this.error=null},fetchSettings:function(){var t;return Mt.a.async((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,Mt.a.awrap(this.backendInteractor.settingsMFA());case 2:if(!(t=e.sent).error){e.next=5;break}return e.abrupt("return");case 5:return this.settings=t.settings,this.settings.available=!0,e.abrupt("return",t);case 8:case"end":return e.stop()}}),null,this)}},mounted:function(){var t=this;this.fetchSettings().then((function(){t.readyInit=!0}))}};var Ht=function(t){s(655)},Jt=Object(c.a)(Kt,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.readyInit&&t.settings.available?s("div",{staticClass:"setting-item mfa-settings"},[s("div",{staticClass:"mfa-heading"},[s("h2",[t._v(t._s(t.$t("settings.mfa.title")))])]),t._v(" "),s("div",[t.setupInProgress?t._e():s("div",{staticClass:"setting-item"},[s("h3",[t._v(t._s(t.$t("settings.mfa.authentication_methods")))]),t._v(" "),s("totp-item",{attrs:{settings:t.settings},on:{deactivate:t.fetchSettings,activate:t.activateOTP}}),t._v(" "),s("br"),t._v(" "),t.settings.enabled?s("div",[t.confirmNewBackupCodes?t._e():s("recovery-codes",{attrs:{"backup-codes":t.backupCodes}}),t._v(" "),t.confirmNewBackupCodes?t._e():s("button",{staticClass:"btn button-default",on:{click:t.getBackupCodes}},[t._v("\n "+t._s(t.$t("settings.mfa.generate_new_recovery_codes"))+"\n ")]),t._v(" "),t.confirmNewBackupCodes?s("div",[s("confirm",{attrs:{disabled:t.backupCodes.inProgress},on:{confirm:t.confirmBackupCodes,cancel:t.cancelBackupCodes}},[s("p",{staticClass:"warning"},[t._v("\n "+t._s(t.$t("settings.mfa.warning_of_generate_new_codes"))+"\n ")])])],1):t._e()],1):t._e()],1),t._v(" "),t.setupInProgress?s("div",[s("h3",[t._v(t._s(t.$t("settings.mfa.setup_otp")))]),t._v(" "),t.setupOTPInProgress?t._e():s("recovery-codes",{attrs:{"backup-codes":t.backupCodes}}),t._v(" "),t.canSetupOTP?s("button",{staticClass:"btn button-default",on:{click:t.cancelSetup}},[t._v("\n "+t._s(t.$t("general.cancel"))+"\n ")]):t._e(),t._v(" "),t.canSetupOTP?s("button",{staticClass:"btn button-default",on:{click:t.setupOTP}},[t._v("\n "+t._s(t.$t("settings.mfa.setup_otp"))+"\n ")]):t._e(),t._v(" "),t.setupOTPInProgress?[t.prepareOTP?s("i",[t._v(t._s(t.$t("settings.mfa.wait_pre_setup_otp")))]):t._e(),t._v(" "),t.confirmOTP?s("div",[s("div",{staticClass:"setup-otp"},[s("div",{staticClass:"qr-code"},[s("h4",[t._v(t._s(t.$t("settings.mfa.scan.title")))]),t._v(" "),s("p",[t._v(t._s(t.$t("settings.mfa.scan.desc")))]),t._v(" "),s("qrcode",{attrs:{value:t.otpSettings.provisioning_uri,options:{width:200}}}),t._v(" "),s("p",[t._v("\n "+t._s(t.$t("settings.mfa.scan.secret_code"))+":\n "+t._s(t.otpSettings.key)+"\n ")])],1),t._v(" "),s("div",{staticClass:"verify"},[s("h4",[t._v(t._s(t.$t("general.verify")))]),t._v(" "),s("p",[t._v(t._s(t.$t("settings.mfa.verify.desc")))]),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.otpConfirmToken,expression:"otpConfirmToken"}],attrs:{type:"text"},domProps:{value:t.otpConfirmToken},on:{input:function(e){e.target.composing||(t.otpConfirmToken=e.target.value)}}}),t._v(" "),s("p",[t._v(t._s(t.$t("settings.enter_current_password_to_confirm"))+":")]),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.currentPassword,expression:"currentPassword"}],attrs:{type:"password"},domProps:{value:t.currentPassword},on:{input:function(e){e.target.composing||(t.currentPassword=e.target.value)}}}),t._v(" "),s("div",{staticClass:"confirm-otp-actions"},[s("button",{staticClass:"btn button-default",on:{click:t.doConfirmOTP}},[t._v("\n "+t._s(t.$t("settings.mfa.confirm_and_enable"))+"\n ")]),t._v(" "),s("button",{staticClass:"btn button-default",on:{click:t.cancelSetup}},[t._v("\n "+t._s(t.$t("general.cancel"))+"\n ")])]),t._v(" "),t.error?s("div",{staticClass:"alert error"},[t._v("\n "+t._s(t.error)+"\n ")]):t._e()])])]):t._e()]:t._e()],2):t._e()])]):t._e()}),[],!1,Ht,null,null).exports,Qt=s(106),Xt={data:function(){return{newEmail:"",changeEmailError:!1,changeEmailPassword:"",changedEmail:!1,deletingAccount:!1,deleteAccountConfirmPasswordInput:"",deleteAccountError:!1,changePasswordInputs:["","",""],changedPassword:!1,changePasswordError:!1}},created:function(){this.$store.dispatch("fetchTokens")},components:{ProgressButton:E.a,Mfa:Jt,Checkbox:v.a},computed:{user:function(){return this.$store.state.users.currentUser},pleromaBackend:function(){return this.$store.state.instance.pleromaBackend},oauthTokens:function(){var t=this;return this.$store.state.oauthTokens.tokens.map((function(e){return{id:e.id,appName:e.app_name,validUntil:new Date(e.valid_until).toLocaleDateString(Qt.a.internalToBrowserLocale(t.$i18n.locale))}}))}},methods:{confirmDelete:function(){this.deletingAccount=!0},deleteAccount:function(){var t=this;this.$store.state.api.backendInteractor.deleteAccount({password:this.deleteAccountConfirmPasswordInput}).then((function(e){"success"===e.status?(t.$store.dispatch("logout"),t.$router.push({name:"root"})):t.deleteAccountError=e.error}))},changePassword:function(){var t=this,e={password:this.changePasswordInputs[0],newPassword:this.changePasswordInputs[1],newPasswordConfirmation:this.changePasswordInputs[2]};this.$store.state.api.backendInteractor.changePassword(e).then((function(e){"success"===e.status?(t.changedPassword=!0,t.changePasswordError=!1,t.logout()):(t.changedPassword=!1,t.changePasswordError=e.error)}))},changeEmail:function(){var t=this,e={email:this.newEmail,password:this.changeEmailPassword};this.$store.state.api.backendInteractor.changeEmail(e).then((function(e){"success"===e.status?(t.changedEmail=!0,t.changeEmailError=!1):(t.changedEmail=!1,t.changeEmailError=e.error)}))},logout:function(){this.$store.dispatch("logout"),this.$router.replace("/")},revokeToken:function(t){window.confirm("".concat(this.$i18n.t("settings.revoke_token"),"?"))&&this.$store.dispatch("revokeToken",t)}}},Yt=Object(c.a)(Xt,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{attrs:{label:t.$t("settings.security_tab")}},[s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.change_email")))]),t._v(" "),s("div",[s("p",[t._v(t._s(t.$t("settings.new_email")))]),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.newEmail,expression:"newEmail"}],attrs:{type:"email",autocomplete:"email"},domProps:{value:t.newEmail},on:{input:function(e){e.target.composing||(t.newEmail=e.target.value)}}})]),t._v(" "),s("div",[s("p",[t._v(t._s(t.$t("settings.current_password")))]),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.changeEmailPassword,expression:"changeEmailPassword"}],attrs:{type:"password",autocomplete:"current-password"},domProps:{value:t.changeEmailPassword},on:{input:function(e){e.target.composing||(t.changeEmailPassword=e.target.value)}}})]),t._v(" "),s("button",{staticClass:"btn button-default",on:{click:t.changeEmail}},[t._v("\n "+t._s(t.$t("settings.save"))+"\n ")]),t._v(" "),t.changedEmail?s("p",[t._v("\n "+t._s(t.$t("settings.changed_email"))+"\n ")]):t._e(),t._v(" "),!1!==t.changeEmailError?[s("p",[t._v(t._s(t.$t("settings.change_email_error")))]),t._v(" "),s("p",[t._v(t._s(t.changeEmailError))])]:t._e()],2),t._v(" "),s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.change_password")))]),t._v(" "),s("div",[s("p",[t._v(t._s(t.$t("settings.current_password")))]),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.changePasswordInputs[0],expression:"changePasswordInputs[0]"}],attrs:{type:"password"},domProps:{value:t.changePasswordInputs[0]},on:{input:function(e){e.target.composing||t.$set(t.changePasswordInputs,0,e.target.value)}}})]),t._v(" "),s("div",[s("p",[t._v(t._s(t.$t("settings.new_password")))]),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.changePasswordInputs[1],expression:"changePasswordInputs[1]"}],attrs:{type:"password"},domProps:{value:t.changePasswordInputs[1]},on:{input:function(e){e.target.composing||t.$set(t.changePasswordInputs,1,e.target.value)}}})]),t._v(" "),s("div",[s("p",[t._v(t._s(t.$t("settings.confirm_new_password")))]),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.changePasswordInputs[2],expression:"changePasswordInputs[2]"}],attrs:{type:"password"},domProps:{value:t.changePasswordInputs[2]},on:{input:function(e){e.target.composing||t.$set(t.changePasswordInputs,2,e.target.value)}}})]),t._v(" "),s("button",{staticClass:"btn button-default",on:{click:t.changePassword}},[t._v("\n "+t._s(t.$t("settings.save"))+"\n ")]),t._v(" "),t.changedPassword?s("p",[t._v("\n "+t._s(t.$t("settings.changed_password"))+"\n ")]):!1!==t.changePasswordError?s("p",[t._v("\n "+t._s(t.$t("settings.change_password_error"))+"\n ")]):t._e(),t._v(" "),t.changePasswordError?s("p",[t._v("\n "+t._s(t.changePasswordError)+"\n ")]):t._e()]),t._v(" "),s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.oauth_tokens")))]),t._v(" "),s("table",{staticClass:"oauth-tokens"},[s("thead",[s("tr",[s("th",[t._v(t._s(t.$t("settings.app_name")))]),t._v(" "),s("th",[t._v(t._s(t.$t("settings.valid_until")))]),t._v(" "),s("th")])]),t._v(" "),s("tbody",t._l(t.oauthTokens,(function(e){return s("tr",{key:e.id},[s("td",[t._v(t._s(e.appName))]),t._v(" "),s("td",[t._v(t._s(e.validUntil))]),t._v(" "),s("td",{staticClass:"actions"},[s("button",{staticClass:"btn button-default",on:{click:function(s){return t.revokeToken(e.id)}}},[t._v("\n "+t._s(t.$t("settings.revoke_token"))+"\n ")])])])})),0)])]),t._v(" "),s("mfa"),t._v(" "),s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.delete_account")))]),t._v(" "),t.deletingAccount?t._e():s("p",[t._v("\n "+t._s(t.$t("settings.delete_account_description"))+"\n ")]),t._v(" "),t.deletingAccount?s("div",[s("p",[t._v(t._s(t.$t("settings.delete_account_instructions")))]),t._v(" "),s("p",[t._v(t._s(t.$t("login.password")))]),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.deleteAccountConfirmPasswordInput,expression:"deleteAccountConfirmPasswordInput"}],attrs:{type:"password"},domProps:{value:t.deleteAccountConfirmPasswordInput},on:{input:function(e){e.target.composing||(t.deleteAccountConfirmPasswordInput=e.target.value)}}}),t._v(" "),s("button",{staticClass:"btn button-default",on:{click:t.deleteAccount}},[t._v("\n "+t._s(t.$t("settings.delete_account"))+"\n ")])]):t._e(),t._v(" "),!1!==t.deleteAccountError?s("p",[t._v("\n "+t._s(t.$t("settings.delete_account_error"))+"\n ")]):t._e(),t._v(" "),t.deleteAccountError?s("p",[t._v("\n "+t._s(t.deleteAccountError)+"\n ")]):t._e(),t._v(" "),t.deletingAccount?t._e():s("button",{staticClass:"btn button-default",on:{click:t.confirmDelete}},[t._v("\n "+t._s(t.$t("settings.save"))+"\n ")])])],1)}),[],!1,null,null,null).exports,Zt=s(109),te=s.n(Zt),ee=s(108),se=s.n(ee),ne=s(25),ae=s.n(ne),oe=s(664);s(665);i.c.add(r.n);var ie={props:{trigger:{type:[String,window.Element],required:!0},submitHandler:{type:Function,required:!0},cropperOptions:{type:Object,default:function(){return{aspectRatio:1,autoCropArea:1,viewMode:1,movable:!1,zoomable:!1,guides:!1}}},mimes:{type:String,default:"image/png, image/gif, image/jpeg, image/bmp, image/x-icon"},saveButtonLabel:{type:String},saveWithoutCroppingButtonlabel:{type:String},cancelButtonLabel:{type:String}},data:function(){return{cropper:void 0,dataUrl:void 0,filename:void 0,submitting:!1}},computed:{saveText:function(){return this.saveButtonLabel||this.$t("image_cropper.save")},saveWithoutCroppingText:function(){return this.saveWithoutCroppingButtonlabel||this.$t("image_cropper.save_without_cropping")},cancelText:function(){return this.cancelButtonLabel||this.$t("image_cropper.cancel")}},methods:{destroy:function(){this.cropper&&this.cropper.destroy(),this.$refs.input.value="",this.dataUrl=void 0,this.$emit("close")},submit:function(){var t=this,e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.submitting=!0,this.submitHandler(e&&this.cropper,this.file).then((function(){return t.destroy()})).finally((function(){t.submitting=!1}))},pickImage:function(){this.$refs.input.click()},createCropper:function(){this.cropper=new oe.a(this.$refs.img,this.cropperOptions)},getTriggerDOM:function(){return"object"===ae()(this.trigger)?this.trigger:document.querySelector(this.trigger)},readFile:function(){var t=this,e=this.$refs.input;if(null!=e.files&&null!=e.files[0]){this.file=e.files[0];var s=new window.FileReader;s.onload=function(e){t.dataUrl=e.target.result,t.$emit("open")},s.readAsDataURL(this.file),this.$emit("changed",this.file,s)}}},mounted:function(){var t=this.getTriggerDOM();t?t.addEventListener("click",this.pickImage):this.$emit("error","No image make trigger found.","user"),this.$refs.input.addEventListener("change",this.readFile)},beforeDestroy:function(){var t=this.getTriggerDOM();t&&t.removeEventListener("click",this.pickImage),this.$refs.input.removeEventListener("change",this.readFile)}};var re=function(t){s(662)},le=Object(c.a)(ie,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"image-cropper"},[t.dataUrl?s("div",[s("div",{staticClass:"image-cropper-image-container"},[s("img",{ref:"img",attrs:{src:t.dataUrl,alt:""},on:{load:function(e){return e.stopPropagation(),t.createCropper(e)}}})]),t._v(" "),s("div",{staticClass:"image-cropper-buttons-wrapper"},[s("button",{staticClass:"button-default btn",attrs:{type:"button",disabled:t.submitting},domProps:{textContent:t._s(t.saveText)},on:{click:function(e){return t.submit()}}}),t._v(" "),s("button",{staticClass:"button-default btn",attrs:{type:"button",disabled:t.submitting},domProps:{textContent:t._s(t.cancelText)},on:{click:t.destroy}}),t._v(" "),s("button",{staticClass:"button-default btn",attrs:{type:"button",disabled:t.submitting},domProps:{textContent:t._s(t.saveWithoutCroppingText)},on:{click:function(e){return t.submit(!1)}}}),t._v(" "),t.submitting?s("FAIcon",{attrs:{spin:"",icon:"circle-notch"}}):t._e()],1)]):t._e(),t._v(" "),s("input",{ref:"input",staticClass:"image-cropper-img-input",attrs:{type:"file",accept:t.mimes}})])}),[],!1,re,null,null).exports,ce=s(212),ue=s(83),de=s(211),pe=s(149);i.c.add(r.kb,r.Q,r.n);var me={data:function(){return{newName:this.$store.state.users.currentUser.name_unescaped,newBio:te()(this.$store.state.users.currentUser.description),newLocked:this.$store.state.users.currentUser.locked,newNoRichText:this.$store.state.users.currentUser.no_rich_text,newDefaultScope:this.$store.state.users.currentUser.default_scope,newFields:this.$store.state.users.currentUser.fields.map((function(t){return{name:t.name,value:t.value}})),hideFollows:this.$store.state.users.currentUser.hide_follows,hideFollowers:this.$store.state.users.currentUser.hide_followers,hideFollowsCount:this.$store.state.users.currentUser.hide_follows_count,hideFollowersCount:this.$store.state.users.currentUser.hide_followers_count,showRole:this.$store.state.users.currentUser.show_role,role:this.$store.state.users.currentUser.role,discoverable:this.$store.state.users.currentUser.discoverable,bot:this.$store.state.users.currentUser.bot,allowFollowingMove:this.$store.state.users.currentUser.allow_following_move,pickAvatarBtnVisible:!0,bannerUploading:!1,backgroundUploading:!1,banner:null,bannerPreview:null,background:null,backgroundPreview:null}},components:{ScopeSelector:ce.a,ImageCropper:le,EmojiInput:de.a,Autosuggest:O,ProgressButton:E.a,Checkbox:v.a},computed:{user:function(){return this.$store.state.users.currentUser},emojiUserSuggestor:function(){return Object(pe.a)({emoji:[].concat(H()(this.$store.state.instance.emoji),H()(this.$store.state.instance.customEmoji)),store:this.$store})},emojiSuggestor:function(){return Object(pe.a)({emoji:[].concat(H()(this.$store.state.instance.emoji),H()(this.$store.state.instance.customEmoji))})},userSuggestor:function(){return Object(pe.a)({store:this.$store})},fieldsLimits:function(){return this.$store.state.instance.fieldsLimits},maxFields:function(){return this.fieldsLimits?this.fieldsLimits.maxFields:0},defaultAvatar:function(){return this.$store.state.instance.server+this.$store.state.instance.defaultAvatar},defaultBanner:function(){return this.$store.state.instance.server+this.$store.state.instance.defaultBanner},isDefaultAvatar:function(){var t=this.$store.state.instance.defaultAvatar;return!this.$store.state.users.currentUser.profile_image_url||this.$store.state.users.currentUser.profile_image_url.includes(t)},isDefaultBanner:function(){var t=this.$store.state.instance.defaultBanner;return!this.$store.state.users.currentUser.cover_photo||this.$store.state.users.currentUser.cover_photo.includes(t)},isDefaultBackground:function(){return!this.$store.state.users.currentUser.background_image},avatarImgSrc:function(){var t=this.$store.state.users.currentUser.profile_image_url_original;return t||this.defaultAvatar},bannerImgSrc:function(){var t=this.$store.state.users.currentUser.cover_photo;return t||this.defaultBanner}},methods:{updateProfile:function(){var t=this;this.$store.state.api.backendInteractor.updateProfile({params:{note:this.newBio,locked:this.newLocked,display_name:this.newName,fields_attributes:this.newFields.filter((function(t){return null!=t})),default_scope:this.newDefaultScope,no_rich_text:this.newNoRichText,hide_follows:this.hideFollows,hide_followers:this.hideFollowers,discoverable:this.discoverable,bot:this.bot,allow_following_move:this.allowFollowingMove,hide_follows_count:this.hideFollowsCount,hide_followers_count:this.hideFollowersCount,show_role:this.showRole}}).then((function(e){t.newFields.splice(e.fields.length),se()(t.newFields,e.fields),t.$store.commit("addNewUsers",[e]),t.$store.commit("setCurrentUser",e)}))},changeVis:function(t){this.newDefaultScope=t},addField:function(){return this.newFields.lengththis.$store.state.instance[t+"limit"]){var a=ue.a.fileSizeFormat(n.size),o=ue.a.fileSizeFormat(this.$store.state.instance[t+"limit"]);this.$store.dispatch("pushGlobalNotice",{messageKey:"upload.error.message",messageArgs:[this.$t("upload.error.file_too_big",{filesize:a.num,filesizeunit:a.unit,allowedsize:o.num,allowedsizeunit:o.unit})],level:"error"})}else{var i=new FileReader;i.onload=function(e){var a=e.target.result;s[t+"Preview"]=a,s[t]=n},i.readAsDataURL(n)}},resetAvatar:function(){window.confirm(this.$t("settings.reset_avatar_confirm"))&&this.submitAvatar(void 0,"")},resetBanner:function(){window.confirm(this.$t("settings.reset_banner_confirm"))&&this.submitBanner("")},resetBackground:function(){window.confirm(this.$t("settings.reset_background_confirm"))&&this.submitBackground("")},submitAvatar:function(t,e){var s=this;return new Promise((function(n,a){function o(t){s.$store.state.api.backendInteractor.updateProfileImages({avatar:t}).then((function(t){s.$store.commit("addNewUsers",[t]),s.$store.commit("setCurrentUser",t),n()})).catch((function(t){s.displayUploadError(t),a(t)}))}t?t.getCroppedCanvas().toBlob(o,e.type):o(e)}))},submitBanner:function(t){var e=this;(this.bannerPreview||""===t)&&(this.bannerUploading=!0,this.$store.state.api.backendInteractor.updateProfileImages({banner:t}).then((function(t){e.$store.commit("addNewUsers",[t]),e.$store.commit("setCurrentUser",t),e.bannerPreview=null})).catch(this.displayUploadError).finally((function(){e.bannerUploading=!1})))},submitBackground:function(t){var e=this;(this.backgroundPreview||""===t)&&(this.backgroundUploading=!0,this.$store.state.api.backendInteractor.updateProfileImages({background:t}).then((function(t){e.$store.commit("addNewUsers",[t]),e.$store.commit("setCurrentUser",t),e.backgroundPreview=null})).catch(this.displayUploadError).finally((function(){e.backgroundUploading=!1})))},displayUploadError:function(t){this.$store.dispatch("pushGlobalNotice",{messageKey:"upload.error.message",messageArgs:[t.message],level:"error"})}}};var he=function(t){s(660)},ve=Object(c.a)(me,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"profile-tab"},[s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.name_bio")))]),t._v(" "),s("p",[t._v(t._s(t.$t("settings.name")))]),t._v(" "),s("EmojiInput",{attrs:{"enable-emoji-picker":"",suggest:t.emojiSuggestor},model:{value:t.newName,callback:function(e){t.newName=e},expression:"newName"}},[s("input",{directives:[{name:"model",rawName:"v-model",value:t.newName,expression:"newName"}],staticClass:"name-changer",attrs:{id:"username"},domProps:{value:t.newName},on:{input:function(e){e.target.composing||(t.newName=e.target.value)}}})]),t._v(" "),s("p",[t._v(t._s(t.$t("settings.bio")))]),t._v(" "),s("EmojiInput",{attrs:{"enable-emoji-picker":"",suggest:t.emojiUserSuggestor},model:{value:t.newBio,callback:function(e){t.newBio=e},expression:"newBio"}},[s("textarea",{directives:[{name:"model",rawName:"v-model",value:t.newBio,expression:"newBio"}],staticClass:"bio resize-height",domProps:{value:t.newBio},on:{input:function(e){e.target.composing||(t.newBio=e.target.value)}}})]),t._v(" "),s("p",[s("Checkbox",{model:{value:t.newLocked,callback:function(e){t.newLocked=e},expression:"newLocked"}},[t._v("\n "+t._s(t.$t("settings.lock_account_description"))+"\n ")])],1),t._v(" "),s("div",[s("label",{attrs:{for:"default-vis"}},[t._v(t._s(t.$t("settings.default_vis")))]),t._v(" "),s("div",{staticClass:"visibility-tray",attrs:{id:"default-vis"}},[s("scope-selector",{attrs:{"show-all":!0,"user-default":t.newDefaultScope,"initial-scope":t.newDefaultScope,"on-scope-change":t.changeVis}})],1)]),t._v(" "),s("p",[s("Checkbox",{model:{value:t.newNoRichText,callback:function(e){t.newNoRichText=e},expression:"newNoRichText"}},[t._v("\n "+t._s(t.$t("settings.no_rich_text_description"))+"\n ")])],1),t._v(" "),s("p",[s("Checkbox",{model:{value:t.hideFollows,callback:function(e){t.hideFollows=e},expression:"hideFollows"}},[t._v("\n "+t._s(t.$t("settings.hide_follows_description"))+"\n ")])],1),t._v(" "),s("p",{staticClass:"setting-subitem"},[s("Checkbox",{attrs:{disabled:!t.hideFollows},model:{value:t.hideFollowsCount,callback:function(e){t.hideFollowsCount=e},expression:"hideFollowsCount"}},[t._v("\n "+t._s(t.$t("settings.hide_follows_count_description"))+"\n ")])],1),t._v(" "),s("p",[s("Checkbox",{model:{value:t.hideFollowers,callback:function(e){t.hideFollowers=e},expression:"hideFollowers"}},[t._v("\n "+t._s(t.$t("settings.hide_followers_description"))+"\n ")])],1),t._v(" "),s("p",{staticClass:"setting-subitem"},[s("Checkbox",{attrs:{disabled:!t.hideFollowers},model:{value:t.hideFollowersCount,callback:function(e){t.hideFollowersCount=e},expression:"hideFollowersCount"}},[t._v("\n "+t._s(t.$t("settings.hide_followers_count_description"))+"\n ")])],1),t._v(" "),s("p",[s("Checkbox",{model:{value:t.allowFollowingMove,callback:function(e){t.allowFollowingMove=e},expression:"allowFollowingMove"}},[t._v("\n "+t._s(t.$t("settings.allow_following_move"))+"\n ")])],1),t._v(" "),"admin"===t.role||"moderator"===t.role?s("p",[s("Checkbox",{model:{value:t.showRole,callback:function(e){t.showRole=e},expression:"showRole"}},["admin"===t.role?[t._v("\n "+t._s(t.$t("settings.show_admin_badge"))+"\n ")]:t._e(),t._v(" "),"moderator"===t.role?[t._v("\n "+t._s(t.$t("settings.show_moderator_badge"))+"\n ")]:t._e()],2)],1):t._e(),t._v(" "),s("p",[s("Checkbox",{model:{value:t.discoverable,callback:function(e){t.discoverable=e},expression:"discoverable"}},[t._v("\n "+t._s(t.$t("settings.discoverable"))+"\n ")])],1),t._v(" "),t.maxFields>0?s("div",[s("p",[t._v(t._s(t.$t("settings.profile_fields.label")))]),t._v(" "),t._l(t.newFields,(function(e,n){return s("div",{key:n,staticClass:"profile-fields"},[s("EmojiInput",{attrs:{"enable-emoji-picker":"","hide-emoji-button":"",suggest:t.userSuggestor},model:{value:t.newFields[n].name,callback:function(e){t.$set(t.newFields[n],"name",e)},expression:"newFields[i].name"}},[s("input",{directives:[{name:"model",rawName:"v-model",value:t.newFields[n].name,expression:"newFields[i].name"}],attrs:{placeholder:t.$t("settings.profile_fields.name")},domProps:{value:t.newFields[n].name},on:{input:function(e){e.target.composing||t.$set(t.newFields[n],"name",e.target.value)}}})]),t._v(" "),s("EmojiInput",{attrs:{"enable-emoji-picker":"","hide-emoji-button":"",suggest:t.userSuggestor},model:{value:t.newFields[n].value,callback:function(e){t.$set(t.newFields[n],"value",e)},expression:"newFields[i].value"}},[s("input",{directives:[{name:"model",rawName:"v-model",value:t.newFields[n].value,expression:"newFields[i].value"}],attrs:{placeholder:t.$t("settings.profile_fields.value")},domProps:{value:t.newFields[n].value},on:{input:function(e){e.target.composing||t.$set(t.newFields[n],"value",e.target.value)}}})]),t._v(" "),s("button",{staticClass:"delete-field button-unstyled -hover-highlight",on:{click:function(e){return t.deleteField(n)}}},[s("FAIcon",{directives:[{name:"show",rawName:"v-show",value:t.newFields.length>1,expression:"newFields.length > 1"}],attrs:{icon:"times"}})],1)],1)})),t._v(" "),t.newFields.length0?s("li",[s("ChoiceSetting",{attrs:{id:"postContentType",path:"postContentType",options:t.postContentOptions}},[t._v("\n "+t._s(t.$t("settings.post_status_content_type"))+"\n ")])],1):t._e(),t._v(" "),s("li",[s("BooleanSetting",{attrs:{path:"minimalScopesMode"}},[t._v("\n "+t._s(t.$t("settings.minimal_scopes_mode"))+"\n ")])],1),t._v(" "),s("li",[s("BooleanSetting",{attrs:{path:"sensitiveByDefault"}},[t._v("\n "+t._s(t.$t("settings.sensitive_by_default"))+"\n ")])],1),t._v(" "),s("li",[s("BooleanSetting",{attrs:{path:"alwaysShowNewPostButton"}},[t._v("\n "+t._s(t.$t("settings.always_show_post_button"))+"\n ")])],1),t._v(" "),s("li",[s("BooleanSetting",{attrs:{path:"autohideFloatingPostButton"}},[t._v("\n "+t._s(t.$t("settings.autohide_floating_post_button"))+"\n ")])],1),t._v(" "),s("li",[s("BooleanSetting",{attrs:{path:"padEmoji"}},[t._v("\n "+t._s(t.$t("settings.pad_emoji"))+"\n ")])],1)])]),t._v(" "),s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.attachments")))]),t._v(" "),s("ul",{staticClass:"setting-list"},[s("li",[s("BooleanSetting",{attrs:{path:"hideAttachments"}},[t._v("\n "+t._s(t.$t("settings.hide_attachments_in_tl"))+"\n ")])],1),t._v(" "),s("li",[s("BooleanSetting",{attrs:{path:"hideAttachmentsInConv"}},[t._v("\n "+t._s(t.$t("settings.hide_attachments_in_convo"))+"\n ")])],1),t._v(" "),s("li",[s("label",{attrs:{for:"maxThumbnails"}},[t._v("\n "+t._s(t.$t("settings.max_thumbnails"))+"\n ")]),t._v(" "),s("input",{staticClass:"number-input",attrs:{id:"maxThumbnails","path.number":"maxThumbnails",type:"number",min:"0",step:"1"}})]),t._v(" "),s("li",[s("BooleanSetting",{attrs:{path:"hideNsfw"}},[t._v("\n "+t._s(t.$t("settings.nsfw_clickthrough"))+"\n ")])],1),t._v(" "),s("ul",{staticClass:"setting-list suboptions"},[s("li",[s("BooleanSetting",{attrs:{path:"preloadImage",disabled:!t.hideNsfw}},[t._v("\n "+t._s(t.$t("settings.preload_images"))+"\n ")])],1),t._v(" "),s("li",[s("BooleanSetting",{attrs:{path:"useOneClickNsfw",disabled:!t.hideNsfw}},[t._v("\n "+t._s(t.$t("settings.use_one_click_nsfw"))+"\n ")])],1)]),t._v(" "),s("li",[s("BooleanSetting",{attrs:{path:"stopGifs"}},[t._v("\n "+t._s(t.$t("settings.stop_gifs"))+"\n ")])],1),t._v(" "),s("li",[s("BooleanSetting",{attrs:{path:"loopVideo"}},[t._v("\n "+t._s(t.$t("settings.loop_video"))+"\n ")]),t._v(" "),s("ul",{staticClass:"setting-list suboptions",class:[{disabled:!t.streaming}]},[s("li",[s("BooleanSetting",{attrs:{path:"loopVideoSilentOnly",disabled:!t.loopVideo||!t.loopSilentAvailable}},[t._v("\n "+t._s(t.$t("settings.loop_video_silent_only"))+"\n ")]),t._v(" "),t.loopSilentAvailable?t._e():s("div",{staticClass:"unavailable"},[s("FAIcon",{attrs:{icon:"globe"}}),t._v("! "+t._s(t.$t("settings.limited_availability"))+"\n ")],1)],1)])],1),t._v(" "),s("li",[s("BooleanSetting",{attrs:{path:"playVideosInModal"}},[t._v("\n "+t._s(t.$t("settings.play_videos_in_modal"))+"\n ")])],1),t._v(" "),s("li",[s("BooleanSetting",{attrs:{path:"useContainFit"}},[t._v("\n "+t._s(t.$t("settings.use_contain_fit"))+"\n ")])],1)])]),t._v(" "),s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.notifications")))]),t._v(" "),s("ul",{staticClass:"setting-list"},[s("li",[s("BooleanSetting",{attrs:{path:"webPushNotifications"}},[t._v("\n "+t._s(t.$t("settings.enable_web_push_notifications"))+"\n ")])],1)])]),t._v(" "),s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.fun")))]),t._v(" "),s("ul",{staticClass:"setting-list"},[s("li",[s("BooleanSetting",{attrs:{path:"greentext"}},[t._v("\n "+t._s(t.$t("settings.greentext"))+"\n ")])],1)])])])}),[],!1,null,null,null).exports,ke={data:function(){var t=this.$store.state.instance;return{backendVersion:t.backendVersion,frontendVersion:t.frontendVersion}},computed:{frontendVersionLink:function(){return"https://git.pleroma.social/pleroma/pleroma-fe/commit/"+this.frontendVersion},backendVersionLink:function(){return"https://git.pleroma.social/pleroma/pleroma/commit/"+(t=this.backendVersion,(e=t.match(/-g(\w+)/i))?e[1]:"");var t,e}}},ye=Object(c.a)(ke,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{attrs:{label:t.$t("settings.version.title")}},[s("div",{staticClass:"setting-item"},[s("ul",{staticClass:"setting-list"},[s("li",[s("p",[t._v(t._s(t.$t("settings.version.backend_version")))]),t._v(" "),s("ul",{staticClass:"option-list"},[s("li",[s("a",{attrs:{href:t.backendVersionLink,target:"_blank"}},[t._v(t._s(t.backendVersion))])])])]),t._v(" "),s("li",[s("p",[t._v(t._s(t.$t("settings.version.frontend_version")))]),t._v(" "),s("ul",{staticClass:"option-list"},[s("li",[s("a",{attrs:{href:t.frontendVersionLink,target:"_blank"}},[t._v(t._s(t.frontendVersion))])])])])])])])}),[],!1,null,null,null).exports,$e=s(14),Le=s(37),Te=s(120),Oe=s(32),Pe=s(46),Se={components:{Checkbox:v.a},props:{name:{required:!0,type:String},label:{required:!0,type:String},value:{required:!1,type:String,default:void 0},fallback:{required:!1,type:String,default:void 0},disabled:{required:!1,type:Boolean,default:!1},showOptionalTickbox:{required:!1,type:Boolean,default:!0}},computed:{present:function(){return void 0!==this.value},validColor:function(){return Object($e.f)(this.value||this.fallback)},transparentColor:function(){return"transparent"===this.value},computedColor:function(){return this.value&&this.value.startsWith("--")}}};var Ie=function(t){s(668),s(670)},je=Object(c.a)(Se,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"color-input style-control",class:{disabled:!t.present||t.disabled}},[s("label",{staticClass:"label",attrs:{for:t.name}},[t._v("\n "+t._s(t.label)+"\n ")]),t._v(" "),void 0!==t.fallback&&t.showOptionalTickbox?s("Checkbox",{staticClass:"opt",attrs:{checked:t.present,disabled:t.disabled},on:{change:function(e){return t.$emit("input",void 0===t.value?t.fallback:void 0)}}}):t._e(),t._v(" "),s("div",{staticClass:"input color-input-field"},[s("input",{staticClass:"textColor unstyled",attrs:{id:t.name+"-t",type:"text",disabled:!t.present||t.disabled},domProps:{value:t.value||t.fallback},on:{input:function(e){return t.$emit("input",e.target.value)}}}),t._v(" "),t.validColor?s("input",{staticClass:"nativeColor unstyled",attrs:{id:t.name,type:"color",disabled:!t.present||t.disabled},domProps:{value:t.value||t.fallback},on:{input:function(e){return t.$emit("input",e.target.value)}}}):t._e(),t._v(" "),t.transparentColor?s("div",{staticClass:"transparentIndicator"}):t._e(),t._v(" "),t.computedColor?s("div",{staticClass:"computedIndicator",style:{backgroundColor:t.fallback}}):t._e()])],1)}),[],!1,Ie,null,null).exports,Be=Object(c.a)({props:["name","value","fallback","disabled","label","max","min","step","hardMin","hardMax"],computed:{present:function(){return void 0!==this.value}}},(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"range-control style-control",class:{disabled:!t.present||t.disabled}},[s("label",{staticClass:"label",attrs:{for:t.name}},[t._v("\n "+t._s(t.label)+"\n ")]),t._v(" "),void 0!==t.fallback?s("input",{staticClass:"opt",attrs:{id:t.name+"-o",type:"checkbox"},domProps:{checked:t.present},on:{input:function(e){return t.$emit("input",t.present?void 0:t.fallback)}}}):t._e(),t._v(" "),void 0!==t.fallback?s("label",{staticClass:"opt-l",attrs:{for:t.name+"-o"}}):t._e(),t._v(" "),s("input",{staticClass:"input-number",attrs:{id:t.name,type:"range",disabled:!t.present||t.disabled,max:t.max||t.hardMax||100,min:t.min||t.hardMin||0,step:t.step||1},domProps:{value:t.value||t.fallback},on:{input:function(e){return t.$emit("input",e.target.value)}}}),t._v(" "),s("input",{staticClass:"input-number",attrs:{id:t.name,type:"number",disabled:!t.present||t.disabled,max:t.hardMax,min:t.hardMin,step:t.step||1},domProps:{value:t.value||t.fallback},on:{input:function(e){return t.$emit("input",e.target.value)}}})])}),[],!1,null,null,null).exports,Fe={components:{Checkbox:v.a},props:["name","value","fallback","disabled"],computed:{present:function(){return void 0!==this.value}}},Re=Object(c.a)(Fe,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"opacity-control style-control",class:{disabled:!t.present||t.disabled}},[s("label",{staticClass:"label",attrs:{for:t.name}},[t._v("\n "+t._s(t.$t("settings.style.common.opacity"))+"\n ")]),t._v(" "),void 0!==t.fallback?s("Checkbox",{staticClass:"opt",attrs:{checked:t.present,disabled:t.disabled},on:{change:function(e){return t.$emit("input",t.present?void 0:t.fallback)}}}):t._e(),t._v(" "),s("input",{staticClass:"input-number",attrs:{id:t.name,type:"number",disabled:!t.present||t.disabled,max:"1",min:"0",step:".05"},domProps:{value:t.value||t.fallback},on:{input:function(e){return t.$emit("input",e.target.value)}}})],1)}),[],!1,null,null,null).exports;function Ee(t,e){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),s.push.apply(s,n)}return s}function Ae(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:{};return Ae({x:0,y:0,blur:0,spread:0,inset:!1,color:"#000000",alpha:1},t)},De={props:["value","fallback","ready"],data:function(){return{selectedId:0,cValue:(this.value||this.fallback||[]).map(Me)}},components:{ColorInput:je,OpacityInput:Re,Select:Lt.a},methods:{add:function(){this.cValue.push(Me(this.selected)),this.selectedId=this.cValue.length-1},del:function(){this.cValue.splice(this.selectedId,1),this.selectedId=0===this.cValue.length?void 0:Math.max(this.selectedId-1,0)},moveUp:function(){var t=this.cValue.splice(this.selectedId,1)[0];this.cValue.splice(this.selectedId-1,0,t),this.selectedId-=1},moveDn:function(){var t=this.cValue.splice(this.selectedId,1)[0];this.cValue.splice(this.selectedId+1,0,t),this.selectedId+=1}},beforeUpdate:function(){this.cValue=this.value||this.fallback},computed:{anyShadows:function(){return this.cValue.length>0},anyShadowsFallback:function(){return this.fallback.length>0},selected:function(){return this.ready&&this.anyShadows?this.cValue[this.selectedId]:Me({})},currentFallback:function(){return this.ready&&this.anyShadowsFallback?this.fallback[this.selectedId]:Me({})},moveUpValid:function(){return this.ready&&this.selectedId>0},moveDnValid:function(){return this.ready&&this.selectedId-1:t.selected.inset},on:{change:function(e){var s=t.selected.inset,n=e.target,a=!!n.checked;if(Array.isArray(s)){var o=t._i(s,null);n.checked?o<0&&t.$set(t.selected,"inset",s.concat([null])):o>-1&&t.$set(t.selected,"inset",s.slice(0,o).concat(s.slice(o+1)))}else t.$set(t.selected,"inset",a)}}}),t._v(" "),s("label",{staticClass:"checkbox-label",attrs:{for:"inset"}})]),t._v(" "),s("div",{staticClass:"blur-control style-control",attrs:{disabled:!t.present}},[s("label",{staticClass:"label",attrs:{for:"spread"}},[t._v("\n "+t._s(t.$t("settings.style.shadows.blur"))+"\n ")]),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.selected.blur,expression:"selected.blur"}],staticClass:"input-range",attrs:{id:"blur",disabled:!t.present,name:"blur",type:"range",max:"20",min:"0"},domProps:{value:t.selected.blur},on:{__r:function(e){return t.$set(t.selected,"blur",e.target.value)}}}),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.selected.blur,expression:"selected.blur"}],staticClass:"input-number",attrs:{disabled:!t.present,type:"number",min:"0"},domProps:{value:t.selected.blur},on:{input:function(e){e.target.composing||t.$set(t.selected,"blur",e.target.value)}}})]),t._v(" "),s("div",{staticClass:"spread-control style-control",attrs:{disabled:!t.present}},[s("label",{staticClass:"label",attrs:{for:"spread"}},[t._v("\n "+t._s(t.$t("settings.style.shadows.spread"))+"\n ")]),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.selected.spread,expression:"selected.spread"}],staticClass:"input-range",attrs:{id:"spread",disabled:!t.present,name:"spread",type:"range",max:"20",min:"-20"},domProps:{value:t.selected.spread},on:{__r:function(e){return t.$set(t.selected,"spread",e.target.value)}}}),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.selected.spread,expression:"selected.spread"}],staticClass:"input-number",attrs:{disabled:!t.present,type:"number"},domProps:{value:t.selected.spread},on:{input:function(e){e.target.composing||t.$set(t.selected,"spread",e.target.value)}}})]),t._v(" "),s("ColorInput",{attrs:{disabled:!t.present,label:t.$t("settings.style.common.color"),fallback:t.currentFallback.color,"show-optional-tickbox":!1,name:"shadow"},model:{value:t.selected.color,callback:function(e){t.$set(t.selected,"color",e)},expression:"selected.color"}}),t._v(" "),s("OpacityInput",{attrs:{disabled:!t.present},model:{value:t.selected.alpha,callback:function(e){t.$set(t.selected,"alpha",e)},expression:"selected.alpha"}}),t._v(" "),s("i18n",{attrs:{path:"settings.style.shadows.hintV3",tag:"p"}},[s("code",[t._v("--variable,mod")])])],1)])}),[],!1,Ue,null,null).exports,Ve={components:{Select:Lt.a},props:["name","label","value","fallback","options","no-inherit"],data:function(){return{lValue:this.value,availableOptions:[this.noInherit?"":"inherit","custom"].concat(H()(this.options||[]),["serif","monospace","sans-serif"]).filter((function(t){return t}))}},beforeUpdate:function(){this.lValue=this.value},computed:{present:function(){return void 0!==this.lValue},dValue:function(){return this.lValue||this.fallback||{}},family:{get:function(){return this.dValue.family},set:function(t){Object(J.set)(this.lValue,"family",t),this.$emit("input",this.lValue)}},isCustom:function(){return"custom"===this.preset},preset:{get:function(){return"serif"===this.family||"sans-serif"===this.family||"monospace"===this.family||"inherit"===this.family?this.family:"custom"},set:function(t){this.family="custom"===t?"":t}}}};var We=function(t){s(674)},qe=Object(c.a)(Ve,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"font-control style-control",class:{custom:t.isCustom}},[s("label",{staticClass:"label",attrs:{for:"custom"===t.preset?t.name:t.name+"-font-switcher"}},[t._v("\n "+t._s(t.label)+"\n ")]),t._v(" "),void 0!==t.fallback?s("input",{staticClass:"opt exlcude-disabled",attrs:{id:t.name+"-o",type:"checkbox"},domProps:{checked:t.present},on:{input:function(e){return t.$emit("input",void 0===t.value?t.fallback:void 0)}}}):t._e(),t._v(" "),void 0!==t.fallback?s("label",{staticClass:"opt-l",attrs:{for:t.name+"-o"}}):t._e(),t._v(" "),s("Select",{staticClass:"font-switcher",attrs:{id:t.name+"-font-switcher",disabled:!t.present},model:{value:t.preset,callback:function(e){t.preset=e},expression:"preset"}},t._l(t.availableOptions,(function(e){return s("option",{key:e,domProps:{value:e}},[t._v("\n "+t._s("custom"===e?t.$t("settings.style.fonts.custom"):e)+"\n ")])})),0),t._v(" "),t.isCustom?s("input",{directives:[{name:"model",rawName:"v-model",value:t.family,expression:"family"}],staticClass:"custom-font",attrs:{id:t.name,type:"text"},domProps:{value:t.family},on:{input:function(e){e.target.composing||(t.family=e.target.value)}}}):t._e()],1)}),[],!1,We,null,null).exports;i.c.add(r.a,r.v,r.ib);var ze={props:{large:{required:!1,type:Boolean,default:!1},contrast:{required:!1,type:Object,default:function(){return{}}}},computed:{hint:function(){var t=this.contrast.aaa?"aaa":this.contrast.aa?"aa":"bad",e=this.$t("settings.style.common.contrast.level.".concat(t)),s=this.$t("settings.style.common.contrast.context.text"),n=this.contrast.text;return this.$t("settings.style.common.contrast.hint",{level:e,context:s,ratio:n})},hint_18pt:function(){var t=this.contrast.laaa?"aaa":this.contrast.laa?"aa":"bad",e=this.$t("settings.style.common.contrast.level.".concat(t)),s=this.$t("settings.style.common.contrast.context.18pt"),n=this.contrast.text;return this.$t("settings.style.common.contrast.hint",{level:e,context:s,ratio:n})}}};var Ge=function(t){s(676)},Ke=Object(c.a)(ze,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.contrast?s("span",{staticClass:"contrast-ratio"},[s("span",{staticClass:"rating",attrs:{title:t.hint}},[t.contrast.aaa?s("span",[s("FAIcon",{attrs:{icon:"thumbs-up"}})],1):t._e(),t._v(" "),!t.contrast.aaa&&t.contrast.aa?s("span",[s("FAIcon",{attrs:{icon:"adjust"}})],1):t._e(),t._v(" "),t.contrast.aaa||t.contrast.aa?t._e():s("span",[s("FAIcon",{attrs:{icon:"exclamation-triangle"}})],1)]),t._v(" "),t.contrast&&t.large?s("span",{staticClass:"rating",attrs:{title:t.hint_18pt}},[t.contrast.laaa?s("span",[s("FAIcon",{attrs:{icon:"thumbs-up"}})],1):t._e(),t._v(" "),!t.contrast.laaa&&t.contrast.laa?s("span",[s("FAIcon",{attrs:{icon:"adjust"}})],1):t._e(),t._v(" "),t.contrast.laaa||t.contrast.laa?t._e():s("span",[s("FAIcon",{attrs:{icon:"exclamation-triangle"}})],1)]):t._e()]):t._e()}),[],!1,Ge,null,null).exports;i.c.add(r.kb,r.cb,r.U,r.T);var He=function(t){s(678)},Je=Object(c.a)({},(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"preview-container"},[s("div",{staticClass:"underlay underlay-preview"}),t._v(" "),s("div",{staticClass:"panel dummy"},[s("div",{staticClass:"panel-heading"},[s("div",{staticClass:"title"},[t._v("\n "+t._s(t.$t("settings.style.preview.header"))+"\n "),s("span",{staticClass:"badge badge-notification"},[t._v("\n 99\n ")])]),t._v(" "),s("span",{staticClass:"faint"},[t._v("\n "+t._s(t.$t("settings.style.preview.header_faint"))+"\n ")]),t._v(" "),s("span",{staticClass:"alert error"},[t._v("\n "+t._s(t.$t("settings.style.preview.error"))+"\n ")]),t._v(" "),s("button",{staticClass:"btn button-default"},[t._v("\n "+t._s(t.$t("settings.style.preview.button"))+"\n ")])]),t._v(" "),s("div",{staticClass:"panel-body theme-preview-content"},[s("div",{staticClass:"post"},[s("div",{staticClass:"avatar still-image"},[t._v("\n ( ͡° ͜ʖ ͡°)\n ")]),t._v(" "),s("div",{staticClass:"content"},[s("h4",[t._v("\n "+t._s(t.$t("settings.style.preview.content"))+"\n ")]),t._v(" "),s("i18n",{attrs:{path:"settings.style.preview.text"}},[s("code",{staticStyle:{"font-family":"var(--postCodeFont)"}},[t._v("\n "+t._s(t.$t("settings.style.preview.mono"))+"\n ")]),t._v(" "),s("a",{staticStyle:{color:"var(--link)"}},[t._v("\n "+t._s(t.$t("settings.style.preview.link"))+"\n ")])]),t._v(" "),s("div",{staticClass:"icons"},[s("FAIcon",{staticClass:"fa-scale-110 fa-old-padding",staticStyle:{color:"var(--cBlue)"},attrs:{"fixed-width":"",icon:"reply"}}),t._v(" "),s("FAIcon",{staticClass:"fa-scale-110 fa-old-padding",staticStyle:{color:"var(--cGreen)"},attrs:{"fixed-width":"",icon:"retweet"}}),t._v(" "),s("FAIcon",{staticClass:"fa-scale-110 fa-old-padding",staticStyle:{color:"var(--cOrange)"},attrs:{"fixed-width":"",icon:"star"}}),t._v(" "),s("FAIcon",{staticClass:"fa-scale-110 fa-old-padding",staticStyle:{color:"var(--cRed)"},attrs:{"fixed-width":"",icon:"times"}})],1)],1)]),t._v(" "),s("div",{staticClass:"after-post"},[s("div",{staticClass:"avatar-alt"},[t._v("\n :^)\n ")]),t._v(" "),s("div",{staticClass:"content"},[s("i18n",{staticClass:"faint",attrs:{path:"settings.style.preview.fine_print",tag:"span"}},[s("a",{staticStyle:{color:"var(--faintLink)"}},[t._v("\n "+t._s(t.$t("settings.style.preview.faint_link"))+"\n ")])])],1)]),t._v(" "),s("div",{staticClass:"separator"}),t._v(" "),s("span",{staticClass:"alert error"},[t._v("\n "+t._s(t.$t("settings.style.preview.error"))+"\n ")]),t._v(" "),s("input",{attrs:{type:"text"},domProps:{value:t.$t("settings.style.preview.input")}}),t._v(" "),s("div",{staticClass:"actions"},[s("span",{staticClass:"checkbox"},[s("input",{attrs:{id:"preview_checkbox",checked:"very yes",type:"checkbox"}}),t._v(" "),s("label",{attrs:{for:"preview_checkbox"}},[t._v(t._s(t.$t("settings.style.preview.checkbox")))])]),t._v(" "),s("button",{staticClass:"btn button-default"},[t._v("\n "+t._s(t.$t("settings.style.preview.button"))+"\n ")])])])])])}),[],!1,He,null,null).exports;function Qe(t,e){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),s.push.apply(s,n)}return s}function Xe(t){for(var e=1;ePe.a)return t(e+"future_version_imported")+" "+t(i?e+"snapshot_missing":e+"snapshot_present");if(aPe.a)return t(e+"fe_downgraded")+" "+t(i?e+"migration_snapshot_ok":e+"migration_snapshot_gone");if(a=4.5,aaa:s>=7,laa:s>=3,laaa:s>=4.5},t}),{})}catch(t){console.warn("Failure computing contrasts",t)}},previewRules:function(){return this.preview.rules?[].concat(H()(Object.values(this.preview.rules)),["color: var(--text)","font-family: var(--interfaceFont, sans-serif)"]).join(";"):""},shadowsAvailable:function(){return Object.keys(Le.a).sort()},currentShadowOverriden:{get:function(){return!!this.currentShadow},set:function(t){t?Object(J.set)(this.shadowsLocal,this.shadowSelected,this.currentShadowFallback.map((function(t){return Object.assign({},t)}))):Object(J.delete)(this.shadowsLocal,this.shadowSelected)}},currentShadowFallback:function(){return(this.previewTheme.shadows||{})[this.shadowSelected]},currentShadow:{get:function(){return this.shadowsLocal[this.shadowSelected]},set:function(t){Object(J.set)(this.shadowsLocal,this.shadowSelected,t)}},themeValid:function(){return!this.shadowsInvalid&&!this.colorsInvalid&&!this.radiiInvalid},exportedTheme:function(){var t=!(this.keepFonts||this.keepShadows||this.keepOpacity||this.keepRoundness||this.keepColor),e={themeEngineVersion:Pe.a};return(this.keepFonts||t)&&(e.fonts=this.fontsLocal),(this.keepShadows||t)&&(e.shadows=this.shadowsLocal),(this.keepOpacity||t)&&(e.opacity=this.currentOpacity),(this.keepColor||t)&&(e.colors=this.currentColors),(this.keepRoundness||t)&&(e.radii=this.currentRadii),{_pleroma_theme_version:2,theme:Xe({themeEngineVersion:Pe.a},this.previewTheme),source:e}}},components:{ColorInput:je,OpacityInput:Re,RangeInput:Be,ContrastRatio:Ke,ShadowControl:Ne,FontControl:qe,TabSwitcher:n.a,Preview:Je,Checkbox:v.a,Select:Lt.a},methods:{loadTheme:function(t,e){var s=t.theme,n=t.source,a=t._pleroma_theme_version,o=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(this.dismissWarning(),!n&&!s)throw new Error("Can't load theme: empty");var i="localStorage"!==e||s.colors?a:"l1",r=(s||{}).themeEngineVersion,l=(n||{}).themeEngineVersion||2,c=l===Pe.a,u=void 0!==s&&void 0!==n&&l!==r,d=n&&o||!s;c&&!u||d||"l1"===i||"defaults"===e||(u&&"localStorage"===e?this.themeWarning={origin:e,themeEngineVersion:l,type:"snapshot_source_mismatch"}:s?c||(this.themeWarning={origin:e,noActionsPossible:!n,themeEngineVersion:l,type:"wrong_version"}):this.themeWarning={origin:e,noActionsPossible:!0,themeEngineVersion:l,type:"no_snapshot_old_version"}),this.normalizeLocalState(s,i,n,d)},forceLoadLocalStorage:function(){this.loadThemeFromLocalStorage(!0)},dismissWarning:function(){this.themeWarning=void 0,this.tempImportFile=void 0},forceLoad:function(){switch(this.themeWarning.origin){case"localStorage":this.loadThemeFromLocalStorage(!0);break;case"file":this.onImport(this.tempImportFile,!0)}this.dismissWarning()},forceSnapshot:function(){switch(this.themeWarning.origin){case"localStorage":this.loadThemeFromLocalStorage(!1,!0);break;case"file":console.error("Forcing snapshot from file is not supported yet")}this.dismissWarning()},loadThemeFromLocalStorage:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],s=this.$store.getters.mergedConfig,n=s.customTheme,a=s.customThemeSource;n||a?this.loadTheme({theme:n,source:e?n:a},"localStorage",t):this.loadTheme(this.$store.state.instance.themeData,"defaults",t)},setCustomTheme:function(){this.$store.dispatch("setOption",{name:"customTheme",value:Xe({themeEngineVersion:Pe.a},this.previewTheme)}),this.$store.dispatch("setOption",{name:"customThemeSource",value:{themeEngineVersion:Pe.a,shadows:this.shadowsLocal,fonts:this.fontsLocal,opacity:this.currentOpacity,colors:this.currentColors,radii:this.currentRadii}})},updatePreviewColorsAndShadows:function(){this.previewColors=Object(Le.e)({opacity:this.currentOpacity,colors:this.currentColors}),this.previewShadows=Object(Le.h)({shadows:this.shadowsLocal,opacity:this.previewTheme.opacity,themeEngineVersion:this.engineVersion},this.previewColors.theme.colors,this.previewColors.mod)},importTheme:function(){this.themeImporter.importData()},exportTheme:function(){this.themeExporter.exportData()},onImport:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.tempImportFile=t,this.loadTheme(t,"file",e)},onImportFailure:function(t){this.$store.dispatch("pushGlobalNotice",{messageKey:"settings.invalid_theme_imported",level:"error"})},importValidator:function(t){var e=t._pleroma_theme_version;return e>=1||e<=2},clearAll:function(){this.loadThemeFromLocalStorage()},clearV1:function(){var t=this;Object.keys(this.$data).filter((function(t){return t.endsWith("ColorLocal")||t.endsWith("OpacityLocal")})).filter((function(t){return!Ye.includes(t)})).forEach((function(e){Object(J.set)(t.$data,e,void 0)}))},clearRoundness:function(){var t=this;Object.keys(this.$data).filter((function(t){return t.endsWith("RadiusLocal")})).forEach((function(e){Object(J.set)(t.$data,e,void 0)}))},clearOpacity:function(){var t=this;Object.keys(this.$data).filter((function(t){return t.endsWith("OpacityLocal")})).forEach((function(e){Object(J.set)(t.$data,e,void 0)}))},clearShadows:function(){this.shadowsLocal={}},clearFonts:function(){this.fontsLocal={}},normalizeLocalState:function(t){var e,s=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,a=arguments.length>2?arguments[2]:void 0,o=arguments.length>3&&void 0!==arguments[3]&&arguments[3];void 0!==a&&(o||a.themeEngineVersion===Pe.a)?(e=a,n=a.themeEngineVersion):e=t;var i=e.radii||e,r=e.opacity,l=e.shadows||{},c=e.fonts||{},u=e.themeEngineVersion?e.colors||e:Object(Le.c)(e.colors||e);if(0===n&&(e.version&&(n=e.version),void 0===u.text&&void 0!==u.fg&&(n=1),void 0!==u.text&&void 0!==u.fg&&(n=2)),this.engineVersion=n,1===n&&(this.fgColorLocal=Object($e.i)(u.btn),this.textColorLocal=Object($e.i)(u.fg)),!this.keepColor){this.clearV1();var d=new Set(1!==n?Object.keys(Oe.c):[]);1!==n&&"l1"!==n||d.add("bg").add("link").add("cRed").add("cBlue").add("cGreen").add("cOrange"),d.forEach((function(t){var e=u[t],n=Object($e.i)(u[t]);s[t+"ColorLocal"]="#aN"===n?e:n}))}r&&!this.keepOpacity&&(this.clearOpacity(),Object.entries(r).forEach((function(t){var e=G()(t,2),n=e[0],a=e[1];null==a||Number.isNaN(a)||(s[n+"OpacityLocal"]=a)}))),this.keepRoundness||(this.clearRoundness(),Object.entries(i).forEach((function(t){var e=G()(t,2),n=e[0],a=e[1],o=n.endsWith("Radius")?n.split("Radius")[0]:n;s[o+"RadiusLocal"]=a}))),this.keepShadows||(this.clearShadows(),this.shadowsLocal=2===n?Object(Le.m)(l,this.previewTheme.opacity):l,this.shadowSelected=this.shadowsAvailable[0]),this.keepFonts||(this.clearFonts(),this.fontsLocal=c)}},watch:{currentRadii:function(){try{this.previewRadii=Object(Le.g)({radii:this.currentRadii}),this.radiiInvalid=!1}catch(t){this.radiiInvalid=!0,console.warn(t)}},shadowsLocal:{handler:function(){if(1!==Object.getOwnPropertyNames(this.previewColors).length)try{this.updatePreviewColorsAndShadows(),this.shadowsInvalid=!1}catch(t){this.shadowsInvalid=!0,console.warn(t)}},deep:!0},fontsLocal:{handler:function(){try{this.previewFonts=Object(Le.f)({fonts:this.fontsLocal}),this.fontsInvalid=!1}catch(t){this.fontsInvalid=!0,console.warn(t)}},deep:!0},currentColors:function(){try{this.updatePreviewColorsAndShadows(),this.colorsInvalid=!1,this.shadowsInvalid=!1}catch(t){this.colorsInvalid=!0,this.shadowsInvalid=!0,console.warn(t)}},currentOpacity:function(){try{this.updatePreviewColorsAndShadows()}catch(t){console.warn(t)}},selected:function(){var t=this;this.selectedTheme=Object.entries(this.availableStyles).find((function(e){var s=G()(e,2),n=(s[0],s[1]);return Array.isArray(n)?(console.log(n[0]===t.selected,t.selected),n[0]===t.selected):n.name===t.selected}))[1]},selectedTheme:function(){this.dismissWarning(),1===this.selectedVersion?(this.keepRoundness||this.clearRoundness(),this.keepShadows||this.clearShadows(),this.keepOpacity||this.clearOpacity(),this.keepColor||(this.clearV1(),this.bgColorLocal=this.selectedTheme[1],this.fgColorLocal=this.selectedTheme[2],this.textColorLocal=this.selectedTheme[3],this.linkColorLocal=this.selectedTheme[4],this.cRedColorLocal=this.selectedTheme[5],this.cGreenColorLocal=this.selectedTheme[6],this.cBlueColorLocal=this.selectedTheme[7],this.cOrangeColorLocal=this.selectedTheme[8])):this.selectedVersion>=2&&this.normalizeLocalState(this.selectedTheme.theme,2,this.selectedTheme.source)}}};var ts=function(t){s(666)},es=Object(c.a)(Ze,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"theme-tab"},[s("div",{staticClass:"presets-container"},[s("div",{staticClass:"save-load"},[t.themeWarning?s("div",{staticClass:"theme-warning"},[s("div",{staticClass:"alert warning"},[t._v("\n "+t._s(t.themeWarningHelp)+"\n ")]),t._v(" "),s("div",{staticClass:"buttons"},["snapshot_source_mismatch"===t.themeWarning.type?[s("button",{staticClass:"btn button-default",on:{click:t.forceLoad}},[t._v("\n "+t._s(t.$t("settings.style.switcher.use_source"))+"\n ")]),t._v(" "),s("button",{staticClass:"btn button-default",on:{click:t.forceSnapshot}},[t._v("\n "+t._s(t.$t("settings.style.switcher.use_snapshot"))+"\n ")])]:t.themeWarning.noActionsPossible?[s("button",{staticClass:"btn button-default",on:{click:t.dismissWarning}},[t._v("\n "+t._s(t.$t("general.dismiss"))+"\n ")])]:[s("button",{staticClass:"btn button-default",on:{click:t.forceLoad}},[t._v("\n "+t._s(t.$t("settings.style.switcher.load_theme"))+"\n ")]),t._v(" "),s("button",{staticClass:"btn button-default",on:{click:t.dismissWarning}},[t._v("\n "+t._s(t.$t("settings.style.switcher.keep_as_is"))+"\n ")])]],2)]):t._e(),t._v(" "),s("div",{staticClass:"top"},[s("div",{staticClass:"presets"},[t._v("\n "+t._s(t.$t("settings.presets"))+"\n "),s("label",{staticClass:"select",attrs:{for:"preset-switcher"}},[s("Select",{staticClass:"preset-switcher",attrs:{id:"preset-switcher"},model:{value:t.selected,callback:function(e){t.selected=e},expression:"selected"}},t._l(t.availableStyles,(function(e){return s("option",{key:e.name,style:{backgroundColor:e[1]||(e.theme||e.source).colors.bg,color:e[3]||(e.theme||e.source).colors.text},domProps:{value:e.name||e[0]}},[t._v("\n "+t._s(e[0]||e.name)+"\n ")])})),0)],1)]),t._v(" "),s("div",{staticClass:"export-import"},[s("button",{staticClass:"btn button-default",on:{click:t.importTheme}},[t._v("\n "+t._s(t.$t("settings.import_theme"))+"\n ")]),t._v(" "),s("button",{staticClass:"btn button-default",on:{click:t.exportTheme}},[t._v("\n "+t._s(t.$t("settings.export_theme"))+"\n ")])])])]),t._v(" "),s("div",{staticClass:"save-load-options"},[s("span",{staticClass:"keep-option"},[s("Checkbox",{model:{value:t.keepColor,callback:function(e){t.keepColor=e},expression:"keepColor"}},[t._v("\n "+t._s(t.$t("settings.style.switcher.keep_color"))+"\n ")])],1),t._v(" "),s("span",{staticClass:"keep-option"},[s("Checkbox",{model:{value:t.keepShadows,callback:function(e){t.keepShadows=e},expression:"keepShadows"}},[t._v("\n "+t._s(t.$t("settings.style.switcher.keep_shadows"))+"\n ")])],1),t._v(" "),s("span",{staticClass:"keep-option"},[s("Checkbox",{model:{value:t.keepOpacity,callback:function(e){t.keepOpacity=e},expression:"keepOpacity"}},[t._v("\n "+t._s(t.$t("settings.style.switcher.keep_opacity"))+"\n ")])],1),t._v(" "),s("span",{staticClass:"keep-option"},[s("Checkbox",{model:{value:t.keepRoundness,callback:function(e){t.keepRoundness=e},expression:"keepRoundness"}},[t._v("\n "+t._s(t.$t("settings.style.switcher.keep_roundness"))+"\n ")])],1),t._v(" "),s("span",{staticClass:"keep-option"},[s("Checkbox",{model:{value:t.keepFonts,callback:function(e){t.keepFonts=e},expression:"keepFonts"}},[t._v("\n "+t._s(t.$t("settings.style.switcher.keep_fonts"))+"\n ")])],1),t._v(" "),s("p",[t._v(t._s(t.$t("settings.style.switcher.save_load_hint")))])])]),t._v(" "),s("preview",{style:t.previewRules}),t._v(" "),s("keep-alive",[s("tab-switcher",{key:"style-tweak"},[s("div",{staticClass:"color-container",attrs:{label:t.$t("settings.style.common_colors._tab_label")}},[s("div",{staticClass:"tab-header"},[s("p",[t._v(t._s(t.$t("settings.theme_help")))]),t._v(" "),s("div",{staticClass:"tab-header-buttons"},[s("button",{staticClass:"btn button-default",on:{click:t.clearOpacity}},[t._v("\n "+t._s(t.$t("settings.style.switcher.clear_opacity"))+"\n ")]),t._v(" "),s("button",{staticClass:"btn button-default",on:{click:t.clearV1}},[t._v("\n "+t._s(t.$t("settings.style.switcher.clear_all"))+"\n ")])])]),t._v(" "),s("p",[t._v(t._s(t.$t("settings.theme_help_v2_1")))]),t._v(" "),s("h4",[t._v(t._s(t.$t("settings.style.common_colors.main")))]),t._v(" "),s("div",{staticClass:"color-item"},[s("ColorInput",{attrs:{name:"bgColor",label:t.$t("settings.background")},model:{value:t.bgColorLocal,callback:function(e){t.bgColorLocal=e},expression:"bgColorLocal"}}),t._v(" "),s("OpacityInput",{attrs:{name:"bgOpacity",fallback:t.previewTheme.opacity.bg},model:{value:t.bgOpacityLocal,callback:function(e){t.bgOpacityLocal=e},expression:"bgOpacityLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"textColor",label:t.$t("settings.text")},model:{value:t.textColorLocal,callback:function(e){t.textColorLocal=e},expression:"textColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.bgText}}),t._v(" "),s("ColorInput",{attrs:{name:"accentColor",fallback:t.previewTheme.colors.link,label:t.$t("settings.accent"),"show-optional-tickbox":void 0!==t.linkColorLocal},model:{value:t.accentColorLocal,callback:function(e){t.accentColorLocal=e},expression:"accentColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"linkColor",fallback:t.previewTheme.colors.accent,label:t.$t("settings.links"),"show-optional-tickbox":void 0!==t.accentColorLocal},model:{value:t.linkColorLocal,callback:function(e){t.linkColorLocal=e},expression:"linkColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.bgLink}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("ColorInput",{attrs:{name:"fgColor",label:t.$t("settings.foreground")},model:{value:t.fgColorLocal,callback:function(e){t.fgColorLocal=e},expression:"fgColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"fgTextColor",label:t.$t("settings.text"),fallback:t.previewTheme.colors.fgText},model:{value:t.fgTextColorLocal,callback:function(e){t.fgTextColorLocal=e},expression:"fgTextColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"fgLinkColor",label:t.$t("settings.links"),fallback:t.previewTheme.colors.fgLink},model:{value:t.fgLinkColorLocal,callback:function(e){t.fgLinkColorLocal=e},expression:"fgLinkColorLocal"}}),t._v(" "),s("p",[t._v(t._s(t.$t("settings.style.common_colors.foreground_hint")))])],1),t._v(" "),s("h4",[t._v(t._s(t.$t("settings.style.common_colors.rgbo")))]),t._v(" "),s("div",{staticClass:"color-item"},[s("ColorInput",{attrs:{name:"cRedColor",label:t.$t("settings.cRed")},model:{value:t.cRedColorLocal,callback:function(e){t.cRedColorLocal=e},expression:"cRedColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.bgCRed}}),t._v(" "),s("ColorInput",{attrs:{name:"cBlueColor",label:t.$t("settings.cBlue")},model:{value:t.cBlueColorLocal,callback:function(e){t.cBlueColorLocal=e},expression:"cBlueColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.bgCBlue}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("ColorInput",{attrs:{name:"cGreenColor",label:t.$t("settings.cGreen")},model:{value:t.cGreenColorLocal,callback:function(e){t.cGreenColorLocal=e},expression:"cGreenColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.bgCGreen}}),t._v(" "),s("ColorInput",{attrs:{name:"cOrangeColor",label:t.$t("settings.cOrange")},model:{value:t.cOrangeColorLocal,callback:function(e){t.cOrangeColorLocal=e},expression:"cOrangeColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.bgCOrange}})],1),t._v(" "),s("p",[t._v(t._s(t.$t("settings.theme_help_v2_2")))])]),t._v(" "),s("div",{staticClass:"color-container",attrs:{label:t.$t("settings.style.advanced_colors._tab_label")}},[s("div",{staticClass:"tab-header"},[s("p",[t._v(t._s(t.$t("settings.theme_help")))]),t._v(" "),s("button",{staticClass:"btn button-default",on:{click:t.clearOpacity}},[t._v("\n "+t._s(t.$t("settings.style.switcher.clear_opacity"))+"\n ")]),t._v(" "),s("button",{staticClass:"btn button-default",on:{click:t.clearV1}},[t._v("\n "+t._s(t.$t("settings.style.switcher.clear_all"))+"\n ")])]),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.post")))]),t._v(" "),s("ColorInput",{attrs:{name:"postLinkColor",fallback:t.previewTheme.colors.accent,label:t.$t("settings.links")},model:{value:t.postLinkColorLocal,callback:function(e){t.postLinkColorLocal=e},expression:"postLinkColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.postLink}}),t._v(" "),s("ColorInput",{attrs:{name:"postGreentextColor",fallback:t.previewTheme.colors.cGreen,label:t.$t("settings.greentext")},model:{value:t.postGreentextColorLocal,callback:function(e){t.postGreentextColorLocal=e},expression:"postGreentextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.postGreentext}}),t._v(" "),s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.alert")))]),t._v(" "),s("ColorInput",{attrs:{name:"alertError",label:t.$t("settings.style.advanced_colors.alert_error"),fallback:t.previewTheme.colors.alertError},model:{value:t.alertErrorColorLocal,callback:function(e){t.alertErrorColorLocal=e},expression:"alertErrorColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"alertErrorText",label:t.$t("settings.text"),fallback:t.previewTheme.colors.alertErrorText},model:{value:t.alertErrorTextColorLocal,callback:function(e){t.alertErrorTextColorLocal=e},expression:"alertErrorTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.alertErrorText,large:""}}),t._v(" "),s("ColorInput",{attrs:{name:"alertWarning",label:t.$t("settings.style.advanced_colors.alert_warning"),fallback:t.previewTheme.colors.alertWarning},model:{value:t.alertWarningColorLocal,callback:function(e){t.alertWarningColorLocal=e},expression:"alertWarningColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"alertWarningText",label:t.$t("settings.text"),fallback:t.previewTheme.colors.alertWarningText},model:{value:t.alertWarningTextColorLocal,callback:function(e){t.alertWarningTextColorLocal=e},expression:"alertWarningTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.alertWarningText,large:""}}),t._v(" "),s("ColorInput",{attrs:{name:"alertNeutral",label:t.$t("settings.style.advanced_colors.alert_neutral"),fallback:t.previewTheme.colors.alertNeutral},model:{value:t.alertNeutralColorLocal,callback:function(e){t.alertNeutralColorLocal=e},expression:"alertNeutralColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"alertNeutralText",label:t.$t("settings.text"),fallback:t.previewTheme.colors.alertNeutralText},model:{value:t.alertNeutralTextColorLocal,callback:function(e){t.alertNeutralTextColorLocal=e},expression:"alertNeutralTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.alertNeutralText,large:""}}),t._v(" "),s("OpacityInput",{attrs:{name:"alertOpacity",fallback:t.previewTheme.opacity.alert},model:{value:t.alertOpacityLocal,callback:function(e){t.alertOpacityLocal=e},expression:"alertOpacityLocal"}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.badge")))]),t._v(" "),s("ColorInput",{attrs:{name:"badgeNotification",label:t.$t("settings.style.advanced_colors.badge_notification"),fallback:t.previewTheme.colors.badgeNotification},model:{value:t.badgeNotificationColorLocal,callback:function(e){t.badgeNotificationColorLocal=e},expression:"badgeNotificationColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"badgeNotificationText",label:t.$t("settings.text"),fallback:t.previewTheme.colors.badgeNotificationText},model:{value:t.badgeNotificationTextColorLocal,callback:function(e){t.badgeNotificationTextColorLocal=e},expression:"badgeNotificationTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.badgeNotificationText,large:""}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.panel_header")))]),t._v(" "),s("ColorInput",{attrs:{name:"panelColor",fallback:t.previewTheme.colors.panel,label:t.$t("settings.background")},model:{value:t.panelColorLocal,callback:function(e){t.panelColorLocal=e},expression:"panelColorLocal"}}),t._v(" "),s("OpacityInput",{attrs:{name:"panelOpacity",fallback:t.previewTheme.opacity.panel,disabled:"transparent"===t.panelColorLocal},model:{value:t.panelOpacityLocal,callback:function(e){t.panelOpacityLocal=e},expression:"panelOpacityLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"panelTextColor",fallback:t.previewTheme.colors.panelText,label:t.$t("settings.text")},model:{value:t.panelTextColorLocal,callback:function(e){t.panelTextColorLocal=e},expression:"panelTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.panelText,large:""}}),t._v(" "),s("ColorInput",{attrs:{name:"panelLinkColor",fallback:t.previewTheme.colors.panelLink,label:t.$t("settings.links")},model:{value:t.panelLinkColorLocal,callback:function(e){t.panelLinkColorLocal=e},expression:"panelLinkColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.panelLink,large:""}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.top_bar")))]),t._v(" "),s("ColorInput",{attrs:{name:"topBarColor",fallback:t.previewTheme.colors.topBar,label:t.$t("settings.background")},model:{value:t.topBarColorLocal,callback:function(e){t.topBarColorLocal=e},expression:"topBarColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"topBarTextColor",fallback:t.previewTheme.colors.topBarText,label:t.$t("settings.text")},model:{value:t.topBarTextColorLocal,callback:function(e){t.topBarTextColorLocal=e},expression:"topBarTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.topBarText}}),t._v(" "),s("ColorInput",{attrs:{name:"topBarLinkColor",fallback:t.previewTheme.colors.topBarLink,label:t.$t("settings.links")},model:{value:t.topBarLinkColorLocal,callback:function(e){t.topBarLinkColorLocal=e},expression:"topBarLinkColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.topBarLink}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.inputs")))]),t._v(" "),s("ColorInput",{attrs:{name:"inputColor",fallback:t.previewTheme.colors.input,label:t.$t("settings.background")},model:{value:t.inputColorLocal,callback:function(e){t.inputColorLocal=e},expression:"inputColorLocal"}}),t._v(" "),s("OpacityInput",{attrs:{name:"inputOpacity",fallback:t.previewTheme.opacity.input,disabled:"transparent"===t.inputColorLocal},model:{value:t.inputOpacityLocal,callback:function(e){t.inputOpacityLocal=e},expression:"inputOpacityLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"inputTextColor",fallback:t.previewTheme.colors.inputText,label:t.$t("settings.text")},model:{value:t.inputTextColorLocal,callback:function(e){t.inputTextColorLocal=e},expression:"inputTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.inputText}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.buttons")))]),t._v(" "),s("ColorInput",{attrs:{name:"btnColor",fallback:t.previewTheme.colors.btn,label:t.$t("settings.background")},model:{value:t.btnColorLocal,callback:function(e){t.btnColorLocal=e},expression:"btnColorLocal"}}),t._v(" "),s("OpacityInput",{attrs:{name:"btnOpacity",fallback:t.previewTheme.opacity.btn,disabled:"transparent"===t.btnColorLocal},model:{value:t.btnOpacityLocal,callback:function(e){t.btnOpacityLocal=e},expression:"btnOpacityLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"btnTextColor",fallback:t.previewTheme.colors.btnText,label:t.$t("settings.text")},model:{value:t.btnTextColorLocal,callback:function(e){t.btnTextColorLocal=e},expression:"btnTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.btnText}}),t._v(" "),s("ColorInput",{attrs:{name:"btnPanelTextColor",fallback:t.previewTheme.colors.btnPanelText,label:t.$t("settings.style.advanced_colors.panel_header")},model:{value:t.btnPanelTextColorLocal,callback:function(e){t.btnPanelTextColorLocal=e},expression:"btnPanelTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.btnPanelText}}),t._v(" "),s("ColorInput",{attrs:{name:"btnTopBarTextColor",fallback:t.previewTheme.colors.btnTopBarText,label:t.$t("settings.style.advanced_colors.top_bar")},model:{value:t.btnTopBarTextColorLocal,callback:function(e){t.btnTopBarTextColorLocal=e},expression:"btnTopBarTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.btnTopBarText}}),t._v(" "),s("h5",[t._v(t._s(t.$t("settings.style.advanced_colors.pressed")))]),t._v(" "),s("ColorInput",{attrs:{name:"btnPressedColor",fallback:t.previewTheme.colors.btnPressed,label:t.$t("settings.background")},model:{value:t.btnPressedColorLocal,callback:function(e){t.btnPressedColorLocal=e},expression:"btnPressedColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"btnPressedTextColor",fallback:t.previewTheme.colors.btnPressedText,label:t.$t("settings.text")},model:{value:t.btnPressedTextColorLocal,callback:function(e){t.btnPressedTextColorLocal=e},expression:"btnPressedTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.btnPressedText}}),t._v(" "),s("ColorInput",{attrs:{name:"btnPressedPanelTextColor",fallback:t.previewTheme.colors.btnPressedPanelText,label:t.$t("settings.style.advanced_colors.panel_header")},model:{value:t.btnPressedPanelTextColorLocal,callback:function(e){t.btnPressedPanelTextColorLocal=e},expression:"btnPressedPanelTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.btnPressedPanelText}}),t._v(" "),s("ColorInput",{attrs:{name:"btnPressedTopBarTextColor",fallback:t.previewTheme.colors.btnPressedTopBarText,label:t.$t("settings.style.advanced_colors.top_bar")},model:{value:t.btnPressedTopBarTextColorLocal,callback:function(e){t.btnPressedTopBarTextColorLocal=e},expression:"btnPressedTopBarTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.btnPressedTopBarText}}),t._v(" "),s("h5",[t._v(t._s(t.$t("settings.style.advanced_colors.disabled")))]),t._v(" "),s("ColorInput",{attrs:{name:"btnDisabledColor",fallback:t.previewTheme.colors.btnDisabled,label:t.$t("settings.background")},model:{value:t.btnDisabledColorLocal,callback:function(e){t.btnDisabledColorLocal=e},expression:"btnDisabledColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"btnDisabledTextColor",fallback:t.previewTheme.colors.btnDisabledText,label:t.$t("settings.text")},model:{value:t.btnDisabledTextColorLocal,callback:function(e){t.btnDisabledTextColorLocal=e},expression:"btnDisabledTextColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"btnDisabledPanelTextColor",fallback:t.previewTheme.colors.btnDisabledPanelText,label:t.$t("settings.style.advanced_colors.panel_header")},model:{value:t.btnDisabledPanelTextColorLocal,callback:function(e){t.btnDisabledPanelTextColorLocal=e},expression:"btnDisabledPanelTextColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"btnDisabledTopBarTextColor",fallback:t.previewTheme.colors.btnDisabledTopBarText,label:t.$t("settings.style.advanced_colors.top_bar")},model:{value:t.btnDisabledTopBarTextColorLocal,callback:function(e){t.btnDisabledTopBarTextColorLocal=e},expression:"btnDisabledTopBarTextColorLocal"}}),t._v(" "),s("h5",[t._v(t._s(t.$t("settings.style.advanced_colors.toggled")))]),t._v(" "),s("ColorInput",{attrs:{name:"btnToggledColor",fallback:t.previewTheme.colors.btnToggled,label:t.$t("settings.background")},model:{value:t.btnToggledColorLocal,callback:function(e){t.btnToggledColorLocal=e},expression:"btnToggledColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"btnToggledTextColor",fallback:t.previewTheme.colors.btnToggledText,label:t.$t("settings.text")},model:{value:t.btnToggledTextColorLocal,callback:function(e){t.btnToggledTextColorLocal=e},expression:"btnToggledTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.btnToggledText}}),t._v(" "),s("ColorInput",{attrs:{name:"btnToggledPanelTextColor",fallback:t.previewTheme.colors.btnToggledPanelText,label:t.$t("settings.style.advanced_colors.panel_header")},model:{value:t.btnToggledPanelTextColorLocal,callback:function(e){t.btnToggledPanelTextColorLocal=e},expression:"btnToggledPanelTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.btnToggledPanelText}}),t._v(" "),s("ColorInput",{attrs:{name:"btnToggledTopBarTextColor",fallback:t.previewTheme.colors.btnToggledTopBarText,label:t.$t("settings.style.advanced_colors.top_bar")},model:{value:t.btnToggledTopBarTextColorLocal,callback:function(e){t.btnToggledTopBarTextColorLocal=e},expression:"btnToggledTopBarTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.btnToggledTopBarText}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.tabs")))]),t._v(" "),s("ColorInput",{attrs:{name:"tabColor",fallback:t.previewTheme.colors.tab,label:t.$t("settings.background")},model:{value:t.tabColorLocal,callback:function(e){t.tabColorLocal=e},expression:"tabColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"tabTextColor",fallback:t.previewTheme.colors.tabText,label:t.$t("settings.text")},model:{value:t.tabTextColorLocal,callback:function(e){t.tabTextColorLocal=e},expression:"tabTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.tabText}}),t._v(" "),s("ColorInput",{attrs:{name:"tabActiveTextColor",fallback:t.previewTheme.colors.tabActiveText,label:t.$t("settings.text")},model:{value:t.tabActiveTextColorLocal,callback:function(e){t.tabActiveTextColorLocal=e},expression:"tabActiveTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.tabActiveText}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.borders")))]),t._v(" "),s("ColorInput",{attrs:{name:"borderColor",fallback:t.previewTheme.colors.border,label:t.$t("settings.style.common.color")},model:{value:t.borderColorLocal,callback:function(e){t.borderColorLocal=e},expression:"borderColorLocal"}}),t._v(" "),s("OpacityInput",{attrs:{name:"borderOpacity",fallback:t.previewTheme.opacity.border,disabled:"transparent"===t.borderColorLocal},model:{value:t.borderOpacityLocal,callback:function(e){t.borderOpacityLocal=e},expression:"borderOpacityLocal"}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.faint_text")))]),t._v(" "),s("ColorInput",{attrs:{name:"faintColor",fallback:t.previewTheme.colors.faint,label:t.$t("settings.text")},model:{value:t.faintColorLocal,callback:function(e){t.faintColorLocal=e},expression:"faintColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"faintLinkColor",fallback:t.previewTheme.colors.faintLink,label:t.$t("settings.links")},model:{value:t.faintLinkColorLocal,callback:function(e){t.faintLinkColorLocal=e},expression:"faintLinkColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"panelFaintColor",fallback:t.previewTheme.colors.panelFaint,label:t.$t("settings.style.advanced_colors.panel_header")},model:{value:t.panelFaintColorLocal,callback:function(e){t.panelFaintColorLocal=e},expression:"panelFaintColorLocal"}}),t._v(" "),s("OpacityInput",{attrs:{name:"faintOpacity",fallback:t.previewTheme.opacity.faint},model:{value:t.faintOpacityLocal,callback:function(e){t.faintOpacityLocal=e},expression:"faintOpacityLocal"}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.underlay")))]),t._v(" "),s("ColorInput",{attrs:{name:"underlay",label:t.$t("settings.style.advanced_colors.underlay"),fallback:t.previewTheme.colors.underlay},model:{value:t.underlayColorLocal,callback:function(e){t.underlayColorLocal=e},expression:"underlayColorLocal"}}),t._v(" "),s("OpacityInput",{attrs:{name:"underlayOpacity",fallback:t.previewTheme.opacity.underlay,disabled:"transparent"===t.underlayOpacityLocal},model:{value:t.underlayOpacityLocal,callback:function(e){t.underlayOpacityLocal=e},expression:"underlayOpacityLocal"}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.wallpaper")))]),t._v(" "),s("ColorInput",{attrs:{name:"wallpaper",label:t.$t("settings.style.advanced_colors.wallpaper"),fallback:t.previewTheme.colors.wallpaper},model:{value:t.wallpaperColorLocal,callback:function(e){t.wallpaperColorLocal=e},expression:"wallpaperColorLocal"}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.poll")))]),t._v(" "),s("ColorInput",{attrs:{name:"poll",label:t.$t("settings.background"),fallback:t.previewTheme.colors.poll},model:{value:t.pollColorLocal,callback:function(e){t.pollColorLocal=e},expression:"pollColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"pollText",label:t.$t("settings.text"),fallback:t.previewTheme.colors.pollText},model:{value:t.pollTextColorLocal,callback:function(e){t.pollTextColorLocal=e},expression:"pollTextColorLocal"}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.icons")))]),t._v(" "),s("ColorInput",{attrs:{name:"icon",label:t.$t("settings.style.advanced_colors.icons"),fallback:t.previewTheme.colors.icon},model:{value:t.iconColorLocal,callback:function(e){t.iconColorLocal=e},expression:"iconColorLocal"}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.highlight")))]),t._v(" "),s("ColorInput",{attrs:{name:"highlight",label:t.$t("settings.background"),fallback:t.previewTheme.colors.highlight},model:{value:t.highlightColorLocal,callback:function(e){t.highlightColorLocal=e},expression:"highlightColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"highlightText",label:t.$t("settings.text"),fallback:t.previewTheme.colors.highlightText},model:{value:t.highlightTextColorLocal,callback:function(e){t.highlightTextColorLocal=e},expression:"highlightTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.highlightText}}),t._v(" "),s("ColorInput",{attrs:{name:"highlightLink",label:t.$t("settings.links"),fallback:t.previewTheme.colors.highlightLink},model:{value:t.highlightLinkColorLocal,callback:function(e){t.highlightLinkColorLocal=e},expression:"highlightLinkColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.highlightLink}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.popover")))]),t._v(" "),s("ColorInput",{attrs:{name:"popover",label:t.$t("settings.background"),fallback:t.previewTheme.colors.popover},model:{value:t.popoverColorLocal,callback:function(e){t.popoverColorLocal=e},expression:"popoverColorLocal"}}),t._v(" "),s("OpacityInput",{attrs:{name:"popoverOpacity",fallback:t.previewTheme.opacity.popover,disabled:"transparent"===t.popoverOpacityLocal},model:{value:t.popoverOpacityLocal,callback:function(e){t.popoverOpacityLocal=e},expression:"popoverOpacityLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"popoverText",label:t.$t("settings.text"),fallback:t.previewTheme.colors.popoverText},model:{value:t.popoverTextColorLocal,callback:function(e){t.popoverTextColorLocal=e},expression:"popoverTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.popoverText}}),t._v(" "),s("ColorInput",{attrs:{name:"popoverLink",label:t.$t("settings.links"),fallback:t.previewTheme.colors.popoverLink},model:{value:t.popoverLinkColorLocal,callback:function(e){t.popoverLinkColorLocal=e},expression:"popoverLinkColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.popoverLink}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.selectedPost")))]),t._v(" "),s("ColorInput",{attrs:{name:"selectedPost",label:t.$t("settings.background"),fallback:t.previewTheme.colors.selectedPost},model:{value:t.selectedPostColorLocal,callback:function(e){t.selectedPostColorLocal=e},expression:"selectedPostColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"selectedPostText",label:t.$t("settings.text"),fallback:t.previewTheme.colors.selectedPostText},model:{value:t.selectedPostTextColorLocal,callback:function(e){t.selectedPostTextColorLocal=e},expression:"selectedPostTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.selectedPostText}}),t._v(" "),s("ColorInput",{attrs:{name:"selectedPostLink",label:t.$t("settings.links"),fallback:t.previewTheme.colors.selectedPostLink},model:{value:t.selectedPostLinkColorLocal,callback:function(e){t.selectedPostLinkColorLocal=e},expression:"selectedPostLinkColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.selectedPostLink}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("settings.style.advanced_colors.selectedMenu")))]),t._v(" "),s("ColorInput",{attrs:{name:"selectedMenu",label:t.$t("settings.background"),fallback:t.previewTheme.colors.selectedMenu},model:{value:t.selectedMenuColorLocal,callback:function(e){t.selectedMenuColorLocal=e},expression:"selectedMenuColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"selectedMenuText",label:t.$t("settings.text"),fallback:t.previewTheme.colors.selectedMenuText},model:{value:t.selectedMenuTextColorLocal,callback:function(e){t.selectedMenuTextColorLocal=e},expression:"selectedMenuTextColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.selectedMenuText}}),t._v(" "),s("ColorInput",{attrs:{name:"selectedMenuLink",label:t.$t("settings.links"),fallback:t.previewTheme.colors.selectedMenuLink},model:{value:t.selectedMenuLinkColorLocal,callback:function(e){t.selectedMenuLinkColorLocal=e},expression:"selectedMenuLinkColorLocal"}}),t._v(" "),s("ContrastRatio",{attrs:{contrast:t.previewContrast.selectedMenuLink}})],1),t._v(" "),s("div",{staticClass:"color-item"},[s("h4",[t._v(t._s(t.$t("chats.chats")))]),t._v(" "),s("ColorInput",{attrs:{name:"chatBgColor",fallback:t.previewTheme.colors.bg,label:t.$t("settings.background")},model:{value:t.chatBgColorLocal,callback:function(e){t.chatBgColorLocal=e},expression:"chatBgColorLocal"}}),t._v(" "),s("h5",[t._v(t._s(t.$t("settings.style.advanced_colors.chat.incoming")))]),t._v(" "),s("ColorInput",{attrs:{name:"chatMessageIncomingBgColor",fallback:t.previewTheme.colors.bg,label:t.$t("settings.background")},model:{value:t.chatMessageIncomingBgColorLocal,callback:function(e){t.chatMessageIncomingBgColorLocal=e},expression:"chatMessageIncomingBgColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"chatMessageIncomingTextColor",fallback:t.previewTheme.colors.text,label:t.$t("settings.text")},model:{value:t.chatMessageIncomingTextColorLocal,callback:function(e){t.chatMessageIncomingTextColorLocal=e},expression:"chatMessageIncomingTextColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"chatMessageIncomingLinkColor",fallback:t.previewTheme.colors.link,label:t.$t("settings.links")},model:{value:t.chatMessageIncomingLinkColorLocal,callback:function(e){t.chatMessageIncomingLinkColorLocal=e},expression:"chatMessageIncomingLinkColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"chatMessageIncomingBorderLinkColor",fallback:t.previewTheme.colors.fg,label:t.$t("settings.style.advanced_colors.chat.border")},model:{value:t.chatMessageIncomingBorderColorLocal,callback:function(e){t.chatMessageIncomingBorderColorLocal=e},expression:"chatMessageIncomingBorderColorLocal"}}),t._v(" "),s("h5",[t._v(t._s(t.$t("settings.style.advanced_colors.chat.outgoing")))]),t._v(" "),s("ColorInput",{attrs:{name:"chatMessageOutgoingBgColor",fallback:t.previewTheme.colors.bg,label:t.$t("settings.background")},model:{value:t.chatMessageOutgoingBgColorLocal,callback:function(e){t.chatMessageOutgoingBgColorLocal=e},expression:"chatMessageOutgoingBgColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"chatMessageOutgoingTextColor",fallback:t.previewTheme.colors.text,label:t.$t("settings.text")},model:{value:t.chatMessageOutgoingTextColorLocal,callback:function(e){t.chatMessageOutgoingTextColorLocal=e},expression:"chatMessageOutgoingTextColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"chatMessageOutgoingLinkColor",fallback:t.previewTheme.colors.link,label:t.$t("settings.links")},model:{value:t.chatMessageOutgoingLinkColorLocal,callback:function(e){t.chatMessageOutgoingLinkColorLocal=e},expression:"chatMessageOutgoingLinkColorLocal"}}),t._v(" "),s("ColorInput",{attrs:{name:"chatMessageOutgoingBorderLinkColor",fallback:t.previewTheme.colors.bg,label:t.$t("settings.style.advanced_colors.chat.border")},model:{value:t.chatMessageOutgoingBorderColorLocal,callback:function(e){t.chatMessageOutgoingBorderColorLocal=e},expression:"chatMessageOutgoingBorderColorLocal"}})],1)]),t._v(" "),s("div",{staticClass:"radius-container",attrs:{label:t.$t("settings.style.radii._tab_label")}},[s("div",{staticClass:"tab-header"},[s("p",[t._v(t._s(t.$t("settings.radii_help")))]),t._v(" "),s("button",{staticClass:"btn button-default",on:{click:t.clearRoundness}},[t._v("\n "+t._s(t.$t("settings.style.switcher.clear_all"))+"\n ")])]),t._v(" "),s("RangeInput",{attrs:{name:"btnRadius",label:t.$t("settings.btnRadius"),fallback:t.previewTheme.radii.btn,max:"16","hard-min":"0"},model:{value:t.btnRadiusLocal,callback:function(e){t.btnRadiusLocal=e},expression:"btnRadiusLocal"}}),t._v(" "),s("RangeInput",{attrs:{name:"inputRadius",label:t.$t("settings.inputRadius"),fallback:t.previewTheme.radii.input,max:"9","hard-min":"0"},model:{value:t.inputRadiusLocal,callback:function(e){t.inputRadiusLocal=e},expression:"inputRadiusLocal"}}),t._v(" "),s("RangeInput",{attrs:{name:"checkboxRadius",label:t.$t("settings.checkboxRadius"),fallback:t.previewTheme.radii.checkbox,max:"16","hard-min":"0"},model:{value:t.checkboxRadiusLocal,callback:function(e){t.checkboxRadiusLocal=e},expression:"checkboxRadiusLocal"}}),t._v(" "),s("RangeInput",{attrs:{name:"panelRadius",label:t.$t("settings.panelRadius"),fallback:t.previewTheme.radii.panel,max:"50","hard-min":"0"},model:{value:t.panelRadiusLocal,callback:function(e){t.panelRadiusLocal=e},expression:"panelRadiusLocal"}}),t._v(" "),s("RangeInput",{attrs:{name:"avatarRadius",label:t.$t("settings.avatarRadius"),fallback:t.previewTheme.radii.avatar,max:"28","hard-min":"0"},model:{value:t.avatarRadiusLocal,callback:function(e){t.avatarRadiusLocal=e},expression:"avatarRadiusLocal"}}),t._v(" "),s("RangeInput",{attrs:{name:"avatarAltRadius",label:t.$t("settings.avatarAltRadius"),fallback:t.previewTheme.radii.avatarAlt,max:"28","hard-min":"0"},model:{value:t.avatarAltRadiusLocal,callback:function(e){t.avatarAltRadiusLocal=e},expression:"avatarAltRadiusLocal"}}),t._v(" "),s("RangeInput",{attrs:{name:"attachmentRadius",label:t.$t("settings.attachmentRadius"),fallback:t.previewTheme.radii.attachment,max:"50","hard-min":"0"},model:{value:t.attachmentRadiusLocal,callback:function(e){t.attachmentRadiusLocal=e},expression:"attachmentRadiusLocal"}}),t._v(" "),s("RangeInput",{attrs:{name:"tooltipRadius",label:t.$t("settings.tooltipRadius"),fallback:t.previewTheme.radii.tooltip,max:"50","hard-min":"0"},model:{value:t.tooltipRadiusLocal,callback:function(e){t.tooltipRadiusLocal=e},expression:"tooltipRadiusLocal"}}),t._v(" "),s("RangeInput",{attrs:{name:"chatMessageRadius",label:t.$t("settings.chatMessageRadius"),fallback:t.previewTheme.radii.chatMessage||2,max:"50","hard-min":"0"},model:{value:t.chatMessageRadiusLocal,callback:function(e){t.chatMessageRadiusLocal=e},expression:"chatMessageRadiusLocal"}})],1),t._v(" "),s("div",{staticClass:"shadow-container",attrs:{label:t.$t("settings.style.shadows._tab_label")}},[s("div",{staticClass:"tab-header shadow-selector"},[s("div",{staticClass:"select-container"},[t._v("\n "+t._s(t.$t("settings.style.shadows.component"))+"\n "),s("Select",{staticClass:"shadow-switcher",attrs:{id:"shadow-switcher"},model:{value:t.shadowSelected,callback:function(e){t.shadowSelected=e},expression:"shadowSelected"}},t._l(t.shadowsAvailable,(function(e){return s("option",{key:e,domProps:{value:e}},[t._v("\n "+t._s(t.$t("settings.style.shadows.components."+e))+"\n ")])})),0)],1),t._v(" "),s("div",{staticClass:"override"},[s("label",{staticClass:"label",attrs:{for:"override"}},[t._v("\n "+t._s(t.$t("settings.style.shadows.override"))+"\n ")]),t._v(" "),s("input",{directives:[{name:"model",rawName:"v-model",value:t.currentShadowOverriden,expression:"currentShadowOverriden"}],staticClass:"input-override",attrs:{id:"override",name:"override",type:"checkbox"},domProps:{checked:Array.isArray(t.currentShadowOverriden)?t._i(t.currentShadowOverriden,null)>-1:t.currentShadowOverriden},on:{change:function(e){var s=t.currentShadowOverriden,n=e.target,a=!!n.checked;if(Array.isArray(s)){var o=t._i(s,null);n.checked?o<0&&(t.currentShadowOverriden=s.concat([null])):o>-1&&(t.currentShadowOverriden=s.slice(0,o).concat(s.slice(o+1)))}else t.currentShadowOverriden=a}}}),t._v(" "),s("label",{staticClass:"checkbox-label",attrs:{for:"override"}})]),t._v(" "),s("button",{staticClass:"btn button-default",on:{click:t.clearShadows}},[t._v("\n "+t._s(t.$t("settings.style.switcher.clear_all"))+"\n ")])]),t._v(" "),s("ShadowControl",{attrs:{ready:!!t.currentShadowFallback,fallback:t.currentShadowFallback},model:{value:t.currentShadow,callback:function(e){t.currentShadow=e},expression:"currentShadow"}}),t._v(" "),"avatar"===t.shadowSelected||"avatarStatus"===t.shadowSelected?s("div",[s("i18n",{attrs:{path:"settings.style.shadows.filter_hint.always_drop_shadow",tag:"p"}},[s("code",[t._v("filter: drop-shadow()")])]),t._v(" "),s("p",[t._v(t._s(t.$t("settings.style.shadows.filter_hint.avatar_inset")))]),t._v(" "),s("i18n",{attrs:{path:"settings.style.shadows.filter_hint.drop_shadow_syntax",tag:"p"}},[s("code",[t._v("drop-shadow")]),t._v(" "),s("code",[t._v("spread-radius")]),t._v(" "),s("code",[t._v("inset")])]),t._v(" "),s("i18n",{attrs:{path:"settings.style.shadows.filter_hint.inset_classic",tag:"p"}},[s("code",[t._v("box-shadow")])]),t._v(" "),s("p",[t._v(t._s(t.$t("settings.style.shadows.filter_hint.spread_zero")))])],1):t._e()],1),t._v(" "),s("div",{staticClass:"fonts-container",attrs:{label:t.$t("settings.style.fonts._tab_label")}},[s("div",{staticClass:"tab-header"},[s("p",[t._v(t._s(t.$t("settings.style.fonts.help")))]),t._v(" "),s("button",{staticClass:"btn button-default",on:{click:t.clearFonts}},[t._v("\n "+t._s(t.$t("settings.style.switcher.clear_all"))+"\n ")])]),t._v(" "),s("FontControl",{attrs:{name:"ui",label:t.$t("settings.style.fonts.components.interface"),fallback:t.previewTheme.fonts.interface,"no-inherit":"1"},model:{value:t.fontsLocal.interface,callback:function(e){t.$set(t.fontsLocal,"interface",e)},expression:"fontsLocal.interface"}}),t._v(" "),s("FontControl",{attrs:{name:"input",label:t.$t("settings.style.fonts.components.input"),fallback:t.previewTheme.fonts.input},model:{value:t.fontsLocal.input,callback:function(e){t.$set(t.fontsLocal,"input",e)},expression:"fontsLocal.input"}}),t._v(" "),s("FontControl",{attrs:{name:"post",label:t.$t("settings.style.fonts.components.post"),fallback:t.previewTheme.fonts.post},model:{value:t.fontsLocal.post,callback:function(e){t.$set(t.fontsLocal,"post",e)},expression:"fontsLocal.post"}}),t._v(" "),s("FontControl",{attrs:{name:"postCode",label:t.$t("settings.style.fonts.components.postCode"),fallback:t.previewTheme.fonts.postCode},model:{value:t.fontsLocal.postCode,callback:function(e){t.$set(t.fontsLocal,"postCode",e)},expression:"fontsLocal.postCode"}})],1)])],1),t._v(" "),s("div",{staticClass:"apply-container"},[s("button",{staticClass:"btn button-default submit",attrs:{disabled:!t.themeValid},on:{click:t.setCustomTheme}},[t._v("\n "+t._s(t.$t("general.apply"))+"\n ")]),t._v(" "),s("button",{staticClass:"btn button-default",on:{click:t.clearAll}},[t._v("\n "+t._s(t.$t("settings.style.switcher.reset"))+"\n ")])])],1)}),[],!1,ts,null,null).exports;i.c.add(r.qb,r.mb,r.C,r.N,r.e,r.q,r.y,r.H);var ss={components:{TabSwitcher:n.a,DataImportExportTab:_,MutesAndBlocksTab:ct,NotificationsTab:dt,FilteringTab:Et,SecurityTab:Yt,ProfileTab:ve,GeneralTab:xe,VersionTab:ye,ThemeTab:es},computed:{isLoggedIn:function(){return!!this.$store.state.users.currentUser},open:function(){return"hidden"!==this.$store.state.interface.settingsModalState}},methods:{onOpen:function(){var t=this.$store.state.interface.settingsModalTargetTab;if(t){var e=this.$refs.tabSwitcher.$slots.default.findIndex((function(e){return e.data&&e.data.attrs["data-tab-name"]===t}));e>=0&&this.$refs.tabSwitcher.setTab(e)}this.$store.dispatch("clearSettingsModalTargetTab")}},mounted:function(){this.onOpen()},watch:{open:function(t){t&&this.onOpen()}}};var ns=function(t){s(629)},as=Object(c.a)(ss,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("tab-switcher",{ref:"tabSwitcher",staticClass:"settings_tab-switcher",attrs:{"side-tab-bar":!0,"scrollable-tabs":!0}},[s("div",{attrs:{label:t.$t("settings.general"),icon:"wrench","data-tab-name":"general"}},[s("GeneralTab")],1),t._v(" "),t.isLoggedIn?s("div",{attrs:{label:t.$t("settings.profile_tab"),icon:"user","data-tab-name":"profile"}},[s("ProfileTab")],1):t._e(),t._v(" "),t.isLoggedIn?s("div",{attrs:{label:t.$t("settings.security_tab"),icon:"lock","data-tab-name":"security"}},[s("SecurityTab")],1):t._e(),t._v(" "),s("div",{attrs:{label:t.$t("settings.filtering"),icon:"filter","data-tab-name":"filtering"}},[s("FilteringTab")],1),t._v(" "),s("div",{attrs:{label:t.$t("settings.theme"),icon:"paint-brush","data-tab-name":"theme"}},[s("ThemeTab")],1),t._v(" "),t.isLoggedIn?s("div",{attrs:{label:t.$t("settings.notifications"),icon:"bell","data-tab-name":"notifications"}},[s("NotificationsTab")],1):t._e(),t._v(" "),t.isLoggedIn?s("div",{attrs:{label:t.$t("settings.data_import_export_tab"),icon:"download","data-tab-name":"dataImportExport"}},[s("DataImportExportTab")],1):t._e(),t._v(" "),t.isLoggedIn?s("div",{attrs:{label:t.$t("settings.mutes_and_blocks"),fullHeight:!0,icon:"eye-slash","data-tab-name":"mutesAndBlocks"}},[s("MutesAndBlocksTab")],1):t._e(),t._v(" "),s("div",{attrs:{label:t.$t("settings.version.title"),icon:"info","data-tab-name":"version"}},[s("VersionTab")],1)])}),[],!1,ns,null,null);e.default=as.exports}}]); +//# sourceMappingURL=2.fec2056b00b4fa3921ba.js.map \ No newline at end of file diff --git a/priv/static/static/js/2.fec2056b00b4fa3921ba.js.map b/priv/static/static/js/2.fec2056b00b4fa3921ba.js.map new file mode 100644 index 000000000..31d328177 --- /dev/null +++ b/priv/static/static/js/2.fec2056b00b4fa3921ba.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///./src/components/settings_modal/settings_modal_content.scss?d424","webpack:///./src/components/settings_modal/settings_modal_content.scss","webpack:///./src/components/importer/importer.vue?7798","webpack:///./src/components/importer/importer.vue?6af6","webpack:///./src/components/exporter/exporter.vue?dea3","webpack:///./src/components/exporter/exporter.vue?cc2b","webpack:///./src/components/settings_modal/tabs/mutes_and_blocks_tab.scss?4d0c","webpack:///./src/components/settings_modal/tabs/mutes_and_blocks_tab.scss","webpack:///./src/components/autosuggest/autosuggest.vue?9908","webpack:///./src/components/autosuggest/autosuggest.vue?9383","webpack:///./src/components/block_card/block_card.vue?7ad7","webpack:///./src/components/block_card/block_card.vue?ddc8","webpack:///./src/components/mute_card/mute_card.vue?c72f","webpack:///./src/components/mute_card/mute_card.vue?1268","webpack:///./src/components/domain_mute_card/domain_mute_card.vue?a613","webpack:///./src/components/domain_mute_card/domain_mute_card.vue?c85e","webpack:///./src/components/selectable_list/selectable_list.vue?a6e3","webpack:///./src/components/selectable_list/selectable_list.vue?c2f8","webpack:///./src/components/settings_modal/helpers/modified_indicator.vue?c223","webpack:///./src/components/settings_modal/helpers/modified_indicator.vue?81f6","webpack:///./src/components/settings_modal/helpers/choice_setting.vue?44d1","webpack:///./src/components/settings_modal/helpers/choice_setting.vue?17b7","webpack:///./src/components/settings_modal/tabs/security_tab/mfa.vue?540b","webpack:///./src/components/settings_modal/tabs/security_tab/mfa.vue?cd9f","webpack:///./src/components/settings_modal/tabs/security_tab/mfa_backup_codes.vue?da3d","webpack:///./src/components/settings_modal/tabs/security_tab/mfa_backup_codes.vue?57b8","webpack:///./src/components/settings_modal/tabs/profile_tab.scss?588b","webpack:///./src/components/settings_modal/tabs/profile_tab.scss","webpack:///./src/components/image_cropper/image_cropper.vue?f169","webpack:///./src/components/image_cropper/image_cropper.vue?6235","webpack:///./src/components/settings_modal/tabs/theme_tab/theme_tab.scss?080d","webpack:///./src/components/settings_modal/tabs/theme_tab/theme_tab.scss","webpack:///./src/components/color_input/color_input.scss?c457","webpack:///./src/components/color_input/color_input.scss","webpack:///./src/components/color_input/color_input.vue?6a4c","webpack:///./src/components/color_input/color_input.vue?bb22","webpack:///./src/components/shadow_control/shadow_control.vue?bfd4","webpack:///./src/components/shadow_control/shadow_control.vue?78ef","webpack:///./src/components/font_control/font_control.vue?5f33","webpack:///./src/components/font_control/font_control.vue?bef4","webpack:///./src/components/contrast_ratio/contrast_ratio.vue?a340","webpack:///./src/components/contrast_ratio/contrast_ratio.vue?32fa","webpack:///./src/components/settings_modal/tabs/theme_tab/preview.vue?1ae8","webpack:///./src/components/settings_modal/tabs/theme_tab/preview.vue?ab81","webpack:///./src/components/importer/importer.js","webpack:///./src/components/importer/importer.vue","webpack:///./src/components/importer/importer.vue?11c1","webpack:///./src/components/exporter/exporter.js","webpack:///./src/components/exporter/exporter.vue","webpack:///./src/components/exporter/exporter.vue?8ccc","webpack:///./src/components/settings_modal/tabs/data_import_export_tab.js","webpack:///./src/components/settings_modal/tabs/data_import_export_tab.vue","webpack:///./src/components/settings_modal/tabs/data_import_export_tab.vue?eb14","webpack:///./src/components/autosuggest/autosuggest.js","webpack:///./src/components/autosuggest/autosuggest.vue","webpack:///./src/components/autosuggest/autosuggest.vue?b400","webpack:///./src/components/block_card/block_card.js","webpack:///./src/components/block_card/block_card.vue","webpack:///./src/components/block_card/block_card.vue?c0ce","webpack:///./src/components/mute_card/mute_card.js","webpack:///./src/components/mute_card/mute_card.vue","webpack:///./src/components/mute_card/mute_card.vue?1fcb","webpack:///./src/components/domain_mute_card/domain_mute_card.js","webpack:///./src/components/domain_mute_card/domain_mute_card.vue","webpack:///./src/components/domain_mute_card/domain_mute_card.vue?bd8a","webpack:///./src/components/selectable_list/selectable_list.js","webpack:///./src/components/selectable_list/selectable_list.vue","webpack:///./src/components/selectable_list/selectable_list.vue?012d","webpack:///./src/hocs/with_subscription/with_subscription.js","webpack:///./src/components/settings_modal/tabs/mutes_and_blocks_tab.js","webpack:///./src/components/settings_modal/tabs/mutes_and_blocks_tab.vue","webpack:///./src/components/settings_modal/tabs/mutes_and_blocks_tab.vue?ef8c","webpack:///./src/components/settings_modal/tabs/notifications_tab.js","webpack:///./src/components/settings_modal/tabs/notifications_tab.vue","webpack:///./src/components/settings_modal/tabs/notifications_tab.vue?79e8","webpack:///src/components/settings_modal/helpers/modified_indicator.vue","webpack:///./src/components/settings_modal/helpers/modified_indicator.vue","webpack:///./src/components/settings_modal/helpers/modified_indicator.vue?e06d","webpack:///./src/components/settings_modal/helpers/boolean_setting.js","webpack:///./src/components/settings_modal/helpers/boolean_setting.vue","webpack:///./src/components/settings_modal/helpers/boolean_setting.vue?03b6","webpack:///./src/components/settings_modal/helpers/choice_setting.js","webpack:///./src/components/settings_modal/helpers/choice_setting.vue","webpack:///./src/components/settings_modal/helpers/choice_setting.vue?bf0a","webpack:///./src/components/settings_modal/helpers/shared_computed_object.js","webpack:///./src/components/settings_modal/tabs/filtering_tab.js","webpack:///./src/components/settings_modal/tabs/filtering_tab.vue","webpack:///./src/components/settings_modal/tabs/filtering_tab.vue?8eaf","webpack:///./src/components/settings_modal/tabs/security_tab/mfa_backup_codes.js","webpack:///./src/components/settings_modal/tabs/security_tab/mfa_backup_codes.vue","webpack:///./src/components/settings_modal/tabs/security_tab/mfa_backup_codes.vue?198f","webpack:///./src/components/settings_modal/tabs/security_tab/confirm.js","webpack:///./src/components/settings_modal/tabs/security_tab/confirm.vue","webpack:///./src/components/settings_modal/tabs/security_tab/confirm.vue?14b1","webpack:///./src/components/settings_modal/tabs/security_tab/mfa_totp.js","webpack:///./src/components/settings_modal/tabs/security_tab/mfa.js","webpack:///./src/components/settings_modal/tabs/security_tab/mfa_totp.vue","webpack:///./src/components/settings_modal/tabs/security_tab/mfa_totp.vue?5e8d","webpack:///./src/components/settings_modal/tabs/security_tab/mfa.vue","webpack:///./src/components/settings_modal/tabs/security_tab/mfa.vue?ab3a","webpack:///./src/components/settings_modal/tabs/security_tab/security_tab.js","webpack:///./src/components/settings_modal/tabs/security_tab/security_tab.vue","webpack:///./src/components/settings_modal/tabs/security_tab/security_tab.vue?2be5","webpack:///./src/components/image_cropper/image_cropper.js","webpack:///./src/components/image_cropper/image_cropper.vue","webpack:///./src/components/image_cropper/image_cropper.vue?f953","webpack:///./src/components/settings_modal/tabs/profile_tab.js","webpack:///./src/components/settings_modal/tabs/profile_tab.vue","webpack:///./src/components/settings_modal/tabs/profile_tab.vue?cec7","webpack:///src/components/interface_language_switcher/interface_language_switcher.vue","webpack:///./src/components/interface_language_switcher/interface_language_switcher.vue","webpack:///./src/components/interface_language_switcher/interface_language_switcher.vue?f146","webpack:///./src/components/settings_modal/tabs/general_tab.js","webpack:///./src/components/settings_modal/tabs/general_tab.vue","webpack:///./src/components/settings_modal/tabs/general_tab.vue?b4d6","webpack:///./src/components/settings_modal/tabs/version_tab.js","webpack:///./src/services/version/version.service.js","webpack:///./src/components/settings_modal/tabs/version_tab.vue","webpack:///./src/components/settings_modal/tabs/version_tab.vue?7cbe","webpack:///src/components/color_input/color_input.vue","webpack:///./src/components/color_input/color_input.vue","webpack:///./src/components/color_input/color_input.vue?3d5b","webpack:///./src/components/range_input/range_input.vue","webpack:///src/components/range_input/range_input.vue","webpack:///./src/components/range_input/range_input.vue?202a","webpack:///src/components/opacity_input/opacity_input.vue","webpack:///./src/components/opacity_input/opacity_input.vue","webpack:///./src/components/opacity_input/opacity_input.vue?0078","webpack:///./src/components/shadow_control/shadow_control.js","webpack:///./src/components/shadow_control/shadow_control.vue","webpack:///./src/components/shadow_control/shadow_control.vue?1399","webpack:///./src/components/font_control/font_control.js","webpack:///./src/components/font_control/font_control.vue","webpack:///./src/components/font_control/font_control.vue?b0ba","webpack:///src/components/contrast_ratio/contrast_ratio.vue","webpack:///./src/components/contrast_ratio/contrast_ratio.vue","webpack:///./src/components/contrast_ratio/contrast_ratio.vue?dc36","webpack:///src/components/settings_modal/tabs/theme_tab/preview.vue","webpack:///./src/components/settings_modal/tabs/theme_tab/preview.vue","webpack:///./src/components/settings_modal/tabs/theme_tab/preview.vue?f344","webpack:///./src/components/settings_modal/tabs/theme_tab/theme_tab.js","webpack:///./src/components/settings_modal/tabs/theme_tab/theme_tab.vue","webpack:///./src/components/settings_modal/tabs/theme_tab/theme_tab.vue?8594","webpack:///./src/components/settings_modal/settings_modal_content.js","webpack:///./src/components/settings_modal/settings_modal_content.vue","webpack:///./src/components/settings_modal/settings_modal_content.vue?277c"],"names":["content","module","i","locals","exports","add","default","push","library","faCircleNotch","faTimes","Importer","props","submitHandler","type","Function","required","submitButtonLabel","String","this","$t","successMessage","errorMessage","data","file","error","success","submitting","methods","change","$refs","input","files","submit","dismiss","then","__vue_styles__","context","_vm","_h","$createElement","_c","_self","staticClass","ref","attrs","on","_v","_s","_e","Exporter","getContent","filename","exportButtonLabel","processingMessage","processing","process","fileToDownload","document","createElement","setAttribute","encodeURIComponent","style","display","body","appendChild","click","removeChild","setTimeout","DataImportExportTab","activeTab","newDomainToMute","created","$store","dispatch","components","Checkbox","computed","mapState","backendInteractor","state","api","user","users","currentUser","getFollowsContent","exportFriends","id","generateExportableUsersContent","getBlocksContent","fetchBlocks","getMutesContent","fetchMutes","importFollows","status","Error","importBlocks","importMutes","map","is_local","screen_name","location","hostname","join","query","filter","placeholder","term","timeout","results","resultsVisible","filtered","watch","val","fetchResults","clearTimeout","onInputClick","onClickOutside","directives","name","rawName","value","expression","domProps","$event","target","composing","length","_l","item","_t","BlockCard","progress","getters","findUser","userId","relationship","blocked","blocking","BasicUserCard","unblockUser","blockUser","MuteCard","muted","muting","unmuteUser","muteUser","DomainMuteCard","ProgressButton","domainMutes","includes","domain","unmuteDomain","muteDomain","scopedSlots","_u","key","fn","proxy","SelectableList","List","items","Array","getKey","selected","allKeys","filteredSelected","indexOf","allSelected","noneSelected","someSelected","isSelected","toggle","checked","splice","toggleAll","slice","class","withSubscription","fetch","select","childPropName","additionalPropNames","WrappedComponent","Object","keys","getComponentProps","v","concat","Vue","component","loading","fetchedData","$props","refresh","isEmpty","fetchData","render","h","$listeners","$scopedSlots","children","entries","$slots","slot","BlockList","get","MuteList","DomainMuteList","MutesAndBlocks","TabSwitcher","Autosuggest","knownDomains","instance","activateTab","tabName","filterUnblockedUsers","userIds","reject","filterUnMutedUsers","queryUserIds","blockUsers","ids","unblockUsers","muteUsers","unmuteUsers","filterUnMutedDomains","urls","url","queryKnownDomains","Promise","resolve","toLowerCase","unmuteDomains","domains","row","NotificationsTab","notificationSettings","notification_settings","updateNotificationSettings","settings","model","callback","$$v","$set","ModifiedIndicator","pathDefault","path","split","firstSegment","rest","$parent","undefined","defaultState","isChanged","update","e","disabled","Select","option","label","SharedComputedObject","configDefaultState","defaultConfig","reduce","acc","mergedConfig","set","useStreamingApi","console","FilteringTab","muteWordsStringLocal","muteWords","replyVisibilityOptions","mode","BooleanSetting","ChoiceSetting","muteWordsString","word","notificationVisibility","handler","deep","replyVisibility","backupCodes","inProgress","codes","ready","displayTitle","code","Confirm","confirm","$emit","cancel","currentPassword","deactivate","isActivated","totp","doActivate","cancelDeactivate","doDeactivate","confirmDeactivate","mfaDisableOTP","password","res","Mfa","available","enabled","setupState","setupOTPState","getNewCodes","otpSettings","provisioning_uri","otpConfirmToken","readyInit","RecoveryCodes","VueQrcode","canSetupOTP","setupInProgress","backupCodesPrepared","setupOTPInProgress","completedOTP","prepareOTP","confirmOTP","confirmNewBackupCodes","activateOTP","fetchBackupCodes","generateMfaBackupCodes","getBackupCodes","confirmBackupCodes","cancelBackupCodes","setupOTP","mfaSetupOTP","doConfirmOTP","mfaConfirmOTP","token","completeSetup","fetchSettings","cancelSetup","settingsMFA","result","mounted","width","SecurityTab","newEmail","changeEmailError","changeEmailPassword","changedEmail","deletingAccount","deleteAccountConfirmPasswordInput","deleteAccountError","changePasswordInputs","changedPassword","changePasswordError","pleromaBackend","oauthTokens","tokens","oauthToken","appName","app_name","validUntil","Date","valid_until","toLocaleDateString","localeService","internalToBrowserLocale","$i18n","locale","confirmDelete","deleteAccount","$router","changePassword","params","newPassword","newPasswordConfirmation","logout","changeEmail","email","replace","revokeToken","window","t","ImageCropper","trigger","Element","cropperOptions","aspectRatio","autoCropArea","viewMode","movable","zoomable","guides","mimes","saveButtonLabel","saveWithoutCroppingButtonlabel","cancelButtonLabel","cropper","dataUrl","saveText","saveWithoutCroppingText","cancelText","destroy","cropping","pickImage","createCropper","Cropper","img","getTriggerDOM","querySelector","readFile","fileInput","reader","FileReader","onload","readAsDataURL","addEventListener","beforeDestroy","removeEventListener","stopPropagation","faPlus","ProfileTab","newName","name_unescaped","newBio","unescape","description","newLocked","locked","newNoRichText","no_rich_text","newDefaultScope","default_scope","newFields","fields","field","hideFollows","hide_follows","hideFollowers","hide_followers","hideFollowsCount","hide_follows_count","hideFollowersCount","hide_followers_count","showRole","show_role","role","discoverable","bot","allowFollowingMove","allow_following_move","pickAvatarBtnVisible","bannerUploading","backgroundUploading","banner","bannerPreview","background","backgroundPreview","ScopeSelector","EmojiInput","emojiUserSuggestor","suggestor","emoji","customEmoji","store","emojiSuggestor","userSuggestor","fieldsLimits","maxFields","defaultAvatar","server","defaultBanner","isDefaultAvatar","baseAvatar","profile_image_url","isDefaultBanner","baseBanner","cover_photo","isDefaultBackground","background_image","avatarImgSrc","src","profile_image_url_original","bannerImgSrc","updateProfile","note","display_name","fields_attributes","el","merge","commit","changeVis","visibility","addField","deleteField","index","event","$delete","uploadFile","size","filesize","fileSizeFormatService","fileSizeFormat","allowedsize","messageKey","messageArgs","num","filesizeunit","unit","allowedsizeunit","level","resetAvatar","submitAvatar","resetBanner","submitBanner","resetBackground","submitBackground","that","updateAvatar","avatar","updateProfileImages","displayUploadError","getCroppedCanvas","toBlob","message","_","languages","language","getLanguageName","languageName","charAt","toLocaleUpperCase","browserLocale","lang","faGlobe","GeneralTab","subjectLineOptions","loopSilentAvailable","getOwnPropertyDescriptor","HTMLVideoElement","prototype","HTMLMediaElement","InterfaceLanguageSwitcher","postFormats","postContentOptions","format","instanceSpecificPanelPresent","showInstanceSpecificPanel","instanceWallpaperUsed","instanceShoutboxPresent","shoutAvailable","streaming","hideNsfw","loopVideo","VersionTab","backendVersion","frontendVersion","frontendVersionLink","backendVersionLink","versionString","matches","match","fallback","Boolean","showOptionalTickbox","present","validColor","transparentColor","computedColor","startsWith","backgroundColor","max","hardMax","min","hardMin","step","faChevronDown","faChevronUp","toModel","object","x","y","blur","spread","inset","color","alpha","selectedId","cValue","ColorInput","OpacityInput","del","Math","moveUp","moveDn","beforeUpdate","anyShadows","anyShadowsFallback","currentFallback","moveUpValid","moveDnValid","usingFallback","rgb","hex2rgb","boxShadow","getCssShadow","shadow","isArray","_i","$$a","$$el","$$c","$$i","lValue","availableOptions","noInherit","options","dValue","family","isCustom","preset","custom","large","contrast","hint","hint_18pt","aaa","aa","laaa","laa","staticStyle","v1OnlyNames","themeImporter","newImporter","validator","importValidator","onImport","onImportFailure","themeExporter","newExporter","getExportedObject","exportedTheme","availableStyles","selectedTheme","theme","themeWarning","tempImportFile","engineVersion","previewShadows","previewColors","previewRadii","previewFonts","shadowsInvalid","colorsInvalid","radiiInvalid","keepColor","keepShadows","keepOpacity","keepRoundness","keepFonts","SLOT_INHERITANCE","OPACITIES","shadowSelected","shadowsLocal","fontsLocal","btnRadiusLocal","inputRadiusLocal","checkboxRadiusLocal","panelRadiusLocal","avatarRadiusLocal","avatarAltRadiusLocal","attachmentRadiusLocal","tooltipRadiusLocal","chatMessageRadiusLocal","self","getThemes","promises","all","k","themes","themesComplete","loadThemeFromLocalStorage","shadowsAvailable","themeWarningHelp","pre","origin","themeEngineVersion","noActionsPossible","CURRENT_VERSION","selectedVersion","currentColors","currentOpacity","currentRadii","btn","checkbox","panel","avatarAlt","tooltip","attachment","chatMessage","preview","composePreset","previewTheme","colors","opacity","radii","shadows","fonts","previewContrast","bg","colorsConverted","ratios","slotIsBaseText","textColor","layer","variant","opacitySlot","getOpacitySlot","textColors","layers","getLayers","textColorKey","newKey","toUpperCase","getContrastRatioLayers","ratio","text","toPrecision","warn","previewRules","rules","values","DEFAULT_SHADOWS","sort","currentShadowOverriden","currentShadow","currentShadowFallback","assign","themeValid","saveEverything","source","_pleroma_theme_version","RangeInput","ContrastRatio","ShadowControl","FontControl","Preview","loadTheme","fileVersion","forceUseSource","dismissWarning","version","snapshotEngineVersion","versionsMatch","sourceSnapshotMismatch","forcedSourceLoad","normalizeLocalState","forceLoadLocalStorage","forceLoad","forceSnapshot","confirmLoadSource","customTheme","customThemeSource","themeData","setCustomTheme","updatePreviewColorsAndShadows","generateColors","generateShadows","mod","importTheme","importData","exportTheme","exportData","parsed","forceSource","clearAll","clearV1","$data","endsWith","forEach","clearRoundness","clearOpacity","clearShadows","clearFonts","colors2to3","fg","fgColorLocal","rgb2hex","textColorLocal","Set","hex","Number","isNaN","shadows2to3","generateRadii","getOwnPropertyNames","generateFonts","fontsInvalid","find","s","log","bgColorLocal","linkColorLocal","cRedColorLocal","cGreenColorLocal","cBlueColorLocal","cOrangeColorLocal","bgOpacityLocal","bgText","link","accentColorLocal","accent","bgLink","fgText","fgTextColorLocal","fgLink","fgLinkColorLocal","bgCRed","bgCBlue","bgCGreen","bgCOrange","postLinkColorLocal","postLink","cGreen","postGreentextColorLocal","postGreentext","alertError","alertErrorColorLocal","alertErrorText","alertErrorTextColorLocal","alertWarning","alertWarningColorLocal","alertWarningText","alertWarningTextColorLocal","alertNeutral","alertNeutralColorLocal","alertNeutralText","alertNeutralTextColorLocal","alert","alertOpacityLocal","badgeNotification","badgeNotificationColorLocal","badgeNotificationText","badgeNotificationTextColorLocal","panelColorLocal","panelOpacityLocal","panelText","panelTextColorLocal","panelLink","panelLinkColorLocal","topBar","topBarColorLocal","topBarText","topBarTextColorLocal","topBarLink","topBarLinkColorLocal","inputColorLocal","inputOpacityLocal","inputText","inputTextColorLocal","btnColorLocal","btnOpacityLocal","btnText","btnTextColorLocal","btnPanelText","btnPanelTextColorLocal","btnTopBarText","btnTopBarTextColorLocal","btnPressed","btnPressedColorLocal","btnPressedText","btnPressedTextColorLocal","btnPressedPanelText","btnPressedPanelTextColorLocal","btnPressedTopBarText","btnPressedTopBarTextColorLocal","btnDisabled","btnDisabledColorLocal","btnDisabledText","btnDisabledTextColorLocal","btnDisabledPanelText","btnDisabledPanelTextColorLocal","btnDisabledTopBarText","btnDisabledTopBarTextColorLocal","btnToggled","btnToggledColorLocal","btnToggledText","btnToggledTextColorLocal","btnToggledPanelText","btnToggledPanelTextColorLocal","btnToggledTopBarText","btnToggledTopBarTextColorLocal","tab","tabColorLocal","tabText","tabTextColorLocal","tabActiveText","tabActiveTextColorLocal","border","borderColorLocal","borderOpacityLocal","faint","faintColorLocal","faintLink","faintLinkColorLocal","panelFaint","panelFaintColorLocal","faintOpacityLocal","underlay","underlayColorLocal","underlayOpacityLocal","wallpaper","wallpaperColorLocal","poll","pollColorLocal","pollText","pollTextColorLocal","icon","iconColorLocal","highlight","highlightColorLocal","highlightText","highlightTextColorLocal","highlightLink","highlightLinkColorLocal","popover","popoverColorLocal","popoverOpacityLocal","popoverText","popoverTextColorLocal","popoverLink","popoverLinkColorLocal","selectedPost","selectedPostColorLocal","selectedPostText","selectedPostTextColorLocal","selectedPostLink","selectedPostLinkColorLocal","selectedMenu","selectedMenuColorLocal","selectedMenuText","selectedMenuTextColorLocal","selectedMenuLink","selectedMenuLinkColorLocal","chatBgColorLocal","chatMessageIncomingBgColorLocal","chatMessageIncomingTextColorLocal","chatMessageIncomingLinkColorLocal","chatMessageIncomingBorderColorLocal","chatMessageOutgoingBgColorLocal","chatMessageOutgoingTextColorLocal","chatMessageOutgoingLinkColorLocal","chatMessageOutgoingBorderColorLocal","interface","post","postCode","faWrench","faUser","faFilter","faPaintBrush","faBell","faDownload","faEyeSlash","faInfo","SettingsModalContent","MutesAndBlocksTab","ThemeTab","isLoggedIn","open","settingsModalState","onOpen","targetTab","settingsModalTargetTab","tabIndex","tabSwitcher","findIndex","elm","setTab"],"mappings":"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","file":"static/js/2.fec2056b00b4fa3921ba.js","sourcesContent":["// style-loader: Adds some css to the DOM by adding a \n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./modified_indicator.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!../../../../node_modules/vue-loader/lib/selector?type=script&index=0!./modified_indicator.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../../node_modules/vue-loader/lib/selector?type=script&index=0!./modified_indicator.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-be0aa34e\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../../node_modules/vue-loader/lib/selector?type=template&index=0!./modified_indicator.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.changed)?_c('span',{staticClass:\"ModifiedIndicator\"},[_c('Popover',{attrs:{\"trigger\":\"hover\"},scopedSlots:_vm._u([{key:\"trigger\",fn:function(){return [_vm._v(\"\\n  \\n \"),_c('FAIcon',{attrs:{\"icon\":\"wrench\",\"aria-label\":_vm.$t('settings.setting_changed')}})]},proxy:true},{key:\"content\",fn:function(){return [_c('div',{staticClass:\"modified-tooltip\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.setting_changed'))+\"\\n \")])]},proxy:true}],null,false,1710729471)})],1):_vm._e()}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import { get, set } from 'lodash'\nimport Checkbox from 'src/components/checkbox/checkbox.vue'\nimport ModifiedIndicator from './modified_indicator.vue'\nexport default {\n components: {\n Checkbox,\n ModifiedIndicator\n },\n props: [\n 'path',\n 'disabled'\n ],\n computed: {\n pathDefault () {\n const [firstSegment, ...rest] = this.path.split('.')\n return [firstSegment + 'DefaultValue', ...rest].join('.')\n },\n state () {\n const value = get(this.$parent, this.path)\n if (value === undefined) {\n return this.defaultState\n } else {\n return value\n }\n },\n defaultState () {\n return get(this.$parent, this.pathDefault)\n },\n isChanged () {\n return this.state !== this.defaultState\n }\n },\n methods: {\n update (e) {\n set(this.$parent, this.path, e)\n }\n }\n}\n","/* script */\nexport * from \"!!babel-loader!./boolean_setting.js\"\nimport __vue_script__ from \"!!babel-loader!./boolean_setting.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-5036f1bc\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../../node_modules/vue-loader/lib/selector?type=template&index=0!./boolean_setting.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('label',{staticClass:\"BooleanSetting\"},[_c('Checkbox',{attrs:{\"checked\":_vm.state,\"disabled\":_vm.disabled},on:{\"change\":_vm.update}},[(!!_vm.$slots.default)?_c('span',{staticClass:\"label\"},[_vm._t(\"default\")],2):_vm._e(),_vm._v(\" \"),_c('ModifiedIndicator',{attrs:{\"changed\":_vm.isChanged}})],1)],1)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import { get, set } from 'lodash'\nimport Select from 'src/components/select/select.vue'\nimport ModifiedIndicator from './modified_indicator.vue'\nexport default {\n components: {\n Select,\n ModifiedIndicator\n },\n props: [\n 'path',\n 'disabled',\n 'options'\n ],\n computed: {\n pathDefault () {\n const [firstSegment, ...rest] = this.path.split('.')\n return [firstSegment + 'DefaultValue', ...rest].join('.')\n },\n state () {\n const value = get(this.$parent, this.path)\n if (value === undefined) {\n return this.defaultState\n } else {\n return value\n }\n },\n defaultState () {\n return get(this.$parent, this.pathDefault)\n },\n isChanged () {\n return this.state !== this.defaultState\n }\n },\n methods: {\n update (e) {\n set(this.$parent, this.path, e)\n }\n }\n}\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./choice_setting.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./choice_setting.js\"\nimport __vue_script__ from \"!!babel-loader!./choice_setting.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-4ff93bac\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../../node_modules/vue-loader/lib/selector?type=template&index=0!./choice_setting.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('label',{staticClass:\"ChoiceSetting\"},[_vm._t(\"default\"),_vm._v(\" \"),_c('Select',{attrs:{\"value\":_vm.state,\"disabled\":_vm.disabled},on:{\"change\":_vm.update}},_vm._l((_vm.options),function(option){return _c('option',{key:option.key,domProps:{\"value\":option.value}},[_vm._v(\"\\n \"+_vm._s(option.label)+\"\\n \"+_vm._s(option.value === _vm.defaultState ? _vm.$t('settings.instance_default_simple') : '')+\"\\n \")])}),0),_vm._v(\" \"),_c('ModifiedIndicator',{attrs:{\"changed\":_vm.isChanged}})],2)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import { defaultState as configDefaultState } from 'src/modules/config.js'\n\nconst SharedComputedObject = () => ({\n user () {\n return this.$store.state.users.currentUser\n },\n // Getting values for default properties\n ...Object.keys(configDefaultState)\n .map(key => [\n key + 'DefaultValue',\n function () {\n return this.$store.getters.defaultConfig[key]\n }\n ])\n .reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {}),\n // Generating computed values for vuex properties\n ...Object.keys(configDefaultState)\n .map(key => [key, {\n get () { return this.$store.getters.mergedConfig[key] },\n set (value) {\n this.$store.dispatch('setOption', { name: key, value })\n }\n }])\n .reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {}),\n // Special cases (need to transform values or perform actions first)\n useStreamingApi: {\n get () { return this.$store.getters.mergedConfig.useStreamingApi },\n set (value) {\n const promise = value\n ? this.$store.dispatch('enableMastoSockets')\n : this.$store.dispatch('disableMastoSockets')\n\n promise.then(() => {\n this.$store.dispatch('setOption', { name: 'useStreamingApi', value })\n }).catch((e) => {\n console.error('Failed starting MastoAPI Streaming socket', e)\n this.$store.dispatch('disableMastoSockets')\n this.$store.dispatch('setOption', { name: 'useStreamingApi', value: false })\n })\n }\n }\n})\n\nexport default SharedComputedObject\n","import { filter, trim } from 'lodash'\nimport BooleanSetting from '../helpers/boolean_setting.vue'\nimport ChoiceSetting from '../helpers/choice_setting.vue'\n\nimport SharedComputedObject from '../helpers/shared_computed_object.js'\n\nconst FilteringTab = {\n data () {\n return {\n muteWordsStringLocal: this.$store.getters.mergedConfig.muteWords.join('\\n'),\n replyVisibilityOptions: ['all', 'following', 'self'].map(mode => ({\n key: mode,\n value: mode,\n label: this.$t(`settings.reply_visibility_${mode}`)\n }))\n }\n },\n components: {\n BooleanSetting,\n ChoiceSetting\n },\n computed: {\n ...SharedComputedObject(),\n muteWordsString: {\n get () {\n return this.muteWordsStringLocal\n },\n set (value) {\n this.muteWordsStringLocal = value\n this.$store.dispatch('setOption', {\n name: 'muteWords',\n value: filter(value.split('\\n'), (word) => trim(word).length > 0)\n })\n }\n }\n },\n // Updating nested properties\n watch: {\n notificationVisibility: {\n handler (value) {\n this.$store.dispatch('setOption', {\n name: 'notificationVisibility',\n value: this.$store.getters.mergedConfig.notificationVisibility\n })\n },\n deep: true\n },\n replyVisibility () {\n this.$store.dispatch('queueFlushAll')\n }\n }\n}\n\nexport default FilteringTab\n","/* script */\nexport * from \"!!babel-loader!./filtering_tab.js\"\nimport __vue_script__ from \"!!babel-loader!./filtering_tab.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-6f76ed3c\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../../node_modules/vue-loader/lib/selector?type=template&index=0!./filtering_tab.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"label\":_vm.$t('settings.filtering')}},[_c('div',{staticClass:\"setting-item\"},[_c('div',{staticClass:\"select-multiple\"},[_c('span',{staticClass:\"label\"},[_vm._v(_vm._s(_vm.$t('settings.notification_visibility')))]),_vm._v(\" \"),_c('ul',{staticClass:\"option-list\"},[_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"notificationVisibility.likes\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.notification_visibility_likes'))+\"\\n \")])],1),_vm._v(\" \"),_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"notificationVisibility.repeats\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.notification_visibility_repeats'))+\"\\n \")])],1),_vm._v(\" \"),_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"notificationVisibility.follows\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.notification_visibility_follows'))+\"\\n \")])],1),_vm._v(\" \"),_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"notificationVisibility.mentions\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.notification_visibility_mentions'))+\"\\n \")])],1),_vm._v(\" \"),_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"notificationVisibility.moves\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.notification_visibility_moves'))+\"\\n \")])],1),_vm._v(\" \"),_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"notificationVisibility.emojiReactions\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.notification_visibility_emoji_reactions'))+\"\\n \")])],1)])]),_vm._v(\" \"),_c('ChoiceSetting',{attrs:{\"id\":\"replyVisibility\",\"path\":\"replyVisibility\",\"options\":_vm.replyVisibilityOptions}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.replies_in_timeline'))+\"\\n \")]),_vm._v(\" \"),_c('div',[_c('BooleanSetting',{attrs:{\"path\":\"hidePostStats\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.hide_post_stats'))+\"\\n \")])],1),_vm._v(\" \"),_c('div',[_c('BooleanSetting',{attrs:{\"path\":\"hideUserStats\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.hide_user_stats'))+\"\\n \")])],1)],1),_vm._v(\" \"),_c('div',{staticClass:\"setting-item\"},[_c('div',[_c('p',[_vm._v(_vm._s(_vm.$t('settings.filtering_explanation')))]),_vm._v(\" \"),_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.muteWordsString),expression:\"muteWordsString\"}],staticClass:\"resize-height\",attrs:{\"id\":\"muteWords\"},domProps:{\"value\":(_vm.muteWordsString)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.muteWordsString=$event.target.value}}})]),_vm._v(\" \"),_c('div',[_c('BooleanSetting',{attrs:{\"path\":\"hideFilteredStatuses\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.hide_filtered_statuses'))+\"\\n \")])],1)])])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","export default {\n props: {\n backupCodes: {\n type: Object,\n default: () => ({\n inProgress: false,\n codes: []\n })\n }\n },\n data: () => ({}),\n computed: {\n inProgress () { return this.backupCodes.inProgress },\n ready () { return this.backupCodes.codes.length > 0 },\n displayTitle () { return this.inProgress || this.ready }\n }\n}\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./mfa_backup_codes.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./mfa_backup_codes.js\"\nimport __vue_script__ from \"!!babel-loader!./mfa_backup_codes.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-1284fe74\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../../../node_modules/vue-loader/lib/selector?type=template&index=0!./mfa_backup_codes.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"mfa-backup-codes\"},[(_vm.displayTitle)?_c('h4',[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.mfa.recovery_codes'))+\"\\n \")]):_vm._e(),_vm._v(\" \"),(_vm.inProgress)?_c('i',[_vm._v(_vm._s(_vm.$t('settings.mfa.waiting_a_recovery_codes')))]):_vm._e(),_vm._v(\" \"),(_vm.ready)?[_c('p',{staticClass:\"alert warning\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.mfa.recovery_codes_warning'))+\"\\n \")]),_vm._v(\" \"),_c('ul',{staticClass:\"backup-codes\"},_vm._l((_vm.backupCodes.codes),function(code){return _c('li',{key:code},[_vm._v(\"\\n \"+_vm._s(code)+\"\\n \")])}),0)]:_vm._e()],2)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","const Confirm = {\n props: ['disabled'],\n data: () => ({}),\n methods: {\n confirm () { this.$emit('confirm') },\n cancel () { this.$emit('cancel') }\n }\n}\nexport default Confirm\n","/* script */\nexport * from \"!!babel-loader!./confirm.js\"\nimport __vue_script__ from \"!!babel-loader!./confirm.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-232a09eb\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../../../node_modules/vue-loader/lib/selector?type=template&index=0!./confirm.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_vm._t(\"default\"),_vm._v(\" \"),_c('button',{staticClass:\"btn button-default\",attrs:{\"disabled\":_vm.disabled},on:{\"click\":_vm.confirm}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('general.confirm'))+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn button-default\",attrs:{\"disabled\":_vm.disabled},on:{\"click\":_vm.cancel}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('general.cancel'))+\"\\n \")])],2)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import Confirm from './confirm.vue'\nimport { mapState } from 'vuex'\n\nexport default {\n props: ['settings'],\n data: () => ({\n error: false,\n currentPassword: '',\n deactivate: false,\n inProgress: false // progress peform request to disable otp method\n }),\n components: {\n 'confirm': Confirm\n },\n computed: {\n isActivated () {\n return this.settings.totp\n },\n ...mapState({\n backendInteractor: (state) => state.api.backendInteractor\n })\n },\n methods: {\n doActivate () {\n this.$emit('activate')\n },\n cancelDeactivate () { this.deactivate = false },\n doDeactivate () {\n this.error = null\n this.deactivate = true\n },\n confirmDeactivate () { // confirm deactivate TOTP method\n this.error = null\n this.inProgress = true\n this.backendInteractor.mfaDisableOTP({\n password: this.currentPassword\n })\n .then((res) => {\n this.inProgress = false\n if (res.error) {\n this.error = res.error\n return\n }\n this.deactivate = false\n this.$emit('deactivate')\n })\n }\n }\n}\n","import RecoveryCodes from './mfa_backup_codes.vue'\nimport TOTP from './mfa_totp.vue'\nimport Confirm from './confirm.vue'\nimport VueQrcode from '@chenfengyuan/vue-qrcode'\nimport { mapState } from 'vuex'\n\nconst Mfa = {\n data: () => ({\n settings: { // current settings of MFA\n available: false,\n enabled: false,\n totp: false\n },\n setupState: { // setup mfa\n state: '', // state of setup. '' -> 'getBackupCodes' -> 'setupOTP' -> 'complete'\n setupOTPState: '' // state of setup otp. '' -> 'prepare' -> 'confirm' -> 'complete'\n },\n backupCodes: {\n getNewCodes: false,\n inProgress: false, // progress of fetch codes\n codes: []\n },\n otpSettings: { // pre-setup setting of OTP. secret key, qrcode url.\n provisioning_uri: '',\n key: ''\n },\n currentPassword: null,\n otpConfirmToken: null,\n error: null,\n readyInit: false\n }),\n components: {\n 'recovery-codes': RecoveryCodes,\n 'totp-item': TOTP,\n 'qrcode': VueQrcode,\n 'confirm': Confirm\n },\n computed: {\n canSetupOTP () {\n return (\n (this.setupInProgress && this.backupCodesPrepared) ||\n this.settings.enabled\n ) && !this.settings.totp && !this.setupOTPInProgress\n },\n setupInProgress () {\n return this.setupState.state !== '' && this.setupState.state !== 'complete'\n },\n setupOTPInProgress () {\n return this.setupState.state === 'setupOTP' && !this.completedOTP\n },\n prepareOTP () {\n return this.setupState.setupOTPState === 'prepare'\n },\n confirmOTP () {\n return this.setupState.setupOTPState === 'confirm'\n },\n completedOTP () {\n return this.setupState.setupOTPState === 'completed'\n },\n backupCodesPrepared () {\n return !this.backupCodes.inProgress && this.backupCodes.codes.length > 0\n },\n confirmNewBackupCodes () {\n return this.backupCodes.getNewCodes\n },\n ...mapState({\n backendInteractor: (state) => state.api.backendInteractor\n })\n },\n\n methods: {\n activateOTP () {\n if (!this.settings.enabled) {\n this.setupState.state = 'getBackupcodes'\n this.fetchBackupCodes()\n }\n },\n fetchBackupCodes () {\n this.backupCodes.inProgress = true\n this.backupCodes.codes = []\n\n return this.backendInteractor.generateMfaBackupCodes()\n .then((res) => {\n this.backupCodes.codes = res.codes\n this.backupCodes.inProgress = false\n })\n },\n getBackupCodes () { // get a new backup codes\n this.backupCodes.getNewCodes = true\n },\n confirmBackupCodes () { // confirm getting new backup codes\n this.fetchBackupCodes().then((res) => {\n this.backupCodes.getNewCodes = false\n })\n },\n cancelBackupCodes () { // cancel confirm form of new backup codes\n this.backupCodes.getNewCodes = false\n },\n\n // Setup OTP\n setupOTP () { // prepare setup OTP\n this.setupState.state = 'setupOTP'\n this.setupState.setupOTPState = 'prepare'\n this.backendInteractor.mfaSetupOTP()\n .then((res) => {\n this.otpSettings = res\n this.setupState.setupOTPState = 'confirm'\n })\n },\n doConfirmOTP () { // handler confirm enable OTP\n this.error = null\n this.backendInteractor.mfaConfirmOTP({\n token: this.otpConfirmToken,\n password: this.currentPassword\n })\n .then((res) => {\n if (res.error) {\n this.error = res.error\n return\n }\n this.completeSetup()\n })\n },\n\n completeSetup () {\n this.setupState.setupOTPState = 'complete'\n this.setupState.state = 'complete'\n this.currentPassword = null\n this.error = null\n this.fetchSettings()\n },\n cancelSetup () { // cancel setup\n this.setupState.setupOTPState = ''\n this.setupState.state = ''\n this.currentPassword = null\n this.error = null\n },\n // end Setup OTP\n\n // fetch settings from server\n async fetchSettings () {\n let result = await this.backendInteractor.settingsMFA()\n if (result.error) return\n this.settings = result.settings\n this.settings.available = true\n return result\n }\n },\n mounted () {\n this.fetchSettings().then(() => {\n this.readyInit = true\n })\n }\n}\nexport default Mfa\n","/* script */\nexport * from \"!!babel-loader!./mfa_totp.js\"\nimport __vue_script__ from \"!!babel-loader!./mfa_totp.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-5466d3a1\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../../../node_modules/vue-loader/lib/selector?type=template&index=0!./mfa_totp.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:\"method-item\"},[_c('strong',[_vm._v(_vm._s(_vm.$t('settings.mfa.otp')))]),_vm._v(\" \"),(!_vm.isActivated)?_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.doActivate}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('general.enable'))+\"\\n \")]):_vm._e(),_vm._v(\" \"),(_vm.isActivated)?_c('button',{staticClass:\"btn button-default\",attrs:{\"disabled\":_vm.deactivate},on:{\"click\":_vm.doDeactivate}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('general.disable'))+\"\\n \")]):_vm._e()]),_vm._v(\" \"),(_vm.deactivate)?_c('confirm',{attrs:{\"disabled\":_vm.inProgress},on:{\"confirm\":_vm.confirmDeactivate,\"cancel\":_vm.cancelDeactivate}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.enter_current_password_to_confirm'))+\":\\n \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.currentPassword),expression:\"currentPassword\"}],attrs:{\"type\":\"password\"},domProps:{\"value\":(_vm.currentPassword)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.currentPassword=$event.target.value}}})]):_vm._e(),_vm._v(\" \"),(_vm.error)?_c('div',{staticClass:\"alert error\"},[_vm._v(\"\\n \"+_vm._s(_vm.error)+\"\\n \")]):_vm._e()],1)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./mfa.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./mfa.js\"\nimport __vue_script__ from \"!!babel-loader!./mfa.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-c62074fa\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../../../node_modules/vue-loader/lib/selector?type=template&index=0!./mfa.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.readyInit && _vm.settings.available)?_c('div',{staticClass:\"setting-item mfa-settings\"},[_c('div',{staticClass:\"mfa-heading\"},[_c('h2',[_vm._v(_vm._s(_vm.$t('settings.mfa.title')))])]),_vm._v(\" \"),_c('div',[(!_vm.setupInProgress)?_c('div',{staticClass:\"setting-item\"},[_c('h3',[_vm._v(_vm._s(_vm.$t('settings.mfa.authentication_methods')))]),_vm._v(\" \"),_c('totp-item',{attrs:{\"settings\":_vm.settings},on:{\"deactivate\":_vm.fetchSettings,\"activate\":_vm.activateOTP}}),_vm._v(\" \"),_c('br'),_vm._v(\" \"),(_vm.settings.enabled)?_c('div',[(!_vm.confirmNewBackupCodes)?_c('recovery-codes',{attrs:{\"backup-codes\":_vm.backupCodes}}):_vm._e(),_vm._v(\" \"),(!_vm.confirmNewBackupCodes)?_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.getBackupCodes}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.mfa.generate_new_recovery_codes'))+\"\\n \")]):_vm._e(),_vm._v(\" \"),(_vm.confirmNewBackupCodes)?_c('div',[_c('confirm',{attrs:{\"disabled\":_vm.backupCodes.inProgress},on:{\"confirm\":_vm.confirmBackupCodes,\"cancel\":_vm.cancelBackupCodes}},[_c('p',{staticClass:\"warning\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.mfa.warning_of_generate_new_codes'))+\"\\n \")])])],1):_vm._e()],1):_vm._e()],1):_vm._e(),_vm._v(\" \"),(_vm.setupInProgress)?_c('div',[_c('h3',[_vm._v(_vm._s(_vm.$t('settings.mfa.setup_otp')))]),_vm._v(\" \"),(!_vm.setupOTPInProgress)?_c('recovery-codes',{attrs:{\"backup-codes\":_vm.backupCodes}}):_vm._e(),_vm._v(\" \"),(_vm.canSetupOTP)?_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.cancelSetup}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('general.cancel'))+\"\\n \")]):_vm._e(),_vm._v(\" \"),(_vm.canSetupOTP)?_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.setupOTP}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.mfa.setup_otp'))+\"\\n \")]):_vm._e(),_vm._v(\" \"),(_vm.setupOTPInProgress)?[(_vm.prepareOTP)?_c('i',[_vm._v(_vm._s(_vm.$t('settings.mfa.wait_pre_setup_otp')))]):_vm._e(),_vm._v(\" \"),(_vm.confirmOTP)?_c('div',[_c('div',{staticClass:\"setup-otp\"},[_c('div',{staticClass:\"qr-code\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.mfa.scan.title')))]),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.$t('settings.mfa.scan.desc')))]),_vm._v(\" \"),_c('qrcode',{attrs:{\"value\":_vm.otpSettings.provisioning_uri,\"options\":{ width: 200 }}}),_vm._v(\" \"),_c('p',[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.mfa.scan.secret_code'))+\":\\n \"+_vm._s(_vm.otpSettings.key)+\"\\n \")])],1),_vm._v(\" \"),_c('div',{staticClass:\"verify\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('general.verify')))]),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.$t('settings.mfa.verify.desc')))]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.otpConfirmToken),expression:\"otpConfirmToken\"}],attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.otpConfirmToken)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.otpConfirmToken=$event.target.value}}}),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.$t('settings.enter_current_password_to_confirm'))+\":\")]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.currentPassword),expression:\"currentPassword\"}],attrs:{\"type\":\"password\"},domProps:{\"value\":(_vm.currentPassword)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.currentPassword=$event.target.value}}}),_vm._v(\" \"),_c('div',{staticClass:\"confirm-otp-actions\"},[_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.doConfirmOTP}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.mfa.confirm_and_enable'))+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.cancelSetup}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('general.cancel'))+\"\\n \")])]),_vm._v(\" \"),(_vm.error)?_c('div',{staticClass:\"alert error\"},[_vm._v(\"\\n \"+_vm._s(_vm.error)+\"\\n \")]):_vm._e()])])]):_vm._e()]:_vm._e()],2):_vm._e()])]):_vm._e()}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import ProgressButton from 'src/components/progress_button/progress_button.vue'\nimport Checkbox from 'src/components/checkbox/checkbox.vue'\nimport Mfa from './mfa.vue'\nimport localeService from 'src/services/locale/locale.service.js'\n\nconst SecurityTab = {\n data () {\n return {\n newEmail: '',\n changeEmailError: false,\n changeEmailPassword: '',\n changedEmail: false,\n deletingAccount: false,\n deleteAccountConfirmPasswordInput: '',\n deleteAccountError: false,\n changePasswordInputs: [ '', '', '' ],\n changedPassword: false,\n changePasswordError: false\n }\n },\n created () {\n this.$store.dispatch('fetchTokens')\n },\n components: {\n ProgressButton,\n Mfa,\n Checkbox\n },\n computed: {\n user () {\n return this.$store.state.users.currentUser\n },\n pleromaBackend () {\n return this.$store.state.instance.pleromaBackend\n },\n oauthTokens () {\n return this.$store.state.oauthTokens.tokens.map(oauthToken => {\n return {\n id: oauthToken.id,\n appName: oauthToken.app_name,\n validUntil: new Date(oauthToken.valid_until).toLocaleDateString(localeService.internalToBrowserLocale(this.$i18n.locale))\n }\n })\n }\n },\n methods: {\n confirmDelete () {\n this.deletingAccount = true\n },\n deleteAccount () {\n this.$store.state.api.backendInteractor.deleteAccount({ password: this.deleteAccountConfirmPasswordInput })\n .then((res) => {\n if (res.status === 'success') {\n this.$store.dispatch('logout')\n this.$router.push({ name: 'root' })\n } else {\n this.deleteAccountError = res.error\n }\n })\n },\n changePassword () {\n const params = {\n password: this.changePasswordInputs[0],\n newPassword: this.changePasswordInputs[1],\n newPasswordConfirmation: this.changePasswordInputs[2]\n }\n this.$store.state.api.backendInteractor.changePassword(params)\n .then((res) => {\n if (res.status === 'success') {\n this.changedPassword = true\n this.changePasswordError = false\n this.logout()\n } else {\n this.changedPassword = false\n this.changePasswordError = res.error\n }\n })\n },\n changeEmail () {\n const params = {\n email: this.newEmail,\n password: this.changeEmailPassword\n }\n this.$store.state.api.backendInteractor.changeEmail(params)\n .then((res) => {\n if (res.status === 'success') {\n this.changedEmail = true\n this.changeEmailError = false\n } else {\n this.changedEmail = false\n this.changeEmailError = res.error\n }\n })\n },\n logout () {\n this.$store.dispatch('logout')\n this.$router.replace('/')\n },\n revokeToken (id) {\n if (window.confirm(`${this.$i18n.t('settings.revoke_token')}?`)) {\n this.$store.dispatch('revokeToken', id)\n }\n }\n }\n}\n\nexport default SecurityTab\n","/* script */\nexport * from \"!!babel-loader!./security_tab.js\"\nimport __vue_script__ from \"!!babel-loader!./security_tab.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-dc4ec0ae\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../../../node_modules/vue-loader/lib/selector?type=template&index=0!./security_tab.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"label\":_vm.$t('settings.security_tab')}},[_c('div',{staticClass:\"setting-item\"},[_c('h2',[_vm._v(_vm._s(_vm.$t('settings.change_email')))]),_vm._v(\" \"),_c('div',[_c('p',[_vm._v(_vm._s(_vm.$t('settings.new_email')))]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newEmail),expression:\"newEmail\"}],attrs:{\"type\":\"email\",\"autocomplete\":\"email\"},domProps:{\"value\":(_vm.newEmail)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.newEmail=$event.target.value}}})]),_vm._v(\" \"),_c('div',[_c('p',[_vm._v(_vm._s(_vm.$t('settings.current_password')))]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.changeEmailPassword),expression:\"changeEmailPassword\"}],attrs:{\"type\":\"password\",\"autocomplete\":\"current-password\"},domProps:{\"value\":(_vm.changeEmailPassword)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.changeEmailPassword=$event.target.value}}})]),_vm._v(\" \"),_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.changeEmail}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.save'))+\"\\n \")]),_vm._v(\" \"),(_vm.changedEmail)?_c('p',[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.changed_email'))+\"\\n \")]):_vm._e(),_vm._v(\" \"),(_vm.changeEmailError !== false)?[_c('p',[_vm._v(_vm._s(_vm.$t('settings.change_email_error')))]),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.changeEmailError))])]:_vm._e()],2),_vm._v(\" \"),_c('div',{staticClass:\"setting-item\"},[_c('h2',[_vm._v(_vm._s(_vm.$t('settings.change_password')))]),_vm._v(\" \"),_c('div',[_c('p',[_vm._v(_vm._s(_vm.$t('settings.current_password')))]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.changePasswordInputs[0]),expression:\"changePasswordInputs[0]\"}],attrs:{\"type\":\"password\"},domProps:{\"value\":(_vm.changePasswordInputs[0])},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.changePasswordInputs, 0, $event.target.value)}}})]),_vm._v(\" \"),_c('div',[_c('p',[_vm._v(_vm._s(_vm.$t('settings.new_password')))]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.changePasswordInputs[1]),expression:\"changePasswordInputs[1]\"}],attrs:{\"type\":\"password\"},domProps:{\"value\":(_vm.changePasswordInputs[1])},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.changePasswordInputs, 1, $event.target.value)}}})]),_vm._v(\" \"),_c('div',[_c('p',[_vm._v(_vm._s(_vm.$t('settings.confirm_new_password')))]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.changePasswordInputs[2]),expression:\"changePasswordInputs[2]\"}],attrs:{\"type\":\"password\"},domProps:{\"value\":(_vm.changePasswordInputs[2])},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.changePasswordInputs, 2, $event.target.value)}}})]),_vm._v(\" \"),_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.changePassword}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.save'))+\"\\n \")]),_vm._v(\" \"),(_vm.changedPassword)?_c('p',[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.changed_password'))+\"\\n \")]):(_vm.changePasswordError !== false)?_c('p',[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.change_password_error'))+\"\\n \")]):_vm._e(),_vm._v(\" \"),(_vm.changePasswordError)?_c('p',[_vm._v(\"\\n \"+_vm._s(_vm.changePasswordError)+\"\\n \")]):_vm._e()]),_vm._v(\" \"),_c('div',{staticClass:\"setting-item\"},[_c('h2',[_vm._v(_vm._s(_vm.$t('settings.oauth_tokens')))]),_vm._v(\" \"),_c('table',{staticClass:\"oauth-tokens\"},[_c('thead',[_c('tr',[_c('th',[_vm._v(_vm._s(_vm.$t('settings.app_name')))]),_vm._v(\" \"),_c('th',[_vm._v(_vm._s(_vm.$t('settings.valid_until')))]),_vm._v(\" \"),_c('th')])]),_vm._v(\" \"),_c('tbody',_vm._l((_vm.oauthTokens),function(oauthToken){return _c('tr',{key:oauthToken.id},[_c('td',[_vm._v(_vm._s(oauthToken.appName))]),_vm._v(\" \"),_c('td',[_vm._v(_vm._s(oauthToken.validUntil))]),_vm._v(\" \"),_c('td',{staticClass:\"actions\"},[_c('button',{staticClass:\"btn button-default\",on:{\"click\":function($event){return _vm.revokeToken(oauthToken.id)}}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.revoke_token'))+\"\\n \")])])])}),0)])]),_vm._v(\" \"),_c('mfa'),_vm._v(\" \"),_c('div',{staticClass:\"setting-item\"},[_c('h2',[_vm._v(_vm._s(_vm.$t('settings.delete_account')))]),_vm._v(\" \"),(!_vm.deletingAccount)?_c('p',[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.delete_account_description'))+\"\\n \")]):_vm._e(),_vm._v(\" \"),(_vm.deletingAccount)?_c('div',[_c('p',[_vm._v(_vm._s(_vm.$t('settings.delete_account_instructions')))]),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.$t('login.password')))]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.deleteAccountConfirmPasswordInput),expression:\"deleteAccountConfirmPasswordInput\"}],attrs:{\"type\":\"password\"},domProps:{\"value\":(_vm.deleteAccountConfirmPasswordInput)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.deleteAccountConfirmPasswordInput=$event.target.value}}}),_vm._v(\" \"),_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.deleteAccount}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.delete_account'))+\"\\n \")])]):_vm._e(),_vm._v(\" \"),(_vm.deleteAccountError !== false)?_c('p',[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.delete_account_error'))+\"\\n \")]):_vm._e(),_vm._v(\" \"),(_vm.deleteAccountError)?_c('p',[_vm._v(\"\\n \"+_vm._s(_vm.deleteAccountError)+\"\\n \")]):_vm._e(),_vm._v(\" \"),(!_vm.deletingAccount)?_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.confirmDelete}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.save'))+\"\\n \")]):_vm._e()])],1)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import Cropper from 'cropperjs'\nimport 'cropperjs/dist/cropper.css'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faCircleNotch\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faCircleNotch\n)\n\nconst ImageCropper = {\n props: {\n trigger: {\n type: [String, window.Element],\n required: true\n },\n submitHandler: {\n type: Function,\n required: true\n },\n cropperOptions: {\n type: Object,\n default () {\n return {\n aspectRatio: 1,\n autoCropArea: 1,\n viewMode: 1,\n movable: false,\n zoomable: false,\n guides: false\n }\n }\n },\n mimes: {\n type: String,\n default: 'image/png, image/gif, image/jpeg, image/bmp, image/x-icon'\n },\n saveButtonLabel: {\n type: String\n },\n saveWithoutCroppingButtonlabel: {\n type: String\n },\n cancelButtonLabel: {\n type: String\n }\n },\n data () {\n return {\n cropper: undefined,\n dataUrl: undefined,\n filename: undefined,\n submitting: false\n }\n },\n computed: {\n saveText () {\n return this.saveButtonLabel || this.$t('image_cropper.save')\n },\n saveWithoutCroppingText () {\n return this.saveWithoutCroppingButtonlabel || this.$t('image_cropper.save_without_cropping')\n },\n cancelText () {\n return this.cancelButtonLabel || this.$t('image_cropper.cancel')\n }\n },\n methods: {\n destroy () {\n if (this.cropper) {\n this.cropper.destroy()\n }\n this.$refs.input.value = ''\n this.dataUrl = undefined\n this.$emit('close')\n },\n submit (cropping = true) {\n this.submitting = true\n this.submitHandler(cropping && this.cropper, this.file)\n .then(() => this.destroy())\n .finally(() => {\n this.submitting = false\n })\n },\n pickImage () {\n this.$refs.input.click()\n },\n createCropper () {\n this.cropper = new Cropper(this.$refs.img, this.cropperOptions)\n },\n getTriggerDOM () {\n return typeof this.trigger === 'object' ? this.trigger : document.querySelector(this.trigger)\n },\n readFile () {\n const fileInput = this.$refs.input\n if (fileInput.files != null && fileInput.files[0] != null) {\n this.file = fileInput.files[0]\n let reader = new window.FileReader()\n reader.onload = (e) => {\n this.dataUrl = e.target.result\n this.$emit('open')\n }\n reader.readAsDataURL(this.file)\n this.$emit('changed', this.file, reader)\n }\n }\n },\n mounted () {\n // listen for click event on trigger\n const trigger = this.getTriggerDOM()\n if (!trigger) {\n this.$emit('error', 'No image make trigger found.', 'user')\n } else {\n trigger.addEventListener('click', this.pickImage)\n }\n // listen for input file changes\n const fileInput = this.$refs.input\n fileInput.addEventListener('change', this.readFile)\n },\n beforeDestroy: function () {\n // remove the event listeners\n const trigger = this.getTriggerDOM()\n if (trigger) {\n trigger.removeEventListener('click', this.pickImage)\n }\n const fileInput = this.$refs.input\n fileInput.removeEventListener('change', this.readFile)\n }\n}\n\nexport default ImageCropper\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./image_cropper.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./image_cropper.js\"\nimport __vue_script__ from \"!!babel-loader!./image_cropper.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-0bac39f0\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./image_cropper.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"image-cropper\"},[(_vm.dataUrl)?_c('div',[_c('div',{staticClass:\"image-cropper-image-container\"},[_c('img',{ref:\"img\",attrs:{\"src\":_vm.dataUrl,\"alt\":\"\"},on:{\"load\":function($event){$event.stopPropagation();return _vm.createCropper($event)}}})]),_vm._v(\" \"),_c('div',{staticClass:\"image-cropper-buttons-wrapper\"},[_c('button',{staticClass:\"button-default btn\",attrs:{\"type\":\"button\",\"disabled\":_vm.submitting},domProps:{\"textContent\":_vm._s(_vm.saveText)},on:{\"click\":function($event){return _vm.submit()}}}),_vm._v(\" \"),_c('button',{staticClass:\"button-default btn\",attrs:{\"type\":\"button\",\"disabled\":_vm.submitting},domProps:{\"textContent\":_vm._s(_vm.cancelText)},on:{\"click\":_vm.destroy}}),_vm._v(\" \"),_c('button',{staticClass:\"button-default btn\",attrs:{\"type\":\"button\",\"disabled\":_vm.submitting},domProps:{\"textContent\":_vm._s(_vm.saveWithoutCroppingText)},on:{\"click\":function($event){return _vm.submit(false)}}}),_vm._v(\" \"),(_vm.submitting)?_c('FAIcon',{attrs:{\"spin\":\"\",\"icon\":\"circle-notch\"}}):_vm._e()],1)]):_vm._e(),_vm._v(\" \"),_c('input',{ref:\"input\",staticClass:\"image-cropper-img-input\",attrs:{\"type\":\"file\",\"accept\":_vm.mimes}})])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import unescape from 'lodash/unescape'\nimport merge from 'lodash/merge'\nimport ImageCropper from 'src/components/image_cropper/image_cropper.vue'\nimport ScopeSelector from 'src/components/scope_selector/scope_selector.vue'\nimport fileSizeFormatService from 'src/components/../services/file_size_format/file_size_format.js'\nimport ProgressButton from 'src/components/progress_button/progress_button.vue'\nimport EmojiInput from 'src/components/emoji_input/emoji_input.vue'\nimport suggestor from 'src/components/emoji_input/suggestor.js'\nimport Autosuggest from 'src/components/autosuggest/autosuggest.vue'\nimport Checkbox from 'src/components/checkbox/checkbox.vue'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faTimes,\n faPlus,\n faCircleNotch\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faTimes,\n faPlus,\n faCircleNotch\n)\n\nconst ProfileTab = {\n data () {\n return {\n newName: this.$store.state.users.currentUser.name_unescaped,\n newBio: unescape(this.$store.state.users.currentUser.description),\n newLocked: this.$store.state.users.currentUser.locked,\n newNoRichText: this.$store.state.users.currentUser.no_rich_text,\n newDefaultScope: this.$store.state.users.currentUser.default_scope,\n newFields: this.$store.state.users.currentUser.fields.map(field => ({ name: field.name, value: field.value })),\n hideFollows: this.$store.state.users.currentUser.hide_follows,\n hideFollowers: this.$store.state.users.currentUser.hide_followers,\n hideFollowsCount: this.$store.state.users.currentUser.hide_follows_count,\n hideFollowersCount: this.$store.state.users.currentUser.hide_followers_count,\n showRole: this.$store.state.users.currentUser.show_role,\n role: this.$store.state.users.currentUser.role,\n discoverable: this.$store.state.users.currentUser.discoverable,\n bot: this.$store.state.users.currentUser.bot,\n allowFollowingMove: this.$store.state.users.currentUser.allow_following_move,\n pickAvatarBtnVisible: true,\n bannerUploading: false,\n backgroundUploading: false,\n banner: null,\n bannerPreview: null,\n background: null,\n backgroundPreview: null\n }\n },\n components: {\n ScopeSelector,\n ImageCropper,\n EmojiInput,\n Autosuggest,\n ProgressButton,\n Checkbox\n },\n computed: {\n user () {\n return this.$store.state.users.currentUser\n },\n emojiUserSuggestor () {\n return suggestor({\n emoji: [\n ...this.$store.state.instance.emoji,\n ...this.$store.state.instance.customEmoji\n ],\n store: this.$store\n })\n },\n emojiSuggestor () {\n return suggestor({ emoji: [\n ...this.$store.state.instance.emoji,\n ...this.$store.state.instance.customEmoji\n ] })\n },\n userSuggestor () {\n return suggestor({ store: this.$store })\n },\n fieldsLimits () {\n return this.$store.state.instance.fieldsLimits\n },\n maxFields () {\n return this.fieldsLimits ? this.fieldsLimits.maxFields : 0\n },\n defaultAvatar () {\n return this.$store.state.instance.server + this.$store.state.instance.defaultAvatar\n },\n defaultBanner () {\n return this.$store.state.instance.server + this.$store.state.instance.defaultBanner\n },\n isDefaultAvatar () {\n const baseAvatar = this.$store.state.instance.defaultAvatar\n return !(this.$store.state.users.currentUser.profile_image_url) ||\n this.$store.state.users.currentUser.profile_image_url.includes(baseAvatar)\n },\n isDefaultBanner () {\n const baseBanner = this.$store.state.instance.defaultBanner\n return !(this.$store.state.users.currentUser.cover_photo) ||\n this.$store.state.users.currentUser.cover_photo.includes(baseBanner)\n },\n isDefaultBackground () {\n return !(this.$store.state.users.currentUser.background_image)\n },\n avatarImgSrc () {\n const src = this.$store.state.users.currentUser.profile_image_url_original\n return (!src) ? this.defaultAvatar : src\n },\n bannerImgSrc () {\n const src = this.$store.state.users.currentUser.cover_photo\n return (!src) ? this.defaultBanner : src\n }\n },\n methods: {\n updateProfile () {\n this.$store.state.api.backendInteractor\n .updateProfile({\n params: {\n note: this.newBio,\n locked: this.newLocked,\n // Backend notation.\n /* eslint-disable camelcase */\n display_name: this.newName,\n fields_attributes: this.newFields.filter(el => el != null),\n default_scope: this.newDefaultScope,\n no_rich_text: this.newNoRichText,\n hide_follows: this.hideFollows,\n hide_followers: this.hideFollowers,\n discoverable: this.discoverable,\n bot: this.bot,\n allow_following_move: this.allowFollowingMove,\n hide_follows_count: this.hideFollowsCount,\n hide_followers_count: this.hideFollowersCount,\n show_role: this.showRole\n /* eslint-enable camelcase */\n } }).then((user) => {\n this.newFields.splice(user.fields.length)\n merge(this.newFields, user.fields)\n this.$store.commit('addNewUsers', [user])\n this.$store.commit('setCurrentUser', user)\n })\n },\n changeVis (visibility) {\n this.newDefaultScope = visibility\n },\n addField () {\n if (this.newFields.length < this.maxFields) {\n this.newFields.push({ name: '', value: '' })\n return true\n }\n return false\n },\n deleteField (index, event) {\n this.$delete(this.newFields, index)\n },\n uploadFile (slot, e) {\n const file = e.target.files[0]\n if (!file) { return }\n if (file.size > this.$store.state.instance[slot + 'limit']) {\n const filesize = fileSizeFormatService.fileSizeFormat(file.size)\n const allowedsize = fileSizeFormatService.fileSizeFormat(this.$store.state.instance[slot + 'limit'])\n this.$store.dispatch('pushGlobalNotice', {\n messageKey: 'upload.error.message',\n messageArgs: [\n this.$t('upload.error.file_too_big', {\n filesize: filesize.num,\n filesizeunit: filesize.unit,\n allowedsize: allowedsize.num,\n allowedsizeunit: allowedsize.unit\n })\n ],\n level: 'error'\n })\n return\n }\n // eslint-disable-next-line no-undef\n const reader = new FileReader()\n reader.onload = ({ target }) => {\n const img = target.result\n this[slot + 'Preview'] = img\n this[slot] = file\n }\n reader.readAsDataURL(file)\n },\n resetAvatar () {\n const confirmed = window.confirm(this.$t('settings.reset_avatar_confirm'))\n if (confirmed) {\n this.submitAvatar(undefined, '')\n }\n },\n resetBanner () {\n const confirmed = window.confirm(this.$t('settings.reset_banner_confirm'))\n if (confirmed) {\n this.submitBanner('')\n }\n },\n resetBackground () {\n const confirmed = window.confirm(this.$t('settings.reset_background_confirm'))\n if (confirmed) {\n this.submitBackground('')\n }\n },\n submitAvatar (cropper, file) {\n const that = this\n return new Promise((resolve, reject) => {\n function updateAvatar (avatar) {\n that.$store.state.api.backendInteractor.updateProfileImages({ avatar })\n .then((user) => {\n that.$store.commit('addNewUsers', [user])\n that.$store.commit('setCurrentUser', user)\n resolve()\n })\n .catch((error) => {\n that.displayUploadError(error)\n reject(error)\n })\n }\n\n if (cropper) {\n cropper.getCroppedCanvas().toBlob(updateAvatar, file.type)\n } else {\n updateAvatar(file)\n }\n })\n },\n submitBanner (banner) {\n if (!this.bannerPreview && banner !== '') { return }\n\n this.bannerUploading = true\n this.$store.state.api.backendInteractor.updateProfileImages({ banner })\n .then((user) => {\n this.$store.commit('addNewUsers', [user])\n this.$store.commit('setCurrentUser', user)\n this.bannerPreview = null\n })\n .catch(this.displayUploadError)\n .finally(() => { this.bannerUploading = false })\n },\n submitBackground (background) {\n if (!this.backgroundPreview && background !== '') { return }\n\n this.backgroundUploading = true\n this.$store.state.api.backendInteractor.updateProfileImages({ background })\n .then((data) => {\n this.$store.commit('addNewUsers', [data])\n this.$store.commit('setCurrentUser', data)\n this.backgroundPreview = null\n })\n .catch(this.displayUploadError)\n .finally(() => { this.backgroundUploading = false })\n },\n displayUploadError (error) {\n this.$store.dispatch('pushGlobalNotice', {\n messageKey: 'upload.error.message',\n messageArgs: [error.message],\n level: 'error'\n })\n }\n }\n}\n\nexport default ProfileTab\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!./profile_tab.scss\")\n}\n/* script */\nexport * from \"!!babel-loader!./profile_tab.js\"\nimport __vue_script__ from \"!!babel-loader!./profile_tab.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-12b56c32\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../../node_modules/vue-loader/lib/selector?type=template&index=0!./profile_tab.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"profile-tab\"},[_c('div',{staticClass:\"setting-item\"},[_c('h2',[_vm._v(_vm._s(_vm.$t('settings.name_bio')))]),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.$t('settings.name')))]),_vm._v(\" \"),_c('EmojiInput',{attrs:{\"enable-emoji-picker\":\"\",\"suggest\":_vm.emojiSuggestor},model:{value:(_vm.newName),callback:function ($$v) {_vm.newName=$$v},expression:\"newName\"}},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newName),expression:\"newName\"}],staticClass:\"name-changer\",attrs:{\"id\":\"username\"},domProps:{\"value\":(_vm.newName)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.newName=$event.target.value}}})]),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.$t('settings.bio')))]),_vm._v(\" \"),_c('EmojiInput',{attrs:{\"enable-emoji-picker\":\"\",\"suggest\":_vm.emojiUserSuggestor},model:{value:(_vm.newBio),callback:function ($$v) {_vm.newBio=$$v},expression:\"newBio\"}},[_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newBio),expression:\"newBio\"}],staticClass:\"bio resize-height\",domProps:{\"value\":(_vm.newBio)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.newBio=$event.target.value}}})]),_vm._v(\" \"),_c('p',[_c('Checkbox',{model:{value:(_vm.newLocked),callback:function ($$v) {_vm.newLocked=$$v},expression:\"newLocked\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.lock_account_description'))+\"\\n \")])],1),_vm._v(\" \"),_c('div',[_c('label',{attrs:{\"for\":\"default-vis\"}},[_vm._v(_vm._s(_vm.$t('settings.default_vis')))]),_vm._v(\" \"),_c('div',{staticClass:\"visibility-tray\",attrs:{\"id\":\"default-vis\"}},[_c('scope-selector',{attrs:{\"show-all\":true,\"user-default\":_vm.newDefaultScope,\"initial-scope\":_vm.newDefaultScope,\"on-scope-change\":_vm.changeVis}})],1)]),_vm._v(\" \"),_c('p',[_c('Checkbox',{model:{value:(_vm.newNoRichText),callback:function ($$v) {_vm.newNoRichText=$$v},expression:\"newNoRichText\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.no_rich_text_description'))+\"\\n \")])],1),_vm._v(\" \"),_c('p',[_c('Checkbox',{model:{value:(_vm.hideFollows),callback:function ($$v) {_vm.hideFollows=$$v},expression:\"hideFollows\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.hide_follows_description'))+\"\\n \")])],1),_vm._v(\" \"),_c('p',{staticClass:\"setting-subitem\"},[_c('Checkbox',{attrs:{\"disabled\":!_vm.hideFollows},model:{value:(_vm.hideFollowsCount),callback:function ($$v) {_vm.hideFollowsCount=$$v},expression:\"hideFollowsCount\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.hide_follows_count_description'))+\"\\n \")])],1),_vm._v(\" \"),_c('p',[_c('Checkbox',{model:{value:(_vm.hideFollowers),callback:function ($$v) {_vm.hideFollowers=$$v},expression:\"hideFollowers\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.hide_followers_description'))+\"\\n \")])],1),_vm._v(\" \"),_c('p',{staticClass:\"setting-subitem\"},[_c('Checkbox',{attrs:{\"disabled\":!_vm.hideFollowers},model:{value:(_vm.hideFollowersCount),callback:function ($$v) {_vm.hideFollowersCount=$$v},expression:\"hideFollowersCount\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.hide_followers_count_description'))+\"\\n \")])],1),_vm._v(\" \"),_c('p',[_c('Checkbox',{model:{value:(_vm.allowFollowingMove),callback:function ($$v) {_vm.allowFollowingMove=$$v},expression:\"allowFollowingMove\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.allow_following_move'))+\"\\n \")])],1),_vm._v(\" \"),(_vm.role === 'admin' || _vm.role === 'moderator')?_c('p',[_c('Checkbox',{model:{value:(_vm.showRole),callback:function ($$v) {_vm.showRole=$$v},expression:\"showRole\"}},[(_vm.role === 'admin')?[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.show_admin_badge'))+\"\\n \")]:_vm._e(),_vm._v(\" \"),(_vm.role === 'moderator')?[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.show_moderator_badge'))+\"\\n \")]:_vm._e()],2)],1):_vm._e(),_vm._v(\" \"),_c('p',[_c('Checkbox',{model:{value:(_vm.discoverable),callback:function ($$v) {_vm.discoverable=$$v},expression:\"discoverable\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.discoverable'))+\"\\n \")])],1),_vm._v(\" \"),(_vm.maxFields > 0)?_c('div',[_c('p',[_vm._v(_vm._s(_vm.$t('settings.profile_fields.label')))]),_vm._v(\" \"),_vm._l((_vm.newFields),function(_,i){return _c('div',{key:i,staticClass:\"profile-fields\"},[_c('EmojiInput',{attrs:{\"enable-emoji-picker\":\"\",\"hide-emoji-button\":\"\",\"suggest\":_vm.userSuggestor},model:{value:(_vm.newFields[i].name),callback:function ($$v) {_vm.$set(_vm.newFields[i], \"name\", $$v)},expression:\"newFields[i].name\"}},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newFields[i].name),expression:\"newFields[i].name\"}],attrs:{\"placeholder\":_vm.$t('settings.profile_fields.name')},domProps:{\"value\":(_vm.newFields[i].name)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.newFields[i], \"name\", $event.target.value)}}})]),_vm._v(\" \"),_c('EmojiInput',{attrs:{\"enable-emoji-picker\":\"\",\"hide-emoji-button\":\"\",\"suggest\":_vm.userSuggestor},model:{value:(_vm.newFields[i].value),callback:function ($$v) {_vm.$set(_vm.newFields[i], \"value\", $$v)},expression:\"newFields[i].value\"}},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newFields[i].value),expression:\"newFields[i].value\"}],attrs:{\"placeholder\":_vm.$t('settings.profile_fields.value')},domProps:{\"value\":(_vm.newFields[i].value)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.newFields[i], \"value\", $event.target.value)}}})]),_vm._v(\" \"),_c('button',{staticClass:\"delete-field button-unstyled -hover-highlight\",on:{\"click\":function($event){return _vm.deleteField(i)}}},[_c('FAIcon',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.newFields.length > 1),expression:\"newFields.length > 1\"}],attrs:{\"icon\":\"times\"}})],1)],1)}),_vm._v(\" \"),(_vm.newFields.length < _vm.maxFields)?_c('button',{staticClass:\"add-field faint button-unstyled -hover-highlight\",on:{\"click\":_vm.addField}},[_c('FAIcon',{attrs:{\"icon\":\"plus\"}}),_vm._v(\"\\n \"+_vm._s(_vm.$t(\"settings.profile_fields.add_field\"))+\"\\n \")],1):_vm._e()],2):_vm._e(),_vm._v(\" \"),_c('p',[_c('Checkbox',{model:{value:(_vm.bot),callback:function ($$v) {_vm.bot=$$v},expression:\"bot\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.bot'))+\"\\n \")])],1),_vm._v(\" \"),_c('button',{staticClass:\"btn button-default\",attrs:{\"disabled\":_vm.newName && _vm.newName.length === 0},on:{\"click\":_vm.updateProfile}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.save'))+\"\\n \")])],1),_vm._v(\" \"),_c('div',{staticClass:\"setting-item\"},[_c('h2',[_vm._v(_vm._s(_vm.$t('settings.avatar')))]),_vm._v(\" \"),_c('p',{staticClass:\"visibility-notice\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.avatar_size_instruction'))+\"\\n \")]),_vm._v(\" \"),_c('div',{staticClass:\"current-avatar-container\"},[_c('img',{staticClass:\"current-avatar\",attrs:{\"src\":_vm.user.profile_image_url_original}}),_vm._v(\" \"),(!_vm.isDefaultAvatar && _vm.pickAvatarBtnVisible)?_c('FAIcon',{staticClass:\"reset-button\",attrs:{\"title\":_vm.$t('settings.reset_avatar'),\"icon\":\"times\",\"type\":\"button\"},on:{\"click\":_vm.resetAvatar}}):_vm._e()],1),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.$t('settings.set_new_avatar')))]),_vm._v(\" \"),_c('button',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.pickAvatarBtnVisible),expression:\"pickAvatarBtnVisible\"}],staticClass:\"button-default btn\",attrs:{\"id\":\"pick-avatar\",\"type\":\"button\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.upload_a_photo'))+\"\\n \")]),_vm._v(\" \"),_c('image-cropper',{attrs:{\"trigger\":\"#pick-avatar\",\"submit-handler\":_vm.submitAvatar},on:{\"open\":function($event){_vm.pickAvatarBtnVisible=false},\"close\":function($event){_vm.pickAvatarBtnVisible=true}}})],1),_vm._v(\" \"),_c('div',{staticClass:\"setting-item\"},[_c('h2',[_vm._v(_vm._s(_vm.$t('settings.profile_banner')))]),_vm._v(\" \"),_c('div',{staticClass:\"banner-background-preview\"},[_c('img',{attrs:{\"src\":_vm.user.cover_photo}}),_vm._v(\" \"),(!_vm.isDefaultBanner)?_c('FAIcon',{staticClass:\"reset-button\",attrs:{\"title\":_vm.$t('settings.reset_profile_banner'),\"icon\":\"times\",\"type\":\"button\"},on:{\"click\":_vm.resetBanner}}):_vm._e()],1),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.$t('settings.set_new_profile_banner')))]),_vm._v(\" \"),(_vm.bannerPreview)?_c('img',{staticClass:\"banner-background-preview\",attrs:{\"src\":_vm.bannerPreview}}):_vm._e(),_vm._v(\" \"),_c('div',[_c('input',{attrs:{\"type\":\"file\"},on:{\"change\":function($event){return _vm.uploadFile('banner', $event)}}})]),_vm._v(\" \"),(_vm.bannerUploading)?_c('FAIcon',{staticClass:\"uploading\",attrs:{\"spin\":\"\",\"icon\":\"circle-notch\"}}):(_vm.bannerPreview)?_c('button',{staticClass:\"btn button-default\",on:{\"click\":function($event){return _vm.submitBanner(_vm.banner)}}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.save'))+\"\\n \")]):_vm._e()],1),_vm._v(\" \"),_c('div',{staticClass:\"setting-item\"},[_c('h2',[_vm._v(_vm._s(_vm.$t('settings.profile_background')))]),_vm._v(\" \"),_c('div',{staticClass:\"banner-background-preview\"},[_c('img',{attrs:{\"src\":_vm.user.background_image}}),_vm._v(\" \"),(!_vm.isDefaultBackground)?_c('FAIcon',{staticClass:\"reset-button\",attrs:{\"title\":_vm.$t('settings.reset_profile_background'),\"icon\":\"times\",\"type\":\"button\"},on:{\"click\":_vm.resetBackground}}):_vm._e()],1),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.$t('settings.set_new_profile_background')))]),_vm._v(\" \"),(_vm.backgroundPreview)?_c('img',{staticClass:\"banner-background-preview\",attrs:{\"src\":_vm.backgroundPreview}}):_vm._e(),_vm._v(\" \"),_c('div',[_c('input',{attrs:{\"type\":\"file\"},on:{\"change\":function($event){return _vm.uploadFile('background', $event)}}})]),_vm._v(\" \"),(_vm.backgroundUploading)?_c('FAIcon',{staticClass:\"uploading\",attrs:{\"spin\":\"\",\"icon\":\"circle-notch\"}}):(_vm.backgroundPreview)?_c('button',{staticClass:\"btn button-default\",on:{\"click\":function($event){return _vm.submitBackground(_vm.background)}}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.save'))+\"\\n \")]):_vm._e()],1)])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","\n\n\n","/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./interface_language_switcher.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./interface_language_switcher.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-72cb1bd2\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./interface_language_switcher.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('label',{attrs:{\"for\":\"interface-language-switcher\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.interfaceLanguage'))+\"\\n \")]),_vm._v(\" \"),_c('Select',{attrs:{\"id\":\"interface-language-switcher\"},model:{value:(_vm.language),callback:function ($$v) {_vm.language=$$v},expression:\"language\"}},_vm._l((_vm.languages),function(lang){return _c('option',{key:lang.code,domProps:{\"value\":lang.code}},[_vm._v(\"\\n \"+_vm._s(lang.name)+\"\\n \")])}),0)],1)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import BooleanSetting from '../helpers/boolean_setting.vue'\nimport ChoiceSetting from '../helpers/choice_setting.vue'\nimport InterfaceLanguageSwitcher from 'src/components/interface_language_switcher/interface_language_switcher.vue'\n\nimport SharedComputedObject from '../helpers/shared_computed_object.js'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faGlobe\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faGlobe\n)\n\nconst GeneralTab = {\n data () {\n return {\n subjectLineOptions: ['email', 'noop', 'masto'].map(mode => ({\n key: mode,\n value: mode,\n label: this.$t(`settings.subject_line_${mode === 'masto' ? 'mastodon' : mode}`)\n })),\n loopSilentAvailable:\n // Firefox\n Object.getOwnPropertyDescriptor(HTMLVideoElement.prototype, 'mozHasAudio') ||\n // Chrome-likes\n Object.getOwnPropertyDescriptor(HTMLMediaElement.prototype, 'webkitAudioDecodedByteCount') ||\n // Future spec, still not supported in Nightly 63 as of 08/2018\n Object.getOwnPropertyDescriptor(HTMLMediaElement.prototype, 'audioTracks')\n }\n },\n components: {\n BooleanSetting,\n ChoiceSetting,\n InterfaceLanguageSwitcher\n },\n computed: {\n postFormats () {\n return this.$store.state.instance.postFormats || []\n },\n postContentOptions () {\n return this.postFormats.map(format => ({\n key: format,\n value: format,\n label: this.$t(`post_status.content_type[\"${format}\"]`)\n }))\n },\n instanceSpecificPanelPresent () { return this.$store.state.instance.showInstanceSpecificPanel },\n instanceWallpaperUsed () {\n return this.$store.state.instance.background &&\n !this.$store.state.users.currentUser.background_image\n },\n instanceShoutboxPresent () { return this.$store.state.instance.shoutAvailable },\n ...SharedComputedObject()\n }\n}\n\nexport default GeneralTab\n","/* script */\nexport * from \"!!babel-loader!./general_tab.js\"\nimport __vue_script__ from \"!!babel-loader!./general_tab.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-21a572b4\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../../node_modules/vue-loader/lib/selector?type=template&index=0!./general_tab.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"label\":_vm.$t('settings.general')}},[_c('div',{staticClass:\"setting-item\"},[_c('h2',[_vm._v(_vm._s(_vm.$t('settings.interface')))]),_vm._v(\" \"),_c('ul',{staticClass:\"setting-list\"},[_c('li',[_c('interface-language-switcher')],1),_vm._v(\" \"),(_vm.instanceSpecificPanelPresent)?_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"hideISP\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.hide_isp'))+\"\\n \")])],1):_vm._e(),_vm._v(\" \"),_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"sidebarRight\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.right_sidebar'))+\"\\n \")])],1),_vm._v(\" \"),(_vm.instanceWallpaperUsed)?_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"hideInstanceWallpaper\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.hide_wallpaper'))+\"\\n \")])],1):_vm._e(),_vm._v(\" \"),(_vm.instanceShoutboxPresent)?_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"hideShoutbox\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.hide_shoutbox'))+\"\\n \")])],1):_vm._e()])]),_vm._v(\" \"),_c('div',{staticClass:\"setting-item\"},[_c('h2',[_vm._v(_vm._s(_vm.$t('nav.timeline')))]),_vm._v(\" \"),_c('ul',{staticClass:\"setting-list\"},[_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"hideMutedPosts\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.hide_muted_posts'))+\"\\n \")])],1),_vm._v(\" \"),_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"collapseMessageWithSubject\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.collapse_subject'))+\"\\n \")])],1),_vm._v(\" \"),_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"streaming\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.streaming'))+\"\\n \")]),_vm._v(\" \"),_c('ul',{staticClass:\"setting-list suboptions\",class:[{disabled: !_vm.streaming}]},[_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"pauseOnUnfocused\",\"disabled\":!_vm.streaming}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.pause_on_unfocused'))+\"\\n \")])],1)])],1),_vm._v(\" \"),_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"useStreamingApi\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.useStreamingApi'))+\"\\n \"),_c('br'),_vm._v(\" \"),_c('small',[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.useStreamingApiWarning'))+\"\\n \")])])],1),_vm._v(\" \"),_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"emojiReactionsOnTimeline\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.emoji_reactions_on_timeline'))+\"\\n \")])],1),_vm._v(\" \"),_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"virtualScrolling\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.virtual_scrolling'))+\"\\n \")])],1)])]),_vm._v(\" \"),_c('div',{staticClass:\"setting-item\"},[_c('h2',[_vm._v(_vm._s(_vm.$t('settings.composing')))]),_vm._v(\" \"),_c('ul',{staticClass:\"setting-list\"},[_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"scopeCopy\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.scope_copy'))+\"\\n \")])],1),_vm._v(\" \"),_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"alwaysShowSubjectInput\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.subject_input_always_show'))+\"\\n \")])],1),_vm._v(\" \"),_c('li',[_c('ChoiceSetting',{attrs:{\"id\":\"subjectLineBehavior\",\"path\":\"subjectLineBehavior\",\"options\":_vm.subjectLineOptions}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.subject_line_behavior'))+\"\\n \")])],1),_vm._v(\" \"),(_vm.postFormats.length > 0)?_c('li',[_c('ChoiceSetting',{attrs:{\"id\":\"postContentType\",\"path\":\"postContentType\",\"options\":_vm.postContentOptions}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.post_status_content_type'))+\"\\n \")])],1):_vm._e(),_vm._v(\" \"),_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"minimalScopesMode\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.minimal_scopes_mode'))+\"\\n \")])],1),_vm._v(\" \"),_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"sensitiveByDefault\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.sensitive_by_default'))+\"\\n \")])],1),_vm._v(\" \"),_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"alwaysShowNewPostButton\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.always_show_post_button'))+\"\\n \")])],1),_vm._v(\" \"),_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"autohideFloatingPostButton\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.autohide_floating_post_button'))+\"\\n \")])],1),_vm._v(\" \"),_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"padEmoji\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.pad_emoji'))+\"\\n \")])],1)])]),_vm._v(\" \"),_c('div',{staticClass:\"setting-item\"},[_c('h2',[_vm._v(_vm._s(_vm.$t('settings.attachments')))]),_vm._v(\" \"),_c('ul',{staticClass:\"setting-list\"},[_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"hideAttachments\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.hide_attachments_in_tl'))+\"\\n \")])],1),_vm._v(\" \"),_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"hideAttachmentsInConv\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.hide_attachments_in_convo'))+\"\\n \")])],1),_vm._v(\" \"),_c('li',[_c('label',{attrs:{\"for\":\"maxThumbnails\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.max_thumbnails'))+\"\\n \")]),_vm._v(\" \"),_c('input',{staticClass:\"number-input\",attrs:{\"id\":\"maxThumbnails\",\"path.number\":\"maxThumbnails\",\"type\":\"number\",\"min\":\"0\",\"step\":\"1\"}})]),_vm._v(\" \"),_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"hideNsfw\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.nsfw_clickthrough'))+\"\\n \")])],1),_vm._v(\" \"),_c('ul',{staticClass:\"setting-list suboptions\"},[_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"preloadImage\",\"disabled\":!_vm.hideNsfw}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.preload_images'))+\"\\n \")])],1),_vm._v(\" \"),_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"useOneClickNsfw\",\"disabled\":!_vm.hideNsfw}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.use_one_click_nsfw'))+\"\\n \")])],1)]),_vm._v(\" \"),_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"stopGifs\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.stop_gifs'))+\"\\n \")])],1),_vm._v(\" \"),_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"loopVideo\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.loop_video'))+\"\\n \")]),_vm._v(\" \"),_c('ul',{staticClass:\"setting-list suboptions\",class:[{disabled: !_vm.streaming}]},[_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"loopVideoSilentOnly\",\"disabled\":!_vm.loopVideo || !_vm.loopSilentAvailable}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.loop_video_silent_only'))+\"\\n \")]),_vm._v(\" \"),(!_vm.loopSilentAvailable)?_c('div',{staticClass:\"unavailable\"},[_c('FAIcon',{attrs:{\"icon\":\"globe\"}}),_vm._v(\"! \"+_vm._s(_vm.$t('settings.limited_availability'))+\"\\n \")],1):_vm._e()],1)])],1),_vm._v(\" \"),_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"playVideosInModal\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.play_videos_in_modal'))+\"\\n \")])],1),_vm._v(\" \"),_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"useContainFit\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.use_contain_fit'))+\"\\n \")])],1)])]),_vm._v(\" \"),_c('div',{staticClass:\"setting-item\"},[_c('h2',[_vm._v(_vm._s(_vm.$t('settings.notifications')))]),_vm._v(\" \"),_c('ul',{staticClass:\"setting-list\"},[_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"webPushNotifications\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.enable_web_push_notifications'))+\"\\n \")])],1)])]),_vm._v(\" \"),_c('div',{staticClass:\"setting-item\"},[_c('h2',[_vm._v(_vm._s(_vm.$t('settings.fun')))]),_vm._v(\" \"),_c('ul',{staticClass:\"setting-list\"},[_c('li',[_c('BooleanSetting',{attrs:{\"path\":\"greentext\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.greentext'))+\"\\n \")])],1)])])])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import { extractCommit } from 'src/services/version/version.service'\n\nconst pleromaFeCommitUrl = 'https://git.pleroma.social/pleroma/pleroma-fe/commit/'\nconst pleromaBeCommitUrl = 'https://git.pleroma.social/pleroma/pleroma/commit/'\n\nconst VersionTab = {\n data () {\n const instance = this.$store.state.instance\n return {\n backendVersion: instance.backendVersion,\n frontendVersion: instance.frontendVersion\n }\n },\n computed: {\n frontendVersionLink () {\n return pleromaFeCommitUrl + this.frontendVersion\n },\n backendVersionLink () {\n return pleromaBeCommitUrl + extractCommit(this.backendVersion)\n }\n }\n}\n\nexport default VersionTab\n","\nexport const extractCommit = versionString => {\n const regex = /-g(\\w+)/i\n const matches = versionString.match(regex)\n return matches ? matches[1] : ''\n}\n","/* script */\nexport * from \"!!babel-loader!./version_tab.js\"\nimport __vue_script__ from \"!!babel-loader!./version_tab.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-ce257d26\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../../node_modules/vue-loader/lib/selector?type=template&index=0!./version_tab.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"label\":_vm.$t('settings.version.title')}},[_c('div',{staticClass:\"setting-item\"},[_c('ul',{staticClass:\"setting-list\"},[_c('li',[_c('p',[_vm._v(_vm._s(_vm.$t('settings.version.backend_version')))]),_vm._v(\" \"),_c('ul',{staticClass:\"option-list\"},[_c('li',[_c('a',{attrs:{\"href\":_vm.backendVersionLink,\"target\":\"_blank\"}},[_vm._v(_vm._s(_vm.backendVersion))])])])]),_vm._v(\" \"),_c('li',[_c('p',[_vm._v(_vm._s(_vm.$t('settings.version.frontend_version')))]),_vm._v(\" \"),_c('ul',{staticClass:\"option-list\"},[_c('li',[_c('a',{attrs:{\"href\":_vm.frontendVersionLink,\"target\":\"_blank\"}},[_vm._v(_vm._s(_vm.frontendVersion))])])])])])])])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","\n\n\n\n\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!./color_input.scss\")\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=1!./color_input.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./color_input.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./color_input.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-77e407b6\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./color_input.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"color-input style-control\",class:{ disabled: !_vm.present || _vm.disabled }},[_c('label',{staticClass:\"label\",attrs:{\"for\":_vm.name}},[_vm._v(\"\\n \"+_vm._s(_vm.label)+\"\\n \")]),_vm._v(\" \"),(typeof _vm.fallback !== 'undefined' && _vm.showOptionalTickbox)?_c('Checkbox',{staticClass:\"opt\",attrs:{\"checked\":_vm.present,\"disabled\":_vm.disabled},on:{\"change\":function($event){return _vm.$emit('input', typeof _vm.value === 'undefined' ? _vm.fallback : undefined)}}}):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"input color-input-field\"},[_c('input',{staticClass:\"textColor unstyled\",attrs:{\"id\":_vm.name + '-t',\"type\":\"text\",\"disabled\":!_vm.present || _vm.disabled},domProps:{\"value\":_vm.value || _vm.fallback},on:{\"input\":function($event){return _vm.$emit('input', $event.target.value)}}}),_vm._v(\" \"),(_vm.validColor)?_c('input',{staticClass:\"nativeColor unstyled\",attrs:{\"id\":_vm.name,\"type\":\"color\",\"disabled\":!_vm.present || _vm.disabled},domProps:{\"value\":_vm.value || _vm.fallback},on:{\"input\":function($event){return _vm.$emit('input', $event.target.value)}}}):_vm._e(),_vm._v(\" \"),(_vm.transparentColor)?_c('div',{staticClass:\"transparentIndicator\"}):_vm._e(),_vm._v(\" \"),(_vm.computedColor)?_c('div',{staticClass:\"computedIndicator\",style:({backgroundColor: _vm.fallback})}):_vm._e()])],1)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./range_input.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./range_input.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-6a3c1a26\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./range_input.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","\n\n\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"range-control style-control\",class:{ disabled: !_vm.present || _vm.disabled }},[_c('label',{staticClass:\"label\",attrs:{\"for\":_vm.name}},[_vm._v(\"\\n \"+_vm._s(_vm.label)+\"\\n \")]),_vm._v(\" \"),(typeof _vm.fallback !== 'undefined')?_c('input',{staticClass:\"opt\",attrs:{\"id\":_vm.name + '-o',\"type\":\"checkbox\"},domProps:{\"checked\":_vm.present},on:{\"input\":function($event){return _vm.$emit('input', !_vm.present ? _vm.fallback : undefined)}}}):_vm._e(),_vm._v(\" \"),(typeof _vm.fallback !== 'undefined')?_c('label',{staticClass:\"opt-l\",attrs:{\"for\":_vm.name + '-o'}}):_vm._e(),_vm._v(\" \"),_c('input',{staticClass:\"input-number\",attrs:{\"id\":_vm.name,\"type\":\"range\",\"disabled\":!_vm.present || _vm.disabled,\"max\":_vm.max || _vm.hardMax || 100,\"min\":_vm.min || _vm.hardMin || 0,\"step\":_vm.step || 1},domProps:{\"value\":_vm.value || _vm.fallback},on:{\"input\":function($event){return _vm.$emit('input', $event.target.value)}}}),_vm._v(\" \"),_c('input',{staticClass:\"input-number\",attrs:{\"id\":_vm.name,\"type\":\"number\",\"disabled\":!_vm.present || _vm.disabled,\"max\":_vm.hardMax,\"min\":_vm.hardMin,\"step\":_vm.step || 1},domProps:{\"value\":_vm.value || _vm.fallback},on:{\"input\":function($event){return _vm.$emit('input', $event.target.value)}}})])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","\n\n\n","/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./opacity_input.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./opacity_input.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-3b48fa39\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./opacity_input.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"opacity-control style-control\",class:{ disabled: !_vm.present || _vm.disabled }},[_c('label',{staticClass:\"label\",attrs:{\"for\":_vm.name}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.common.opacity'))+\"\\n \")]),_vm._v(\" \"),(typeof _vm.fallback !== 'undefined')?_c('Checkbox',{staticClass:\"opt\",attrs:{\"checked\":_vm.present,\"disabled\":_vm.disabled},on:{\"change\":function($event){return _vm.$emit('input', !_vm.present ? _vm.fallback : undefined)}}}):_vm._e(),_vm._v(\" \"),_c('input',{staticClass:\"input-number\",attrs:{\"id\":_vm.name,\"type\":\"number\",\"disabled\":!_vm.present || _vm.disabled,\"max\":\"1\",\"min\":\"0\",\"step\":\".05\"},domProps:{\"value\":_vm.value || _vm.fallback},on:{\"input\":function($event){return _vm.$emit('input', $event.target.value)}}})],1)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import ColorInput from '../color_input/color_input.vue'\nimport OpacityInput from '../opacity_input/opacity_input.vue'\nimport Select from '../select/select.vue'\nimport { getCssShadow } from '../../services/style_setter/style_setter.js'\nimport { hex2rgb } from '../../services/color_convert/color_convert.js'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faTimes,\n faChevronDown,\n faChevronUp,\n faPlus\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faChevronDown,\n faChevronUp,\n faTimes,\n faPlus\n)\n\nconst toModel = (object = {}) => ({\n x: 0,\n y: 0,\n blur: 0,\n spread: 0,\n inset: false,\n color: '#000000',\n alpha: 1,\n ...object\n})\n\nexport default {\n // 'Value' and 'Fallback' can be undefined, but if they are\n // initially vue won't detect it when they become something else\n // therefore i'm using \"ready\" which should be passed as true when\n // data becomes available\n props: [\n 'value', 'fallback', 'ready'\n ],\n data () {\n return {\n selectedId: 0,\n // TODO there are some bugs regarding display of array (it's not getting updated when deleting for some reason)\n cValue: (this.value || this.fallback || []).map(toModel)\n }\n },\n components: {\n ColorInput,\n OpacityInput,\n Select\n },\n methods: {\n add () {\n this.cValue.push(toModel(this.selected))\n this.selectedId = this.cValue.length - 1\n },\n del () {\n this.cValue.splice(this.selectedId, 1)\n this.selectedId = this.cValue.length === 0 ? undefined : Math.max(this.selectedId - 1, 0)\n },\n moveUp () {\n const movable = this.cValue.splice(this.selectedId, 1)[0]\n this.cValue.splice(this.selectedId - 1, 0, movable)\n this.selectedId -= 1\n },\n moveDn () {\n const movable = this.cValue.splice(this.selectedId, 1)[0]\n this.cValue.splice(this.selectedId + 1, 0, movable)\n this.selectedId += 1\n }\n },\n beforeUpdate () {\n this.cValue = this.value || this.fallback\n },\n computed: {\n anyShadows () {\n return this.cValue.length > 0\n },\n anyShadowsFallback () {\n return this.fallback.length > 0\n },\n selected () {\n if (this.ready && this.anyShadows) {\n return this.cValue[this.selectedId]\n } else {\n return toModel({})\n }\n },\n currentFallback () {\n if (this.ready && this.anyShadowsFallback) {\n return this.fallback[this.selectedId]\n } else {\n return toModel({})\n }\n },\n moveUpValid () {\n return this.ready && this.selectedId > 0\n },\n moveDnValid () {\n return this.ready && this.selectedId < this.cValue.length - 1\n },\n present () {\n return this.ready &&\n typeof this.cValue[this.selectedId] !== 'undefined' &&\n !this.usingFallback\n },\n usingFallback () {\n return typeof this.value === 'undefined'\n },\n rgb () {\n return hex2rgb(this.selected.color)\n },\n style () {\n return this.ready ? {\n boxShadow: getCssShadow(this.fallback)\n } : {}\n }\n }\n}\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./shadow_control.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./shadow_control.js\"\nimport __vue_script__ from \"!!babel-loader!./shadow_control.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-ee55a534\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./shadow_control.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"shadow-control\",class:{ disabled: !_vm.present }},[_c('div',{staticClass:\"shadow-preview-container\"},[_c('div',{staticClass:\"y-shift-control\",attrs:{\"disabled\":!_vm.present}},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selected.y),expression:\"selected.y\"}],staticClass:\"input-number\",attrs:{\"disabled\":!_vm.present,\"type\":\"number\"},domProps:{\"value\":(_vm.selected.y)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.selected, \"y\", $event.target.value)}}}),_vm._v(\" \"),_c('div',{staticClass:\"wrap\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selected.y),expression:\"selected.y\"}],staticClass:\"input-range\",attrs:{\"disabled\":!_vm.present,\"type\":\"range\",\"max\":\"20\",\"min\":\"-20\"},domProps:{\"value\":(_vm.selected.y)},on:{\"__r\":function($event){return _vm.$set(_vm.selected, \"y\", $event.target.value)}}})])]),_vm._v(\" \"),_c('div',{staticClass:\"preview-window\"},[_c('div',{staticClass:\"preview-block\",style:(_vm.style)})]),_vm._v(\" \"),_c('div',{staticClass:\"x-shift-control\",attrs:{\"disabled\":!_vm.present}},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selected.x),expression:\"selected.x\"}],staticClass:\"input-number\",attrs:{\"disabled\":!_vm.present,\"type\":\"number\"},domProps:{\"value\":(_vm.selected.x)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.selected, \"x\", $event.target.value)}}}),_vm._v(\" \"),_c('div',{staticClass:\"wrap\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selected.x),expression:\"selected.x\"}],staticClass:\"input-range\",attrs:{\"disabled\":!_vm.present,\"type\":\"range\",\"max\":\"20\",\"min\":\"-20\"},domProps:{\"value\":(_vm.selected.x)},on:{\"__r\":function($event){return _vm.$set(_vm.selected, \"x\", $event.target.value)}}})])])]),_vm._v(\" \"),_c('div',{staticClass:\"shadow-tweak\"},[_c('div',{staticClass:\"id-control style-control\",attrs:{\"disabled\":_vm.usingFallback}},[_c('Select',{staticClass:\"shadow-switcher\",attrs:{\"id\":\"shadow-switcher\",\"disabled\":!_vm.ready || _vm.usingFallback},model:{value:(_vm.selectedId),callback:function ($$v) {_vm.selectedId=$$v},expression:\"selectedId\"}},_vm._l((_vm.cValue),function(shadow,index){return _c('option',{key:index,domProps:{\"value\":index}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.shadows.shadow_id', { value: index }))+\"\\n \")])}),0),_vm._v(\" \"),_c('button',{staticClass:\"btn button-default\",attrs:{\"disabled\":!_vm.ready || !_vm.present},on:{\"click\":_vm.del}},[_c('FAIcon',{attrs:{\"fixed-width\":\"\",\"icon\":\"times\"}})],1),_vm._v(\" \"),_c('button',{staticClass:\"btn button-default\",attrs:{\"disabled\":!_vm.moveUpValid},on:{\"click\":_vm.moveUp}},[_c('FAIcon',{attrs:{\"fixed-width\":\"\",\"icon\":\"chevron-up\"}})],1),_vm._v(\" \"),_c('button',{staticClass:\"btn button-default\",attrs:{\"disabled\":!_vm.moveDnValid},on:{\"click\":_vm.moveDn}},[_c('FAIcon',{attrs:{\"fixed-width\":\"\",\"icon\":\"chevron-down\"}})],1),_vm._v(\" \"),_c('button',{staticClass:\"btn button-default\",attrs:{\"disabled\":_vm.usingFallback},on:{\"click\":_vm.add}},[_c('FAIcon',{attrs:{\"fixed-width\":\"\",\"icon\":\"plus\"}})],1)],1),_vm._v(\" \"),_c('div',{staticClass:\"inset-control style-control\",attrs:{\"disabled\":!_vm.present}},[_c('label',{staticClass:\"label\",attrs:{\"for\":\"inset\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.shadows.inset'))+\"\\n \")]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selected.inset),expression:\"selected.inset\"}],staticClass:\"input-inset\",attrs:{\"id\":\"inset\",\"disabled\":!_vm.present,\"name\":\"inset\",\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.selected.inset)?_vm._i(_vm.selected.inset,null)>-1:(_vm.selected.inset)},on:{\"change\":function($event){var $$a=_vm.selected.inset,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.$set(_vm.selected, \"inset\", $$a.concat([$$v])))}else{$$i>-1&&(_vm.$set(_vm.selected, \"inset\", $$a.slice(0,$$i).concat($$a.slice($$i+1))))}}else{_vm.$set(_vm.selected, \"inset\", $$c)}}}}),_vm._v(\" \"),_c('label',{staticClass:\"checkbox-label\",attrs:{\"for\":\"inset\"}})]),_vm._v(\" \"),_c('div',{staticClass:\"blur-control style-control\",attrs:{\"disabled\":!_vm.present}},[_c('label',{staticClass:\"label\",attrs:{\"for\":\"spread\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.shadows.blur'))+\"\\n \")]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selected.blur),expression:\"selected.blur\"}],staticClass:\"input-range\",attrs:{\"id\":\"blur\",\"disabled\":!_vm.present,\"name\":\"blur\",\"type\":\"range\",\"max\":\"20\",\"min\":\"0\"},domProps:{\"value\":(_vm.selected.blur)},on:{\"__r\":function($event){return _vm.$set(_vm.selected, \"blur\", $event.target.value)}}}),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selected.blur),expression:\"selected.blur\"}],staticClass:\"input-number\",attrs:{\"disabled\":!_vm.present,\"type\":\"number\",\"min\":\"0\"},domProps:{\"value\":(_vm.selected.blur)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.selected, \"blur\", $event.target.value)}}})]),_vm._v(\" \"),_c('div',{staticClass:\"spread-control style-control\",attrs:{\"disabled\":!_vm.present}},[_c('label',{staticClass:\"label\",attrs:{\"for\":\"spread\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.shadows.spread'))+\"\\n \")]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selected.spread),expression:\"selected.spread\"}],staticClass:\"input-range\",attrs:{\"id\":\"spread\",\"disabled\":!_vm.present,\"name\":\"spread\",\"type\":\"range\",\"max\":\"20\",\"min\":\"-20\"},domProps:{\"value\":(_vm.selected.spread)},on:{\"__r\":function($event){return _vm.$set(_vm.selected, \"spread\", $event.target.value)}}}),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selected.spread),expression:\"selected.spread\"}],staticClass:\"input-number\",attrs:{\"disabled\":!_vm.present,\"type\":\"number\"},domProps:{\"value\":(_vm.selected.spread)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.selected, \"spread\", $event.target.value)}}})]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"disabled\":!_vm.present,\"label\":_vm.$t('settings.style.common.color'),\"fallback\":_vm.currentFallback.color,\"show-optional-tickbox\":false,\"name\":\"shadow\"},model:{value:(_vm.selected.color),callback:function ($$v) {_vm.$set(_vm.selected, \"color\", $$v)},expression:\"selected.color\"}}),_vm._v(\" \"),_c('OpacityInput',{attrs:{\"disabled\":!_vm.present},model:{value:(_vm.selected.alpha),callback:function ($$v) {_vm.$set(_vm.selected, \"alpha\", $$v)},expression:\"selected.alpha\"}}),_vm._v(\" \"),_c('i18n',{attrs:{\"path\":\"settings.style.shadows.hintV3\",\"tag\":\"p\"}},[_c('code',[_vm._v(\"--variable,mod\")])])],1)])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import { set } from 'vue'\nimport Select from '../select/select.vue'\n\nexport default {\n components: {\n Select\n },\n props: [\n 'name', 'label', 'value', 'fallback', 'options', 'no-inherit'\n ],\n data () {\n return {\n lValue: this.value,\n availableOptions: [\n this.noInherit ? '' : 'inherit',\n 'custom',\n ...(this.options || []),\n 'serif',\n 'monospace',\n 'sans-serif'\n ].filter(_ => _)\n }\n },\n beforeUpdate () {\n this.lValue = this.value\n },\n computed: {\n present () {\n return typeof this.lValue !== 'undefined'\n },\n dValue () {\n return this.lValue || this.fallback || {}\n },\n family: {\n get () {\n return this.dValue.family\n },\n set (v) {\n set(this.lValue, 'family', v)\n this.$emit('input', this.lValue)\n }\n },\n isCustom () {\n return this.preset === 'custom'\n },\n preset: {\n get () {\n if (this.family === 'serif' ||\n this.family === 'sans-serif' ||\n this.family === 'monospace' ||\n this.family === 'inherit') {\n return this.family\n } else {\n return 'custom'\n }\n },\n set (v) {\n this.family = v === 'custom' ? '' : v\n }\n }\n }\n}\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./font_control.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./font_control.js\"\nimport __vue_script__ from \"!!babel-loader!./font_control.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-132a42de\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./font_control.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"font-control style-control\",class:{ custom: _vm.isCustom }},[_c('label',{staticClass:\"label\",attrs:{\"for\":_vm.preset === 'custom' ? _vm.name : _vm.name + '-font-switcher'}},[_vm._v(\"\\n \"+_vm._s(_vm.label)+\"\\n \")]),_vm._v(\" \"),(typeof _vm.fallback !== 'undefined')?_c('input',{staticClass:\"opt exlcude-disabled\",attrs:{\"id\":_vm.name + '-o',\"type\":\"checkbox\"},domProps:{\"checked\":_vm.present},on:{\"input\":function($event){return _vm.$emit('input', typeof _vm.value === 'undefined' ? _vm.fallback : undefined)}}}):_vm._e(),_vm._v(\" \"),(typeof _vm.fallback !== 'undefined')?_c('label',{staticClass:\"opt-l\",attrs:{\"for\":_vm.name + '-o'}}):_vm._e(),_vm._v(\" \"),_c('Select',{staticClass:\"font-switcher\",attrs:{\"id\":_vm.name + '-font-switcher',\"disabled\":!_vm.present},model:{value:(_vm.preset),callback:function ($$v) {_vm.preset=$$v},expression:\"preset\"}},_vm._l((_vm.availableOptions),function(option){return _c('option',{key:option,domProps:{\"value\":option}},[_vm._v(\"\\n \"+_vm._s(option === 'custom' ? _vm.$t('settings.style.fonts.custom') : option)+\"\\n \")])}),0),_vm._v(\" \"),(_vm.isCustom)?_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.family),expression:\"family\"}],staticClass:\"custom-font\",attrs:{\"id\":_vm.name,\"type\":\"text\"},domProps:{\"value\":(_vm.family)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.family=$event.target.value}}}):_vm._e()],1)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","\n\n\n\n\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./contrast_ratio.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./contrast_ratio.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./contrast_ratio.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-6d90b7c4\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./contrast_ratio.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.contrast)?_c('span',{staticClass:\"contrast-ratio\"},[_c('span',{staticClass:\"rating\",attrs:{\"title\":_vm.hint}},[(_vm.contrast.aaa)?_c('span',[_c('FAIcon',{attrs:{\"icon\":\"thumbs-up\"}})],1):_vm._e(),_vm._v(\" \"),(!_vm.contrast.aaa && _vm.contrast.aa)?_c('span',[_c('FAIcon',{attrs:{\"icon\":\"adjust\"}})],1):_vm._e(),_vm._v(\" \"),(!_vm.contrast.aaa && !_vm.contrast.aa)?_c('span',[_c('FAIcon',{attrs:{\"icon\":\"exclamation-triangle\"}})],1):_vm._e()]),_vm._v(\" \"),(_vm.contrast && _vm.large)?_c('span',{staticClass:\"rating\",attrs:{\"title\":_vm.hint_18pt}},[(_vm.contrast.laaa)?_c('span',[_c('FAIcon',{attrs:{\"icon\":\"thumbs-up\"}})],1):_vm._e(),_vm._v(\" \"),(!_vm.contrast.laaa && _vm.contrast.laa)?_c('span',[_c('FAIcon',{attrs:{\"icon\":\"adjust\"}})],1):_vm._e(),_vm._v(\" \"),(!_vm.contrast.laaa && !_vm.contrast.laa)?_c('span',[_c('FAIcon',{attrs:{\"icon\":\"exclamation-triangle\"}})],1):_vm._e()]):_vm._e()]):_vm._e()}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","\n\n\n\n\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./preview.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!../../../../../node_modules/vue-loader/lib/selector?type=script&index=0!./preview.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../../../node_modules/vue-loader/lib/selector?type=script&index=0!./preview.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-1d0bb165\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../../../node_modules/vue-loader/lib/selector?type=template&index=0!./preview.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"preview-container\"},[_c('div',{staticClass:\"underlay underlay-preview\"}),_vm._v(\" \"),_c('div',{staticClass:\"panel dummy\"},[_c('div',{staticClass:\"panel-heading\"},[_c('div',{staticClass:\"title\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.preview.header'))+\"\\n \"),_c('span',{staticClass:\"badge badge-notification\"},[_vm._v(\"\\n 99\\n \")])]),_vm._v(\" \"),_c('span',{staticClass:\"faint\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.preview.header_faint'))+\"\\n \")]),_vm._v(\" \"),_c('span',{staticClass:\"alert error\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.preview.error'))+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn button-default\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.preview.button'))+\"\\n \")])]),_vm._v(\" \"),_c('div',{staticClass:\"panel-body theme-preview-content\"},[_c('div',{staticClass:\"post\"},[_c('div',{staticClass:\"avatar still-image\"},[_vm._v(\"\\n ( ͡° ͜ʖ ͡°)\\n \")]),_vm._v(\" \"),_c('div',{staticClass:\"content\"},[_c('h4',[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.preview.content'))+\"\\n \")]),_vm._v(\" \"),_c('i18n',{attrs:{\"path\":\"settings.style.preview.text\"}},[_c('code',{staticStyle:{\"font-family\":\"var(--postCodeFont)\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.preview.mono'))+\"\\n \")]),_vm._v(\" \"),_c('a',{staticStyle:{\"color\":\"var(--link)\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.preview.link'))+\"\\n \")])]),_vm._v(\" \"),_c('div',{staticClass:\"icons\"},[_c('FAIcon',{staticClass:\"fa-scale-110 fa-old-padding\",staticStyle:{\"color\":\"var(--cBlue)\"},attrs:{\"fixed-width\":\"\",\"icon\":\"reply\"}}),_vm._v(\" \"),_c('FAIcon',{staticClass:\"fa-scale-110 fa-old-padding\",staticStyle:{\"color\":\"var(--cGreen)\"},attrs:{\"fixed-width\":\"\",\"icon\":\"retweet\"}}),_vm._v(\" \"),_c('FAIcon',{staticClass:\"fa-scale-110 fa-old-padding\",staticStyle:{\"color\":\"var(--cOrange)\"},attrs:{\"fixed-width\":\"\",\"icon\":\"star\"}}),_vm._v(\" \"),_c('FAIcon',{staticClass:\"fa-scale-110 fa-old-padding\",staticStyle:{\"color\":\"var(--cRed)\"},attrs:{\"fixed-width\":\"\",\"icon\":\"times\"}})],1)],1)]),_vm._v(\" \"),_c('div',{staticClass:\"after-post\"},[_c('div',{staticClass:\"avatar-alt\"},[_vm._v(\"\\n :^)\\n \")]),_vm._v(\" \"),_c('div',{staticClass:\"content\"},[_c('i18n',{staticClass:\"faint\",attrs:{\"path\":\"settings.style.preview.fine_print\",\"tag\":\"span\"}},[_c('a',{staticStyle:{\"color\":\"var(--faintLink)\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.preview.faint_link'))+\"\\n \")])])],1)]),_vm._v(\" \"),_c('div',{staticClass:\"separator\"}),_vm._v(\" \"),_c('span',{staticClass:\"alert error\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.preview.error'))+\"\\n \")]),_vm._v(\" \"),_c('input',{attrs:{\"type\":\"text\"},domProps:{\"value\":_vm.$t('settings.style.preview.input')}}),_vm._v(\" \"),_c('div',{staticClass:\"actions\"},[_c('span',{staticClass:\"checkbox\"},[_c('input',{attrs:{\"id\":\"preview_checkbox\",\"checked\":\"very yes\",\"type\":\"checkbox\"}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":\"preview_checkbox\"}},[_vm._v(_vm._s(_vm.$t('settings.style.preview.checkbox')))])]),_vm._v(\" \"),_c('button',{staticClass:\"btn button-default\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.preview.button'))+\"\\n \")])])])])])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import { set, delete as del } from 'vue'\nimport {\n rgb2hex,\n hex2rgb,\n getContrastRatioLayers\n} from 'src/services/color_convert/color_convert.js'\nimport {\n DEFAULT_SHADOWS,\n generateColors,\n generateShadows,\n generateRadii,\n generateFonts,\n composePreset,\n getThemes,\n shadows2to3,\n colors2to3\n} from 'src/services/style_setter/style_setter.js'\nimport {\n newImporter,\n newExporter\n} from 'src/services/export_import/export_import.js'\nimport {\n SLOT_INHERITANCE\n} from 'src/services/theme_data/pleromafe.js'\nimport {\n CURRENT_VERSION,\n OPACITIES,\n getLayers,\n getOpacitySlot\n} from 'src/services/theme_data/theme_data.service.js'\nimport ColorInput from 'src/components/color_input/color_input.vue'\nimport RangeInput from 'src/components/range_input/range_input.vue'\nimport OpacityInput from 'src/components/opacity_input/opacity_input.vue'\nimport ShadowControl from 'src/components/shadow_control/shadow_control.vue'\nimport FontControl from 'src/components/font_control/font_control.vue'\nimport ContrastRatio from 'src/components/contrast_ratio/contrast_ratio.vue'\nimport TabSwitcher from 'src/components/tab_switcher/tab_switcher.js'\nimport Checkbox from 'src/components/checkbox/checkbox.vue'\nimport Select from 'src/components/select/select.vue'\n\nimport Preview from './preview.vue'\n\n// List of color values used in v1\nconst v1OnlyNames = [\n 'bg',\n 'fg',\n 'text',\n 'link',\n 'cRed',\n 'cGreen',\n 'cBlue',\n 'cOrange'\n].map(_ => _ + 'ColorLocal')\n\nconst colorConvert = (color) => {\n if (color.startsWith('--') || color === 'transparent') {\n return color\n } else {\n return hex2rgb(color)\n }\n}\n\nexport default {\n data () {\n return {\n themeImporter: newImporter({\n validator: this.importValidator,\n onImport: this.onImport,\n onImportFailure: this.onImportFailure\n }),\n themeExporter: newExporter({\n filename: 'pleroma_theme',\n getExportedObject: () => this.exportedTheme\n }),\n availableStyles: [],\n selected: '',\n selectedTheme: this.$store.getters.mergedConfig.theme,\n themeWarning: undefined,\n tempImportFile: undefined,\n engineVersion: 0,\n\n previewShadows: {},\n previewColors: {},\n previewRadii: {},\n previewFonts: {},\n\n shadowsInvalid: true,\n colorsInvalid: true,\n radiiInvalid: true,\n\n keepColor: false,\n keepShadows: false,\n keepOpacity: false,\n keepRoundness: false,\n keepFonts: false,\n\n ...Object.keys(SLOT_INHERITANCE)\n .map(key => [key, ''])\n .reduce((acc, [key, val]) => ({ ...acc, [ key + 'ColorLocal' ]: val }), {}),\n\n ...Object.keys(OPACITIES)\n .map(key => [key, ''])\n .reduce((acc, [key, val]) => ({ ...acc, [ key + 'OpacityLocal' ]: val }), {}),\n\n shadowSelected: undefined,\n shadowsLocal: {},\n fontsLocal: {},\n\n btnRadiusLocal: '',\n inputRadiusLocal: '',\n checkboxRadiusLocal: '',\n panelRadiusLocal: '',\n avatarRadiusLocal: '',\n avatarAltRadiusLocal: '',\n attachmentRadiusLocal: '',\n tooltipRadiusLocal: '',\n chatMessageRadiusLocal: ''\n }\n },\n created () {\n const self = this\n\n getThemes()\n .then((promises) => {\n return Promise.all(\n Object.entries(promises)\n .map(([k, v]) => v.then(res => [k, res]))\n )\n })\n .then(themes => themes.reduce((acc, [k, v]) => {\n if (v) {\n return {\n ...acc,\n [k]: v\n }\n } else {\n return acc\n }\n }, {}))\n .then((themesComplete) => {\n self.availableStyles = themesComplete\n })\n },\n mounted () {\n this.loadThemeFromLocalStorage()\n if (typeof this.shadowSelected === 'undefined') {\n this.shadowSelected = this.shadowsAvailable[0]\n }\n },\n computed: {\n themeWarningHelp () {\n if (!this.themeWarning) return\n const t = this.$t\n const pre = 'settings.style.switcher.help.'\n const {\n origin,\n themeEngineVersion,\n type,\n noActionsPossible\n } = this.themeWarning\n if (origin === 'file') {\n // Loaded v2 theme from file\n if (themeEngineVersion === 2 && type === 'wrong_version') {\n return t(pre + 'v2_imported')\n }\n if (themeEngineVersion > CURRENT_VERSION) {\n return t(pre + 'future_version_imported') + ' ' +\n (\n noActionsPossible\n ? t(pre + 'snapshot_missing')\n : t(pre + 'snapshot_present')\n )\n }\n if (themeEngineVersion < CURRENT_VERSION) {\n return t(pre + 'future_version_imported') + ' ' +\n (\n noActionsPossible\n ? t(pre + 'snapshot_missing')\n : t(pre + 'snapshot_present')\n )\n }\n } else if (origin === 'localStorage') {\n if (type === 'snapshot_source_mismatch') {\n return t(pre + 'snapshot_source_mismatch')\n }\n // FE upgraded from v2\n if (themeEngineVersion === 2) {\n return t(pre + 'upgraded_from_v2')\n }\n // Admin downgraded FE\n if (themeEngineVersion > CURRENT_VERSION) {\n return t(pre + 'fe_downgraded') + ' ' +\n (\n noActionsPossible\n ? t(pre + 'migration_snapshot_ok')\n : t(pre + 'migration_snapshot_gone')\n )\n }\n // Admin upgraded FE\n if (themeEngineVersion < CURRENT_VERSION) {\n return t(pre + 'fe_upgraded') + ' ' +\n (\n noActionsPossible\n ? t(pre + 'migration_snapshot_ok')\n : t(pre + 'migration_snapshot_gone')\n )\n }\n }\n },\n selectedVersion () {\n return Array.isArray(this.selectedTheme) ? 1 : 2\n },\n currentColors () {\n return Object.keys(SLOT_INHERITANCE)\n .map(key => [key, this[key + 'ColorLocal']])\n .reduce((acc, [key, val]) => ({ ...acc, [ key ]: val }), {})\n },\n currentOpacity () {\n return Object.keys(OPACITIES)\n .map(key => [key, this[key + 'OpacityLocal']])\n .reduce((acc, [key, val]) => ({ ...acc, [ key ]: val }), {})\n },\n currentRadii () {\n return {\n btn: this.btnRadiusLocal,\n input: this.inputRadiusLocal,\n checkbox: this.checkboxRadiusLocal,\n panel: this.panelRadiusLocal,\n avatar: this.avatarRadiusLocal,\n avatarAlt: this.avatarAltRadiusLocal,\n tooltip: this.tooltipRadiusLocal,\n attachment: this.attachmentRadiusLocal,\n chatMessage: this.chatMessageRadiusLocal\n }\n },\n preview () {\n return composePreset(this.previewColors, this.previewRadii, this.previewShadows, this.previewFonts)\n },\n previewTheme () {\n if (!this.preview.theme.colors) return { colors: {}, opacity: {}, radii: {}, shadows: {}, fonts: {} }\n return this.preview.theme\n },\n // This needs optimization maybe\n previewContrast () {\n try {\n if (!this.previewTheme.colors.bg) return {}\n const colors = this.previewTheme.colors\n const opacity = this.previewTheme.opacity\n if (!colors.bg) return {}\n const hints = (ratio) => ({\n text: ratio.toPrecision(3) + ':1',\n // AA level, AAA level\n aa: ratio >= 4.5,\n aaa: ratio >= 7,\n // same but for 18pt+ texts\n laa: ratio >= 3,\n laaa: ratio >= 4.5\n })\n const colorsConverted = Object.entries(colors).reduce((acc, [key, value]) => ({ ...acc, [key]: colorConvert(value) }), {})\n\n const ratios = Object.entries(SLOT_INHERITANCE).reduce((acc, [key, value]) => {\n const slotIsBaseText = key === 'text' || key === 'link'\n const slotIsText = slotIsBaseText || (\n typeof value === 'object' && value !== null && value.textColor\n )\n if (!slotIsText) return acc\n const { layer, variant } = slotIsBaseText ? { layer: 'bg' } : value\n const background = variant || layer\n const opacitySlot = getOpacitySlot(background)\n const textColors = [\n key,\n ...(background === 'bg' ? ['cRed', 'cGreen', 'cBlue', 'cOrange'] : [])\n ]\n\n const layers = getLayers(\n layer,\n variant || layer,\n opacitySlot,\n colorsConverted,\n opacity\n )\n\n return {\n ...acc,\n ...textColors.reduce((acc, textColorKey) => {\n const newKey = slotIsBaseText\n ? 'bg' + textColorKey[0].toUpperCase() + textColorKey.slice(1)\n : textColorKey\n return {\n ...acc,\n [newKey]: getContrastRatioLayers(\n colorsConverted[textColorKey],\n layers,\n colorsConverted[textColorKey]\n )\n }\n }, {})\n }\n }, {})\n\n return Object.entries(ratios).reduce((acc, [k, v]) => { acc[k] = hints(v); return acc }, {})\n } catch (e) {\n console.warn('Failure computing contrasts', e)\n }\n },\n previewRules () {\n if (!this.preview.rules) return ''\n return [\n ...Object.values(this.preview.rules),\n 'color: var(--text)',\n 'font-family: var(--interfaceFont, sans-serif)'\n ].join(';')\n },\n shadowsAvailable () {\n return Object.keys(DEFAULT_SHADOWS).sort()\n },\n currentShadowOverriden: {\n get () {\n return !!this.currentShadow\n },\n set (val) {\n if (val) {\n set(this.shadowsLocal, this.shadowSelected, this.currentShadowFallback.map(_ => Object.assign({}, _)))\n } else {\n del(this.shadowsLocal, this.shadowSelected)\n }\n }\n },\n currentShadowFallback () {\n return (this.previewTheme.shadows || {})[this.shadowSelected]\n },\n currentShadow: {\n get () {\n return this.shadowsLocal[this.shadowSelected]\n },\n set (v) {\n set(this.shadowsLocal, this.shadowSelected, v)\n }\n },\n themeValid () {\n return !this.shadowsInvalid && !this.colorsInvalid && !this.radiiInvalid\n },\n exportedTheme () {\n const saveEverything = (\n !this.keepFonts &&\n !this.keepShadows &&\n !this.keepOpacity &&\n !this.keepRoundness &&\n !this.keepColor\n )\n\n const source = {\n themeEngineVersion: CURRENT_VERSION\n }\n\n if (this.keepFonts || saveEverything) {\n source.fonts = this.fontsLocal\n }\n if (this.keepShadows || saveEverything) {\n source.shadows = this.shadowsLocal\n }\n if (this.keepOpacity || saveEverything) {\n source.opacity = this.currentOpacity\n }\n if (this.keepColor || saveEverything) {\n source.colors = this.currentColors\n }\n if (this.keepRoundness || saveEverything) {\n source.radii = this.currentRadii\n }\n\n const theme = {\n themeEngineVersion: CURRENT_VERSION,\n ...this.previewTheme\n }\n\n return {\n // To separate from other random JSON files and possible future source formats\n _pleroma_theme_version: 2, theme, source\n }\n }\n },\n components: {\n ColorInput,\n OpacityInput,\n RangeInput,\n ContrastRatio,\n ShadowControl,\n FontControl,\n TabSwitcher,\n Preview,\n Checkbox,\n Select\n },\n methods: {\n loadTheme (\n {\n theme,\n source,\n _pleroma_theme_version: fileVersion\n },\n origin,\n forceUseSource = false\n ) {\n this.dismissWarning()\n if (!source && !theme) {\n throw new Error('Can\\'t load theme: empty')\n }\n const version = (origin === 'localStorage' && !theme.colors)\n ? 'l1'\n : fileVersion\n const snapshotEngineVersion = (theme || {}).themeEngineVersion\n const themeEngineVersion = (source || {}).themeEngineVersion || 2\n const versionsMatch = themeEngineVersion === CURRENT_VERSION\n const sourceSnapshotMismatch = (\n theme !== undefined &&\n source !== undefined &&\n themeEngineVersion !== snapshotEngineVersion\n )\n // Force loading of source if user requested it or if snapshot\n // is unavailable\n const forcedSourceLoad = (source && forceUseSource) || !theme\n if (!(versionsMatch && !sourceSnapshotMismatch) &&\n !forcedSourceLoad &&\n version !== 'l1' &&\n origin !== 'defaults'\n ) {\n if (sourceSnapshotMismatch && origin === 'localStorage') {\n this.themeWarning = {\n origin,\n themeEngineVersion,\n type: 'snapshot_source_mismatch'\n }\n } else if (!theme) {\n this.themeWarning = {\n origin,\n noActionsPossible: true,\n themeEngineVersion,\n type: 'no_snapshot_old_version'\n }\n } else if (!versionsMatch) {\n this.themeWarning = {\n origin,\n noActionsPossible: !source,\n themeEngineVersion,\n type: 'wrong_version'\n }\n }\n }\n this.normalizeLocalState(theme, version, source, forcedSourceLoad)\n },\n forceLoadLocalStorage () {\n this.loadThemeFromLocalStorage(true)\n },\n dismissWarning () {\n this.themeWarning = undefined\n this.tempImportFile = undefined\n },\n forceLoad () {\n const { origin } = this.themeWarning\n switch (origin) {\n case 'localStorage':\n this.loadThemeFromLocalStorage(true)\n break\n case 'file':\n this.onImport(this.tempImportFile, true)\n break\n }\n this.dismissWarning()\n },\n forceSnapshot () {\n const { origin } = this.themeWarning\n switch (origin) {\n case 'localStorage':\n this.loadThemeFromLocalStorage(false, true)\n break\n case 'file':\n console.error('Forcing snapshot from file is not supported yet')\n break\n }\n this.dismissWarning()\n },\n loadThemeFromLocalStorage (confirmLoadSource = false, forceSnapshot = false) {\n const {\n customTheme: theme,\n customThemeSource: source\n } = this.$store.getters.mergedConfig\n if (!theme && !source) {\n // Anon user or never touched themes\n this.loadTheme(\n this.$store.state.instance.themeData,\n 'defaults',\n confirmLoadSource\n )\n } else {\n this.loadTheme(\n {\n theme,\n source: forceSnapshot ? theme : source\n },\n 'localStorage',\n confirmLoadSource\n )\n }\n },\n setCustomTheme () {\n this.$store.dispatch('setOption', {\n name: 'customTheme',\n value: {\n themeEngineVersion: CURRENT_VERSION,\n ...this.previewTheme\n }\n })\n this.$store.dispatch('setOption', {\n name: 'customThemeSource',\n value: {\n themeEngineVersion: CURRENT_VERSION,\n shadows: this.shadowsLocal,\n fonts: this.fontsLocal,\n opacity: this.currentOpacity,\n colors: this.currentColors,\n radii: this.currentRadii\n }\n })\n },\n updatePreviewColorsAndShadows () {\n this.previewColors = generateColors({\n opacity: this.currentOpacity,\n colors: this.currentColors\n })\n this.previewShadows = generateShadows(\n { shadows: this.shadowsLocal, opacity: this.previewTheme.opacity, themeEngineVersion: this.engineVersion },\n this.previewColors.theme.colors,\n this.previewColors.mod\n )\n },\n importTheme () { this.themeImporter.importData() },\n exportTheme () { this.themeExporter.exportData() },\n onImport (parsed, forceSource = false) {\n this.tempImportFile = parsed\n this.loadTheme(parsed, 'file', forceSource)\n },\n onImportFailure (result) {\n this.$store.dispatch('pushGlobalNotice', { messageKey: 'settings.invalid_theme_imported', level: 'error' })\n },\n importValidator (parsed) {\n const version = parsed._pleroma_theme_version\n return version >= 1 || version <= 2\n },\n clearAll () {\n this.loadThemeFromLocalStorage()\n },\n\n // Clears all the extra stuff when loading V1 theme\n clearV1 () {\n Object.keys(this.$data)\n .filter(_ => _.endsWith('ColorLocal') || _.endsWith('OpacityLocal'))\n .filter(_ => !v1OnlyNames.includes(_))\n .forEach(key => {\n set(this.$data, key, undefined)\n })\n },\n\n clearRoundness () {\n Object.keys(this.$data)\n .filter(_ => _.endsWith('RadiusLocal'))\n .forEach(key => {\n set(this.$data, key, undefined)\n })\n },\n\n clearOpacity () {\n Object.keys(this.$data)\n .filter(_ => _.endsWith('OpacityLocal'))\n .forEach(key => {\n set(this.$data, key, undefined)\n })\n },\n\n clearShadows () {\n this.shadowsLocal = {}\n },\n\n clearFonts () {\n this.fontsLocal = {}\n },\n\n /**\n * This applies stored theme data onto form. Supports three versions of data:\n * v3 (version >= 3) - newest version of themes which supports snapshots for better compatiblity\n * v2 (version = 2) - newer version of themes.\n * v1 (version = 1) - older version of themes (import from file)\n * v1l (version = l1) - older version of theme (load from local storage)\n * v1 and v1l differ because of way themes were stored/exported.\n * @param {Object} theme - theme data (snapshot)\n * @param {Number} version - version of data. 0 means try to guess based on data. \"l1\" means v1, locastorage type\n * @param {Object} source - theme source - this will be used if compatible\n * @param {Boolean} source - by default source won't be used if version doesn't match since it might render differently\n * this allows importing source anyway\n */\n normalizeLocalState (theme, version = 0, source, forceSource = false) {\n let input\n if (typeof source !== 'undefined') {\n if (forceSource || source.themeEngineVersion === CURRENT_VERSION) {\n input = source\n version = source.themeEngineVersion\n } else {\n input = theme\n }\n } else {\n input = theme\n }\n\n const radii = input.radii || input\n const opacity = input.opacity\n const shadows = input.shadows || {}\n const fonts = input.fonts || {}\n const colors = !input.themeEngineVersion\n ? colors2to3(input.colors || input)\n : input.colors || input\n\n if (version === 0) {\n if (input.version) version = input.version\n // Old v1 naming: fg is text, btn is foreground\n if (typeof colors.text === 'undefined' && typeof colors.fg !== 'undefined') {\n version = 1\n }\n // New v2 naming: text is text, fg is foreground\n if (typeof colors.text !== 'undefined' && typeof colors.fg !== 'undefined') {\n version = 2\n }\n }\n\n this.engineVersion = version\n\n // Stuff that differs between V1 and V2\n if (version === 1) {\n this.fgColorLocal = rgb2hex(colors.btn)\n this.textColorLocal = rgb2hex(colors.fg)\n }\n\n if (!this.keepColor) {\n this.clearV1()\n const keys = new Set(version !== 1 ? Object.keys(SLOT_INHERITANCE) : [])\n if (version === 1 || version === 'l1') {\n keys\n .add('bg')\n .add('link')\n .add('cRed')\n .add('cBlue')\n .add('cGreen')\n .add('cOrange')\n }\n\n keys.forEach(key => {\n const color = colors[key]\n const hex = rgb2hex(colors[key])\n this[key + 'ColorLocal'] = hex === '#aN' ? color : hex\n })\n }\n\n if (opacity && !this.keepOpacity) {\n this.clearOpacity()\n Object.entries(opacity).forEach(([k, v]) => {\n if (typeof v === 'undefined' || v === null || Number.isNaN(v)) return\n this[k + 'OpacityLocal'] = v\n })\n }\n\n if (!this.keepRoundness) {\n this.clearRoundness()\n Object.entries(radii).forEach(([k, v]) => {\n // 'Radius' is kept mostly for v1->v2 localstorage transition\n const key = k.endsWith('Radius') ? k.split('Radius')[0] : k\n this[key + 'RadiusLocal'] = v\n })\n }\n\n if (!this.keepShadows) {\n this.clearShadows()\n if (version === 2) {\n this.shadowsLocal = shadows2to3(shadows, this.previewTheme.opacity)\n } else {\n this.shadowsLocal = shadows\n }\n this.shadowSelected = this.shadowsAvailable[0]\n }\n\n if (!this.keepFonts) {\n this.clearFonts()\n this.fontsLocal = fonts\n }\n }\n },\n watch: {\n currentRadii () {\n try {\n this.previewRadii = generateRadii({ radii: this.currentRadii })\n this.radiiInvalid = false\n } catch (e) {\n this.radiiInvalid = true\n console.warn(e)\n }\n },\n shadowsLocal: {\n handler () {\n if (Object.getOwnPropertyNames(this.previewColors).length === 1) return\n try {\n this.updatePreviewColorsAndShadows()\n this.shadowsInvalid = false\n } catch (e) {\n this.shadowsInvalid = true\n console.warn(e)\n }\n },\n deep: true\n },\n fontsLocal: {\n handler () {\n try {\n this.previewFonts = generateFonts({ fonts: this.fontsLocal })\n this.fontsInvalid = false\n } catch (e) {\n this.fontsInvalid = true\n console.warn(e)\n }\n },\n deep: true\n },\n currentColors () {\n try {\n this.updatePreviewColorsAndShadows()\n this.colorsInvalid = false\n this.shadowsInvalid = false\n } catch (e) {\n this.colorsInvalid = true\n this.shadowsInvalid = true\n console.warn(e)\n }\n },\n currentOpacity () {\n try {\n this.updatePreviewColorsAndShadows()\n } catch (e) {\n console.warn(e)\n }\n },\n selected () {\n this.selectedTheme = Object.entries(this.availableStyles).find(([k, s]) => {\n if (Array.isArray(s)) {\n console.log(s[0] === this.selected, this.selected)\n return s[0] === this.selected\n } else {\n return s.name === this.selected\n }\n })[1]\n },\n selectedTheme () {\n this.dismissWarning()\n if (this.selectedVersion === 1) {\n if (!this.keepRoundness) {\n this.clearRoundness()\n }\n\n if (!this.keepShadows) {\n this.clearShadows()\n }\n\n if (!this.keepOpacity) {\n this.clearOpacity()\n }\n\n if (!this.keepColor) {\n this.clearV1()\n\n this.bgColorLocal = this.selectedTheme[1]\n this.fgColorLocal = this.selectedTheme[2]\n this.textColorLocal = this.selectedTheme[3]\n this.linkColorLocal = this.selectedTheme[4]\n this.cRedColorLocal = this.selectedTheme[5]\n this.cGreenColorLocal = this.selectedTheme[6]\n this.cBlueColorLocal = this.selectedTheme[7]\n this.cOrangeColorLocal = this.selectedTheme[8]\n }\n } else if (this.selectedVersion >= 2) {\n this.normalizeLocalState(this.selectedTheme.theme, 2, this.selectedTheme.source)\n }\n }\n }\n}\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!./theme_tab.scss\")\n}\n/* script */\nexport * from \"!!babel-loader!./theme_tab.js\"\nimport __vue_script__ from \"!!babel-loader!./theme_tab.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-400e19a1\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../../../node_modules/vue-loader/lib/selector?type=template&index=0!./theme_tab.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"theme-tab\"},[_c('div',{staticClass:\"presets-container\"},[_c('div',{staticClass:\"save-load\"},[(_vm.themeWarning)?_c('div',{staticClass:\"theme-warning\"},[_c('div',{staticClass:\"alert warning\"},[_vm._v(\"\\n \"+_vm._s(_vm.themeWarningHelp)+\"\\n \")]),_vm._v(\" \"),_c('div',{staticClass:\"buttons\"},[(_vm.themeWarning.type === 'snapshot_source_mismatch')?[_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.forceLoad}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.use_source'))+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.forceSnapshot}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.use_snapshot'))+\"\\n \")])]:(_vm.themeWarning.noActionsPossible)?[_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.dismissWarning}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('general.dismiss'))+\"\\n \")])]:[_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.forceLoad}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.load_theme'))+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.dismissWarning}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.keep_as_is'))+\"\\n \")])]],2)]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"top\"},[_c('div',{staticClass:\"presets\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.presets'))+\"\\n \"),_c('label',{staticClass:\"select\",attrs:{\"for\":\"preset-switcher\"}},[_c('Select',{staticClass:\"preset-switcher\",attrs:{\"id\":\"preset-switcher\"},model:{value:(_vm.selected),callback:function ($$v) {_vm.selected=$$v},expression:\"selected\"}},_vm._l((_vm.availableStyles),function(style){return _c('option',{key:style.name,style:({\n backgroundColor: style[1] || (style.theme || style.source).colors.bg,\n color: style[3] || (style.theme || style.source).colors.text\n }),domProps:{\"value\":style.name || style[0]}},[_vm._v(\"\\n \"+_vm._s(style[0] || style.name)+\"\\n \")])}),0)],1)]),_vm._v(\" \"),_c('div',{staticClass:\"export-import\"},[_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.importTheme}},[_vm._v(\"\\n \"+_vm._s(_vm.$t(\"settings.import_theme\"))+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.exportTheme}},[_vm._v(\"\\n \"+_vm._s(_vm.$t(\"settings.export_theme\"))+\"\\n \")])])])]),_vm._v(\" \"),_c('div',{staticClass:\"save-load-options\"},[_c('span',{staticClass:\"keep-option\"},[_c('Checkbox',{model:{value:(_vm.keepColor),callback:function ($$v) {_vm.keepColor=$$v},expression:\"keepColor\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.keep_color'))+\"\\n \")])],1),_vm._v(\" \"),_c('span',{staticClass:\"keep-option\"},[_c('Checkbox',{model:{value:(_vm.keepShadows),callback:function ($$v) {_vm.keepShadows=$$v},expression:\"keepShadows\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.keep_shadows'))+\"\\n \")])],1),_vm._v(\" \"),_c('span',{staticClass:\"keep-option\"},[_c('Checkbox',{model:{value:(_vm.keepOpacity),callback:function ($$v) {_vm.keepOpacity=$$v},expression:\"keepOpacity\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.keep_opacity'))+\"\\n \")])],1),_vm._v(\" \"),_c('span',{staticClass:\"keep-option\"},[_c('Checkbox',{model:{value:(_vm.keepRoundness),callback:function ($$v) {_vm.keepRoundness=$$v},expression:\"keepRoundness\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.keep_roundness'))+\"\\n \")])],1),_vm._v(\" \"),_c('span',{staticClass:\"keep-option\"},[_c('Checkbox',{model:{value:(_vm.keepFonts),callback:function ($$v) {_vm.keepFonts=$$v},expression:\"keepFonts\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.keep_fonts'))+\"\\n \")])],1),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.$t('settings.style.switcher.save_load_hint')))])])]),_vm._v(\" \"),_c('preview',{style:(_vm.previewRules)}),_vm._v(\" \"),_c('keep-alive',[_c('tab-switcher',{key:\"style-tweak\"},[_c('div',{staticClass:\"color-container\",attrs:{\"label\":_vm.$t('settings.style.common_colors._tab_label')}},[_c('div',{staticClass:\"tab-header\"},[_c('p',[_vm._v(_vm._s(_vm.$t('settings.theme_help')))]),_vm._v(\" \"),_c('div',{staticClass:\"tab-header-buttons\"},[_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.clearOpacity}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.clear_opacity'))+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.clearV1}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.clear_all'))+\"\\n \")])])]),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.$t('settings.theme_help_v2_1')))]),_vm._v(\" \"),_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.common_colors.main')))]),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('ColorInput',{attrs:{\"name\":\"bgColor\",\"label\":_vm.$t('settings.background')},model:{value:(_vm.bgColorLocal),callback:function ($$v) {_vm.bgColorLocal=$$v},expression:\"bgColorLocal\"}}),_vm._v(\" \"),_c('OpacityInput',{attrs:{\"name\":\"bgOpacity\",\"fallback\":_vm.previewTheme.opacity.bg},model:{value:(_vm.bgOpacityLocal),callback:function ($$v) {_vm.bgOpacityLocal=$$v},expression:\"bgOpacityLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"textColor\",\"label\":_vm.$t('settings.text')},model:{value:(_vm.textColorLocal),callback:function ($$v) {_vm.textColorLocal=$$v},expression:\"textColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.bgText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"accentColor\",\"fallback\":_vm.previewTheme.colors.link,\"label\":_vm.$t('settings.accent'),\"show-optional-tickbox\":typeof _vm.linkColorLocal !== 'undefined'},model:{value:(_vm.accentColorLocal),callback:function ($$v) {_vm.accentColorLocal=$$v},expression:\"accentColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"linkColor\",\"fallback\":_vm.previewTheme.colors.accent,\"label\":_vm.$t('settings.links'),\"show-optional-tickbox\":typeof _vm.accentColorLocal !== 'undefined'},model:{value:(_vm.linkColorLocal),callback:function ($$v) {_vm.linkColorLocal=$$v},expression:\"linkColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.bgLink}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('ColorInput',{attrs:{\"name\":\"fgColor\",\"label\":_vm.$t('settings.foreground')},model:{value:(_vm.fgColorLocal),callback:function ($$v) {_vm.fgColorLocal=$$v},expression:\"fgColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"fgTextColor\",\"label\":_vm.$t('settings.text'),\"fallback\":_vm.previewTheme.colors.fgText},model:{value:(_vm.fgTextColorLocal),callback:function ($$v) {_vm.fgTextColorLocal=$$v},expression:\"fgTextColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"fgLinkColor\",\"label\":_vm.$t('settings.links'),\"fallback\":_vm.previewTheme.colors.fgLink},model:{value:(_vm.fgLinkColorLocal),callback:function ($$v) {_vm.fgLinkColorLocal=$$v},expression:\"fgLinkColorLocal\"}}),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.$t('settings.style.common_colors.foreground_hint')))])],1),_vm._v(\" \"),_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.common_colors.rgbo')))]),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('ColorInput',{attrs:{\"name\":\"cRedColor\",\"label\":_vm.$t('settings.cRed')},model:{value:(_vm.cRedColorLocal),callback:function ($$v) {_vm.cRedColorLocal=$$v},expression:\"cRedColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.bgCRed}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"cBlueColor\",\"label\":_vm.$t('settings.cBlue')},model:{value:(_vm.cBlueColorLocal),callback:function ($$v) {_vm.cBlueColorLocal=$$v},expression:\"cBlueColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.bgCBlue}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('ColorInput',{attrs:{\"name\":\"cGreenColor\",\"label\":_vm.$t('settings.cGreen')},model:{value:(_vm.cGreenColorLocal),callback:function ($$v) {_vm.cGreenColorLocal=$$v},expression:\"cGreenColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.bgCGreen}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"cOrangeColor\",\"label\":_vm.$t('settings.cOrange')},model:{value:(_vm.cOrangeColorLocal),callback:function ($$v) {_vm.cOrangeColorLocal=$$v},expression:\"cOrangeColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.bgCOrange}})],1),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.$t('settings.theme_help_v2_2')))])]),_vm._v(\" \"),_c('div',{staticClass:\"color-container\",attrs:{\"label\":_vm.$t('settings.style.advanced_colors._tab_label')}},[_c('div',{staticClass:\"tab-header\"},[_c('p',[_vm._v(_vm._s(_vm.$t('settings.theme_help')))]),_vm._v(\" \"),_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.clearOpacity}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.clear_opacity'))+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.clearV1}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.clear_all'))+\"\\n \")])]),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.post')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"postLinkColor\",\"fallback\":_vm.previewTheme.colors.accent,\"label\":_vm.$t('settings.links')},model:{value:(_vm.postLinkColorLocal),callback:function ($$v) {_vm.postLinkColorLocal=$$v},expression:\"postLinkColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.postLink}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"postGreentextColor\",\"fallback\":_vm.previewTheme.colors.cGreen,\"label\":_vm.$t('settings.greentext')},model:{value:(_vm.postGreentextColorLocal),callback:function ($$v) {_vm.postGreentextColorLocal=$$v},expression:\"postGreentextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.postGreentext}}),_vm._v(\" \"),_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.alert')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"alertError\",\"label\":_vm.$t('settings.style.advanced_colors.alert_error'),\"fallback\":_vm.previewTheme.colors.alertError},model:{value:(_vm.alertErrorColorLocal),callback:function ($$v) {_vm.alertErrorColorLocal=$$v},expression:\"alertErrorColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"alertErrorText\",\"label\":_vm.$t('settings.text'),\"fallback\":_vm.previewTheme.colors.alertErrorText},model:{value:(_vm.alertErrorTextColorLocal),callback:function ($$v) {_vm.alertErrorTextColorLocal=$$v},expression:\"alertErrorTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.alertErrorText,\"large\":\"\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"alertWarning\",\"label\":_vm.$t('settings.style.advanced_colors.alert_warning'),\"fallback\":_vm.previewTheme.colors.alertWarning},model:{value:(_vm.alertWarningColorLocal),callback:function ($$v) {_vm.alertWarningColorLocal=$$v},expression:\"alertWarningColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"alertWarningText\",\"label\":_vm.$t('settings.text'),\"fallback\":_vm.previewTheme.colors.alertWarningText},model:{value:(_vm.alertWarningTextColorLocal),callback:function ($$v) {_vm.alertWarningTextColorLocal=$$v},expression:\"alertWarningTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.alertWarningText,\"large\":\"\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"alertNeutral\",\"label\":_vm.$t('settings.style.advanced_colors.alert_neutral'),\"fallback\":_vm.previewTheme.colors.alertNeutral},model:{value:(_vm.alertNeutralColorLocal),callback:function ($$v) {_vm.alertNeutralColorLocal=$$v},expression:\"alertNeutralColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"alertNeutralText\",\"label\":_vm.$t('settings.text'),\"fallback\":_vm.previewTheme.colors.alertNeutralText},model:{value:(_vm.alertNeutralTextColorLocal),callback:function ($$v) {_vm.alertNeutralTextColorLocal=$$v},expression:\"alertNeutralTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.alertNeutralText,\"large\":\"\"}}),_vm._v(\" \"),_c('OpacityInput',{attrs:{\"name\":\"alertOpacity\",\"fallback\":_vm.previewTheme.opacity.alert},model:{value:(_vm.alertOpacityLocal),callback:function ($$v) {_vm.alertOpacityLocal=$$v},expression:\"alertOpacityLocal\"}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.badge')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"badgeNotification\",\"label\":_vm.$t('settings.style.advanced_colors.badge_notification'),\"fallback\":_vm.previewTheme.colors.badgeNotification},model:{value:(_vm.badgeNotificationColorLocal),callback:function ($$v) {_vm.badgeNotificationColorLocal=$$v},expression:\"badgeNotificationColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"badgeNotificationText\",\"label\":_vm.$t('settings.text'),\"fallback\":_vm.previewTheme.colors.badgeNotificationText},model:{value:(_vm.badgeNotificationTextColorLocal),callback:function ($$v) {_vm.badgeNotificationTextColorLocal=$$v},expression:\"badgeNotificationTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.badgeNotificationText,\"large\":\"\"}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.panel_header')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"panelColor\",\"fallback\":_vm.previewTheme.colors.panel,\"label\":_vm.$t('settings.background')},model:{value:(_vm.panelColorLocal),callback:function ($$v) {_vm.panelColorLocal=$$v},expression:\"panelColorLocal\"}}),_vm._v(\" \"),_c('OpacityInput',{attrs:{\"name\":\"panelOpacity\",\"fallback\":_vm.previewTheme.opacity.panel,\"disabled\":_vm.panelColorLocal === 'transparent'},model:{value:(_vm.panelOpacityLocal),callback:function ($$v) {_vm.panelOpacityLocal=$$v},expression:\"panelOpacityLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"panelTextColor\",\"fallback\":_vm.previewTheme.colors.panelText,\"label\":_vm.$t('settings.text')},model:{value:(_vm.panelTextColorLocal),callback:function ($$v) {_vm.panelTextColorLocal=$$v},expression:\"panelTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.panelText,\"large\":\"\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"panelLinkColor\",\"fallback\":_vm.previewTheme.colors.panelLink,\"label\":_vm.$t('settings.links')},model:{value:(_vm.panelLinkColorLocal),callback:function ($$v) {_vm.panelLinkColorLocal=$$v},expression:\"panelLinkColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.panelLink,\"large\":\"\"}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.top_bar')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"topBarColor\",\"fallback\":_vm.previewTheme.colors.topBar,\"label\":_vm.$t('settings.background')},model:{value:(_vm.topBarColorLocal),callback:function ($$v) {_vm.topBarColorLocal=$$v},expression:\"topBarColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"topBarTextColor\",\"fallback\":_vm.previewTheme.colors.topBarText,\"label\":_vm.$t('settings.text')},model:{value:(_vm.topBarTextColorLocal),callback:function ($$v) {_vm.topBarTextColorLocal=$$v},expression:\"topBarTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.topBarText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"topBarLinkColor\",\"fallback\":_vm.previewTheme.colors.topBarLink,\"label\":_vm.$t('settings.links')},model:{value:(_vm.topBarLinkColorLocal),callback:function ($$v) {_vm.topBarLinkColorLocal=$$v},expression:\"topBarLinkColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.topBarLink}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.inputs')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"inputColor\",\"fallback\":_vm.previewTheme.colors.input,\"label\":_vm.$t('settings.background')},model:{value:(_vm.inputColorLocal),callback:function ($$v) {_vm.inputColorLocal=$$v},expression:\"inputColorLocal\"}}),_vm._v(\" \"),_c('OpacityInput',{attrs:{\"name\":\"inputOpacity\",\"fallback\":_vm.previewTheme.opacity.input,\"disabled\":_vm.inputColorLocal === 'transparent'},model:{value:(_vm.inputOpacityLocal),callback:function ($$v) {_vm.inputOpacityLocal=$$v},expression:\"inputOpacityLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"inputTextColor\",\"fallback\":_vm.previewTheme.colors.inputText,\"label\":_vm.$t('settings.text')},model:{value:(_vm.inputTextColorLocal),callback:function ($$v) {_vm.inputTextColorLocal=$$v},expression:\"inputTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.inputText}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.buttons')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnColor\",\"fallback\":_vm.previewTheme.colors.btn,\"label\":_vm.$t('settings.background')},model:{value:(_vm.btnColorLocal),callback:function ($$v) {_vm.btnColorLocal=$$v},expression:\"btnColorLocal\"}}),_vm._v(\" \"),_c('OpacityInput',{attrs:{\"name\":\"btnOpacity\",\"fallback\":_vm.previewTheme.opacity.btn,\"disabled\":_vm.btnColorLocal === 'transparent'},model:{value:(_vm.btnOpacityLocal),callback:function ($$v) {_vm.btnOpacityLocal=$$v},expression:\"btnOpacityLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnTextColor\",\"fallback\":_vm.previewTheme.colors.btnText,\"label\":_vm.$t('settings.text')},model:{value:(_vm.btnTextColorLocal),callback:function ($$v) {_vm.btnTextColorLocal=$$v},expression:\"btnTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.btnText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnPanelTextColor\",\"fallback\":_vm.previewTheme.colors.btnPanelText,\"label\":_vm.$t('settings.style.advanced_colors.panel_header')},model:{value:(_vm.btnPanelTextColorLocal),callback:function ($$v) {_vm.btnPanelTextColorLocal=$$v},expression:\"btnPanelTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.btnPanelText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnTopBarTextColor\",\"fallback\":_vm.previewTheme.colors.btnTopBarText,\"label\":_vm.$t('settings.style.advanced_colors.top_bar')},model:{value:(_vm.btnTopBarTextColorLocal),callback:function ($$v) {_vm.btnTopBarTextColorLocal=$$v},expression:\"btnTopBarTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.btnTopBarText}}),_vm._v(\" \"),_c('h5',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.pressed')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnPressedColor\",\"fallback\":_vm.previewTheme.colors.btnPressed,\"label\":_vm.$t('settings.background')},model:{value:(_vm.btnPressedColorLocal),callback:function ($$v) {_vm.btnPressedColorLocal=$$v},expression:\"btnPressedColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnPressedTextColor\",\"fallback\":_vm.previewTheme.colors.btnPressedText,\"label\":_vm.$t('settings.text')},model:{value:(_vm.btnPressedTextColorLocal),callback:function ($$v) {_vm.btnPressedTextColorLocal=$$v},expression:\"btnPressedTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.btnPressedText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnPressedPanelTextColor\",\"fallback\":_vm.previewTheme.colors.btnPressedPanelText,\"label\":_vm.$t('settings.style.advanced_colors.panel_header')},model:{value:(_vm.btnPressedPanelTextColorLocal),callback:function ($$v) {_vm.btnPressedPanelTextColorLocal=$$v},expression:\"btnPressedPanelTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.btnPressedPanelText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnPressedTopBarTextColor\",\"fallback\":_vm.previewTheme.colors.btnPressedTopBarText,\"label\":_vm.$t('settings.style.advanced_colors.top_bar')},model:{value:(_vm.btnPressedTopBarTextColorLocal),callback:function ($$v) {_vm.btnPressedTopBarTextColorLocal=$$v},expression:\"btnPressedTopBarTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.btnPressedTopBarText}}),_vm._v(\" \"),_c('h5',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.disabled')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnDisabledColor\",\"fallback\":_vm.previewTheme.colors.btnDisabled,\"label\":_vm.$t('settings.background')},model:{value:(_vm.btnDisabledColorLocal),callback:function ($$v) {_vm.btnDisabledColorLocal=$$v},expression:\"btnDisabledColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnDisabledTextColor\",\"fallback\":_vm.previewTheme.colors.btnDisabledText,\"label\":_vm.$t('settings.text')},model:{value:(_vm.btnDisabledTextColorLocal),callback:function ($$v) {_vm.btnDisabledTextColorLocal=$$v},expression:\"btnDisabledTextColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnDisabledPanelTextColor\",\"fallback\":_vm.previewTheme.colors.btnDisabledPanelText,\"label\":_vm.$t('settings.style.advanced_colors.panel_header')},model:{value:(_vm.btnDisabledPanelTextColorLocal),callback:function ($$v) {_vm.btnDisabledPanelTextColorLocal=$$v},expression:\"btnDisabledPanelTextColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnDisabledTopBarTextColor\",\"fallback\":_vm.previewTheme.colors.btnDisabledTopBarText,\"label\":_vm.$t('settings.style.advanced_colors.top_bar')},model:{value:(_vm.btnDisabledTopBarTextColorLocal),callback:function ($$v) {_vm.btnDisabledTopBarTextColorLocal=$$v},expression:\"btnDisabledTopBarTextColorLocal\"}}),_vm._v(\" \"),_c('h5',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.toggled')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnToggledColor\",\"fallback\":_vm.previewTheme.colors.btnToggled,\"label\":_vm.$t('settings.background')},model:{value:(_vm.btnToggledColorLocal),callback:function ($$v) {_vm.btnToggledColorLocal=$$v},expression:\"btnToggledColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnToggledTextColor\",\"fallback\":_vm.previewTheme.colors.btnToggledText,\"label\":_vm.$t('settings.text')},model:{value:(_vm.btnToggledTextColorLocal),callback:function ($$v) {_vm.btnToggledTextColorLocal=$$v},expression:\"btnToggledTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.btnToggledText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnToggledPanelTextColor\",\"fallback\":_vm.previewTheme.colors.btnToggledPanelText,\"label\":_vm.$t('settings.style.advanced_colors.panel_header')},model:{value:(_vm.btnToggledPanelTextColorLocal),callback:function ($$v) {_vm.btnToggledPanelTextColorLocal=$$v},expression:\"btnToggledPanelTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.btnToggledPanelText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"btnToggledTopBarTextColor\",\"fallback\":_vm.previewTheme.colors.btnToggledTopBarText,\"label\":_vm.$t('settings.style.advanced_colors.top_bar')},model:{value:(_vm.btnToggledTopBarTextColorLocal),callback:function ($$v) {_vm.btnToggledTopBarTextColorLocal=$$v},expression:\"btnToggledTopBarTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.btnToggledTopBarText}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.tabs')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"tabColor\",\"fallback\":_vm.previewTheme.colors.tab,\"label\":_vm.$t('settings.background')},model:{value:(_vm.tabColorLocal),callback:function ($$v) {_vm.tabColorLocal=$$v},expression:\"tabColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"tabTextColor\",\"fallback\":_vm.previewTheme.colors.tabText,\"label\":_vm.$t('settings.text')},model:{value:(_vm.tabTextColorLocal),callback:function ($$v) {_vm.tabTextColorLocal=$$v},expression:\"tabTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.tabText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"tabActiveTextColor\",\"fallback\":_vm.previewTheme.colors.tabActiveText,\"label\":_vm.$t('settings.text')},model:{value:(_vm.tabActiveTextColorLocal),callback:function ($$v) {_vm.tabActiveTextColorLocal=$$v},expression:\"tabActiveTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.tabActiveText}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.borders')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"borderColor\",\"fallback\":_vm.previewTheme.colors.border,\"label\":_vm.$t('settings.style.common.color')},model:{value:(_vm.borderColorLocal),callback:function ($$v) {_vm.borderColorLocal=$$v},expression:\"borderColorLocal\"}}),_vm._v(\" \"),_c('OpacityInput',{attrs:{\"name\":\"borderOpacity\",\"fallback\":_vm.previewTheme.opacity.border,\"disabled\":_vm.borderColorLocal === 'transparent'},model:{value:(_vm.borderOpacityLocal),callback:function ($$v) {_vm.borderOpacityLocal=$$v},expression:\"borderOpacityLocal\"}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.faint_text')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"faintColor\",\"fallback\":_vm.previewTheme.colors.faint,\"label\":_vm.$t('settings.text')},model:{value:(_vm.faintColorLocal),callback:function ($$v) {_vm.faintColorLocal=$$v},expression:\"faintColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"faintLinkColor\",\"fallback\":_vm.previewTheme.colors.faintLink,\"label\":_vm.$t('settings.links')},model:{value:(_vm.faintLinkColorLocal),callback:function ($$v) {_vm.faintLinkColorLocal=$$v},expression:\"faintLinkColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"panelFaintColor\",\"fallback\":_vm.previewTheme.colors.panelFaint,\"label\":_vm.$t('settings.style.advanced_colors.panel_header')},model:{value:(_vm.panelFaintColorLocal),callback:function ($$v) {_vm.panelFaintColorLocal=$$v},expression:\"panelFaintColorLocal\"}}),_vm._v(\" \"),_c('OpacityInput',{attrs:{\"name\":\"faintOpacity\",\"fallback\":_vm.previewTheme.opacity.faint},model:{value:(_vm.faintOpacityLocal),callback:function ($$v) {_vm.faintOpacityLocal=$$v},expression:\"faintOpacityLocal\"}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.underlay')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"underlay\",\"label\":_vm.$t('settings.style.advanced_colors.underlay'),\"fallback\":_vm.previewTheme.colors.underlay},model:{value:(_vm.underlayColorLocal),callback:function ($$v) {_vm.underlayColorLocal=$$v},expression:\"underlayColorLocal\"}}),_vm._v(\" \"),_c('OpacityInput',{attrs:{\"name\":\"underlayOpacity\",\"fallback\":_vm.previewTheme.opacity.underlay,\"disabled\":_vm.underlayOpacityLocal === 'transparent'},model:{value:(_vm.underlayOpacityLocal),callback:function ($$v) {_vm.underlayOpacityLocal=$$v},expression:\"underlayOpacityLocal\"}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.wallpaper')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"wallpaper\",\"label\":_vm.$t('settings.style.advanced_colors.wallpaper'),\"fallback\":_vm.previewTheme.colors.wallpaper},model:{value:(_vm.wallpaperColorLocal),callback:function ($$v) {_vm.wallpaperColorLocal=$$v},expression:\"wallpaperColorLocal\"}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.poll')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"poll\",\"label\":_vm.$t('settings.background'),\"fallback\":_vm.previewTheme.colors.poll},model:{value:(_vm.pollColorLocal),callback:function ($$v) {_vm.pollColorLocal=$$v},expression:\"pollColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"pollText\",\"label\":_vm.$t('settings.text'),\"fallback\":_vm.previewTheme.colors.pollText},model:{value:(_vm.pollTextColorLocal),callback:function ($$v) {_vm.pollTextColorLocal=$$v},expression:\"pollTextColorLocal\"}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.icons')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"icon\",\"label\":_vm.$t('settings.style.advanced_colors.icons'),\"fallback\":_vm.previewTheme.colors.icon},model:{value:(_vm.iconColorLocal),callback:function ($$v) {_vm.iconColorLocal=$$v},expression:\"iconColorLocal\"}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.highlight')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"highlight\",\"label\":_vm.$t('settings.background'),\"fallback\":_vm.previewTheme.colors.highlight},model:{value:(_vm.highlightColorLocal),callback:function ($$v) {_vm.highlightColorLocal=$$v},expression:\"highlightColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"highlightText\",\"label\":_vm.$t('settings.text'),\"fallback\":_vm.previewTheme.colors.highlightText},model:{value:(_vm.highlightTextColorLocal),callback:function ($$v) {_vm.highlightTextColorLocal=$$v},expression:\"highlightTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.highlightText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"highlightLink\",\"label\":_vm.$t('settings.links'),\"fallback\":_vm.previewTheme.colors.highlightLink},model:{value:(_vm.highlightLinkColorLocal),callback:function ($$v) {_vm.highlightLinkColorLocal=$$v},expression:\"highlightLinkColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.highlightLink}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.popover')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"popover\",\"label\":_vm.$t('settings.background'),\"fallback\":_vm.previewTheme.colors.popover},model:{value:(_vm.popoverColorLocal),callback:function ($$v) {_vm.popoverColorLocal=$$v},expression:\"popoverColorLocal\"}}),_vm._v(\" \"),_c('OpacityInput',{attrs:{\"name\":\"popoverOpacity\",\"fallback\":_vm.previewTheme.opacity.popover,\"disabled\":_vm.popoverOpacityLocal === 'transparent'},model:{value:(_vm.popoverOpacityLocal),callback:function ($$v) {_vm.popoverOpacityLocal=$$v},expression:\"popoverOpacityLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"popoverText\",\"label\":_vm.$t('settings.text'),\"fallback\":_vm.previewTheme.colors.popoverText},model:{value:(_vm.popoverTextColorLocal),callback:function ($$v) {_vm.popoverTextColorLocal=$$v},expression:\"popoverTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.popoverText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"popoverLink\",\"label\":_vm.$t('settings.links'),\"fallback\":_vm.previewTheme.colors.popoverLink},model:{value:(_vm.popoverLinkColorLocal),callback:function ($$v) {_vm.popoverLinkColorLocal=$$v},expression:\"popoverLinkColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.popoverLink}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.selectedPost')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"selectedPost\",\"label\":_vm.$t('settings.background'),\"fallback\":_vm.previewTheme.colors.selectedPost},model:{value:(_vm.selectedPostColorLocal),callback:function ($$v) {_vm.selectedPostColorLocal=$$v},expression:\"selectedPostColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"selectedPostText\",\"label\":_vm.$t('settings.text'),\"fallback\":_vm.previewTheme.colors.selectedPostText},model:{value:(_vm.selectedPostTextColorLocal),callback:function ($$v) {_vm.selectedPostTextColorLocal=$$v},expression:\"selectedPostTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.selectedPostText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"selectedPostLink\",\"label\":_vm.$t('settings.links'),\"fallback\":_vm.previewTheme.colors.selectedPostLink},model:{value:(_vm.selectedPostLinkColorLocal),callback:function ($$v) {_vm.selectedPostLinkColorLocal=$$v},expression:\"selectedPostLinkColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.selectedPostLink}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.selectedMenu')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"selectedMenu\",\"label\":_vm.$t('settings.background'),\"fallback\":_vm.previewTheme.colors.selectedMenu},model:{value:(_vm.selectedMenuColorLocal),callback:function ($$v) {_vm.selectedMenuColorLocal=$$v},expression:\"selectedMenuColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"selectedMenuText\",\"label\":_vm.$t('settings.text'),\"fallback\":_vm.previewTheme.colors.selectedMenuText},model:{value:(_vm.selectedMenuTextColorLocal),callback:function ($$v) {_vm.selectedMenuTextColorLocal=$$v},expression:\"selectedMenuTextColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.selectedMenuText}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"selectedMenuLink\",\"label\":_vm.$t('settings.links'),\"fallback\":_vm.previewTheme.colors.selectedMenuLink},model:{value:(_vm.selectedMenuLinkColorLocal),callback:function ($$v) {_vm.selectedMenuLinkColorLocal=$$v},expression:\"selectedMenuLinkColorLocal\"}}),_vm._v(\" \"),_c('ContrastRatio',{attrs:{\"contrast\":_vm.previewContrast.selectedMenuLink}})],1),_vm._v(\" \"),_c('div',{staticClass:\"color-item\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('chats.chats')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"chatBgColor\",\"fallback\":_vm.previewTheme.colors.bg,\"label\":_vm.$t('settings.background')},model:{value:(_vm.chatBgColorLocal),callback:function ($$v) {_vm.chatBgColorLocal=$$v},expression:\"chatBgColorLocal\"}}),_vm._v(\" \"),_c('h5',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.chat.incoming')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"chatMessageIncomingBgColor\",\"fallback\":_vm.previewTheme.colors.bg,\"label\":_vm.$t('settings.background')},model:{value:(_vm.chatMessageIncomingBgColorLocal),callback:function ($$v) {_vm.chatMessageIncomingBgColorLocal=$$v},expression:\"chatMessageIncomingBgColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"chatMessageIncomingTextColor\",\"fallback\":_vm.previewTheme.colors.text,\"label\":_vm.$t('settings.text')},model:{value:(_vm.chatMessageIncomingTextColorLocal),callback:function ($$v) {_vm.chatMessageIncomingTextColorLocal=$$v},expression:\"chatMessageIncomingTextColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"chatMessageIncomingLinkColor\",\"fallback\":_vm.previewTheme.colors.link,\"label\":_vm.$t('settings.links')},model:{value:(_vm.chatMessageIncomingLinkColorLocal),callback:function ($$v) {_vm.chatMessageIncomingLinkColorLocal=$$v},expression:\"chatMessageIncomingLinkColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"chatMessageIncomingBorderLinkColor\",\"fallback\":_vm.previewTheme.colors.fg,\"label\":_vm.$t('settings.style.advanced_colors.chat.border')},model:{value:(_vm.chatMessageIncomingBorderColorLocal),callback:function ($$v) {_vm.chatMessageIncomingBorderColorLocal=$$v},expression:\"chatMessageIncomingBorderColorLocal\"}}),_vm._v(\" \"),_c('h5',[_vm._v(_vm._s(_vm.$t('settings.style.advanced_colors.chat.outgoing')))]),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"chatMessageOutgoingBgColor\",\"fallback\":_vm.previewTheme.colors.bg,\"label\":_vm.$t('settings.background')},model:{value:(_vm.chatMessageOutgoingBgColorLocal),callback:function ($$v) {_vm.chatMessageOutgoingBgColorLocal=$$v},expression:\"chatMessageOutgoingBgColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"chatMessageOutgoingTextColor\",\"fallback\":_vm.previewTheme.colors.text,\"label\":_vm.$t('settings.text')},model:{value:(_vm.chatMessageOutgoingTextColorLocal),callback:function ($$v) {_vm.chatMessageOutgoingTextColorLocal=$$v},expression:\"chatMessageOutgoingTextColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"chatMessageOutgoingLinkColor\",\"fallback\":_vm.previewTheme.colors.link,\"label\":_vm.$t('settings.links')},model:{value:(_vm.chatMessageOutgoingLinkColorLocal),callback:function ($$v) {_vm.chatMessageOutgoingLinkColorLocal=$$v},expression:\"chatMessageOutgoingLinkColorLocal\"}}),_vm._v(\" \"),_c('ColorInput',{attrs:{\"name\":\"chatMessageOutgoingBorderLinkColor\",\"fallback\":_vm.previewTheme.colors.bg,\"label\":_vm.$t('settings.style.advanced_colors.chat.border')},model:{value:(_vm.chatMessageOutgoingBorderColorLocal),callback:function ($$v) {_vm.chatMessageOutgoingBorderColorLocal=$$v},expression:\"chatMessageOutgoingBorderColorLocal\"}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"radius-container\",attrs:{\"label\":_vm.$t('settings.style.radii._tab_label')}},[_c('div',{staticClass:\"tab-header\"},[_c('p',[_vm._v(_vm._s(_vm.$t('settings.radii_help')))]),_vm._v(\" \"),_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.clearRoundness}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.clear_all'))+\"\\n \")])]),_vm._v(\" \"),_c('RangeInput',{attrs:{\"name\":\"btnRadius\",\"label\":_vm.$t('settings.btnRadius'),\"fallback\":_vm.previewTheme.radii.btn,\"max\":\"16\",\"hard-min\":\"0\"},model:{value:(_vm.btnRadiusLocal),callback:function ($$v) {_vm.btnRadiusLocal=$$v},expression:\"btnRadiusLocal\"}}),_vm._v(\" \"),_c('RangeInput',{attrs:{\"name\":\"inputRadius\",\"label\":_vm.$t('settings.inputRadius'),\"fallback\":_vm.previewTheme.radii.input,\"max\":\"9\",\"hard-min\":\"0\"},model:{value:(_vm.inputRadiusLocal),callback:function ($$v) {_vm.inputRadiusLocal=$$v},expression:\"inputRadiusLocal\"}}),_vm._v(\" \"),_c('RangeInput',{attrs:{\"name\":\"checkboxRadius\",\"label\":_vm.$t('settings.checkboxRadius'),\"fallback\":_vm.previewTheme.radii.checkbox,\"max\":\"16\",\"hard-min\":\"0\"},model:{value:(_vm.checkboxRadiusLocal),callback:function ($$v) {_vm.checkboxRadiusLocal=$$v},expression:\"checkboxRadiusLocal\"}}),_vm._v(\" \"),_c('RangeInput',{attrs:{\"name\":\"panelRadius\",\"label\":_vm.$t('settings.panelRadius'),\"fallback\":_vm.previewTheme.radii.panel,\"max\":\"50\",\"hard-min\":\"0\"},model:{value:(_vm.panelRadiusLocal),callback:function ($$v) {_vm.panelRadiusLocal=$$v},expression:\"panelRadiusLocal\"}}),_vm._v(\" \"),_c('RangeInput',{attrs:{\"name\":\"avatarRadius\",\"label\":_vm.$t('settings.avatarRadius'),\"fallback\":_vm.previewTheme.radii.avatar,\"max\":\"28\",\"hard-min\":\"0\"},model:{value:(_vm.avatarRadiusLocal),callback:function ($$v) {_vm.avatarRadiusLocal=$$v},expression:\"avatarRadiusLocal\"}}),_vm._v(\" \"),_c('RangeInput',{attrs:{\"name\":\"avatarAltRadius\",\"label\":_vm.$t('settings.avatarAltRadius'),\"fallback\":_vm.previewTheme.radii.avatarAlt,\"max\":\"28\",\"hard-min\":\"0\"},model:{value:(_vm.avatarAltRadiusLocal),callback:function ($$v) {_vm.avatarAltRadiusLocal=$$v},expression:\"avatarAltRadiusLocal\"}}),_vm._v(\" \"),_c('RangeInput',{attrs:{\"name\":\"attachmentRadius\",\"label\":_vm.$t('settings.attachmentRadius'),\"fallback\":_vm.previewTheme.radii.attachment,\"max\":\"50\",\"hard-min\":\"0\"},model:{value:(_vm.attachmentRadiusLocal),callback:function ($$v) {_vm.attachmentRadiusLocal=$$v},expression:\"attachmentRadiusLocal\"}}),_vm._v(\" \"),_c('RangeInput',{attrs:{\"name\":\"tooltipRadius\",\"label\":_vm.$t('settings.tooltipRadius'),\"fallback\":_vm.previewTheme.radii.tooltip,\"max\":\"50\",\"hard-min\":\"0\"},model:{value:(_vm.tooltipRadiusLocal),callback:function ($$v) {_vm.tooltipRadiusLocal=$$v},expression:\"tooltipRadiusLocal\"}}),_vm._v(\" \"),_c('RangeInput',{attrs:{\"name\":\"chatMessageRadius\",\"label\":_vm.$t('settings.chatMessageRadius'),\"fallback\":_vm.previewTheme.radii.chatMessage || 2,\"max\":\"50\",\"hard-min\":\"0\"},model:{value:(_vm.chatMessageRadiusLocal),callback:function ($$v) {_vm.chatMessageRadiusLocal=$$v},expression:\"chatMessageRadiusLocal\"}})],1),_vm._v(\" \"),_c('div',{staticClass:\"shadow-container\",attrs:{\"label\":_vm.$t('settings.style.shadows._tab_label')}},[_c('div',{staticClass:\"tab-header shadow-selector\"},[_c('div',{staticClass:\"select-container\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.shadows.component'))+\"\\n \"),_c('Select',{staticClass:\"shadow-switcher\",attrs:{\"id\":\"shadow-switcher\"},model:{value:(_vm.shadowSelected),callback:function ($$v) {_vm.shadowSelected=$$v},expression:\"shadowSelected\"}},_vm._l((_vm.shadowsAvailable),function(shadow){return _c('option',{key:shadow,domProps:{\"value\":shadow}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.shadows.components.' + shadow))+\"\\n \")])}),0)],1),_vm._v(\" \"),_c('div',{staticClass:\"override\"},[_c('label',{staticClass:\"label\",attrs:{\"for\":\"override\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.shadows.override'))+\"\\n \")]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.currentShadowOverriden),expression:\"currentShadowOverriden\"}],staticClass:\"input-override\",attrs:{\"id\":\"override\",\"name\":\"override\",\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.currentShadowOverriden)?_vm._i(_vm.currentShadowOverriden,null)>-1:(_vm.currentShadowOverriden)},on:{\"change\":function($event){var $$a=_vm.currentShadowOverriden,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.currentShadowOverriden=$$a.concat([$$v]))}else{$$i>-1&&(_vm.currentShadowOverriden=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.currentShadowOverriden=$$c}}}}),_vm._v(\" \"),_c('label',{staticClass:\"checkbox-label\",attrs:{\"for\":\"override\"}})]),_vm._v(\" \"),_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.clearShadows}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.clear_all'))+\"\\n \")])]),_vm._v(\" \"),_c('ShadowControl',{attrs:{\"ready\":!!_vm.currentShadowFallback,\"fallback\":_vm.currentShadowFallback},model:{value:(_vm.currentShadow),callback:function ($$v) {_vm.currentShadow=$$v},expression:\"currentShadow\"}}),_vm._v(\" \"),(_vm.shadowSelected === 'avatar' || _vm.shadowSelected === 'avatarStatus')?_c('div',[_c('i18n',{attrs:{\"path\":\"settings.style.shadows.filter_hint.always_drop_shadow\",\"tag\":\"p\"}},[_c('code',[_vm._v(\"filter: drop-shadow()\")])]),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.$t('settings.style.shadows.filter_hint.avatar_inset')))]),_vm._v(\" \"),_c('i18n',{attrs:{\"path\":\"settings.style.shadows.filter_hint.drop_shadow_syntax\",\"tag\":\"p\"}},[_c('code',[_vm._v(\"drop-shadow\")]),_vm._v(\" \"),_c('code',[_vm._v(\"spread-radius\")]),_vm._v(\" \"),_c('code',[_vm._v(\"inset\")])]),_vm._v(\" \"),_c('i18n',{attrs:{\"path\":\"settings.style.shadows.filter_hint.inset_classic\",\"tag\":\"p\"}},[_c('code',[_vm._v(\"box-shadow\")])]),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.$t('settings.style.shadows.filter_hint.spread_zero')))])],1):_vm._e()],1),_vm._v(\" \"),_c('div',{staticClass:\"fonts-container\",attrs:{\"label\":_vm.$t('settings.style.fonts._tab_label')}},[_c('div',{staticClass:\"tab-header\"},[_c('p',[_vm._v(_vm._s(_vm.$t('settings.style.fonts.help')))]),_vm._v(\" \"),_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.clearFonts}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.clear_all'))+\"\\n \")])]),_vm._v(\" \"),_c('FontControl',{attrs:{\"name\":\"ui\",\"label\":_vm.$t('settings.style.fonts.components.interface'),\"fallback\":_vm.previewTheme.fonts.interface,\"no-inherit\":\"1\"},model:{value:(_vm.fontsLocal.interface),callback:function ($$v) {_vm.$set(_vm.fontsLocal, \"interface\", $$v)},expression:\"fontsLocal.interface\"}}),_vm._v(\" \"),_c('FontControl',{attrs:{\"name\":\"input\",\"label\":_vm.$t('settings.style.fonts.components.input'),\"fallback\":_vm.previewTheme.fonts.input},model:{value:(_vm.fontsLocal.input),callback:function ($$v) {_vm.$set(_vm.fontsLocal, \"input\", $$v)},expression:\"fontsLocal.input\"}}),_vm._v(\" \"),_c('FontControl',{attrs:{\"name\":\"post\",\"label\":_vm.$t('settings.style.fonts.components.post'),\"fallback\":_vm.previewTheme.fonts.post},model:{value:(_vm.fontsLocal.post),callback:function ($$v) {_vm.$set(_vm.fontsLocal, \"post\", $$v)},expression:\"fontsLocal.post\"}}),_vm._v(\" \"),_c('FontControl',{attrs:{\"name\":\"postCode\",\"label\":_vm.$t('settings.style.fonts.components.postCode'),\"fallback\":_vm.previewTheme.fonts.postCode},model:{value:(_vm.fontsLocal.postCode),callback:function ($$v) {_vm.$set(_vm.fontsLocal, \"postCode\", $$v)},expression:\"fontsLocal.postCode\"}})],1)])],1),_vm._v(\" \"),_c('div',{staticClass:\"apply-container\"},[_c('button',{staticClass:\"btn button-default submit\",attrs:{\"disabled\":!_vm.themeValid},on:{\"click\":_vm.setCustomTheme}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('general.apply'))+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn button-default\",on:{\"click\":_vm.clearAll}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.reset'))+\"\\n \")])])],1)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import TabSwitcher from 'src/components/tab_switcher/tab_switcher.js'\n\nimport DataImportExportTab from './tabs/data_import_export_tab.vue'\nimport MutesAndBlocksTab from './tabs/mutes_and_blocks_tab.vue'\nimport NotificationsTab from './tabs/notifications_tab.vue'\nimport FilteringTab from './tabs/filtering_tab.vue'\nimport SecurityTab from './tabs/security_tab/security_tab.vue'\nimport ProfileTab from './tabs/profile_tab.vue'\nimport GeneralTab from './tabs/general_tab.vue'\nimport VersionTab from './tabs/version_tab.vue'\nimport ThemeTab from './tabs/theme_tab/theme_tab.vue'\n\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faWrench,\n faUser,\n faFilter,\n faPaintBrush,\n faBell,\n faDownload,\n faEyeSlash,\n faInfo\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faWrench,\n faUser,\n faFilter,\n faPaintBrush,\n faBell,\n faDownload,\n faEyeSlash,\n faInfo\n)\n\nconst SettingsModalContent = {\n components: {\n TabSwitcher,\n\n DataImportExportTab,\n MutesAndBlocksTab,\n NotificationsTab,\n FilteringTab,\n SecurityTab,\n ProfileTab,\n GeneralTab,\n VersionTab,\n ThemeTab\n },\n computed: {\n isLoggedIn () {\n return !!this.$store.state.users.currentUser\n },\n open () {\n return this.$store.state.interface.settingsModalState !== 'hidden'\n }\n },\n methods: {\n onOpen () {\n const targetTab = this.$store.state.interface.settingsModalTargetTab\n // We're being told to open in specific tab\n if (targetTab) {\n const tabIndex = this.$refs.tabSwitcher.$slots.default.findIndex(elm => {\n return elm.data && elm.data.attrs['data-tab-name'] === targetTab\n })\n if (tabIndex >= 0) {\n this.$refs.tabSwitcher.setTab(tabIndex)\n }\n }\n // Clear the state of target tab, so that next time settings is opened\n // it doesn't force it.\n this.$store.dispatch('clearSettingsModalTargetTab')\n }\n },\n mounted () {\n this.onOpen()\n },\n watch: {\n open: function (value) {\n if (value) this.onOpen()\n }\n }\n}\n\nexport default SettingsModalContent\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!./settings_modal_content.scss\")\n}\n/* script */\nexport * from \"!!babel-loader!./settings_modal_content.js\"\nimport __vue_script__ from \"!!babel-loader!./settings_modal_content.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-c173d428\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./settings_modal_content.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('tab-switcher',{ref:\"tabSwitcher\",staticClass:\"settings_tab-switcher\",attrs:{\"side-tab-bar\":true,\"scrollable-tabs\":true}},[_c('div',{attrs:{\"label\":_vm.$t('settings.general'),\"icon\":\"wrench\",\"data-tab-name\":\"general\"}},[_c('GeneralTab')],1),_vm._v(\" \"),(_vm.isLoggedIn)?_c('div',{attrs:{\"label\":_vm.$t('settings.profile_tab'),\"icon\":\"user\",\"data-tab-name\":\"profile\"}},[_c('ProfileTab')],1):_vm._e(),_vm._v(\" \"),(_vm.isLoggedIn)?_c('div',{attrs:{\"label\":_vm.$t('settings.security_tab'),\"icon\":\"lock\",\"data-tab-name\":\"security\"}},[_c('SecurityTab')],1):_vm._e(),_vm._v(\" \"),_c('div',{attrs:{\"label\":_vm.$t('settings.filtering'),\"icon\":\"filter\",\"data-tab-name\":\"filtering\"}},[_c('FilteringTab')],1),_vm._v(\" \"),_c('div',{attrs:{\"label\":_vm.$t('settings.theme'),\"icon\":\"paint-brush\",\"data-tab-name\":\"theme\"}},[_c('ThemeTab')],1),_vm._v(\" \"),(_vm.isLoggedIn)?_c('div',{attrs:{\"label\":_vm.$t('settings.notifications'),\"icon\":\"bell\",\"data-tab-name\":\"notifications\"}},[_c('NotificationsTab')],1):_vm._e(),_vm._v(\" \"),(_vm.isLoggedIn)?_c('div',{attrs:{\"label\":_vm.$t('settings.data_import_export_tab'),\"icon\":\"download\",\"data-tab-name\":\"dataImportExport\"}},[_c('DataImportExportTab')],1):_vm._e(),_vm._v(\" \"),(_vm.isLoggedIn)?_c('div',{attrs:{\"label\":_vm.$t('settings.mutes_and_blocks'),\"fullHeight\":true,\"icon\":\"eye-slash\",\"data-tab-name\":\"mutesAndBlocks\"}},[_c('MutesAndBlocksTab')],1):_vm._e(),_vm._v(\" \"),_c('div',{attrs:{\"label\":_vm.$t('settings.version.title'),\"icon\":\"info\",\"data-tab-name\":\"version\"}},[_c('VersionTab')],1)])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }"],"sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/20.abb0d332055536a87c38.js b/priv/static/static/js/20.683b112f4dcea887f707.js similarity index 78% rename from priv/static/static/js/20.abb0d332055536a87c38.js rename to priv/static/static/js/20.683b112f4dcea887f707.js index 2d92fdfbd..726530149 100644 --- a/priv/static/static/js/20.abb0d332055536a87c38.js +++ b/priv/static/static/js/20.683b112f4dcea887f707.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[20],{599:function(e){e.exports=JSON.parse('{"chat":{"title":"チャット"},"exporter":{"export":"エクスポート","processing":"処理中です。処理が完了すると、ファイルをダウンロードするよう指示があります"},"features_panel":{"chat":"チャット","gopher":"Gopher","media_proxy":"メディアプロクシ","scope_options":"公開範囲選択","text_limit":"文字の数","title":"有効な機能","who_to_follow":"おすすめユーザー","upload_limit":"ファイルサイズの上限","pleroma_chat_messages":"Pleroma チャット"},"finder":{"error_fetching_user":"ユーザー検索がエラーになりました","find_user":"ユーザーを探す"},"general":{"apply":"適用","submit":"送信","more":"続き","generic_error":"エラーになりました","optional":"省略可","show_more":"もっと見る","show_less":"たたむ","cancel":"キャンセル","disable":"無効","enable":"有効","confirm":"確認","verify":"検査","peek":"隠す","close":"閉じる","dismiss":"無視","retry":"もう一度お試し下さい","error_retry":"もう一度お試し下さい","loading":"読み込み中…","role":{"moderator":"モデレーター","admin":"管理者"}},"image_cropper":{"crop_picture":"画像を切り抜く","save":"保存","save_without_cropping":"切り抜かずに保存","cancel":"キャンセル"},"importer":{"submit":"送信","success":"正常にインポートされました。","error":"このファイルをインポートするとき、エラーが発生しました。"},"login":{"login":"ログイン","description":"OAuthでログイン","logout":"ログアウト","password":"パスワード","placeholder":"例: lain","register":"登録","username":"ユーザー名","hint":"会話に加わるには、ログインしてください","authentication_code":"認証コード","enter_recovery_code":"リカバリーコードを入力してください","enter_two_factor_code":"2段階認証コードを入力してください","recovery_code":"リカバリーコード","heading":{"totp":"2段階認証","recovery":"2段階リカバリー"}},"media_modal":{"previous":"前","next":"次"},"nav":{"about":"このインスタンスについて","back":"戻る","chat":"ローカルチャット","friend_requests":"フォローリクエスト","mentions":"通知","interactions":"インタラクション","dms":"ダイレクトメッセージ","public_tl":"公開タイムライン","timeline":"タイムライン","twkn":"すべてのネットワーク","user_search":"ユーザーを探す","search":"検索","who_to_follow":"おすすめユーザー","preferences":"設定","administration":"管理","bookmarks":"ブックマーク","timelines":"タイムライン","chats":"チャット","home_timeline":"ホームタイムライン"},"notifications":{"broken_favorite":"ステータスが見つかりません。探しています…","favorited_you":"あなたのステータスがお気に入りされました","followed_you":"フォローされました","load_older":"古い通知をみる","notifications":"通知","read":"読んだ!","repeated_you":"あなたのステータスがリピートされました","no_more_notifications":"通知はありません","reacted_with":"{0} でリアクションしました","migrated_to":"インスタンスを引っ越しました","follow_request":"あなたをフォローしたいです","error":"通知の取得に失敗しました: {0}"},"polls":{"add_poll":"投票を追加","add_option":"選択肢を追加","option":"選択肢","votes":"票","vote":"投票","type":"投票の形式","single_choice":"択一式","multiple_choices":"複数選択式","expiry":"投票期間","expires_in":"投票は {0} で終了します","expired":"投票は {0} 前に終了しました","not_enough_options":"相異なる選択肢が不足しています","votes_count":"{count} 票 | {count} 票","people_voted_count":"{count} 人投票 | {count} 人投票"},"emoji":{"stickers":"ステッカー","emoji":"絵文字","keep_open":"ピッカーを開いたままにする","search_emoji":"絵文字を検索","add_emoji":"絵文字を挿入","custom":"カスタム絵文字","unicode":"Unicode絵文字","load_all":"全 {emojiAmount} 絵文字を読み込む","load_all_hint":"最初の {saneAmount} 絵文字を読み込みました、全て読み込むと重くなる可能性があります。"},"stickers":{"add_sticker":"ステッカーを追加"},"interactions":{"favs_repeats":"リピートとお気に入り","follows":"新しいフォロワー","load_older":"古いインタラクションを見る","moves":"ユーザーの引っ越し"},"post_status":{"new_status":"投稿する","account_not_locked_warning":"あなたのアカウントは {0} ではありません。あなたをフォローすれば、誰でも、フォロワー限定のステータスを読むことができます。","account_not_locked_warning_link":"ロックされたアカウント","attachments_sensitive":"ファイルをNSFWにする","content_type":{"text/plain":"プレーンテキスト","text/html":"HTML","text/markdown":"Markdown","text/bbcode":"BBCode"},"content_warning":"説明 (省略可)","default":"羽田空港に着きました。","direct_warning_to_all":"この投稿は、メンションされたすべてのユーザーが、見ることができます。","direct_warning_to_first_only":"この投稿は、メッセージの冒頭でメンションされたユーザーだけが、見ることができます。","direct_warning":"このステータスは、メンションされたユーザーだけが、読むことができます。","posting":"投稿","scope_notice":{"public":"この投稿は、誰でも見ることができます","private":"この投稿は、あなたのフォロワーだけが、見ることができます","unlisted":"この投稿は、パブリックタイムラインと、接続しているすべてのネットワークには、表示されません"},"scope":{"direct":"ダイレクト: メンションされたユーザーのみに届きます","private":"フォロワー限定: フォロワーのみに届きます","public":"パブリック: 公開タイムラインに届きます","unlisted":"アンリステッド: 公開タイムラインに届きません"},"media_description_error":"メディアのアップロードに失敗しました。もう一度お試しください","empty_status_error":"投稿内容を入力してください","preview_empty":"何もありません","preview":"プレビュー","media_description":"メディアの説明","post":"投稿"},"registration":{"bio":"プロフィール","email":"Eメール","fullname":"スクリーンネーム","password_confirm":"パスワードの確認","registration":"登録","token":"招待トークン","captcha":"CAPTCHA","new_captcha":"文字が読めないときは、画像をクリックすると、新しい画像になります","username_placeholder":"例: lain","fullname_placeholder":"例: 岩倉玲音","bio_placeholder":"例:\\nこんにちは。私は玲音。\\n私はアニメのキャラクターで、日本の郊外に住んでいます。私をWiredで見たことがあるかもしれません。","validations":{"username_required":"必須","fullname_required":"必須","email_required":"必須","password_required":"必須","password_confirmation_required":"必須","password_confirmation_match":"パスワードが違います"},"reason_placeholder":"このインスタンスは、新規登録を手動で受け付けています。\\n登録したい理由を、インスタンスの管理者に教えてください。","reason":"登録するための目的","register":"登録"},"selectable_list":{"select_all":"すべて選択"},"settings":{"app_name":"アプリの名称","security":"セキュリティ","enter_current_password_to_confirm":"あなたのアイデンティティを証明するため、現在のパスワードを入力してください","mfa":{"otp":"OTP","setup_otp":"OTPのセットアップ","wait_pre_setup_otp":"OTPのプリセット","confirm_and_enable":"OTPの確認と有効化","title":"2段階認証","generate_new_recovery_codes":"新しいリカバリーコードを生成","warning_of_generate_new_codes":"新しいリカバリーコードを生成すると、古いコードは使用できなくなります。","recovery_codes":"リカバリーコード。","waiting_a_recovery_codes":"バックアップコードを受信しています…","recovery_codes_warning":"コードを紙に書くか、安全な場所に保存してください。そうでなければ、あなたはコードを再び見ることはできません。もし2段階認証アプリのアクセスを喪失し、なおかつ、リカバリーコードもないならば、あなたは自分のアカウントから閉め出されます。","authentication_methods":"認証方法","scan":{"title":"スキャン","desc":"あなたの2段階認証アプリを使って、このQRコードをスキャンするか、テキストキーを入力してください:","secret_code":"キー"},"verify":{"desc":"2段階認証を有効にするには、あなたの2段階認証アプリのコードを入力してください:"}},"attachmentRadius":"ファイル","attachments":"ファイル","avatar":"アバター","avatarAltRadius":"通知のアバター","avatarRadius":"アバター","background":"バックグラウンド","bio":"プロフィール","block_export":"ブロックのエクスポート","block_export_button":"ブロックをCSVファイルにエクスポートする","block_import":"ブロックのインポート","block_import_error":"ブロックのインポートに失敗しました","blocks_imported":"ブロックをインポートしました! 実際に処理されるまでに、しばらく時間がかかります。","blocks_tab":"ブロック","btnRadius":"ボタン","cBlue":"返信とフォロー","cGreen":"リピート","cOrange":"お気に入り","cRed":"キャンセル","change_password":"パスワードを変える","change_password_error":"パスワードを変えることが、できなかったかもしれません。","changed_password":"パスワードが、変わりました!","collapse_subject":"説明のある投稿をたたむ","composing":"投稿","confirm_new_password":"新しいパスワードの確認","current_avatar":"現在のアバター","current_password":"現在のパスワード","current_profile_banner":"現在のプロフィールバナー","data_import_export_tab":"インポートとエクスポート","default_vis":"デフォルトの公開範囲","delete_account":"アカウントを消す","delete_account_description":"あなたのデータが消えて、アカウントが使えなくなります。","delete_account_error":"アカウントを消すことが、できなかったかもしれません。インスタンスの管理者に、連絡してください。","delete_account_instructions":"本当にアカウントを消してもいいなら、パスワードを入力してください。","discoverable":"検索などのサービスでこのアカウントを見つけることを許可する","avatar_size_instruction":"アバターの大きさは、150×150ピクセルか、それよりも大きくするといいです。","pad_emoji":"ピッカーから絵文字を挿入するとき、絵文字の両側にスペースを入れる","export_theme":"保存","filtering":"フィルタリング","filtering_explanation":"これらの言葉を含むすべてのものがミュートされます。1行に1つの言葉を書いてください","follow_export":"フォローのエクスポート","follow_export_button":"エクスポート","follow_export_processing":"お待ちください。まもなくファイルをダウンロードできます。","follow_import":"フォローのインポート","follow_import_error":"フォローのインポートがエラーになりました","follows_imported":"フォローがインポートされました! 少し時間がかかるかもしれません。","foreground":"フォアグラウンド","general":"全般","hide_attachments_in_convo":"スレッドのファイルを隠す","hide_attachments_in_tl":"タイムラインのファイルを隠す","hide_muted_posts":"ミュートしているユーザーの投稿を隠す","max_thumbnails":"投稿に含まれるサムネイルの最大数","hide_isp":"インスタンス固有パネルを隠す","preload_images":"画像を先読みする","use_one_click_nsfw":"NSFWなファイルを1クリックで開く","hide_post_stats":"投稿の統計を隠す (例: お気に入りの数)","hide_user_stats":"ユーザーの統計を隠す (例: フォロワーの数)","hide_filtered_statuses":"フィルターされた投稿を隠す","import_blocks_from_a_csv_file":"CSVファイルからブロックをインポートする","import_followers_from_a_csv_file":"CSVファイルからフォローをインポートする","import_theme":"ロード","inputRadius":"インプットフィールド","checkboxRadius":"チェックボックス","instance_default":"(デフォルト: {value})","instance_default_simple":"(デフォルト)","interface":"インターフェース","interfaceLanguage":"インターフェースの言語","invalid_theme_imported":"このファイルはPleromaのテーマではありません。テーマは変更されませんでした。","limited_availability":"あなたのブラウザではできません","links":"リンク","lock_account_description":"あなたが認めた人だけ、あなたのアカウントをフォローできる","loop_video":"ビデオを繰り返す","loop_video_silent_only":"音のないビデオだけ繰り返す","mutes_tab":"ミュート","play_videos_in_modal":"ビデオをメディアビューアーで見る","use_contain_fit":"画像のサムネイルを、切り抜かない","name":"名前","name_bio":"名前とプロフィール","new_password":"新しいパスワード","notification_visibility":"表示する通知","notification_visibility_follows":"フォロー","notification_visibility_likes":"お気に入り","notification_visibility_mentions":"メンション","notification_visibility_repeats":"リピート","no_rich_text_description":"リッチテキストを使わない","no_blocks":"ブロックはありません","no_mutes":"ミュートはありません","hide_follows_description":"フォローしている人を見せない","hide_followers_description":"フォロワーを見せない","hide_follows_count_description":"フォローしている人の数を見せない","hide_followers_count_description":"フォロワーの数を見せない","show_admin_badge":"\\"管理者\\"のバッジを見せる","show_moderator_badge":"\\"モデレーター\\"のバッジを見せる","nsfw_clickthrough":"NSFWなファイルを隠す","oauth_tokens":"OAuthトークン","token":"トークン","refresh_token":"トークンを更新","valid_until":"まで有効","revoke_token":"取り消す","panelRadius":"パネル","pause_on_unfocused":"タブにフォーカスがないときストリーミングを止める","presets":"プリセット","profile_background":"プロフィールの背景","profile_banner":"プロフィールのバナー","profile_tab":"プロフィール","radii_help":"インターフェースの丸さを設定する","replies_in_timeline":"タイムラインのリプライ","reply_visibility_all":"すべてのリプライを見る","reply_visibility_following":"私に宛てられたリプライと、フォローしている人からのリプライを見る","reply_visibility_self":"私に宛てられたリプライを見る","autohide_floating_post_button":"新しい投稿ボタンを自動的に隠す (モバイル)","saving_err":"設定を保存できませんでした","saving_ok":"設定を保存しました","search_user_to_block":"ブロックしたいユーザーを検索","search_user_to_mute":"ミュートしたいユーザーを検索","security_tab":"セキュリティ","scope_copy":"返信するとき、公開範囲をコピーする (DMの公開範囲は、常にコピーされます)","minimal_scopes_mode":"公開範囲選択オプションを最小にする","set_new_avatar":"新しいアバターを設定する","set_new_profile_background":"新しいプロフィールのバックグラウンドを設定する","set_new_profile_banner":"新しいプロフィールバナーを設定する","settings":"設定","subject_input_always_show":"サブジェクトフィールドをいつでも表示する","subject_line_behavior":"返信するときサブジェクトをコピーする","subject_line_email":"メール風: \\"re: サブジェクト\\"","subject_line_mastodon":"マストドン風: そのままコピー","subject_line_noop":"コピーしない","post_status_content_type":"投稿のコンテントタイプ","stop_gifs":"カーソルを重ねたとき、GIFを動かす","streaming":"上までスクロールしたとき、自動的にストリーミングする","text":"文字","theme":"テーマ","theme_help":"カラーテーマをカスタマイズできます。","theme_help_v2_1":"チェックボックスをONにすると、コンポーネントごとに、色と透明度をオーバーライドできます。「すべてクリア」ボタンを押すと、すべてのオーバーライドをやめます。","theme_help_v2_2":"バックグラウンドとテキストのコントラストを表すアイコンがあります。マウスをホバーすると、詳しい説明が出ます。透明な色を使っているときは、最悪の場合のコントラストが示されます。","tooltipRadius":"ツールチップとアラート","upload_a_photo":"画像をアップロード","user_settings":"ユーザー設定","values":{"false":"いいえ","true":"はい"},"notifications":"通知","notification_mutes":"特定のユーザーからの通知を止めるには、ミュートしてください。","notification_blocks":"ブロックしているユーザーからの通知は、すべて止まります。","enable_web_push_notifications":"ウェブプッシュ通知を許可する","style":{"switcher":{"keep_color":"色を残す","keep_shadows":"影を残す","keep_opacity":"透明度を残す","keep_roundness":"丸さを残す","keep_fonts":"フォントを残す","save_load_hint":"「残す」オプションをONにすると、テーマを選んだときとロードしたとき、現在の設定を残します。また、テーマをエクスポートするとき、これらのオプションを維持します。すべてのチェックボックスをOFFにすると、テーマをエクスポートしたとき、すべての設定を保存します。","reset":"リセット","clear_all":"すべてクリア","clear_opacity":"透明度をクリア","help":{"snapshot_missing":"テーマのスナップショットがありません。思っていた見た目と違うかもしれません。","migration_snapshot_ok":"念のために、テーマのスナップショットが読み込まれました。テーマのデータを読み込むことができます。","fe_downgraded":"フロントエンドが前のバージョンに戻りました。","fe_upgraded":"フロントエンドと一緒に、テーマエンジンが新しくなりました。","older_version_imported":"古いフロントエンドで作られたファイルをインポートしました。","future_version_imported":"新しいフロントエンドで作られたファイルをインポートしました。","v2_imported":"古いフロントエンドのためのファイルをインポートしました。設定した通りにならないかもしれません。","upgraded_from_v2":"フロントエンドが新しくなったので、今までの見た目と少し違うかもしれません。","snapshot_source_mismatch":"フロントエンドがロールバックと更新を繰り返したため、バージョンが競合しています。","migration_napshot_gone":"スナップショットがありません、覚えているものと見た目が違うかもしれません。","snapshot_present":"テーマのスナップショットが読み込まれました。設定は上書きされました。代わりとして実データを読み込むことができます。"},"use_source":"新しいバージョン","use_snapshot":"古いバージョン","load_theme":"テーマの読み込み","keep_as_is":"変更しない"},"common":{"color":"色","opacity":"透明度","contrast":{"hint":"コントラストは {ratio} です。{level}。({context})","level":{"aa":"AAレベルガイドライン (最低限) を満たします","aaa":"AAAレベルガイドライン (推奨) を満たします","bad":"ガイドラインを満たしません"},"context":{"18pt":"大きい (18ポイント以上) テキスト","text":"テキスト"}}},"common_colors":{"_tab_label":"共通","main":"共通の色","foreground_hint":"「詳細」タブで、もっと細かく設定できます","rgbo":"アイコンとアクセントとバッジ"},"advanced_colors":{"_tab_label":"詳細","alert":"アラートのバックグラウンド","alert_error":"エラー","badge":"バッジのバックグラウンド","badge_notification":"通知","panel_header":"パネルヘッダー","top_bar":"トップバー","borders":"境界","buttons":"ボタン","inputs":"インプットフィールド","faint_text":"薄いテキスト","alert_neutral":"それ以外","chat":{"border":"境界線","outgoing":"送信","incoming":"受信"},"tabs":"タブ","toggled":"切り替えたとき","disabled":"無効なとき","selectedMenu":"選択されたメニューアイテム","selectedPost":"選択された投稿","pressed":"押したとき","highlight":"強調された要素","icons":"アイコン","poll":"投票グラフ","wallpaper":"壁紙","underlay":"アンダーレイ","popover":"ツールチップ、メニュー、ポップオーバー","post":"投稿/プロフィール","alert_warning":"警告"},"radii":{"_tab_label":"丸さ"},"shadows":{"_tab_label":"光と影","component":"コンポーネント","override":"オーバーライド","shadow_id":"影 #{value}","blur":"ぼかし","spread":"広がり","inset":"内側","hint":"影の設定では、色の値として --variable を使うことができます。これはCSS3変数です。ただし、透明度の設定は、効かなくなります。","filter_hint":{"always_drop_shadow":"ブラウザーがサポートしていれば、常に {0} が使われます。","drop_shadow_syntax":"{0} は、{1} パラメーターと {2} キーワードをサポートしていません。","avatar_inset":"内側の影と外側の影を同時に使うと、透明なアバターの表示が乱れます。","spread_zero":"広がりが 0 よりも大きな影は、0 と同じです","inset_classic":"内側の影は {0} を使います"},"components":{"panel":"パネル","panelHeader":"パネルヘッダー","topBar":"トップバー","avatar":"ユーザーアバター (プロフィール)","avatarStatus":"ユーザーアバター (投稿)","popup":"ポップアップとツールチップ","button":"ボタン","buttonHover":"ボタン (ホバー)","buttonPressed":"ボタン (押されているとき)","buttonPressedHover":"ボタン (ホバー、かつ、押されているとき)","input":"インプットフィールド"},"hintV3":"影の場合は、 {0} 表記を使って他の色スロットを使うこともできます。"},"fonts":{"_tab_label":"フォント","help":"「カスタム」を選んだときは、システムにあるフォントの名前を、正しく入力してください。","components":{"interface":"インターフェース","input":"インプットフィールド","post":"投稿","postCode":"等幅 (投稿がリッチテキストであるとき)"},"family":"フォント名","size":"大きさ (px)","weight":"太さ","custom":"カスタム"},"preview":{"header":"プレビュー","content":"本文","error":"エラーの例","button":"ボタン","text":"これは{0}と{1}の例です","mono":"monospace","input":"羽田空港に着きました。","faint_link":"とても助けになるマニュアル","fine_print":"私たちの{0}を、読まないでください!","header_faint":"エラーではありません","checkbox":"利用規約を読みました","link":"ハイパーリンク"}},"version":{"title":"バージョン","backend_version":"バックエンドのバージョン","frontend_version":"フロントエンドのバージョン"},"notification_setting_hide_notification_contents":"送った人と内容を、プッシュ通知に表示しない","notification_setting_privacy":"プライバシー","notification_setting_block_from_strangers":"フォローしていないユーザーからの通知を拒否する","notification_setting_filters":"フィルター","fun":"お楽しみ","virtual_scrolling":"タイムラインの描画を最適化する","type_domains_to_mute":"ミュートしたいドメインを検索","useStreamingApiWarning":"(実験中で、投稿を取りこぼすかもしれないので、おすすめしません)","useStreamingApi":"投稿と通知を、すぐに受け取る","user_mutes":"ユーザー","reset_background_confirm":"本当にバックグラウンドを初期化しますか?","reset_banner_confirm":"本当にバナーを初期化しますか?","reset_avatar_confirm":"本当にアバターを初期化しますか?","hide_wallpaper":"インスタンスのバックグラウンドを隠す","reset_profile_background":"プロフィールのバックグラウンドを初期化","reset_profile_banner":"プロフィールのバナーを初期化","reset_avatar":"アバターを初期化","notification_visibility_emoji_reactions":"リアクション","notification_visibility_moves":"ユーザーの引っ越し","new_email":"新しいメールアドレス","profile_fields":{"value":"内容","name":"ラベル","add_field":"枠を追加","label":"プロフィール補足情報"},"accent":"アクセント","mutes_imported":"ミュートをインポートしました!少し時間がかかるかもしれません。","emoji_reactions_on_timeline":"絵文字リアクションをタイムラインに表示","domain_mutes":"ドメイン","mutes_and_blocks":"ミュートとブロック","chatMessageRadius":"チャットメッセージ","change_email_error":"メールアドレスを変えることが、できなかったかもしれません。","changed_email":"メールアドレスが、変わりました!","change_email":"メールアドレスを変える","bot":"これは bot アカウントです","mute_export_button":"ミュートをCSVファイルにエクスポートする","import_mutes_from_a_csv_file":"CSVファイルからミュートをインポートする","mute_import_error":"ミュートのインポートに失敗しました","mute_import":"ミュートのインポート","mute_export":"ミュートのエクスポート","allow_following_move":"フォロー中のアカウントが引っ越したとき、自動フォローを許可する","setting_changed":"規定の設定と異なっています","greentext":"引用を緑色で表示","sensitive_by_default":"はじめから投稿をセンシティブとして設定","more_settings":"その他の設定","reply_visibility_self_short":"自分宛のリプライを見る","reply_visibility_following_short":"フォローしている人に宛てられたリプライを見る","hide_all_muted_posts":"ミュートした投稿を隠す","hide_media_previews":"メディアのプレビューを隠す","word_filter":"単語フィルタ","file_export_import":{"errors":{"invalid_file":"これはPleromaの設定をバックアップしたファイルではありません。"},"restore_settings":"設定をファイルから復元する","backup_settings_theme":"テーマを含む設定をファイルにバックアップする","backup_settings":"設定をファイルにバックアップする","backup_restore":"設定をバックアップ"},"save":"変更を保存"},"time":{"day":"{0}日","days":"{0}日","day_short":"{0}日","days_short":"{0}日","hour":"{0}時間","hours":"{0}時間","hour_short":"{0}時間","hours_short":"{0}時間","in_future":"{0}で","in_past":"{0}前","minute":"{0}分","minutes":"{0}分","minute_short":"{0}分","minutes_short":"{0}分","month":"{0}ヶ月前","months":"{0}ヶ月前","month_short":"{0}ヶ月前","months_short":"{0}ヶ月前","now":"たった今","now_short":"たった今","second":"{0}秒","seconds":"{0}秒","second_short":"{0}秒","seconds_short":"{0}秒","week":"{0}週間","weeks":"{0}週間","week_short":"{0}週間","weeks_short":"{0}週間","year":"{0}年","years":"{0}年","year_short":"{0}年","years_short":"{0}年"},"timeline":{"collapse":"たたむ","conversation":"スレッド","error_fetching":"読み込みがエラーになりました","load_older":"古いステータス","no_retweet_hint":"投稿を「フォロワーのみ」または「ダイレクト」にすると、リピートできなくなります","repeated":"リピート","show_new":"読み込み","up_to_date":"最新","no_more_statuses":"これで終わりです","no_statuses":"ステータスはありません","reload":"再読み込み","error":"タイムラインの読み込みに失敗しました: {0}"},"status":{"favorites":"お気に入り","repeats":"リピート","delete":"ステータスを削除","pin":"プロフィールにピン留め","unpin":"プロフィールのピン留めを外す","pinned":"ピン留め","delete_confirm":"本当にこのステータスを削除してもよろしいですか?","reply_to":"返信","replies_list":"返信:","mute_conversation":"スレッドをミュート","unmute_conversation":"スレッドのミュートを解除","nsfw":"閲覧注意","expand":"広げる","status_deleted":"この投稿は削除されました","hide_content":"隠す","show_content":"見る","hide_full_subject":"隠す","show_full_subject":"全部見る","thread_muted_and_words":"以下の単語を含むため:","thread_muted":"ミュートされたスレッド","external_source":"外部ソース","copy_link":"リンクをコピー","status_unavailable":"利用できません","unbookmark":"ブックマーク解除","bookmark":"ブックマーク"},"user_card":{"approve":"受け入れ","block":"ブロック","blocked":"ブロックしています!","deny":"お断り","favorites":"お気に入り","follow":"フォロー","follow_sent":"リクエストを送りました!","follow_progress":"リクエストしています…","follow_again":"再びリクエストを送りますか?","follow_unfollow":"フォローをやめる","followees":"フォロー","followers":"フォロワー","following":"フォローしています!","follows_you":"フォローされました!","its_you":"これはあなたです!","media":"メディア","mention":"メンション","mute":"ミュート","muted":"ミュートしています","per_day":"/日","remote_follow":"リモートフォロー","report":"通報","statuses":"ステータス","subscribe":"購読","unsubscribe":"購読を解除","unblock":"ブロック解除","unblock_progress":"ブロックを解除しています…","block_progress":"ブロックしています…","unmute":"ミュート解除","unmute_progress":"ミュートを解除しています…","mute_progress":"ミュートしています…","admin_menu":{"moderation":"モデレーション","grant_admin":"管理者権限を付与","revoke_admin":"管理者権限を解除","grant_moderator":"モデレーター権限を付与","revoke_moderator":"モデレーター権限を解除","activate_account":"アカウントをアクティブにする","deactivate_account":"アカウントをアクティブでなくする","delete_account":"アカウントを削除","force_nsfw":"すべての投稿をNSFWにする","strip_media":"投稿からメディアを除去する","force_unlisted":"投稿を未収載にする","sandbox":"投稿をフォロワーのみにする","disable_remote_subscription":"他のインスタンスからフォローされないようにする","disable_any_subscription":"フォローされないようにする","quarantine":"他のインスタンスからの投稿を止める","delete_user":"ユーザーを削除","delete_user_confirmation":"あなたの精神状態に何か問題はございませんか? この操作を取り消すことはできません。"},"roles":{"moderator":"モデレーター","admin":"管理者"},"show_repeats":"リピートを見る","hide_repeats":"リピートを隠す","message":"メッセージ","hidden":"隠す","bot":"bot","highlight":{"solid":"背景を単色にする","striped":"背景を縞模様にする","side":"端に線を付ける","disabled":"強調しない"}},"user_profile":{"timeline_title":"ユーザータイムライン","profile_does_not_exist":"申し訳ない。このプロフィールは存在しません。","profile_loading_error":"申し訳ない。プロフィールの読み込みがエラーになりました。"},"user_reporting":{"title":"通報する: {0}","add_comment_description":"この通報は、あなたのインスタンスのモデレーターに送られます。このアカウントを通報する理由を説明することができます:","additional_comments":"追加のコメント","forward_description":"このアカウントは他のサーバーに置かれています。この通報のコピーをリモートのサーバーに送りますか?","forward_to":"転送する: {0}","submit":"送信","generic_error":"あなたのリクエストを処理しようとしましたが、エラーになりました。"},"who_to_follow":{"more":"詳細","who_to_follow":"おすすめユーザー"},"tool_tip":{"media_upload":"メディアをアップロード","repeat":"リピート","reply":"返信","favorite":"お気に入り","user_settings":"ユーザー設定","bookmark":"ブックマーク","reject_follow_request":"フォローリクエストを拒否","accept_follow_request":"フォローリクエストを許可","add_reaction":"リアクションを追加"},"upload":{"error":{"base":"アップロードに失敗しました。","file_too_big":"ファイルが大きすぎます [{filesize} {filesizeunit} / {allowedsize} {allowedsizeunit}]","default":"しばらくしてから試してください","message":"アップロードに失敗: {0}"},"file_size_units":{"B":"B","KiB":"KiB","MiB":"MiB","GiB":"GiB","TiB":"TiB"}},"search":{"people":"人々","hashtags":"ハッシュタグ","person_talking":"{count} 人が話しています","people_talking":"{count} 人が話しています","no_results":"見つかりませんでした"},"password_reset":{"forgot_password":"パスワードを忘れましたか?","password_reset":"パスワードリセット","instruction":"メールアドレスまたはユーザー名を入力してください。パスワードをリセットするためのリンクを送信します。","placeholder":"メールアドレスまたはユーザー名","check_email":"パスワードをリセットするためのリンクが記載されたメールが届いているか確認してください。","return_home":"ホームページに戻る","too_many_requests":"試行回数の制限に達しました。しばらく時間を置いてから再試行してください。","password_reset_disabled":"このインスタンスではパスワードリセットは無効になっています。インスタンスの管理者に連絡してください。","password_reset_required_but_mailer_is_disabled":"パスワードの初期化が必要ですが、初期化は使えません。インスタンスの管理者に連絡してください。","password_reset_required":"ログインするためにパスワードを初期化してください。"},"about":{"mrf":{"mrf_policies_desc":"MRFポリシーは、インスタンスの振る舞いを操作します。以下のポリシーが有効になっています:","federation":"連合","simple":{"media_nsfw_desc":"このインスタンスでは、以下のインスタンスからの投稿に対して、メディアを閲覧注意に設定します:","media_nsfw":"メディアを閲覧注意に設定","media_removal_desc":"このインスタンスでは、以下のインスタンスからの投稿に対して、メディアを除去します:","media_removal":"メディア除去","ftl_removal":"「既知のネットワーク」タイムラインから除外","ftl_removal_desc":"このインスタンスでは、以下のインスタンスを「既知のネットワーク」タイムラインから除外します:","quarantine_desc":"このインスタンスでは、以下のインスタンスに対して公開投稿のみを送信します:","quarantine":"検疫","reject_desc":"このインスタンスでは、以下のインスタンスからのメッセージを受け付けません:","accept_desc":"このインスタンスでは、以下のインスタンスからのメッセージのみを受け付けます:","accept":"許可","simple_policies":"インスタンス固有のポリシー","reject":"拒否"},"mrf_policies":"有効なMRFポリシー","keyword":{"replace":"置き換え","ftl_removal":"「接続しているすべてのネットワーク」タイムラインから除外","keyword_policies":"キーワードポリシー","is_replaced_by":"→","reject":"拒否"}},"staff":"スタッフ"},"display_date":{"today":"今日"},"file_type":{"file":"ファイル","image":"画像","video":"ビデオ","audio":"オーディオ"},"remote_user_resolver":{"error":"見つかりませんでした。","searching_for":"検索中","remote_user_resolver":"リモートユーザーリゾルバ"},"errors":{"storage_unavailable":"ブラウザのストレージに接続できなかったため、ログインや設定情報は保存されません。Cookieを有効にしてください。"},"shoutbox":{"title":"Shoutbox"},"chats":{"empty_chat_list_placeholder":"チャットはありません。新規チャットのボタンを押して始めましょう!","error_sending_message":"メッセージの送信に失敗しました。","error_loading_chat":"チャットの読み込みに失敗しました。","delete_confirm":"このメッセージを本当に消してもいいですか?","more":"もっと見る","empty_message_error":"メッセージを入力して下さい","new":"新規チャット","chats":"チャット一覧","delete":"削除","message_user":"{nickname} にメッセージ","you":"あなた:"},"domain_mute_card":{"unmute_progress":"ミュート解除中…","unmute":"ミュート解除","mute_progress":"ミュート中…","mute":"ミュート"}}')}}]); -//# sourceMappingURL=20.abb0d332055536a87c38.js.map \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[20],{612:function(e){e.exports=JSON.parse('{"chat":{"title":"チャット"},"exporter":{"export":"エクスポート","processing":"処理中です。処理が完了すると、ファイルをダウンロードするよう指示があります"},"features_panel":{"chat":"チャット","gopher":"Gopher","media_proxy":"メディアプロクシ","scope_options":"公開範囲選択","text_limit":"文字の数","title":"有効な機能","who_to_follow":"おすすめユーザー","upload_limit":"ファイルサイズの上限","pleroma_chat_messages":"Pleroma チャット"},"finder":{"error_fetching_user":"ユーザー検索がエラーになりました","find_user":"ユーザーを探す"},"general":{"apply":"適用","submit":"送信","more":"続き","generic_error":"エラーになりました","optional":"省略可","show_more":"もっと見る","show_less":"たたむ","cancel":"キャンセル","disable":"無効","enable":"有効","confirm":"確認","verify":"検査","peek":"隠す","close":"閉じる","dismiss":"無視","retry":"もう一度お試し下さい","error_retry":"もう一度お試し下さい","loading":"読み込み中…","role":{"moderator":"モデレーター","admin":"管理者"}},"image_cropper":{"crop_picture":"画像を切り抜く","save":"保存","save_without_cropping":"切り抜かずに保存","cancel":"キャンセル"},"importer":{"submit":"送信","success":"正常にインポートされました。","error":"このファイルをインポートするとき、エラーが発生しました。"},"login":{"login":"ログイン","description":"OAuthでログイン","logout":"ログアウト","password":"パスワード","placeholder":"例: lain","register":"登録","username":"ユーザー名","hint":"会話に加わるには、ログインしてください","authentication_code":"認証コード","enter_recovery_code":"リカバリーコードを入力してください","enter_two_factor_code":"2段階認証コードを入力してください","recovery_code":"リカバリーコード","heading":{"totp":"2段階認証","recovery":"2段階リカバリー"}},"media_modal":{"previous":"前","next":"次"},"nav":{"about":"このインスタンスについて","back":"戻る","chat":"ローカルチャット","friend_requests":"フォローリクエスト","mentions":"通知","interactions":"インタラクション","dms":"ダイレクトメッセージ","public_tl":"公開タイムライン","timeline":"タイムライン","twkn":"すべてのネットワーク","user_search":"ユーザーを探す","search":"検索","who_to_follow":"おすすめユーザー","preferences":"設定","administration":"管理","bookmarks":"ブックマーク","timelines":"タイムライン","chats":"チャット","home_timeline":"ホームタイムライン"},"notifications":{"broken_favorite":"ステータスが見つかりません。探しています…","favorited_you":"あなたのステータスがお気に入りされました","followed_you":"フォローされました","load_older":"古い通知をみる","notifications":"通知","read":"読んだ!","repeated_you":"あなたのステータスがリピートされました","no_more_notifications":"通知はありません","reacted_with":"{0} でリアクションしました","migrated_to":"インスタンスを引っ越しました","follow_request":"あなたをフォローしたいです","error":"通知の取得に失敗しました: {0}"},"polls":{"add_poll":"投票を追加","add_option":"選択肢を追加","option":"選択肢","votes":"票","vote":"投票","type":"投票の形式","single_choice":"択一式","multiple_choices":"複数選択式","expiry":"投票期間","expires_in":"投票は {0} で終了します","expired":"投票は {0} 前に終了しました","not_enough_options":"相異なる選択肢が不足しています","votes_count":"{count} 票 | {count} 票","people_voted_count":"{count} 人投票 | {count} 人投票"},"emoji":{"stickers":"ステッカー","emoji":"絵文字","keep_open":"ピッカーを開いたままにする","search_emoji":"絵文字を検索","add_emoji":"絵文字を挿入","custom":"カスタム絵文字","unicode":"Unicode絵文字","load_all":"全 {emojiAmount} 絵文字を読み込む","load_all_hint":"最初の {saneAmount} 絵文字を読み込みました、全て読み込むと重くなる可能性があります。"},"stickers":{"add_sticker":"ステッカーを追加"},"interactions":{"favs_repeats":"リピートとお気に入り","follows":"新しいフォロワー","load_older":"古いインタラクションを見る","moves":"ユーザーの引っ越し"},"post_status":{"new_status":"投稿する","account_not_locked_warning":"あなたのアカウントは {0} ではありません。あなたをフォローすれば、誰でも、フォロワー限定のステータスを読むことができます。","account_not_locked_warning_link":"ロックされたアカウント","attachments_sensitive":"ファイルをNSFWにする","content_type":{"text/plain":"プレーンテキスト","text/html":"HTML","text/markdown":"Markdown","text/bbcode":"BBCode"},"content_warning":"説明 (省略可)","default":"羽田空港に着きました。","direct_warning_to_all":"この投稿は、メンションされたすべてのユーザーが、見ることができます。","direct_warning_to_first_only":"この投稿は、メッセージの冒頭でメンションされたユーザーだけが、見ることができます。","direct_warning":"このステータスは、メンションされたユーザーだけが、読むことができます。","posting":"投稿","scope_notice":{"public":"この投稿は、誰でも見ることができます","private":"この投稿は、あなたのフォロワーだけが、見ることができます","unlisted":"この投稿は、パブリックタイムラインと、接続しているすべてのネットワークには、表示されません"},"scope":{"direct":"ダイレクト: メンションされたユーザーのみに届きます","private":"フォロワー限定: フォロワーのみに届きます","public":"パブリック: 公開タイムラインに届きます","unlisted":"アンリステッド: 公開タイムラインに届きません"},"media_description_error":"メディアのアップロードに失敗しました。もう一度お試しください","empty_status_error":"投稿内容を入力してください","preview_empty":"何もありません","preview":"プレビュー","media_description":"メディアの説明","post":"投稿"},"registration":{"bio":"プロフィール","email":"Eメール","fullname":"スクリーンネーム","password_confirm":"パスワードの確認","registration":"登録","token":"招待トークン","captcha":"CAPTCHA","new_captcha":"文字が読めないときは、画像をクリックすると、新しい画像になります","username_placeholder":"例: lain","fullname_placeholder":"例: 岩倉玲音","bio_placeholder":"例:\\nこんにちは。私は玲音。\\n私はアニメのキャラクターで、日本の郊外に住んでいます。私をWiredで見たことがあるかもしれません。","validations":{"username_required":"必須","fullname_required":"必須","email_required":"必須","password_required":"必須","password_confirmation_required":"必須","password_confirmation_match":"パスワードが違います"},"reason_placeholder":"このインスタンスは、新規登録を手動で受け付けています。\\n登録したい理由を、インスタンスの管理者に教えてください。","reason":"登録するための目的","register":"登録"},"selectable_list":{"select_all":"すべて選択"},"settings":{"app_name":"アプリの名称","security":"セキュリティ","enter_current_password_to_confirm":"あなたのアイデンティティを証明するため、現在のパスワードを入力してください","mfa":{"otp":"OTP","setup_otp":"OTPのセットアップ","wait_pre_setup_otp":"OTPのプリセット","confirm_and_enable":"OTPの確認と有効化","title":"2段階認証","generate_new_recovery_codes":"新しいリカバリーコードを生成","warning_of_generate_new_codes":"新しいリカバリーコードを生成すると、古いコードは使用できなくなります。","recovery_codes":"リカバリーコード。","waiting_a_recovery_codes":"バックアップコードを受信しています…","recovery_codes_warning":"コードを紙に書くか、安全な場所に保存してください。そうでなければ、あなたはコードを再び見ることはできません。もし2段階認証アプリのアクセスを喪失し、なおかつ、リカバリーコードもないならば、あなたは自分のアカウントから閉め出されます。","authentication_methods":"認証方法","scan":{"title":"スキャン","desc":"あなたの2段階認証アプリを使って、このQRコードをスキャンするか、テキストキーを入力してください:","secret_code":"キー"},"verify":{"desc":"2段階認証を有効にするには、あなたの2段階認証アプリのコードを入力してください:"}},"attachmentRadius":"ファイル","attachments":"ファイル","avatar":"アバター","avatarAltRadius":"通知のアバター","avatarRadius":"アバター","background":"バックグラウンド","bio":"プロフィール","block_export":"ブロックのエクスポート","block_export_button":"ブロックをCSVファイルにエクスポートする","block_import":"ブロックのインポート","block_import_error":"ブロックのインポートに失敗しました","blocks_imported":"ブロックをインポートしました! 実際に処理されるまでに、しばらく時間がかかります。","blocks_tab":"ブロック","btnRadius":"ボタン","cBlue":"返信とフォロー","cGreen":"リピート","cOrange":"お気に入り","cRed":"キャンセル","change_password":"パスワードを変える","change_password_error":"パスワードを変えることが、できなかったかもしれません。","changed_password":"パスワードが、変わりました!","collapse_subject":"説明のある投稿をたたむ","composing":"投稿","confirm_new_password":"新しいパスワードの確認","current_avatar":"現在のアバター","current_password":"現在のパスワード","current_profile_banner":"現在のプロフィールバナー","data_import_export_tab":"インポートとエクスポート","default_vis":"デフォルトの公開範囲","delete_account":"アカウントを消す","delete_account_description":"あなたのデータが消えて、アカウントが使えなくなります。","delete_account_error":"アカウントを消すことが、できなかったかもしれません。インスタンスの管理者に、連絡してください。","delete_account_instructions":"本当にアカウントを消してもいいなら、パスワードを入力してください。","discoverable":"検索などのサービスでこのアカウントを見つけることを許可する","avatar_size_instruction":"アバターの大きさは、150×150ピクセルか、それよりも大きくするといいです。","pad_emoji":"ピッカーから絵文字を挿入するとき、絵文字の両側にスペースを入れる","export_theme":"保存","filtering":"フィルタリング","filtering_explanation":"これらの言葉を含むすべてのものがミュートされます。1行に1つの言葉を書いてください","follow_export":"フォローのエクスポート","follow_export_button":"エクスポート","follow_export_processing":"お待ちください。まもなくファイルをダウンロードできます。","follow_import":"フォローのインポート","follow_import_error":"フォローのインポートがエラーになりました","follows_imported":"フォローがインポートされました! 少し時間がかかるかもしれません。","foreground":"フォアグラウンド","general":"全般","hide_attachments_in_convo":"スレッドのファイルを隠す","hide_attachments_in_tl":"タイムラインのファイルを隠す","hide_muted_posts":"ミュートしているユーザーの投稿を隠す","max_thumbnails":"投稿に含まれるサムネイルの最大数","hide_isp":"インスタンス固有パネルを隠す","preload_images":"画像を先読みする","use_one_click_nsfw":"NSFWなファイルを1クリックで開く","hide_post_stats":"投稿の統計を隠す (例: お気に入りの数)","hide_user_stats":"ユーザーの統計を隠す (例: フォロワーの数)","hide_filtered_statuses":"フィルターされた投稿を隠す","import_blocks_from_a_csv_file":"CSVファイルからブロックをインポートする","import_followers_from_a_csv_file":"CSVファイルからフォローをインポートする","import_theme":"ロード","inputRadius":"インプットフィールド","checkboxRadius":"チェックボックス","instance_default":"(デフォルト: {value})","instance_default_simple":"(デフォルト)","interface":"インターフェース","interfaceLanguage":"インターフェースの言語","invalid_theme_imported":"このファイルはPleromaのテーマではありません。テーマは変更されませんでした。","limited_availability":"あなたのブラウザではできません","links":"リンク","lock_account_description":"あなたが認めた人だけ、あなたのアカウントをフォローできる","loop_video":"ビデオを繰り返す","loop_video_silent_only":"音のないビデオだけ繰り返す","mutes_tab":"ミュート","play_videos_in_modal":"ビデオをメディアビューアーで見る","use_contain_fit":"画像のサムネイルを、切り抜かない","name":"名前","name_bio":"名前とプロフィール","new_password":"新しいパスワード","notification_visibility":"表示する通知","notification_visibility_follows":"フォロー","notification_visibility_likes":"お気に入り","notification_visibility_mentions":"メンション","notification_visibility_repeats":"リピート","no_rich_text_description":"リッチテキストを使わない","no_blocks":"ブロックはありません","no_mutes":"ミュートはありません","hide_follows_description":"フォローしている人を見せない","hide_followers_description":"フォロワーを見せない","hide_follows_count_description":"フォローしている人の数を見せない","hide_followers_count_description":"フォロワーの数を見せない","show_admin_badge":"\\"管理者\\"のバッジを見せる","show_moderator_badge":"\\"モデレーター\\"のバッジを見せる","nsfw_clickthrough":"NSFWなファイルを隠す","oauth_tokens":"OAuthトークン","token":"トークン","refresh_token":"トークンを更新","valid_until":"まで有効","revoke_token":"取り消す","panelRadius":"パネル","pause_on_unfocused":"タブにフォーカスがないときストリーミングを止める","presets":"プリセット","profile_background":"プロフィールの背景","profile_banner":"プロフィールのバナー","profile_tab":"プロフィール","radii_help":"インターフェースの丸さを設定する","replies_in_timeline":"タイムラインのリプライ","reply_visibility_all":"すべてのリプライを見る","reply_visibility_following":"私に宛てられたリプライと、フォローしている人からのリプライを見る","reply_visibility_self":"私に宛てられたリプライを見る","autohide_floating_post_button":"新しい投稿ボタンを自動的に隠す (モバイル)","saving_err":"設定を保存できませんでした","saving_ok":"設定を保存しました","search_user_to_block":"ブロックしたいユーザーを検索","search_user_to_mute":"ミュートしたいユーザーを検索","security_tab":"セキュリティ","scope_copy":"返信するとき、公開範囲をコピーする (DMの公開範囲は、常にコピーされます)","minimal_scopes_mode":"公開範囲選択オプションを最小にする","set_new_avatar":"新しいアバターを設定する","set_new_profile_background":"新しいプロフィールのバックグラウンドを設定する","set_new_profile_banner":"新しいプロフィールバナーを設定する","settings":"設定","subject_input_always_show":"サブジェクトフィールドをいつでも表示する","subject_line_behavior":"返信するときサブジェクトをコピーする","subject_line_email":"メール風: \\"re: サブジェクト\\"","subject_line_mastodon":"マストドン風: そのままコピー","subject_line_noop":"コピーしない","post_status_content_type":"投稿のコンテントタイプ","stop_gifs":"カーソルを重ねたとき、GIFを動かす","streaming":"上までスクロールしたとき、自動的にストリーミングする","text":"文字","theme":"テーマ","theme_help":"カラーテーマをカスタマイズできます。","theme_help_v2_1":"チェックボックスをONにすると、コンポーネントごとに、色と透明度をオーバーライドできます。「すべてクリア」ボタンを押すと、すべてのオーバーライドをやめます。","theme_help_v2_2":"バックグラウンドとテキストのコントラストを表すアイコンがあります。マウスをホバーすると、詳しい説明が出ます。透明な色を使っているときは、最悪の場合のコントラストが示されます。","tooltipRadius":"ツールチップとアラート","upload_a_photo":"画像をアップロード","user_settings":"ユーザー設定","values":{"false":"いいえ","true":"はい"},"notifications":"通知","notification_mutes":"特定のユーザーからの通知を止めるには、ミュートしてください。","notification_blocks":"ブロックしているユーザーからの通知は、すべて止まります。","enable_web_push_notifications":"ウェブプッシュ通知を許可する","style":{"switcher":{"keep_color":"色を残す","keep_shadows":"影を残す","keep_opacity":"透明度を残す","keep_roundness":"丸さを残す","keep_fonts":"フォントを残す","save_load_hint":"「残す」オプションをONにすると、テーマを選んだときとロードしたとき、現在の設定を残します。また、テーマをエクスポートするとき、これらのオプションを維持します。すべてのチェックボックスをOFFにすると、テーマをエクスポートしたとき、すべての設定を保存します。","reset":"リセット","clear_all":"すべてクリア","clear_opacity":"透明度をクリア","help":{"snapshot_missing":"テーマのスナップショットがありません。思っていた見た目と違うかもしれません。","migration_snapshot_ok":"念のために、テーマのスナップショットが読み込まれました。テーマのデータを読み込むことができます。","fe_downgraded":"フロントエンドが前のバージョンに戻りました。","fe_upgraded":"フロントエンドと一緒に、テーマエンジンが新しくなりました。","older_version_imported":"古いフロントエンドで作られたファイルをインポートしました。","future_version_imported":"新しいフロントエンドで作られたファイルをインポートしました。","v2_imported":"古いフロントエンドのためのファイルをインポートしました。設定した通りにならないかもしれません。","upgraded_from_v2":"フロントエンドが新しくなったので、今までの見た目と少し違うかもしれません。","snapshot_source_mismatch":"フロントエンドがロールバックと更新を繰り返したため、バージョンが競合しています。","migration_napshot_gone":"スナップショットがありません、覚えているものと見た目が違うかもしれません。","snapshot_present":"テーマのスナップショットが読み込まれました。設定は上書きされました。代わりとして実データを読み込むことができます。"},"use_source":"新しいバージョン","use_snapshot":"古いバージョン","load_theme":"テーマの読み込み","keep_as_is":"変更しない"},"common":{"color":"色","opacity":"透明度","contrast":{"hint":"コントラストは {ratio} です。{level}。({context})","level":{"aa":"AAレベルガイドライン (最低限) を満たします","aaa":"AAAレベルガイドライン (推奨) を満たします","bad":"ガイドラインを満たしません"},"context":{"18pt":"大きい (18ポイント以上) テキスト","text":"テキスト"}}},"common_colors":{"_tab_label":"共通","main":"共通の色","foreground_hint":"「詳細」タブで、もっと細かく設定できます","rgbo":"アイコンとアクセントとバッジ"},"advanced_colors":{"_tab_label":"詳細","alert":"アラートのバックグラウンド","alert_error":"エラー","badge":"バッジのバックグラウンド","badge_notification":"通知","panel_header":"パネルヘッダー","top_bar":"トップバー","borders":"境界","buttons":"ボタン","inputs":"インプットフィールド","faint_text":"薄いテキスト","alert_neutral":"それ以外","chat":{"border":"境界線","outgoing":"送信","incoming":"受信"},"tabs":"タブ","toggled":"切り替えたとき","disabled":"無効なとき","selectedMenu":"選択されたメニューアイテム","selectedPost":"選択された投稿","pressed":"押したとき","highlight":"強調された要素","icons":"アイコン","poll":"投票グラフ","wallpaper":"壁紙","underlay":"アンダーレイ","popover":"ツールチップ、メニュー、ポップオーバー","post":"投稿/プロフィール","alert_warning":"警告"},"radii":{"_tab_label":"丸さ"},"shadows":{"_tab_label":"光と影","component":"コンポーネント","override":"オーバーライド","shadow_id":"影 #{value}","blur":"ぼかし","spread":"広がり","inset":"内側","hint":"影の設定では、色の値として --variable を使うことができます。これはCSS3変数です。ただし、透明度の設定は、効かなくなります。","filter_hint":{"always_drop_shadow":"ブラウザーがサポートしていれば、常に {0} が使われます。","drop_shadow_syntax":"{0} は、{1} パラメーターと {2} キーワードをサポートしていません。","avatar_inset":"内側の影と外側の影を同時に使うと、透明なアバターの表示が乱れます。","spread_zero":"広がりが 0 よりも大きな影は、0 と同じです","inset_classic":"内側の影は {0} を使います"},"components":{"panel":"パネル","panelHeader":"パネルヘッダー","topBar":"トップバー","avatar":"ユーザーアバター (プロフィール)","avatarStatus":"ユーザーアバター (投稿)","popup":"ポップアップとツールチップ","button":"ボタン","buttonHover":"ボタン (ホバー)","buttonPressed":"ボタン (押されているとき)","buttonPressedHover":"ボタン (ホバー、かつ、押されているとき)","input":"インプットフィールド"},"hintV3":"影の場合は、 {0} 表記を使って他の色スロットを使うこともできます。"},"fonts":{"_tab_label":"フォント","help":"「カスタム」を選んだときは、システムにあるフォントの名前を、正しく入力してください。","components":{"interface":"インターフェース","input":"インプットフィールド","post":"投稿","postCode":"等幅 (投稿がリッチテキストであるとき)"},"family":"フォント名","size":"大きさ (px)","weight":"太さ","custom":"カスタム"},"preview":{"header":"プレビュー","content":"本文","error":"エラーの例","button":"ボタン","text":"これは{0}と{1}の例です","mono":"monospace","input":"羽田空港に着きました。","faint_link":"とても助けになるマニュアル","fine_print":"私たちの{0}を、読まないでください!","header_faint":"エラーではありません","checkbox":"利用規約を読みました","link":"ハイパーリンク"}},"version":{"title":"バージョン","backend_version":"バックエンドのバージョン","frontend_version":"フロントエンドのバージョン"},"notification_setting_hide_notification_contents":"送った人と内容を、プッシュ通知に表示しない","notification_setting_privacy":"プライバシー","notification_setting_block_from_strangers":"フォローしていないユーザーからの通知を拒否する","notification_setting_filters":"フィルター","fun":"お楽しみ","virtual_scrolling":"タイムラインの描画を最適化する","type_domains_to_mute":"ミュートしたいドメインを検索","useStreamingApiWarning":"(実験中で、投稿を取りこぼすかもしれないので、おすすめしません)","useStreamingApi":"投稿と通知を、すぐに受け取る","user_mutes":"ユーザー","reset_background_confirm":"本当にバックグラウンドを初期化しますか?","reset_banner_confirm":"本当にバナーを初期化しますか?","reset_avatar_confirm":"本当にアバターを初期化しますか?","hide_wallpaper":"インスタンスのバックグラウンドを隠す","reset_profile_background":"プロフィールのバックグラウンドを初期化","reset_profile_banner":"プロフィールのバナーを初期化","reset_avatar":"アバターを初期化","notification_visibility_emoji_reactions":"リアクション","notification_visibility_moves":"ユーザーの引っ越し","new_email":"新しいメールアドレス","profile_fields":{"value":"内容","name":"ラベル","add_field":"枠を追加","label":"プロフィール補足情報"},"accent":"アクセント","mutes_imported":"ミュートをインポートしました!少し時間がかかるかもしれません。","emoji_reactions_on_timeline":"絵文字リアクションをタイムラインに表示","domain_mutes":"ドメイン","mutes_and_blocks":"ミュートとブロック","chatMessageRadius":"チャットメッセージ","change_email_error":"メールアドレスを変えることが、できなかったかもしれません。","changed_email":"メールアドレスが、変わりました!","change_email":"メールアドレスを変える","bot":"これは bot アカウントです","mute_export_button":"ミュートをCSVファイルにエクスポートする","import_mutes_from_a_csv_file":"CSVファイルからミュートをインポートする","mute_import_error":"ミュートのインポートに失敗しました","mute_import":"ミュートのインポート","mute_export":"ミュートのエクスポート","allow_following_move":"フォロー中のアカウントが引っ越したとき、自動フォローを許可する","setting_changed":"規定の設定と異なっています","greentext":"引用を緑色で表示","sensitive_by_default":"はじめから投稿をセンシティブとして設定","more_settings":"その他の設定","reply_visibility_self_short":"自分宛のリプライを見る","reply_visibility_following_short":"フォローしている人に宛てられたリプライを見る","hide_all_muted_posts":"ミュートした投稿を隠す","hide_media_previews":"メディアのプレビューを隠す","word_filter":"単語フィルタ","file_export_import":{"errors":{"invalid_file":"これはPleromaの設定をバックアップしたファイルではありません。"},"restore_settings":"設定をファイルから復元する","backup_settings_theme":"テーマを含む設定をファイルにバックアップする","backup_settings":"設定をファイルにバックアップする","backup_restore":"設定をバックアップ"},"save":"変更を保存"},"time":{"day":"{0}日","days":"{0}日","day_short":"{0}日","days_short":"{0}日","hour":"{0}時間","hours":"{0}時間","hour_short":"{0}時間","hours_short":"{0}時間","in_future":"{0}で","in_past":"{0}前","minute":"{0}分","minutes":"{0}分","minute_short":"{0}分","minutes_short":"{0}分","month":"{0}ヶ月前","months":"{0}ヶ月前","month_short":"{0}ヶ月前","months_short":"{0}ヶ月前","now":"たった今","now_short":"たった今","second":"{0}秒","seconds":"{0}秒","second_short":"{0}秒","seconds_short":"{0}秒","week":"{0}週間","weeks":"{0}週間","week_short":"{0}週間","weeks_short":"{0}週間","year":"{0}年","years":"{0}年","year_short":"{0}年","years_short":"{0}年"},"timeline":{"collapse":"たたむ","conversation":"スレッド","error_fetching":"読み込みがエラーになりました","load_older":"古いステータス","no_retweet_hint":"投稿を「フォロワーのみ」または「ダイレクト」にすると、リピートできなくなります","repeated":"リピート","show_new":"読み込み","up_to_date":"最新","no_more_statuses":"これで終わりです","no_statuses":"ステータスはありません","reload":"再読み込み","error":"タイムラインの読み込みに失敗しました: {0}"},"status":{"favorites":"お気に入り","repeats":"リピート","delete":"ステータスを削除","pin":"プロフィールにピン留め","unpin":"プロフィールのピン留めを外す","pinned":"ピン留め","delete_confirm":"本当にこのステータスを削除してもよろしいですか?","reply_to":"返信","replies_list":"返信:","mute_conversation":"スレッドをミュート","unmute_conversation":"スレッドのミュートを解除","nsfw":"閲覧注意","expand":"広げる","status_deleted":"この投稿は削除されました","hide_content":"隠す","show_content":"見る","hide_full_subject":"隠す","show_full_subject":"全部見る","thread_muted_and_words":"以下の単語を含むため:","thread_muted":"ミュートされたスレッド","external_source":"外部ソース","copy_link":"リンクをコピー","status_unavailable":"利用できません","unbookmark":"ブックマーク解除","bookmark":"ブックマーク"},"user_card":{"approve":"受け入れ","block":"ブロック","blocked":"ブロックしています!","deny":"お断り","favorites":"お気に入り","follow":"フォロー","follow_sent":"リクエストを送りました!","follow_progress":"リクエストしています…","follow_unfollow":"フォローをやめる","followees":"フォロー","followers":"フォロワー","following":"フォローしています!","follows_you":"フォローされました!","its_you":"これはあなたです!","media":"メディア","mention":"メンション","mute":"ミュート","muted":"ミュートしています","per_day":"/日","remote_follow":"リモートフォロー","report":"通報","statuses":"ステータス","subscribe":"購読","unsubscribe":"購読を解除","unblock":"ブロック解除","unblock_progress":"ブロックを解除しています…","block_progress":"ブロックしています…","unmute":"ミュート解除","unmute_progress":"ミュートを解除しています…","mute_progress":"ミュートしています…","admin_menu":{"moderation":"モデレーション","grant_admin":"管理者権限を付与","revoke_admin":"管理者権限を解除","grant_moderator":"モデレーター権限を付与","revoke_moderator":"モデレーター権限を解除","activate_account":"アカウントをアクティブにする","deactivate_account":"アカウントをアクティブでなくする","delete_account":"アカウントを削除","force_nsfw":"すべての投稿をNSFWにする","strip_media":"投稿からメディアを除去する","force_unlisted":"投稿を未収載にする","sandbox":"投稿をフォロワーのみにする","disable_remote_subscription":"他のインスタンスからフォローされないようにする","disable_any_subscription":"フォローされないようにする","quarantine":"他のインスタンスからの投稿を止める","delete_user":"ユーザーを削除","delete_user_confirmation":"あなたの精神状態に何か問題はございませんか? この操作を取り消すことはできません。"},"roles":{"moderator":"モデレーター","admin":"管理者"},"show_repeats":"リピートを見る","hide_repeats":"リピートを隠す","message":"メッセージ","hidden":"隠す","bot":"bot","highlight":{"solid":"背景を単色にする","striped":"背景を縞模様にする","side":"端に線を付ける","disabled":"強調しない"}},"user_profile":{"timeline_title":"ユーザータイムライン","profile_does_not_exist":"申し訳ない。このプロフィールは存在しません。","profile_loading_error":"申し訳ない。プロフィールの読み込みがエラーになりました。"},"user_reporting":{"title":"通報する: {0}","add_comment_description":"この通報は、あなたのインスタンスのモデレーターに送られます。このアカウントを通報する理由を説明することができます:","additional_comments":"追加のコメント","forward_description":"このアカウントは他のサーバーに置かれています。この通報のコピーをリモートのサーバーに送りますか?","forward_to":"転送する: {0}","submit":"送信","generic_error":"あなたのリクエストを処理しようとしましたが、エラーになりました。"},"who_to_follow":{"more":"詳細","who_to_follow":"おすすめユーザー"},"tool_tip":{"media_upload":"メディアをアップロード","repeat":"リピート","reply":"返信","favorite":"お気に入り","user_settings":"ユーザー設定","bookmark":"ブックマーク","reject_follow_request":"フォローリクエストを拒否","accept_follow_request":"フォローリクエストを許可","add_reaction":"リアクションを追加"},"upload":{"error":{"base":"アップロードに失敗しました。","file_too_big":"ファイルが大きすぎます [{filesize} {filesizeunit} / {allowedsize} {allowedsizeunit}]","default":"しばらくしてから試してください","message":"アップロードに失敗: {0}"},"file_size_units":{"B":"B","KiB":"KiB","MiB":"MiB","GiB":"GiB","TiB":"TiB"}},"search":{"people":"人々","hashtags":"ハッシュタグ","person_talking":"{count} 人が話しています","people_talking":"{count} 人が話しています","no_results":"見つかりませんでした"},"password_reset":{"forgot_password":"パスワードを忘れましたか?","password_reset":"パスワードリセット","instruction":"メールアドレスまたはユーザー名を入力してください。パスワードをリセットするためのリンクを送信します。","placeholder":"メールアドレスまたはユーザー名","check_email":"パスワードをリセットするためのリンクが記載されたメールが届いているか確認してください。","return_home":"ホームページに戻る","too_many_requests":"試行回数の制限に達しました。しばらく時間を置いてから再試行してください。","password_reset_disabled":"このインスタンスではパスワードリセットは無効になっています。インスタンスの管理者に連絡してください。","password_reset_required_but_mailer_is_disabled":"パスワードの初期化が必要ですが、初期化は使えません。インスタンスの管理者に連絡してください。","password_reset_required":"ログインするためにパスワードを初期化してください。"},"about":{"mrf":{"mrf_policies_desc":"MRFポリシーは、インスタンスの振る舞いを操作します。以下のポリシーが有効になっています:","federation":"連合","simple":{"media_nsfw_desc":"このインスタンスでは、以下のインスタンスからの投稿に対して、メディアを閲覧注意に設定します:","media_nsfw":"メディアを閲覧注意に設定","media_removal_desc":"このインスタンスでは、以下のインスタンスからの投稿に対して、メディアを除去します:","media_removal":"メディア除去","ftl_removal":"「既知のネットワーク」タイムラインから除外","ftl_removal_desc":"このインスタンスでは、以下のインスタンスを「既知のネットワーク」タイムラインから除外します:","quarantine_desc":"このインスタンスでは、以下のインスタンスに対して公開投稿のみを送信します:","quarantine":"検疫","reject_desc":"このインスタンスでは、以下のインスタンスからのメッセージを受け付けません:","accept_desc":"このインスタンスでは、以下のインスタンスからのメッセージのみを受け付けます:","accept":"許可","simple_policies":"インスタンス固有のポリシー","reject":"拒否"},"mrf_policies":"有効なMRFポリシー","keyword":{"replace":"置き換え","ftl_removal":"「接続しているすべてのネットワーク」タイムラインから除外","keyword_policies":"キーワードポリシー","is_replaced_by":"→","reject":"拒否"}},"staff":"スタッフ"},"display_date":{"today":"今日"},"file_type":{"file":"ファイル","image":"画像","video":"ビデオ","audio":"オーディオ"},"remote_user_resolver":{"error":"見つかりませんでした。","searching_for":"検索中","remote_user_resolver":"リモートユーザーリゾルバ"},"errors":{"storage_unavailable":"ブラウザのストレージに接続できなかったため、ログインや設定情報は保存されません。Cookieを有効にしてください。"},"shoutbox":{"title":"Shoutbox"},"chats":{"empty_chat_list_placeholder":"チャットはありません。新規チャットのボタンを押して始めましょう!","error_sending_message":"メッセージの送信に失敗しました。","error_loading_chat":"チャットの読み込みに失敗しました。","delete_confirm":"このメッセージを本当に消してもいいですか?","more":"もっと見る","empty_message_error":"メッセージを入力して下さい","new":"新規チャット","chats":"チャット一覧","delete":"削除","message_user":"{nickname} にメッセージ","you":"あなた:"},"domain_mute_card":{"unmute_progress":"ミュート解除中…","unmute":"ミュート解除","mute_progress":"ミュート中…","mute":"ミュート"}}')}}]); +//# sourceMappingURL=20.683b112f4dcea887f707.js.map \ No newline at end of file diff --git a/priv/static/static/js/20.683b112f4dcea887f707.js.map b/priv/static/static/js/20.683b112f4dcea887f707.js.map new file mode 100644 index 000000000..094f913db --- /dev/null +++ b/priv/static/static/js/20.683b112f4dcea887f707.js.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/20.683b112f4dcea887f707.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/20.abb0d332055536a87c38.js.map b/priv/static/static/js/20.abb0d332055536a87c38.js.map deleted file mode 100644 index 55c20779e..000000000 --- a/priv/static/static/js/20.abb0d332055536a87c38.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/20.abb0d332055536a87c38.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/21.6e952388ef8d5a0276dc.js.map b/priv/static/static/js/21.6e952388ef8d5a0276dc.js.map deleted file mode 100644 index 22d29b80c..000000000 --- a/priv/static/static/js/21.6e952388ef8d5a0276dc.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/21.6e952388ef8d5a0276dc.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/21.6e952388ef8d5a0276dc.js b/priv/static/static/js/21.b2844ccdcfc3c8191e8e.js similarity index 77% rename from priv/static/static/js/21.6e952388ef8d5a0276dc.js rename to priv/static/static/js/21.b2844ccdcfc3c8191e8e.js index 27ab1f65e..c363a2197 100644 --- a/priv/static/static/js/21.6e952388ef8d5a0276dc.js +++ b/priv/static/static/js/21.b2844ccdcfc3c8191e8e.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[21],{601:function(e){e.exports=JSON.parse('{"chat":{"title":"챗"},"features_panel":{"chat":"챗","gopher":"고퍼","media_proxy":"미디어 프록시","scope_options":"범위 옵션","text_limit":"텍스트 제한","title":"기능","who_to_follow":"팔로우 추천","upload_limit":"최대 파일용량","pleroma_chat_messages":"Pleroma 채트"},"finder":{"error_fetching_user":"사용자 정보 불러오기 실패","find_user":"사용자 찾기"},"general":{"apply":"적용","submit":"보내기","loading":"로딩중…","peek":"숨기기","close":"닫기","verify":"검사","confirm":"확인","enable":"유효","disable":"무효","cancel":"취소","dismiss":"무시","show_less":"접기","show_more":"더 보기","optional":"필수 아님","retry":"다시 시도하십시오","error_retry":"다시 시도하십시오","generic_error":"잘못되었습니다","more":"더 보기","role":{"moderator":"중재자","admin":"관리자"}},"login":{"login":"로그인","description":"OAuth로 로그인","logout":"로그아웃","password":"암호","placeholder":"예시: lain","register":"가입","username":"사용자 이름","heading":{"recovery":"2단계 복구","totp":"2단계인증"},"recovery_code":"복구 코드","enter_two_factor_code":"2단계인증 코드를 입력하십시오","enter_recovery_code":"복구 코드를 입력하십시오","authentication_code":"인증 코드","hint":"로그인하여 대화에 참가합시다"},"nav":{"about":"인스턴스 소개","back":"뒤로","chat":"로컬 챗","friend_requests":"팔로우 요청","mentions":"멘션","dms":"다이렉트 메시지","public_tl":"공개 타임라인","timeline":"타임라인","twkn":"알려진 네트워크","user_search":"사용자 검색","preferences":"환경설정","chats":"채트","timelines":"타임라인","who_to_follow":"추천된 사용자","search":"검색","bookmarks":"북마크","interactions":"대화","administration":"관리","home_timeline":"홈 타임라인"},"notifications":{"broken_favorite":"알 수 없는 게시물입니다, 검색합니다…","favorited_you":"당신의 게시물을 즐겨찾기","followed_you":"당신을 팔로우","load_older":"오래 된 알림 불러오기","notifications":"알림","read":"읽음!","repeated_you":"당신의 게시물을 리핏","no_more_notifications":"알림이 없습니다","migrated_to":"이사했습니다","reacted_with":"{0} 로 반응했습니다","error":"알림 불러오기 실패: {0}","follow_request":"당신에게 팔로우 신청"},"post_status":{"new_status":"새 게시물 게시","account_not_locked_warning":"당신의 계정은 {0} 상태가 아닙니다. 누구나 당신을 팔로우 하고 팔로워 전용 게시물을 볼 수 있습니다.","account_not_locked_warning_link":"잠김","attachments_sensitive":"첨부물을 민감함으로 설정","content_type":{"text/plain":"평문","text/bbcode":"BBCode","text/markdown":"Markdown","text/html":"HTML"},"content_warning":"주제 (필수 아님)","default":"인천공항에 도착했습니다.","direct_warning":"이 게시물을 멘션 된 사용자들에게만 보여집니다","posting":"게시","scope":{"direct":"다이렉트 - 멘션 된 사용자들에게만","private":"팔로워 전용 - 팔로워들에게만","public":"공개 - 공개 타임라인으로","unlisted":"비공개 - 공개 타임라인에 게시 안 함"},"preview_empty":"아무것도 없습니다","preview":"미리보기","scope_notice":{"public":"이 글은 누구나 볼 수 있습니다"},"media_description_error":"파일을 올리지 못하였습니다. 다시한번 시도하여 주십시오","empty_status_error":"글을 입력하십시오","media_description":"첨부파일 설명"},"registration":{"bio":"소개","email":"이메일","fullname":"표시 되는 이름","password_confirm":"암호 확인","registration":"가입하기","token":"초대 토큰","captcha":"캡차","new_captcha":"이미지를 클릭해서 새로운 캡차","validations":{"username_required":"공백으로 둘 수 없습니다","fullname_required":"공백으로 둘 수 없습니다","email_required":"공백으로 둘 수 없습니다","password_required":"공백으로 둘 수 없습니다","password_confirmation_required":"공백으로 둘 수 없습니다","password_confirmation_match":"패스워드와 일치해야 합니다"},"fullname_placeholder":"예: 김례인","username_placeholder":"예: lain"},"settings":{"attachmentRadius":"첨부물","attachments":"첨부물","avatar":"아바타","avatarAltRadius":"아바타 (알림)","avatarRadius":"아바타","background":"배경","bio":"소개","btnRadius":"버튼","cBlue":"파랑 (답글, 팔로우)","cGreen":"초록 (리트윗)","cOrange":"주황 (즐겨찾기)","cRed":"빨강 (취소)","change_password":"암호 바꾸기","change_password_error":"암호를 바꾸는 데 몇 가지 문제가 있습니다.","changed_password":"암호를 바꾸었습니다!","collapse_subject":"주제를 가진 게시물 접기","composing":"작성","confirm_new_password":"새 패스워드 확인","current_avatar":"현재 아바타","current_password":"현재 패스워드","current_profile_banner":"현재 프로필 배너","data_import_export_tab":"데이터 불러오기 / 내보내기","default_vis":"기본 공개 범위","delete_account":"계정 삭제","delete_account_description":"데이터가 영구히 삭제되고 계정이 불활성화됩니다.","delete_account_error":"계정을 삭제하는데 문제가 있습니다. 계속 발생한다면 인스턴스 관리자에게 문의하세요.","delete_account_instructions":"계정 삭제를 확인하기 위해 아래에 패스워드 입력.","export_theme":"프리셋 저장","filtering":"필터링","filtering_explanation":"아래의 단어를 가진 게시물들은 뮤트 됩니다, 한 줄에 하나씩 적으세요","follow_export":"팔로우 내보내기","follow_export_button":"팔로우 목록을 csv로 내보내기","follow_export_processing":"진행 중입니다, 곧 다운로드 가능해 질 것입니다","follow_import":"팔로우 불러오기","follow_import_error":"팔로우 불러오기 실패","follows_imported":"팔로우 목록을 불러왔습니다! 처리에는 시간이 걸립니다.","foreground":"전경","general":"일반","hide_attachments_in_convo":"대화의 첨부물 숨기기","hide_attachments_in_tl":"타임라인의 첨부물 숨기기","hide_isp":"인스턴스 전용 패널 숨기기","preload_images":"이미지 미리 불러오기","hide_post_stats":"게시물 통계 숨기기 (즐겨찾기 수 등)","hide_user_stats":"사용자 통계 숨기기 (팔로워 수 등)","import_followers_from_a_csv_file":"csv 파일에서 팔로우 목록 불러오기","import_theme":"프리셋 불러오기","inputRadius":"입력 칸","checkboxRadius":"체크박스","instance_default":"(기본: {value})","instance_default_simple":"(기본)","interface":"인터페이스","interfaceLanguage":"인터페이스 언어","invalid_theme_imported":"선택한 파일은 지원하는 플레로마 테마가 아닙니다. 아무런 변경도 일어나지 않았습니다.","limited_availability":"이 브라우저에서 사용 불가","links":"링크","lock_account_description":"계정을 승인 된 팔로워들로 제한","loop_video":"비디오 반복재생","loop_video_silent_only":"소리가 없는 비디오만 반복 재생 (마스토돈의 \\"gifs\\" 같은 것들)","name":"이름","name_bio":"이름 & 소개","new_password":"새 암호","notification_visibility":"보여 줄 알림 종류","notification_visibility_follows":"팔로우","notification_visibility_likes":"좋아함","notification_visibility_mentions":"멘션","notification_visibility_repeats":"반복","no_rich_text_description":"모든 게시물의 서식을 지우기","hide_follows_description":"내가 팔로우하는 사람을 표시하지 않음","hide_followers_description":"나를 따르는 사람을 숨기기","nsfw_clickthrough":"NSFW 이미지 \\"클릭해서 보이기\\"를 활성화","oauth_tokens":"OAuth 토큰","token":"토큰","refresh_token":"토큰 새로 고침","valid_until":"까지 유효하다","revoke_token":"취소","panelRadius":"패널","pause_on_unfocused":"탭이 활성 상태가 아닐 때 스트리밍 멈추기","presets":"프리셋","profile_background":"프로필 배경","profile_banner":"프로필 배너","profile_tab":"프로필","radii_help":"인터페이스 모서리 둥글기 (픽셀 단위)","replies_in_timeline":"답글을 타임라인에","reply_visibility_all":"모든 답글 보기","reply_visibility_following":"나에게 직접 오는 답글이나 내가 팔로우 중인 사람에게서 오는 답글만 표시","reply_visibility_self":"나에게 직접 전송 된 답글만 보이기","saving_err":"설정 저장 실패","saving_ok":"설정 저장 됨","security_tab":"보안","scope_copy":"답글을 달 때 공개 범위 따라가리 (다이렉트 메시지는 언제나 따라감)","set_new_avatar":"새 아바타 설정","set_new_profile_background":"새 프로필 배경 설정","set_new_profile_banner":"새 프로필 배너 설정","settings":"설정","subject_input_always_show":"항상 주제 칸 보이기","subject_line_behavior":"답글을 달 때 주제 복사하기","subject_line_email":"이메일처럼: \\"re: 주제\\"","subject_line_mastodon":"마스토돈처럼: 그대로 복사","subject_line_noop":"복사 안 함","stop_gifs":"GIF파일에 마우스를 올려서 재생","streaming":"최상단에 도달하면 자동으로 새 게시물 스트리밍","text":"텍스트","theme":"테마","theme_help":"16진수 색상코드(#rrggbb)를 사용해 색상 테마를 커스터마이즈.","theme_help_v2_1":"체크박스를 통해 몇몇 컴포넌트의 색상과 불투명도를 조절 가능, \\"모두 지우기\\" 버튼으로 덮어 씌운 것을 모두 취소.","theme_help_v2_2":"몇몇 입력칸 밑의 아이콘은 전경/배경 대비 관련 표시등입니다, 마우스를 올려 자세한 정보를 볼 수 있습니다. 투명도 대비 표시등이 가장 최악의 경우를 나타낸다는 것을 유의하세요.","tooltipRadius":"툴팁/경고","user_settings":"사용자 설정","values":{"false":"아니오","true":"네"},"notifications":"알림","enable_web_push_notifications":"웹 푸시 알림 활성화","style":{"switcher":{"keep_color":"색상 유지","keep_shadows":"그림자 유지","keep_opacity":"불투명도 유지","keep_roundness":"둥글기 유지","keep_fonts":"글자체 유지","save_load_hint":"\\"유지\\" 옵션들은 다른 테마를 고르거나 불러 올 때 현재 설정 된 옵션들을 건드리지 않게 합니다, 테마를 내보내기 할 때도 이 옵션에 따라 저장합니다. 아무 것도 체크 되지 않았다면 모든 설정을 내보냅니다.","reset":"초기화","clear_all":"모두 지우기","clear_opacity":"불투명도 지우기"},"common":{"color":"색상","opacity":"불투명도","contrast":{"hint":"대비율이 {ratio}입니다, 이것은 {context} {level}","level":{"aa":"AA등급 가이드라인에 부합합니다 (최소한도)","aaa":"AAA등급 가이드라인에 부합합니다 (권장)","bad":"아무런 가이드라인 등급에도 미치지 못합니다"},"context":{"18pt":"큰 (18pt 이상) 텍스트에 대해","text":"텍스트에 대해"}}},"common_colors":{"_tab_label":"일반","main":"일반 색상","foreground_hint":"\\"고급\\" 탭에서 더 자세한 설정이 가능합니다","rgbo":"아이콘, 강조, 배지"},"advanced_colors":{"_tab_label":"고급","alert":"주의 배경","alert_error":"에러","badge":"배지 배경","badge_notification":"알림","panel_header":"패널 헤더","top_bar":"상단 바","borders":"테두리","buttons":"버튼","inputs":"입력칸","faint_text":"흐려진 텍스트","chat":{"border":"경계선","outgoing":"송신","incoming":"수신"},"selectedMenu":"선택된 메뉴 요소","selectedPost":"선택된 글","icons":"아이콘","alert_warning":"경고"},"radii":{"_tab_label":"둥글기"},"shadows":{"_tab_label":"그림자와 빛","component":"컴포넌트","override":"덮어쓰기","shadow_id":"그림자 #{value}","blur":"흐리기","spread":"퍼지기","inset":"안쪽으로","hint":"그림자에는 CSS3 변수를 --variable을 통해 색상 값으로 사용할 수 있습니다. 불투명도에는 적용 되지 않습니다.","filter_hint":{"always_drop_shadow":"경고, 이 그림자는 브라우저가 지원하는 경우 항상 {0}을 사용합니다.","drop_shadow_syntax":"{0}는 {1} 파라미터와 {2} 키워드를 지원하지 않습니다.","avatar_inset":"안쪽과 안쪽이 아닌 그림자를 모두 설정하는 경우 투명 아바타에서 예상치 못 한 결과가 나올 수 있다는 것에 주의해 주세요.","spread_zero":"퍼지기가 0보다 큰 그림자는 0으로 설정한 것과 동일하게 보여집니다","inset_classic":"안쪽 그림자는 {0}를 사용합니다"},"components":{"panel":"패널","panelHeader":"패널 헤더","topBar":"상단 바","avatar":"사용자 아바타 (프로필 뷰에서)","avatarStatus":"사용자 아바타 (게시물에서)","popup":"팝업과 툴팁","button":"버튼","buttonHover":"버튼 (마우스 올렸을 때)","buttonPressed":"버튼 (눌렸을 때)","buttonPressedHover":"Button (마우스 올림 + 눌림)","input":"입력칸"}},"fonts":{"_tab_label":"글자체","help":"인터페이스의 요소에 사용 될 글자체를 고르세요. \\"커스텀\\"은 시스템에 있는 폰트 이름을 정확히 입력해야 합니다.","components":{"interface":"인터페이스","input":"입력칸","post":"게시물 텍스트","postCode":"게시물의 고정폭 텍스트 (서식 있는 텍스트)"},"family":"글자체 이름","size":"크기 (px 단위)","weight":"굵기","custom":"커스텀"},"preview":{"header":"미리보기","content":"내용","error":"에러 예시","button":"버튼","text":"더 많은 {0} 그리고 {1}","mono":"내용","input":"인천공항에 도착했습니다.","faint_link":"도움 되는 설명서","fine_print":"우리의 {0} 를 읽고 도움 되지 않는 것들을 배우자!","header_faint":"이건 괜찮아","checkbox":"나는 약관을 대충 훑어보았습니다","link":"작고 귀여운 링크"}},"block_export":"차단 목록 내보내기","mfa":{"scan":{"secret_code":"키","title":"스캔"},"authentication_methods":"인증 방법","waiting_a_recovery_codes":"예비 코드를 수신하고 있습니다…","recovery_codes":"복구 코드.","generate_new_recovery_codes":"새로운 복구 코드를 작성","title":"2단계인증","confirm_and_enable":"OTP 확인과 활성화","setup_otp":"OTP 설치","otp":"OTP"},"security":"보안","emoji_reactions_on_timeline":"이모지 반응을 타임라인으로 표시","avatar_size_instruction":"크기를 150x150 이상으로 설정할 것을 추장합니다.","blocks_tab":"차단","notification_setting_privacy":"보안","user_mutes":"사용자","notification_visibility_emoji_reactions":"반응","profile_fields":{"value":"내용"},"mutes_and_blocks":"침묵과 차단","chatMessageRadius":"챗 메시지","change_email":"메일주소 바꾸기","changed_email":"메일주소가 갱신되었습니다!","bot":"이 계정은 bot입니다","mutes_tab":"침묵","app_name":"앱 이름"},"timeline":{"collapse":"접기","conversation":"대화","error_fetching":"업데이트 불러오기 실패","load_older":"더 오래 된 게시물 불러오기","no_retweet_hint":"팔로워 전용, 다이렉트 메시지는 반복할 수 없습니다","repeated":"반복 됨","show_new":"새로운 것 보기","up_to_date":"최신 상태"},"user_card":{"approve":"승인","block":"차단","blocked":"차단 됨!","deny":"거부","follow":"팔로우","follow_sent":"요청 보내짐!","follow_progress":"요청 중…","follow_again":"요청을 다시 보낼까요?","follow_unfollow":"팔로우 중지","followees":"팔로우 중","followers":"팔로워","following":"팔로우 중!","follows_you":"당신을 팔로우 합니다!","its_you":"당신입니다!","mute":"침묵","muted":"침묵 됨","per_day":"/ 하루","remote_follow":"원격 팔로우","statuses":"게시물"},"user_profile":{"timeline_title":"사용자 타임라인"},"who_to_follow":{"more":"더 보기","who_to_follow":"팔로우 추천"},"tool_tip":{"media_upload":"미디어 업로드","repeat":"반복","reply":"답글","favorite":"즐겨찾기","user_settings":"사용자 설정"},"upload":{"error":{"base":"업로드 실패.","file_too_big":"파일이 너무 커요 [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]","default":"잠시 후에 다시 시도해 보세요"},"file_size_units":{"B":"바이트","KiB":"키비바이트","MiB":"메비바이트","GiB":"기비바이트","TiB":"테비바이트"}},"interactions":{"follows":"새 팔로워","favs_repeats":"반복과 즐겨찾기","moves":"계정 통합"},"emoji":{"load_all":"전체 {emojiAmount} 이모지 불러오기","unicode":"Unicode 이모지","custom":"전용 이모지","add_emoji":"이모지 넣기","search_emoji":"이모지 검색","emoji":"이모지","stickers":"스티커"},"polls":{"add_poll":"투표를 추가","votes":"표","vote":"투표","type":"투표 형식","expiry":"투표 기간","votes_count":"{count} 표 | {count} 표","people_voted_count":"{count} 명 투표 | {count} 명 투표","option":"선택지","add_option":"선택지 추가"},"media_modal":{"next":"다음","previous":"이전"},"importer":{"error":"이 파일을 가져올 때 오류가 발생하였습니다.","success":"정상히 불러왔습니다.","submit":"보내기"},"image_cropper":{"cancel":"취소","save_without_cropping":"그대로 저장","save":"저장","crop_picture":"사진 자르기"},"exporter":{"processing":"처리중입니다, 처리가 끝나면 파일을 다운로드하라는 지시가 있겠습니다","export":"내보내기"},"domain_mute_card":{"unmute_progress":"침묵을 해제중…","unmute":"침묵 해제","mute_progress":"침묵으로 설정중…","mute":"침묵"},"about":{"staff":"운영자","mrf":{"simple":{"media_nsfw_desc":"이 인스턴스에서는 아래의 인스턴스로부터 보내온 투고에 붙혀 있는 매체는 민감함으로 설정됩니다:","media_nsfw":"매체를 민감함으로 설정","media_removal_desc":"이 인스턴스에서는 아래의 인스턴스로부터 보내온 투고에 붙혀 있는 매체는 제거됩니다:","media_removal":"매체 제거","ftl_removal_desc":"이 인스턴스에서 아래의 인스턴스들은 \\"알려진 네트워크\\" 타임라인에서 제외됩니다:","ftl_removal":"\\"알려진 네트워크\\" 타임라인에서 제외","quarantine_desc":"이 인스턴스는 아래의 인스턴스에게 공개투고만을 보냅니다:","quarantine":"검역","reject_desc":"이 인스턴스에서는 아래의 인스턴스로부터 보내온 투고를 받아들이지 않습니다:","accept_desc":"이 인스턴스에서는 아래의 인스턴스로부터 보내온 투고만이 접수됩니다:","reject":"거부","accept":"허가","simple_policies":"인스턴스 특유의 폴리시"},"mrf_policies":"사용되는 MRF 폴리시","keyword":{"is_replaced_by":"→","replace":"바꾸기","reject":"거부","ftl_removal":"\\"알려진 모든 네트워크\\" 타임라인에서 제외","keyword_policies":"단어 폴리시"},"federation":"연합"}},"shoutbox":{"title":"Shoutbox"},"time":{"years_short":"{0} 년","year_short":"{0} 년","years":"{0} 년","year":"{0} 년","weeks_short":"{0} 주일","week_short":"{0} 주일","weeks":"{0} 주일","week":"{0} 주일","seconds_short":"{0} 초","second_short":"{0} 초","seconds":"{0} 초","second":"{0} 초","now_short":"방금","now":"방끔","months_short":"{0} 달 전","month_short":"{0} 달 전","months":"{0} 달 전","month":"{0} 달 전","minutes_short":"{0} 분","minute_short":"{0} 분","minutes":"{0} 분","minute":"{0} 분","in_past":"{0} 전","hours_short":"{0} 시간","hour_short":"{0} 시간","hours":"{0} 시간","hour":"{0} 시간","days_short":"{0} 일","day_short":"{0} 일","days":"{0} 일","day":"{0} 일"},"remote_user_resolver":{"error":"찾을 수 없습니다.","searching_for":"검색중"},"selectable_list":{"select_all":"모두 선택"}}')}}]); -//# sourceMappingURL=21.6e952388ef8d5a0276dc.js.map \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[21],{614:function(e){e.exports=JSON.parse('{"chat":{"title":"챗"},"features_panel":{"chat":"챗","gopher":"고퍼","media_proxy":"미디어 프록시","scope_options":"범위 옵션","text_limit":"텍스트 제한","title":"기능","who_to_follow":"팔로우 추천","upload_limit":"최대 파일용량","pleroma_chat_messages":"Pleroma 채트"},"finder":{"error_fetching_user":"사용자 정보 불러오기 실패","find_user":"사용자 찾기"},"general":{"apply":"적용","submit":"보내기","loading":"로딩중…","peek":"숨기기","close":"닫기","verify":"검사","confirm":"확인","enable":"유효","disable":"무효","cancel":"취소","dismiss":"무시","show_less":"접기","show_more":"더 보기","optional":"필수 아님","retry":"다시 시도하십시오","error_retry":"다시 시도하십시오","generic_error":"잘못되었습니다","more":"더 보기","role":{"moderator":"중재자","admin":"관리자"}},"login":{"login":"로그인","description":"OAuth로 로그인","logout":"로그아웃","password":"암호","placeholder":"예시: lain","register":"가입","username":"사용자 이름","heading":{"recovery":"2단계 복구","totp":"2단계인증"},"recovery_code":"복구 코드","enter_two_factor_code":"2단계인증 코드를 입력하십시오","enter_recovery_code":"복구 코드를 입력하십시오","authentication_code":"인증 코드","hint":"로그인하여 대화에 참가합시다"},"nav":{"about":"인스턴스 소개","back":"뒤로","chat":"로컬 챗","friend_requests":"팔로우 요청","mentions":"멘션","dms":"다이렉트 메시지","public_tl":"공개 타임라인","timeline":"타임라인","twkn":"알려진 네트워크","user_search":"사용자 검색","preferences":"환경설정","chats":"채트","timelines":"타임라인","who_to_follow":"추천된 사용자","search":"검색","bookmarks":"북마크","interactions":"대화","administration":"관리","home_timeline":"홈 타임라인"},"notifications":{"broken_favorite":"알 수 없는 게시물입니다, 검색합니다…","favorited_you":"당신의 게시물을 즐겨찾기","followed_you":"당신을 팔로우","load_older":"오래 된 알림 불러오기","notifications":"알림","read":"읽음!","repeated_you":"당신의 게시물을 리핏","no_more_notifications":"알림이 없습니다","migrated_to":"이사했습니다","reacted_with":"{0} 로 반응했습니다","error":"알림 불러오기 실패: {0}","follow_request":"당신에게 팔로우 신청"},"post_status":{"new_status":"새 게시물 게시","account_not_locked_warning":"당신의 계정은 {0} 상태가 아닙니다. 누구나 당신을 팔로우 하고 팔로워 전용 게시물을 볼 수 있습니다.","account_not_locked_warning_link":"잠김","attachments_sensitive":"첨부물을 민감함으로 설정","content_type":{"text/plain":"평문","text/bbcode":"BBCode","text/markdown":"Markdown","text/html":"HTML"},"content_warning":"주제 (필수 아님)","default":"인천공항에 도착했습니다.","direct_warning":"이 게시물을 멘션 된 사용자들에게만 보여집니다","posting":"게시","scope":{"direct":"다이렉트 - 멘션 된 사용자들에게만","private":"팔로워 전용 - 팔로워들에게만","public":"공개 - 공개 타임라인으로","unlisted":"비공개 - 공개 타임라인에 게시 안 함"},"preview_empty":"아무것도 없습니다","preview":"미리보기","scope_notice":{"public":"이 글은 누구나 볼 수 있습니다"},"media_description_error":"파일을 올리지 못하였습니다. 다시한번 시도하여 주십시오","empty_status_error":"글을 입력하십시오","media_description":"첨부파일 설명"},"registration":{"bio":"소개","email":"이메일","fullname":"표시 되는 이름","password_confirm":"암호 확인","registration":"가입하기","token":"초대 토큰","captcha":"캡차","new_captcha":"이미지를 클릭해서 새로운 캡차","validations":{"username_required":"공백으로 둘 수 없습니다","fullname_required":"공백으로 둘 수 없습니다","email_required":"공백으로 둘 수 없습니다","password_required":"공백으로 둘 수 없습니다","password_confirmation_required":"공백으로 둘 수 없습니다","password_confirmation_match":"패스워드와 일치해야 합니다"},"fullname_placeholder":"예: 김례인","username_placeholder":"예: lain"},"settings":{"attachmentRadius":"첨부물","attachments":"첨부물","avatar":"아바타","avatarAltRadius":"아바타 (알림)","avatarRadius":"아바타","background":"배경","bio":"소개","btnRadius":"버튼","cBlue":"파랑 (답글, 팔로우)","cGreen":"초록 (리트윗)","cOrange":"주황 (즐겨찾기)","cRed":"빨강 (취소)","change_password":"암호 바꾸기","change_password_error":"암호를 바꾸는 데 몇 가지 문제가 있습니다.","changed_password":"암호를 바꾸었습니다!","collapse_subject":"주제를 가진 게시물 접기","composing":"작성","confirm_new_password":"새 패스워드 확인","current_avatar":"현재 아바타","current_password":"현재 패스워드","current_profile_banner":"현재 프로필 배너","data_import_export_tab":"데이터 불러오기 / 내보내기","default_vis":"기본 공개 범위","delete_account":"계정 삭제","delete_account_description":"데이터가 영구히 삭제되고 계정이 불활성화됩니다.","delete_account_error":"계정을 삭제하는데 문제가 있습니다. 계속 발생한다면 인스턴스 관리자에게 문의하세요.","delete_account_instructions":"계정 삭제를 확인하기 위해 아래에 패스워드 입력.","export_theme":"프리셋 저장","filtering":"필터링","filtering_explanation":"아래의 단어를 가진 게시물들은 뮤트 됩니다, 한 줄에 하나씩 적으세요","follow_export":"팔로우 내보내기","follow_export_button":"팔로우 목록을 csv로 내보내기","follow_export_processing":"진행 중입니다, 곧 다운로드 가능해 질 것입니다","follow_import":"팔로우 불러오기","follow_import_error":"팔로우 불러오기 실패","follows_imported":"팔로우 목록을 불러왔습니다! 처리에는 시간이 걸립니다.","foreground":"전경","general":"일반","hide_attachments_in_convo":"대화의 첨부물 숨기기","hide_attachments_in_tl":"타임라인의 첨부물 숨기기","hide_isp":"인스턴스 전용 패널 숨기기","preload_images":"이미지 미리 불러오기","hide_post_stats":"게시물 통계 숨기기 (즐겨찾기 수 등)","hide_user_stats":"사용자 통계 숨기기 (팔로워 수 등)","import_followers_from_a_csv_file":"csv 파일에서 팔로우 목록 불러오기","import_theme":"프리셋 불러오기","inputRadius":"입력 칸","checkboxRadius":"체크박스","instance_default":"(기본: {value})","instance_default_simple":"(기본)","interface":"인터페이스","interfaceLanguage":"인터페이스 언어","invalid_theme_imported":"선택한 파일은 지원하는 플레로마 테마가 아닙니다. 아무런 변경도 일어나지 않았습니다.","limited_availability":"이 브라우저에서 사용 불가","links":"링크","lock_account_description":"계정을 승인 된 팔로워들로 제한","loop_video":"비디오 반복재생","loop_video_silent_only":"소리가 없는 비디오만 반복 재생 (마스토돈의 \\"gifs\\" 같은 것들)","name":"이름","name_bio":"이름 & 소개","new_password":"새 암호","notification_visibility":"보여 줄 알림 종류","notification_visibility_follows":"팔로우","notification_visibility_likes":"좋아함","notification_visibility_mentions":"멘션","notification_visibility_repeats":"반복","no_rich_text_description":"모든 게시물의 서식을 지우기","hide_follows_description":"내가 팔로우하는 사람을 표시하지 않음","hide_followers_description":"나를 따르는 사람을 숨기기","nsfw_clickthrough":"NSFW 이미지 \\"클릭해서 보이기\\"를 활성화","oauth_tokens":"OAuth 토큰","token":"토큰","refresh_token":"토큰 새로 고침","valid_until":"까지 유효하다","revoke_token":"취소","panelRadius":"패널","pause_on_unfocused":"탭이 활성 상태가 아닐 때 스트리밍 멈추기","presets":"프리셋","profile_background":"프로필 배경","profile_banner":"프로필 배너","profile_tab":"프로필","radii_help":"인터페이스 모서리 둥글기 (픽셀 단위)","replies_in_timeline":"답글을 타임라인에","reply_visibility_all":"모든 답글 보기","reply_visibility_following":"나에게 직접 오는 답글이나 내가 팔로우 중인 사람에게서 오는 답글만 표시","reply_visibility_self":"나에게 직접 전송 된 답글만 보이기","saving_err":"설정 저장 실패","saving_ok":"설정 저장 됨","security_tab":"보안","scope_copy":"답글을 달 때 공개 범위 따라가리 (다이렉트 메시지는 언제나 따라감)","set_new_avatar":"새 아바타 설정","set_new_profile_background":"새 프로필 배경 설정","set_new_profile_banner":"새 프로필 배너 설정","settings":"설정","subject_input_always_show":"항상 주제 칸 보이기","subject_line_behavior":"답글을 달 때 주제 복사하기","subject_line_email":"이메일처럼: \\"re: 주제\\"","subject_line_mastodon":"마스토돈처럼: 그대로 복사","subject_line_noop":"복사 안 함","stop_gifs":"GIF파일에 마우스를 올려서 재생","streaming":"최상단에 도달하면 자동으로 새 게시물 스트리밍","text":"텍스트","theme":"테마","theme_help":"16진수 색상코드(#rrggbb)를 사용해 색상 테마를 커스터마이즈.","theme_help_v2_1":"체크박스를 통해 몇몇 컴포넌트의 색상과 불투명도를 조절 가능, \\"모두 지우기\\" 버튼으로 덮어 씌운 것을 모두 취소.","theme_help_v2_2":"몇몇 입력칸 밑의 아이콘은 전경/배경 대비 관련 표시등입니다, 마우스를 올려 자세한 정보를 볼 수 있습니다. 투명도 대비 표시등이 가장 최악의 경우를 나타낸다는 것을 유의하세요.","tooltipRadius":"툴팁/경고","user_settings":"사용자 설정","values":{"false":"아니오","true":"네"},"notifications":"알림","enable_web_push_notifications":"웹 푸시 알림 활성화","style":{"switcher":{"keep_color":"색상 유지","keep_shadows":"그림자 유지","keep_opacity":"불투명도 유지","keep_roundness":"둥글기 유지","keep_fonts":"글자체 유지","save_load_hint":"\\"유지\\" 옵션들은 다른 테마를 고르거나 불러 올 때 현재 설정 된 옵션들을 건드리지 않게 합니다, 테마를 내보내기 할 때도 이 옵션에 따라 저장합니다. 아무 것도 체크 되지 않았다면 모든 설정을 내보냅니다.","reset":"초기화","clear_all":"모두 지우기","clear_opacity":"불투명도 지우기"},"common":{"color":"색상","opacity":"불투명도","contrast":{"hint":"대비율이 {ratio}입니다, 이것은 {context} {level}","level":{"aa":"AA등급 가이드라인에 부합합니다 (최소한도)","aaa":"AAA등급 가이드라인에 부합합니다 (권장)","bad":"아무런 가이드라인 등급에도 미치지 못합니다"},"context":{"18pt":"큰 (18pt 이상) 텍스트에 대해","text":"텍스트에 대해"}}},"common_colors":{"_tab_label":"일반","main":"일반 색상","foreground_hint":"\\"고급\\" 탭에서 더 자세한 설정이 가능합니다","rgbo":"아이콘, 강조, 배지"},"advanced_colors":{"_tab_label":"고급","alert":"주의 배경","alert_error":"에러","badge":"배지 배경","badge_notification":"알림","panel_header":"패널 헤더","top_bar":"상단 바","borders":"테두리","buttons":"버튼","inputs":"입력칸","faint_text":"흐려진 텍스트","chat":{"border":"경계선","outgoing":"송신","incoming":"수신"},"selectedMenu":"선택된 메뉴 요소","selectedPost":"선택된 글","icons":"아이콘","alert_warning":"경고"},"radii":{"_tab_label":"둥글기"},"shadows":{"_tab_label":"그림자와 빛","component":"컴포넌트","override":"덮어쓰기","shadow_id":"그림자 #{value}","blur":"흐리기","spread":"퍼지기","inset":"안쪽으로","hint":"그림자에는 CSS3 변수를 --variable을 통해 색상 값으로 사용할 수 있습니다. 불투명도에는 적용 되지 않습니다.","filter_hint":{"always_drop_shadow":"경고, 이 그림자는 브라우저가 지원하는 경우 항상 {0}을 사용합니다.","drop_shadow_syntax":"{0}는 {1} 파라미터와 {2} 키워드를 지원하지 않습니다.","avatar_inset":"안쪽과 안쪽이 아닌 그림자를 모두 설정하는 경우 투명 아바타에서 예상치 못 한 결과가 나올 수 있다는 것에 주의해 주세요.","spread_zero":"퍼지기가 0보다 큰 그림자는 0으로 설정한 것과 동일하게 보여집니다","inset_classic":"안쪽 그림자는 {0}를 사용합니다"},"components":{"panel":"패널","panelHeader":"패널 헤더","topBar":"상단 바","avatar":"사용자 아바타 (프로필 뷰에서)","avatarStatus":"사용자 아바타 (게시물에서)","popup":"팝업과 툴팁","button":"버튼","buttonHover":"버튼 (마우스 올렸을 때)","buttonPressed":"버튼 (눌렸을 때)","buttonPressedHover":"Button (마우스 올림 + 눌림)","input":"입력칸"}},"fonts":{"_tab_label":"글자체","help":"인터페이스의 요소에 사용 될 글자체를 고르세요. \\"커스텀\\"은 시스템에 있는 폰트 이름을 정확히 입력해야 합니다.","components":{"interface":"인터페이스","input":"입력칸","post":"게시물 텍스트","postCode":"게시물의 고정폭 텍스트 (서식 있는 텍스트)"},"family":"글자체 이름","size":"크기 (px 단위)","weight":"굵기","custom":"커스텀"},"preview":{"header":"미리보기","content":"내용","error":"에러 예시","button":"버튼","text":"더 많은 {0} 그리고 {1}","mono":"내용","input":"인천공항에 도착했습니다.","faint_link":"도움 되는 설명서","fine_print":"우리의 {0} 를 읽고 도움 되지 않는 것들을 배우자!","header_faint":"이건 괜찮아","checkbox":"나는 약관을 대충 훑어보았습니다","link":"작고 귀여운 링크"}},"block_export":"차단 목록 내보내기","mfa":{"scan":{"secret_code":"키","title":"스캔"},"authentication_methods":"인증 방법","waiting_a_recovery_codes":"예비 코드를 수신하고 있습니다…","recovery_codes":"복구 코드.","generate_new_recovery_codes":"새로운 복구 코드를 작성","title":"2단계인증","confirm_and_enable":"OTP 확인과 활성화","setup_otp":"OTP 설치","otp":"OTP"},"security":"보안","emoji_reactions_on_timeline":"이모지 반응을 타임라인으로 표시","avatar_size_instruction":"크기를 150x150 이상으로 설정할 것을 추장합니다.","blocks_tab":"차단","notification_setting_privacy":"보안","user_mutes":"사용자","notification_visibility_emoji_reactions":"반응","profile_fields":{"value":"내용"},"mutes_and_blocks":"침묵과 차단","chatMessageRadius":"챗 메시지","change_email":"메일주소 바꾸기","changed_email":"메일주소가 갱신되었습니다!","bot":"이 계정은 bot입니다","mutes_tab":"침묵","app_name":"앱 이름"},"timeline":{"collapse":"접기","conversation":"대화","error_fetching":"업데이트 불러오기 실패","load_older":"더 오래 된 게시물 불러오기","no_retweet_hint":"팔로워 전용, 다이렉트 메시지는 반복할 수 없습니다","repeated":"반복 됨","show_new":"새로운 것 보기","up_to_date":"최신 상태"},"user_card":{"approve":"승인","block":"차단","blocked":"차단 됨!","deny":"거부","follow":"팔로우","follow_sent":"요청 보내짐!","follow_progress":"요청 중…","follow_unfollow":"팔로우 중지","followees":"팔로우 중","followers":"팔로워","following":"팔로우 중!","follows_you":"당신을 팔로우 합니다!","its_you":"당신입니다!","mute":"침묵","muted":"침묵 됨","per_day":"/ 하루","remote_follow":"원격 팔로우","statuses":"게시물"},"user_profile":{"timeline_title":"사용자 타임라인"},"who_to_follow":{"more":"더 보기","who_to_follow":"팔로우 추천"},"tool_tip":{"media_upload":"미디어 업로드","repeat":"반복","reply":"답글","favorite":"즐겨찾기","user_settings":"사용자 설정"},"upload":{"error":{"base":"업로드 실패.","file_too_big":"파일이 너무 커요 [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]","default":"잠시 후에 다시 시도해 보세요"},"file_size_units":{"B":"바이트","KiB":"키비바이트","MiB":"메비바이트","GiB":"기비바이트","TiB":"테비바이트"}},"interactions":{"follows":"새 팔로워","favs_repeats":"반복과 즐겨찾기","moves":"계정 통합"},"emoji":{"load_all":"전체 {emojiAmount} 이모지 불러오기","unicode":"Unicode 이모지","custom":"전용 이모지","add_emoji":"이모지 넣기","search_emoji":"이모지 검색","emoji":"이모지","stickers":"스티커"},"polls":{"add_poll":"투표를 추가","votes":"표","vote":"투표","type":"투표 형식","expiry":"투표 기간","votes_count":"{count} 표 | {count} 표","people_voted_count":"{count} 명 투표 | {count} 명 투표","option":"선택지","add_option":"선택지 추가"},"media_modal":{"next":"다음","previous":"이전"},"importer":{"error":"이 파일을 가져올 때 오류가 발생하였습니다.","success":"정상히 불러왔습니다.","submit":"보내기"},"image_cropper":{"cancel":"취소","save_without_cropping":"그대로 저장","save":"저장","crop_picture":"사진 자르기"},"exporter":{"processing":"처리중입니다, 처리가 끝나면 파일을 다운로드하라는 지시가 있겠습니다","export":"내보내기"},"domain_mute_card":{"unmute_progress":"침묵을 해제중…","unmute":"침묵 해제","mute_progress":"침묵으로 설정중…","mute":"침묵"},"about":{"staff":"운영자","mrf":{"simple":{"media_nsfw_desc":"이 인스턴스에서는 아래의 인스턴스로부터 보내온 투고에 붙혀 있는 매체는 민감함으로 설정됩니다:","media_nsfw":"매체를 민감함으로 설정","media_removal_desc":"이 인스턴스에서는 아래의 인스턴스로부터 보내온 투고에 붙혀 있는 매체는 제거됩니다:","media_removal":"매체 제거","ftl_removal_desc":"이 인스턴스에서 아래의 인스턴스들은 \\"알려진 네트워크\\" 타임라인에서 제외됩니다:","ftl_removal":"\\"알려진 네트워크\\" 타임라인에서 제외","quarantine_desc":"이 인스턴스는 아래의 인스턴스에게 공개투고만을 보냅니다:","quarantine":"검역","reject_desc":"이 인스턴스에서는 아래의 인스턴스로부터 보내온 투고를 받아들이지 않습니다:","accept_desc":"이 인스턴스에서는 아래의 인스턴스로부터 보내온 투고만이 접수됩니다:","reject":"거부","accept":"허가","simple_policies":"인스턴스 특유의 폴리시"},"mrf_policies":"사용되는 MRF 폴리시","keyword":{"is_replaced_by":"→","replace":"바꾸기","reject":"거부","ftl_removal":"\\"알려진 모든 네트워크\\" 타임라인에서 제외","keyword_policies":"단어 폴리시"},"federation":"연합"}},"shoutbox":{"title":"Shoutbox"},"time":{"years_short":"{0} 년","year_short":"{0} 년","years":"{0} 년","year":"{0} 년","weeks_short":"{0} 주일","week_short":"{0} 주일","weeks":"{0} 주일","week":"{0} 주일","seconds_short":"{0} 초","second_short":"{0} 초","seconds":"{0} 초","second":"{0} 초","now_short":"방금","now":"방끔","months_short":"{0} 달 전","month_short":"{0} 달 전","months":"{0} 달 전","month":"{0} 달 전","minutes_short":"{0} 분","minute_short":"{0} 분","minutes":"{0} 분","minute":"{0} 분","in_past":"{0} 전","hours_short":"{0} 시간","hour_short":"{0} 시간","hours":"{0} 시간","hour":"{0} 시간","days_short":"{0} 일","day_short":"{0} 일","days":"{0} 일","day":"{0} 일"},"remote_user_resolver":{"error":"찾을 수 없습니다.","searching_for":"검색중"},"selectable_list":{"select_all":"모두 선택"}}')}}]); +//# sourceMappingURL=21.b2844ccdcfc3c8191e8e.js.map \ No newline at end of file diff --git a/priv/static/static/js/21.b2844ccdcfc3c8191e8e.js.map b/priv/static/static/js/21.b2844ccdcfc3c8191e8e.js.map new file mode 100644 index 000000000..b5b25eb31 --- /dev/null +++ b/priv/static/static/js/21.b2844ccdcfc3c8191e8e.js.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/21.b2844ccdcfc3c8191e8e.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/22.dbc79965f66b0bb62d88.js b/priv/static/static/js/22.68c0a771d79e3383f5e8.js similarity index 84% rename from priv/static/static/js/22.dbc79965f66b0bb62d88.js rename to priv/static/static/js/22.68c0a771d79e3383f5e8.js index 88a0e51b5..f982b241b 100644 --- a/priv/static/static/js/22.dbc79965f66b0bb62d88.js +++ b/priv/static/static/js/22.68c0a771d79e3383f5e8.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[22],{602:function(e){e.exports=JSON.parse('{"chat":{"title":"Nettprat"},"exporter":{"export":"Eksporter","processing":"Arbeider, du vil snart bli spurt om å laste ned filen din"},"features_panel":{"chat":"Nettprat","gopher":"Gopher","media_proxy":"Media proxy","scope_options":"Velg mottakere","text_limit":"Tekstgrense","title":"Egenskaper","who_to_follow":"Kontoer å følge"},"finder":{"error_fetching_user":"Feil ved henting av bruker","find_user":"Finn bruker"},"general":{"apply":"Bruk","submit":"Send","more":"Mer","generic_error":"Det oppsto en feil","optional":"valgfritt","show_more":"Vis mer","show_less":"Vis mindre","cancel":"Avbryt","disable":"Slå av","enable":"Slå på","confirm":"Godta","verify":"Godkjenn"},"image_cropper":{"crop_picture":"Minsk bilde","save":"Lagre","save_without_cropping":"Lagre uten å minske bildet","cancel":"Avbryt"},"importer":{"submit":"Send","success":"Importering fullført.","error":"Det oppsto en feil under importering av denne filen."},"login":{"login":"Logg inn","description":"Log inn med OAuth","logout":"Logg ut","password":"Passord","placeholder":"f. eks lain","register":"Registrer","username":"Brukernavn","hint":"Logg inn for å delta i diskusjonen","authentication_code":"Verifikasjonskode","enter_recovery_code":"Skriv inn en gjenopprettingskode","enter_two_factor_code":"Skriv inn en to-faktors kode","recovery_code":"Gjenopprettingskode","heading":{"totp":"To-faktors autentisering","recovery":"To-faktors gjenoppretting"}},"media_modal":{"previous":"Forrige","next":"Neste"},"nav":{"about":"Om","back":"Tilbake","chat":"Lokal nettprat","friend_requests":"Følgeforespørsler","mentions":"Nevnt","interactions":"Interaksjoner","dms":"Direktemeldinger","public_tl":"Offentlig Tidslinje","timeline":"Tidslinje","twkn":"Det hele kjente nettverket","user_search":"Søk etter brukere","search":"Søk","who_to_follow":"Kontoer å følge","preferences":"Innstillinger","timelines":"Tidslinjer","bookmarks":"Bokmerker"},"notifications":{"broken_favorite":"Ukjent status, leter etter den…","favorited_you":"likte din status","followed_you":"fulgte deg","load_older":"Last eldre varsler","notifications":"Varslinger","read":"Les!","repeated_you":"Gjentok din status","no_more_notifications":"Ingen gjenstående varsler","follow_request":"ønsker å følge deg"},"polls":{"add_poll":"Legg til undersøkelse","add_option":"Legg til svaralternativ","option":"Svaralternativ","votes":"stemmer","vote":"Stem","type":"Undersøkelsestype","single_choice":"Enkeltvalg","multiple_choices":"Flervalg","expiry":"Undersøkelsestid","expires_in":"Undersøkelsen er over om {0}","expired":"Undersøkelsen ble ferdig {0} siden","not_enough_options":"For få unike svaralternativer i undersøkelsen"},"stickers":{"add_sticker":"Legg til klistremerke"},"interactions":{"favs_repeats":"Gjentakelser og favoritter","follows":"Nye følgere","load_older":"Last eldre interaksjoner"},"post_status":{"new_status":"Legg ut ny status","account_not_locked_warning":"Kontoen din er ikke {0}. Hvem som helst kan følge deg for å se dine statuser til følgere","account_not_locked_warning_link":"låst","attachments_sensitive":"Merk vedlegg som sensitive","content_type":{"text/plain":"Klar tekst","text/html":"HTML","text/markdown":"Markdown","text/bbcode":"BBCode"},"content_warning":"Tema (valgfritt)","default":"Landet akkurat i L.A.","direct_warning_to_all":"Denne statusen vil være synlig av nevnte brukere","direct_warning_to_first_only":"Denne statusen vil være synlig for de brukerene som blir nevnt først i statusen.","posting":"Publiserer","scope_notice":{"public":"Denne statusen vil være synlig for alle","private":"Denne statusen vil være synlig for dine følgere","unlisted":"Denne statusen vil ikke være synlig i Offentlig Tidslinje eller Det Hele Kjente Nettverket"},"scope":{"direct":"Direkte, publiser bare til nevnte brukere","private":"Bare følgere, publiser bare til brukere som følger deg","public":"Offentlig, publiser til offentlige tidslinjer","unlisted":"Uoppført, ikke publiser til offentlige tidslinjer"}},"registration":{"bio":"Biografi","email":"Epost-adresse","fullname":"Visningsnavn","password_confirm":"Bekreft passord","registration":"Registrering","token":"Invitasjons-bevis","captcha":"CAPTCHA","new_captcha":"Trykk på bildet for å få en ny captcha","username_placeholder":"f.eks. Lain Iwakura","fullname_placeholder":"f.eks. Lain Iwakura","bio_placeholder":"e.g.\\nHei, jeg er Lain.\\nJeg er en animert jente som bor i forstaden i Japan. Du kjenner meg kanskje fra the Wired.","validations":{"username_required":"kan ikke stå tomt","fullname_required":"kan ikke stå tomt","email_required":"kan ikke stå tomt","password_required":"kan ikke stå tomt","password_confirmation_required":"kan ikke stå tomt","password_confirmation_match":"skal være det samme som passord"}},"selectable_list":{"select_all":"Velg alle"},"settings":{"app_name":"Applikasjonsnavn","security":"Sikkerhet","enter_current_password_to_confirm":"Skriv inn ditt nåverende passord for å bekrefte din identitet","mfa":{"otp":"OTP","setup_otp":"Set opp OTP","wait_pre_setup_otp":"forhåndsstiller OTP","confirm_and_enable":"Bekreft og slå på OTP","title":"To-faktors autentisering","generate_new_recovery_codes":"Generer nye gjenopprettingskoder","warning_of_generate_new_codes":"Når du genererer nye gjenopprettingskoder, vil de gamle slutte å fungere.","recovery_codes":"Gjenopprettingskoder.","waiting_a_recovery_codes":"Mottar gjenopprettingskoder...","recovery_codes_warning":"Skriv disse kodene ned eller plasser dem ett sikkert sted - ellers så vil du ikke se dem igjen. Dersom du mister tilgang til din to-faktors app og dine gjenopprettingskoder, vil du bli stengt ute av kontoen din.","authentication_methods":"Autentiseringsmetoder","scan":{"title":"Skann","desc":"Ved hjelp av din to-faktors applikasjon, skann denne QR-koden eller skriv inn tekstnøkkelen","secret_code":"Nøkkel"},"verify":{"desc":"For å skru på to-faktors autentisering, skriv inn koden i fra din to-faktors app:"}},"attachmentRadius":"Vedlegg","attachments":"Vedlegg","avatar":"Profilbilde","avatarAltRadius":"Profilbilde (Varslinger)","avatarRadius":"Profilbilde","background":"Bakgrunn","bio":"Biografi","block_export":"Eksporter blokkeringer","block_export_button":"Eksporter blokkeringer til en csv fil","block_import":"Import blokkeringer","block_import_error":"Det oppsto en feil under importering av blokkeringer","blocks_imported":"Blokkeringer importert, det vil ta litt å prossesere dem","blocks_tab":"Blokkeringer","btnRadius":"Knapper","cBlue":"Blå (Svar, følg)","cGreen":"Grønn (Gjenta)","cOrange":"Oransje (Lik)","cRed":"Rød (Avbryt)","change_password":"Endre passord","change_password_error":"Feil ved endring av passord","changed_password":"Passord endret","collapse_subject":"Sammenfold statuser med tema","composing":"komponering","confirm_new_password":"Bekreft nytt passord","current_avatar":"Ditt nåværende profilbilde","current_password":"Nåværende passord","current_profile_banner":"Din nåværende profil-banner","data_import_export_tab":"Data import / eksport","default_vis":"Standard visnings-omfang","delete_account":"Slett konto","delete_account_description":"Fjern din konto og alle dine meldinger for alltid.","delete_account_error":"Det oppsto et problem ved sletting av kontoen din, hvis dette problemet forblir kontakt din administrator","delete_account_instructions":"Skriv inn ditt passord i feltet nedenfor for å bekrefte sletting av konto","avatar_size_instruction":"Den anbefalte minste-størrelsen for profilbilder er 150x150 piksler","export_theme":"Lagre tema","filtering":"Filtrering","filtering_explanation":"Alle statuser som inneholder disse ordene vil bli dempet, en kombinasjon av tegn per linje","follow_export":"Eksporter følginger","follow_export_button":"Eksporter følgingene dine til en .csv fil","follow_import":"Importer følginger","follow_import_error":"Feil ved importering av følginger.","follows_imported":"Følginger importert! Behandling vil ta litt tid.","foreground":"Forgrunn","general":"Generell","hide_attachments_in_convo":"Gjem vedlegg i samtaler","hide_attachments_in_tl":"Gjem vedlegg på tidslinje","hide_muted_posts":"Gjem statuser i fra gjemte brukere","max_thumbnails":"Maks antall forhåndsbilder per status","hide_isp":"Gjem instans-spesifikt panel","preload_images":"Forhåndslast bilder","use_one_click_nsfw":"Åpne sensitive vedlegg med ett klikk","hide_post_stats":"Gjem status statistikk (f.eks. antall likes","hide_user_stats":"Gjem bruker statistikk (f.eks. antall følgere)","hide_filtered_statuses":"Gjem filtrerte statuser","import_blocks_from_a_csv_file":"Importer blokkeringer fra en csv fil","import_followers_from_a_csv_file":"Importer følginger fra en csv fil","import_theme":"Last tema","inputRadius":"Tekst felt","checkboxRadius":"Sjekkbokser","instance_default":"(standard: {value})","instance_default_simple":"(standard)","interface":"Grensesnitt","interfaceLanguage":"Grensesnitt-språk","invalid_theme_imported":"Den valgte filen er ikke ett støttet Pleroma-tema, ingen endringer til ditt tema ble gjort","limited_availability":"Ikke tilgjengelig i din nettleser","links":"Linker","lock_account_description":"Begrens din konto til bare godkjente følgere","loop_video":"Gjenta videoer","loop_video_silent_only":"Gjenta bare videoer uten lyd, (for eksempel Mastodon sine \\"gifs\\")","mutes_tab":"Dempinger","play_videos_in_modal":"Spill videoer direkte i media-avspilleren","use_contain_fit":"Ikke minsk vedlegget i forhåndsvisninger","name":"Navn","name_bio":"Navn & Biografi","new_password":"Nytt passord","notification_visibility":"Typer varsler som skal vises","notification_visibility_follows":"Følginger","notification_visibility_likes":"Likes","notification_visibility_mentions":"Nevnt","notification_visibility_repeats":"Gjentakelser","no_rich_text_description":"Fjern all formatering fra statuser","no_blocks":"Ingen blokkeringer","no_mutes":"Ingen dempinger","hide_follows_description":"Ikke hvis hvem jeg følger","hide_followers_description":"Ikke hvis hvem som følger meg","show_admin_badge":"Hvis ett administratormerke på min profil","show_moderator_badge":"Hvis ett moderatormerke på min profil","nsfw_clickthrough":"Krev trykk for å vise statuser som kan være upassende","oauth_tokens":"OAuth Tokens","token":"Pollett","refresh_token":"Fornyingspolett","valid_until":"Gyldig til","revoke_token":"Tilbakekall","panelRadius":"Panel","pause_on_unfocused":"Stopp henting av poster når vinduet ikke er i fokus","presets":"Forhåndsdefinerte tema","profile_background":"Profil-bakgrunn","profile_banner":"Profil-banner","profile_tab":"Profil","radii_help":"Bestem hvor runde hjørnene i brukergrensesnittet skal være (i piksler)","replies_in_timeline":"Svar på tidslinje","reply_visibility_all":"Vis alle svar","reply_visibility_following":"Vis bare svar som er til meg eller folk jeg følger","reply_visibility_self":"Vis bare svar som er til meg","autohide_floating_post_button":"Skjul Ny Status knapp automatisk (mobil)","saving_err":"Feil ved lagring av innstillinger","saving_ok":"Innstillinger lagret","search_user_to_block":"Søk etter hvem du vil blokkere","search_user_to_mute":"Søk etter hvem du vil dempe","security_tab":"Sikkerhet","scope_copy":"Kopier mottakere når du svarer noen (Direktemeldinger blir alltid kopiert","minimal_scopes_mode":"Minimaliser mottakervalg","set_new_avatar":"Rediger profilbilde","set_new_profile_background":"Rediger profil-bakgrunn","set_new_profile_banner":"Sett ny profil-banner","settings":"Innstillinger","subject_input_always_show":"Alltid hvis tema-felt","subject_line_behavior":"Kopier tema når du svarer","subject_line_email":"Som email: \\"re: tema\\"","subject_line_mastodon":"Som mastodon: kopier som den er","subject_line_noop":"Ikke koper","post_status_content_type":"Status innholdstype","stop_gifs":"Spill av GIFs når du holder over dem","streaming":"Automatisk strømming av nye statuser når du har bladd til toppen","text":"Tekst","theme":"Tema","theme_help":"Bruk heksadesimale fargekoder (#rrggbb) til å endre farge-temaet ditt.","theme_help_v2_1":"Du kan også overskrive noen komponenter sine farger og opasitet ved å sjekke av sjekkboksen, bruk \\"Nullstill alt\\" knappen for å fjerne alle overskrivelser.","theme_help_v2_2":"Ikoner under noen av innstillingene er bakgrunn/tekst kontrast indikatorer, hold over dem for detaljert informasjon. Vennligst husk at disse indikatorene viser det verste utfallet.","tooltipRadius":"Verktøytips/advarsler","upload_a_photo":"Last opp ett bilde","user_settings":"Brukerinstillinger","values":{"false":"nei","true":"ja"},"notifications":"Varsler","notification_mutes":"For å stoppe å motta varsler i fra en spesifikk bruker, kan du dempe dem.","notification_blocks":"Hvis du blokkerer en bruker vil det stoppe alle varsler og i tilleg få dem til å slutte å følge deg","enable_web_push_notifications":"Skru på pushnotifikasjoner i nettlesere","style":{"switcher":{"keep_color":"Behold farger","keep_shadows":"Behold skygger","keep_opacity":"Behold opasitet","keep_roundness":"Behold rundhet","keep_fonts":"Behold fonter","save_load_hint":"\\"Behold\\" alternativer beholder de instillingene som er satt når du velger eller laster inn temaer, det lagrer også disse alternativene når du eksporterer ett tema, Når alle sjekkboksene er tomme, vil alt bli lagret når du eksporterer ett tema.","reset":"Still in på nytt","clear_all":"Nullstill alt","clear_opacity":"Nullstill opasitet"},"common":{"color":"Farge","opacity":"Opasitet","contrast":{"hint":"Kontrast forholdet er {ratio}, it {level} {context}","level":{"aa":"møter Nivå AA retningslinje (minimal)","aaa":"møter Nivå AAA retningslinje (recommended)","bad":"møter ingen tilgjengeligshetsretningslinjer"},"context":{"18pt":"for stor (18pt+) tekst","text":"for tekst"}}},"common_colors":{"_tab_label":"Vanlig","main":"Vanlige farger","foreground_hint":"Se \\"Avansert\\" fanen for mer detaljert kontroll","rgbo":"Ikoner, aksenter, merker"},"advanced_colors":{"_tab_label":"Avansert","alert":"Varslingsbakgrunn","alert_error":"Feil","badge":"Merkebakgrunn","badge_notification":"Varsling","panel_header":"Panelhode","top_bar":"Topplinje","borders":"Kanter","buttons":"Knapper","inputs":"Tekstfelt","faint_text":"Svak tekst"},"radii":{"_tab_label":"Rundhet"},"shadows":{"_tab_label":"Skygger og belysning","component":"Komponent","override":"Overskriv","shadow_id":"Skygge #{value}","blur":"Uklarhet","spread":"Spredning","inset":"Insett","hint":"For skygger kan du sette --variable som en fargeveerdi for å bruke CSS3 variabler. Vær oppmerksom på at å sette opasitet da ikke vil fungere her.","filter_hint":{"always_drop_shadow":"Advarsel, denne skyggen bruker alltid {0} når nettleseren støtter det.","drop_shadow_syntax":"{0} støtter ikke {1} parameter og {2} nøkkelord.","avatar_inset":"Vær oppmerksom på at å kombinere både insatte og uinsatte skygger på profilbilder kan gi uforventede resultater med gjennomsiktige profilbilder.","spread_zero":"Skygger med spredning > 0 vil fremstå som de var satt til 0","inset_classic":"Insette skygger vil bruke {0}"},"components":{"panel":"Panel","panelHeader":"Panelhode","topBar":"Topplinje","avatar":"Profilbilde (i profilvisning)","avatarStatus":"Profilbilde (i statusvisning)","popup":"Popups og tooltips","button":"Knapp","buttonHover":"Knapp (holdt)","buttonPressed":"Knapp (nedtrykt)","buttonPressedHover":"Knapp (nedtrykt+holdt)","input":"Tekstfelt"}},"fonts":{"_tab_label":"Fonter","help":"Velg font til elementene i brukergrensesnittet. For \\"egendefinert\\" må du skrive inn det nøyaktige font-navnet som det fremstår på systemet","components":{"interface":"Grensesnitt","input":"Tekstfelt","post":"Statustekst","postCode":"Monospaced tekst i en status (rik tekst)"},"family":"Font naavn","size":"Størrelse (i piksler)","weight":"Vekt (dristighet)","custom":"Egendefinert"},"preview":{"header":"Forhåndsvisning","content":"Innhold","error":"Eksempel feil","button":"Knapp","text":"Mye mer {0} og {1}","mono":"innhold","input":"Landet akkurat i L.A.","faint_link":"hjelpfull brukerveiledning","fine_print":"Les vår {0} for å lære ingenting nyttig!","header_faint":"Dette er OK","checkbox":"Jeg har skumlest vilkår og betingelser","link":"en flott liten link"}},"version":{"title":"Versjon","backend_version":"Backend Versjon","frontend_version":"Frontend Versjon"},"hide_wallpaper":"Skjul instansens bakgrunnsbilde"},"time":{"day":"{0} dag","days":"{0} dager","day_short":"{0}d","days_short":"{0}d","hour":"{0} time","hours":"{0} timer","hour_short":"{0}t","hours_short":"{0}t","in_future":"om {0}","in_past":"{0} siden","minute":"{0} minutt","minutes":"{0} minutter","minute_short":"{0}min","minutes_short":"{0}min","month":"{0} måned","months":"{0} måneder","month_short":"{0}md.","months_short":"{0}md.","now":"akkurat nå","now_short":"nå","second":"{0} sekund","seconds":"{0} sekunder","second_short":"{0}s","seconds_short":"{0}s","week":"{0} uke","weeks":"{0} uker","week_short":"{0}u","weeks_short":"{0}u","year":"{0} år","years":"{0} år","year_short":"{0}år","years_short":"{0}år"},"timeline":{"collapse":"Sammenfold","conversation":"Samtale","error_fetching":"Feil ved henting av oppdateringer","load_older":"Last eldre statuser","no_retweet_hint":"Status er markert som bare til følgere eller direkte og kan ikke gjentas","repeated":"gjentok","show_new":"Vis nye","up_to_date":"Oppdatert","no_more_statuses":"Ingen flere statuser","no_statuses":"Ingen statuser"},"status":{"favorites":"Favoritter","repeats":"Gjentakelser","delete":"Slett status","pin":"Fremhev på profil","unpin":"Fjern fremhevelse","pinned":"Fremhevet","delete_confirm":"Har du virkelig lyst til å slette denne statusen?","reply_to":"Svar til","replies_list":"Svar:"},"user_card":{"approve":"Godkjenn","block":"Blokker","blocked":"Blokkert!","deny":"Avslå","favorites":"Favoritter","follow":"Følg","follow_sent":"Forespørsel sendt!","follow_progress":"Forespør…","follow_again":"Gjenta forespørsel?","follow_unfollow":"Avfølg","followees":"Følger","followers":"Følgere","following":"Følger!","follows_you":"Følger deg!","its_you":"Det er deg!","media":"Media","mute":"Demp","muted":"Dempet","per_day":"per dag","remote_follow":"Følg eksternt","report":"Rapport","statuses":"Statuser","subscribe":"Abonner","unsubscribe":"Avabonner","unblock":"Fjern blokkering","unblock_progress":"Fjerner blokkering...","block_progress":"Blokkerer...","unmute":"Fjern demping","unmute_progress":"Fjerner demping...","mute_progress":"Demper...","admin_menu":{"moderation":"Moderering","grant_admin":"Gi Administrator","revoke_admin":"Fjern Administrator","grant_moderator":"Gi Moderator","revoke_moderator":"Fjern Moderator","activate_account":"Aktiver konto","deactivate_account":"Deaktiver kontro","delete_account":"Slett konto","force_nsfw":"Merk alle statuser som sensitive","strip_media":"Fjern media i fra statuser","force_unlisted":"Tving statuser til å være uopplistet","sandbox":"Tving statuser til å bare vises til følgere","disable_remote_subscription":"Fjern mulighet til å følge brukeren fra andre instanser","disable_any_subscription":"Fjern mulighet til å følge brukeren","quarantine":"Gjør at statuser fra brukeren ikke kan sendes til andre instanser","delete_user":"Slett bruker","delete_user_confirmation":"Er du helt sikker? Denne handlingen kan ikke omgjøres."}},"user_profile":{"timeline_title":"Bruker-tidslinje","profile_does_not_exist":"Beklager, denne profilen eksisterer ikke.","profile_loading_error":"Beklager, det oppsto en feil under lasting av denne profilen."},"user_reporting":{"title":"Rapporterer {0}","add_comment_description":"Rapporten blir sent til moderatorene av din instans. Du kan gi en forklaring på hvorfor du rapporterer denne kontoen under:","additional_comments":"Videre kommentarer","forward_description":"Denne kontoen er fra en annen server, vil du sende en kopi av rapporten til dem også?","forward_to":"Videresend til {0}","submit":"Send","generic_error":"Det oppsto en feil under behandling av din forespørsel."},"who_to_follow":{"more":"Mer","who_to_follow":"Kontoer å følge"},"tool_tip":{"media_upload":"Last opp media","repeat":"Gjenta","reply":"Svar","favorite":"Lik","user_settings":"Brukerinnstillinger"},"upload":{"error":{"base":"Det oppsto en feil under opplastning.","file_too_big":"Fil for stor [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]","default":"Prøv igjen senere"},"file_size_units":{"B":"B","KiB":"KiB","MiB":"MiB","GiB":"GiB","TiB":"TiB"}},"search":{"people":"Folk","hashtags":"Emneknagger","person_talking":"{count} person snakker om dette","people_talking":"{count} personer snakker om dette","no_results":"Ingen resultater"},"about":{"mrf":{"simple":{"quarantine":"Karantene","reject_desc":"Denne instansen vil ikke godta meldinger fra følgende instanser:","reject":"Avvis","accept_desc":"Denne instansen godtar kun meldinger fra følgende instanser:","accept":"Aksepter"},"keyword":{"is_replaced_by":"→","replace":"Erstatt","reject":"Avvis","ftl_removal":"Fjerning fra \\"Det hele kjente nettverket\\" Tidslinjen"}}}}')}}]); -//# sourceMappingURL=22.dbc79965f66b0bb62d88.js.map \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[22],{615:function(e){e.exports=JSON.parse('{"chat":{"title":"Nettprat"},"exporter":{"export":"Eksporter","processing":"Arbeider, du vil snart bli spurt om å laste ned filen din"},"features_panel":{"chat":"Nettprat","gopher":"Gopher","media_proxy":"Media proxy","scope_options":"Velg mottakere","text_limit":"Tekstgrense","title":"Egenskaper","who_to_follow":"Kontoer å følge"},"finder":{"error_fetching_user":"Feil ved henting av bruker","find_user":"Finn bruker"},"general":{"apply":"Bruk","submit":"Send","more":"Mer","generic_error":"Det oppsto en feil","optional":"valgfritt","show_more":"Vis mer","show_less":"Vis mindre","cancel":"Avbryt","disable":"Slå av","enable":"Slå på","confirm":"Godta","verify":"Godkjenn"},"image_cropper":{"crop_picture":"Minsk bilde","save":"Lagre","save_without_cropping":"Lagre uten å minske bildet","cancel":"Avbryt"},"importer":{"submit":"Send","success":"Importering fullført.","error":"Det oppsto en feil under importering av denne filen."},"login":{"login":"Logg inn","description":"Log inn med OAuth","logout":"Logg ut","password":"Passord","placeholder":"f. eks lain","register":"Registrer","username":"Brukernavn","hint":"Logg inn for å delta i diskusjonen","authentication_code":"Verifikasjonskode","enter_recovery_code":"Skriv inn en gjenopprettingskode","enter_two_factor_code":"Skriv inn en to-faktors kode","recovery_code":"Gjenopprettingskode","heading":{"totp":"To-faktors autentisering","recovery":"To-faktors gjenoppretting"}},"media_modal":{"previous":"Forrige","next":"Neste"},"nav":{"about":"Om","back":"Tilbake","chat":"Lokal nettprat","friend_requests":"Følgeforespørsler","mentions":"Nevnt","interactions":"Interaksjoner","dms":"Direktemeldinger","public_tl":"Offentlig Tidslinje","timeline":"Tidslinje","twkn":"Det hele kjente nettverket","user_search":"Søk etter brukere","search":"Søk","who_to_follow":"Kontoer å følge","preferences":"Innstillinger","timelines":"Tidslinjer","bookmarks":"Bokmerker"},"notifications":{"broken_favorite":"Ukjent status, leter etter den…","favorited_you":"likte din status","followed_you":"fulgte deg","load_older":"Last eldre varsler","notifications":"Varslinger","read":"Les!","repeated_you":"Gjentok din status","no_more_notifications":"Ingen gjenstående varsler","follow_request":"ønsker å følge deg"},"polls":{"add_poll":"Legg til undersøkelse","add_option":"Legg til svaralternativ","option":"Svaralternativ","votes":"stemmer","vote":"Stem","type":"Undersøkelsestype","single_choice":"Enkeltvalg","multiple_choices":"Flervalg","expiry":"Undersøkelsestid","expires_in":"Undersøkelsen er over om {0}","expired":"Undersøkelsen ble ferdig {0} siden","not_enough_options":"For få unike svaralternativer i undersøkelsen"},"stickers":{"add_sticker":"Legg til klistremerke"},"interactions":{"favs_repeats":"Gjentakelser og favoritter","follows":"Nye følgere","load_older":"Last eldre interaksjoner"},"post_status":{"new_status":"Legg ut ny status","account_not_locked_warning":"Kontoen din er ikke {0}. Hvem som helst kan følge deg for å se dine statuser til følgere","account_not_locked_warning_link":"låst","attachments_sensitive":"Merk vedlegg som sensitive","content_type":{"text/plain":"Klar tekst","text/html":"HTML","text/markdown":"Markdown","text/bbcode":"BBCode"},"content_warning":"Tema (valgfritt)","default":"Landet akkurat i L.A.","direct_warning_to_all":"Denne statusen vil være synlig av nevnte brukere","direct_warning_to_first_only":"Denne statusen vil være synlig for de brukerene som blir nevnt først i statusen.","posting":"Publiserer","scope_notice":{"public":"Denne statusen vil være synlig for alle","private":"Denne statusen vil være synlig for dine følgere","unlisted":"Denne statusen vil ikke være synlig i Offentlig Tidslinje eller Det Hele Kjente Nettverket"},"scope":{"direct":"Direkte, publiser bare til nevnte brukere","private":"Bare følgere, publiser bare til brukere som følger deg","public":"Offentlig, publiser til offentlige tidslinjer","unlisted":"Uoppført, ikke publiser til offentlige tidslinjer"}},"registration":{"bio":"Biografi","email":"Epost-adresse","fullname":"Visningsnavn","password_confirm":"Bekreft passord","registration":"Registrering","token":"Invitasjons-bevis","captcha":"CAPTCHA","new_captcha":"Trykk på bildet for å få en ny captcha","username_placeholder":"f.eks. Lain Iwakura","fullname_placeholder":"f.eks. Lain Iwakura","bio_placeholder":"e.g.\\nHei, jeg er Lain.\\nJeg er en animert jente som bor i forstaden i Japan. Du kjenner meg kanskje fra the Wired.","validations":{"username_required":"kan ikke stå tomt","fullname_required":"kan ikke stå tomt","email_required":"kan ikke stå tomt","password_required":"kan ikke stå tomt","password_confirmation_required":"kan ikke stå tomt","password_confirmation_match":"skal være det samme som passord"}},"selectable_list":{"select_all":"Velg alle"},"settings":{"app_name":"Applikasjonsnavn","security":"Sikkerhet","enter_current_password_to_confirm":"Skriv inn ditt nåverende passord for å bekrefte din identitet","mfa":{"otp":"OTP","setup_otp":"Set opp OTP","wait_pre_setup_otp":"forhåndsstiller OTP","confirm_and_enable":"Bekreft og slå på OTP","title":"To-faktors autentisering","generate_new_recovery_codes":"Generer nye gjenopprettingskoder","warning_of_generate_new_codes":"Når du genererer nye gjenopprettingskoder, vil de gamle slutte å fungere.","recovery_codes":"Gjenopprettingskoder.","waiting_a_recovery_codes":"Mottar gjenopprettingskoder...","recovery_codes_warning":"Skriv disse kodene ned eller plasser dem ett sikkert sted - ellers så vil du ikke se dem igjen. Dersom du mister tilgang til din to-faktors app og dine gjenopprettingskoder, vil du bli stengt ute av kontoen din.","authentication_methods":"Autentiseringsmetoder","scan":{"title":"Skann","desc":"Ved hjelp av din to-faktors applikasjon, skann denne QR-koden eller skriv inn tekstnøkkelen","secret_code":"Nøkkel"},"verify":{"desc":"For å skru på to-faktors autentisering, skriv inn koden i fra din to-faktors app:"}},"attachmentRadius":"Vedlegg","attachments":"Vedlegg","avatar":"Profilbilde","avatarAltRadius":"Profilbilde (Varslinger)","avatarRadius":"Profilbilde","background":"Bakgrunn","bio":"Biografi","block_export":"Eksporter blokkeringer","block_export_button":"Eksporter blokkeringer til en csv fil","block_import":"Import blokkeringer","block_import_error":"Det oppsto en feil under importering av blokkeringer","blocks_imported":"Blokkeringer importert, det vil ta litt å prossesere dem","blocks_tab":"Blokkeringer","btnRadius":"Knapper","cBlue":"Blå (Svar, følg)","cGreen":"Grønn (Gjenta)","cOrange":"Oransje (Lik)","cRed":"Rød (Avbryt)","change_password":"Endre passord","change_password_error":"Feil ved endring av passord","changed_password":"Passord endret","collapse_subject":"Sammenfold statuser med tema","composing":"komponering","confirm_new_password":"Bekreft nytt passord","current_avatar":"Ditt nåværende profilbilde","current_password":"Nåværende passord","current_profile_banner":"Din nåværende profil-banner","data_import_export_tab":"Data import / eksport","default_vis":"Standard visnings-omfang","delete_account":"Slett konto","delete_account_description":"Fjern din konto og alle dine meldinger for alltid.","delete_account_error":"Det oppsto et problem ved sletting av kontoen din, hvis dette problemet forblir kontakt din administrator","delete_account_instructions":"Skriv inn ditt passord i feltet nedenfor for å bekrefte sletting av konto","avatar_size_instruction":"Den anbefalte minste-størrelsen for profilbilder er 150x150 piksler","export_theme":"Lagre tema","filtering":"Filtrering","filtering_explanation":"Alle statuser som inneholder disse ordene vil bli dempet, en kombinasjon av tegn per linje","follow_export":"Eksporter følginger","follow_export_button":"Eksporter følgingene dine til en .csv fil","follow_import":"Importer følginger","follow_import_error":"Feil ved importering av følginger.","follows_imported":"Følginger importert! Behandling vil ta litt tid.","foreground":"Forgrunn","general":"Generell","hide_attachments_in_convo":"Gjem vedlegg i samtaler","hide_attachments_in_tl":"Gjem vedlegg på tidslinje","hide_muted_posts":"Gjem statuser i fra gjemte brukere","max_thumbnails":"Maks antall forhåndsbilder per status","hide_isp":"Gjem instans-spesifikt panel","preload_images":"Forhåndslast bilder","use_one_click_nsfw":"Åpne sensitive vedlegg med ett klikk","hide_post_stats":"Gjem status statistikk (f.eks. antall likes","hide_user_stats":"Gjem bruker statistikk (f.eks. antall følgere)","hide_filtered_statuses":"Gjem filtrerte statuser","import_blocks_from_a_csv_file":"Importer blokkeringer fra en csv fil","import_followers_from_a_csv_file":"Importer følginger fra en csv fil","import_theme":"Last tema","inputRadius":"Tekst felt","checkboxRadius":"Sjekkbokser","instance_default":"(standard: {value})","instance_default_simple":"(standard)","interface":"Grensesnitt","interfaceLanguage":"Grensesnitt-språk","invalid_theme_imported":"Den valgte filen er ikke ett støttet Pleroma-tema, ingen endringer til ditt tema ble gjort","limited_availability":"Ikke tilgjengelig i din nettleser","links":"Linker","lock_account_description":"Begrens din konto til bare godkjente følgere","loop_video":"Gjenta videoer","loop_video_silent_only":"Gjenta bare videoer uten lyd, (for eksempel Mastodon sine \\"gifs\\")","mutes_tab":"Dempinger","play_videos_in_modal":"Spill videoer direkte i media-avspilleren","use_contain_fit":"Ikke minsk vedlegget i forhåndsvisninger","name":"Navn","name_bio":"Navn & Biografi","new_password":"Nytt passord","notification_visibility":"Typer varsler som skal vises","notification_visibility_follows":"Følginger","notification_visibility_likes":"Likes","notification_visibility_mentions":"Nevnt","notification_visibility_repeats":"Gjentakelser","no_rich_text_description":"Fjern all formatering fra statuser","no_blocks":"Ingen blokkeringer","no_mutes":"Ingen dempinger","hide_follows_description":"Ikke hvis hvem jeg følger","hide_followers_description":"Ikke hvis hvem som følger meg","show_admin_badge":"Hvis ett administratormerke på min profil","show_moderator_badge":"Hvis ett moderatormerke på min profil","nsfw_clickthrough":"Krev trykk for å vise statuser som kan være upassende","oauth_tokens":"OAuth Tokens","token":"Pollett","refresh_token":"Fornyingspolett","valid_until":"Gyldig til","revoke_token":"Tilbakekall","panelRadius":"Panel","pause_on_unfocused":"Stopp henting av poster når vinduet ikke er i fokus","presets":"Forhåndsdefinerte tema","profile_background":"Profil-bakgrunn","profile_banner":"Profil-banner","profile_tab":"Profil","radii_help":"Bestem hvor runde hjørnene i brukergrensesnittet skal være (i piksler)","replies_in_timeline":"Svar på tidslinje","reply_visibility_all":"Vis alle svar","reply_visibility_following":"Vis bare svar som er til meg eller folk jeg følger","reply_visibility_self":"Vis bare svar som er til meg","autohide_floating_post_button":"Skjul Ny Status knapp automatisk (mobil)","saving_err":"Feil ved lagring av innstillinger","saving_ok":"Innstillinger lagret","search_user_to_block":"Søk etter hvem du vil blokkere","search_user_to_mute":"Søk etter hvem du vil dempe","security_tab":"Sikkerhet","scope_copy":"Kopier mottakere når du svarer noen (Direktemeldinger blir alltid kopiert","minimal_scopes_mode":"Minimaliser mottakervalg","set_new_avatar":"Rediger profilbilde","set_new_profile_background":"Rediger profil-bakgrunn","set_new_profile_banner":"Sett ny profil-banner","settings":"Innstillinger","subject_input_always_show":"Alltid hvis tema-felt","subject_line_behavior":"Kopier tema når du svarer","subject_line_email":"Som email: \\"re: tema\\"","subject_line_mastodon":"Som mastodon: kopier som den er","subject_line_noop":"Ikke koper","post_status_content_type":"Status innholdstype","stop_gifs":"Spill av GIFs når du holder over dem","streaming":"Automatisk strømming av nye statuser når du har bladd til toppen","text":"Tekst","theme":"Tema","theme_help":"Bruk heksadesimale fargekoder (#rrggbb) til å endre farge-temaet ditt.","theme_help_v2_1":"Du kan også overskrive noen komponenter sine farger og opasitet ved å sjekke av sjekkboksen, bruk \\"Nullstill alt\\" knappen for å fjerne alle overskrivelser.","theme_help_v2_2":"Ikoner under noen av innstillingene er bakgrunn/tekst kontrast indikatorer, hold over dem for detaljert informasjon. Vennligst husk at disse indikatorene viser det verste utfallet.","tooltipRadius":"Verktøytips/advarsler","upload_a_photo":"Last opp ett bilde","user_settings":"Brukerinstillinger","values":{"false":"nei","true":"ja"},"notifications":"Varsler","notification_mutes":"For å stoppe å motta varsler i fra en spesifikk bruker, kan du dempe dem.","notification_blocks":"Hvis du blokkerer en bruker vil det stoppe alle varsler og i tilleg få dem til å slutte å følge deg","enable_web_push_notifications":"Skru på pushnotifikasjoner i nettlesere","style":{"switcher":{"keep_color":"Behold farger","keep_shadows":"Behold skygger","keep_opacity":"Behold opasitet","keep_roundness":"Behold rundhet","keep_fonts":"Behold fonter","save_load_hint":"\\"Behold\\" alternativer beholder de instillingene som er satt når du velger eller laster inn temaer, det lagrer også disse alternativene når du eksporterer ett tema, Når alle sjekkboksene er tomme, vil alt bli lagret når du eksporterer ett tema.","reset":"Still in på nytt","clear_all":"Nullstill alt","clear_opacity":"Nullstill opasitet"},"common":{"color":"Farge","opacity":"Opasitet","contrast":{"hint":"Kontrast forholdet er {ratio}, it {level} {context}","level":{"aa":"møter Nivå AA retningslinje (minimal)","aaa":"møter Nivå AAA retningslinje (recommended)","bad":"møter ingen tilgjengeligshetsretningslinjer"},"context":{"18pt":"for stor (18pt+) tekst","text":"for tekst"}}},"common_colors":{"_tab_label":"Vanlig","main":"Vanlige farger","foreground_hint":"Se \\"Avansert\\" fanen for mer detaljert kontroll","rgbo":"Ikoner, aksenter, merker"},"advanced_colors":{"_tab_label":"Avansert","alert":"Varslingsbakgrunn","alert_error":"Feil","badge":"Merkebakgrunn","badge_notification":"Varsling","panel_header":"Panelhode","top_bar":"Topplinje","borders":"Kanter","buttons":"Knapper","inputs":"Tekstfelt","faint_text":"Svak tekst"},"radii":{"_tab_label":"Rundhet"},"shadows":{"_tab_label":"Skygger og belysning","component":"Komponent","override":"Overskriv","shadow_id":"Skygge #{value}","blur":"Uklarhet","spread":"Spredning","inset":"Insett","hint":"For skygger kan du sette --variable som en fargeveerdi for å bruke CSS3 variabler. Vær oppmerksom på at å sette opasitet da ikke vil fungere her.","filter_hint":{"always_drop_shadow":"Advarsel, denne skyggen bruker alltid {0} når nettleseren støtter det.","drop_shadow_syntax":"{0} støtter ikke {1} parameter og {2} nøkkelord.","avatar_inset":"Vær oppmerksom på at å kombinere både insatte og uinsatte skygger på profilbilder kan gi uforventede resultater med gjennomsiktige profilbilder.","spread_zero":"Skygger med spredning > 0 vil fremstå som de var satt til 0","inset_classic":"Insette skygger vil bruke {0}"},"components":{"panel":"Panel","panelHeader":"Panelhode","topBar":"Topplinje","avatar":"Profilbilde (i profilvisning)","avatarStatus":"Profilbilde (i statusvisning)","popup":"Popups og tooltips","button":"Knapp","buttonHover":"Knapp (holdt)","buttonPressed":"Knapp (nedtrykt)","buttonPressedHover":"Knapp (nedtrykt+holdt)","input":"Tekstfelt"}},"fonts":{"_tab_label":"Fonter","help":"Velg font til elementene i brukergrensesnittet. For \\"egendefinert\\" må du skrive inn det nøyaktige font-navnet som det fremstår på systemet","components":{"interface":"Grensesnitt","input":"Tekstfelt","post":"Statustekst","postCode":"Monospaced tekst i en status (rik tekst)"},"family":"Font naavn","size":"Størrelse (i piksler)","weight":"Vekt (dristighet)","custom":"Egendefinert"},"preview":{"header":"Forhåndsvisning","content":"Innhold","error":"Eksempel feil","button":"Knapp","text":"Mye mer {0} og {1}","mono":"innhold","input":"Landet akkurat i L.A.","faint_link":"hjelpfull brukerveiledning","fine_print":"Les vår {0} for å lære ingenting nyttig!","header_faint":"Dette er OK","checkbox":"Jeg har skumlest vilkår og betingelser","link":"en flott liten link"}},"version":{"title":"Versjon","backend_version":"Backend Versjon","frontend_version":"Frontend Versjon"},"hide_wallpaper":"Skjul instansens bakgrunnsbilde"},"time":{"day":"{0} dag","days":"{0} dager","day_short":"{0}d","days_short":"{0}d","hour":"{0} time","hours":"{0} timer","hour_short":"{0}t","hours_short":"{0}t","in_future":"om {0}","in_past":"{0} siden","minute":"{0} minutt","minutes":"{0} minutter","minute_short":"{0}min","minutes_short":"{0}min","month":"{0} måned","months":"{0} måneder","month_short":"{0}md.","months_short":"{0}md.","now":"akkurat nå","now_short":"nå","second":"{0} sekund","seconds":"{0} sekunder","second_short":"{0}s","seconds_short":"{0}s","week":"{0} uke","weeks":"{0} uker","week_short":"{0}u","weeks_short":"{0}u","year":"{0} år","years":"{0} år","year_short":"{0}år","years_short":"{0}år"},"timeline":{"collapse":"Sammenfold","conversation":"Samtale","error_fetching":"Feil ved henting av oppdateringer","load_older":"Last eldre statuser","no_retweet_hint":"Status er markert som bare til følgere eller direkte og kan ikke gjentas","repeated":"gjentok","show_new":"Vis nye","up_to_date":"Oppdatert","no_more_statuses":"Ingen flere statuser","no_statuses":"Ingen statuser"},"status":{"favorites":"Favoritter","repeats":"Gjentakelser","delete":"Slett status","pin":"Fremhev på profil","unpin":"Fjern fremhevelse","pinned":"Fremhevet","delete_confirm":"Har du virkelig lyst til å slette denne statusen?","reply_to":"Svar til","replies_list":"Svar:"},"user_card":{"approve":"Godkjenn","block":"Blokker","blocked":"Blokkert!","deny":"Avslå","favorites":"Favoritter","follow":"Følg","follow_sent":"Forespørsel sendt!","follow_progress":"Forespør…","follow_unfollow":"Avfølg","followees":"Følger","followers":"Følgere","following":"Følger!","follows_you":"Følger deg!","its_you":"Det er deg!","media":"Media","mute":"Demp","muted":"Dempet","per_day":"per dag","remote_follow":"Følg eksternt","report":"Rapport","statuses":"Statuser","subscribe":"Abonner","unsubscribe":"Avabonner","unblock":"Fjern blokkering","unblock_progress":"Fjerner blokkering...","block_progress":"Blokkerer...","unmute":"Fjern demping","unmute_progress":"Fjerner demping...","mute_progress":"Demper...","admin_menu":{"moderation":"Moderering","grant_admin":"Gi Administrator","revoke_admin":"Fjern Administrator","grant_moderator":"Gi Moderator","revoke_moderator":"Fjern Moderator","activate_account":"Aktiver konto","deactivate_account":"Deaktiver kontro","delete_account":"Slett konto","force_nsfw":"Merk alle statuser som sensitive","strip_media":"Fjern media i fra statuser","force_unlisted":"Tving statuser til å være uopplistet","sandbox":"Tving statuser til å bare vises til følgere","disable_remote_subscription":"Fjern mulighet til å følge brukeren fra andre instanser","disable_any_subscription":"Fjern mulighet til å følge brukeren","quarantine":"Gjør at statuser fra brukeren ikke kan sendes til andre instanser","delete_user":"Slett bruker","delete_user_confirmation":"Er du helt sikker? Denne handlingen kan ikke omgjøres."}},"user_profile":{"timeline_title":"Bruker-tidslinje","profile_does_not_exist":"Beklager, denne profilen eksisterer ikke.","profile_loading_error":"Beklager, det oppsto en feil under lasting av denne profilen."},"user_reporting":{"title":"Rapporterer {0}","add_comment_description":"Rapporten blir sent til moderatorene av din instans. Du kan gi en forklaring på hvorfor du rapporterer denne kontoen under:","additional_comments":"Videre kommentarer","forward_description":"Denne kontoen er fra en annen server, vil du sende en kopi av rapporten til dem også?","forward_to":"Videresend til {0}","submit":"Send","generic_error":"Det oppsto en feil under behandling av din forespørsel."},"who_to_follow":{"more":"Mer","who_to_follow":"Kontoer å følge"},"tool_tip":{"media_upload":"Last opp media","repeat":"Gjenta","reply":"Svar","favorite":"Lik","user_settings":"Brukerinnstillinger"},"upload":{"error":{"base":"Det oppsto en feil under opplastning.","file_too_big":"Fil for stor [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]","default":"Prøv igjen senere"},"file_size_units":{"B":"B","KiB":"KiB","MiB":"MiB","GiB":"GiB","TiB":"TiB"}},"search":{"people":"Folk","hashtags":"Emneknagger","person_talking":"{count} person snakker om dette","people_talking":"{count} personer snakker om dette","no_results":"Ingen resultater"},"about":{"mrf":{"simple":{"quarantine":"Karantene","reject_desc":"Denne instansen vil ikke godta meldinger fra følgende instanser:","reject":"Avvis","accept_desc":"Denne instansen godtar kun meldinger fra følgende instanser:","accept":"Aksepter"},"keyword":{"is_replaced_by":"→","replace":"Erstatt","reject":"Avvis","ftl_removal":"Fjerning fra \\"Det hele kjente nettverket\\" Tidslinjen"}}}}')}}]); +//# sourceMappingURL=22.68c0a771d79e3383f5e8.js.map \ No newline at end of file diff --git a/priv/static/static/js/22.68c0a771d79e3383f5e8.js.map b/priv/static/static/js/22.68c0a771d79e3383f5e8.js.map new file mode 100644 index 000000000..10a44dd2e --- /dev/null +++ b/priv/static/static/js/22.68c0a771d79e3383f5e8.js.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/22.68c0a771d79e3383f5e8.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/22.dbc79965f66b0bb62d88.js.map b/priv/static/static/js/22.dbc79965f66b0bb62d88.js.map deleted file mode 100644 index a43e0a6b4..000000000 --- a/priv/static/static/js/22.dbc79965f66b0bb62d88.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/22.dbc79965f66b0bb62d88.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/23.4addb03e0862c780c55f.js b/priv/static/static/js/23.0b6cdf4c9dc52c4291c0.js similarity index 70% rename from priv/static/static/js/23.4addb03e0862c780c55f.js rename to priv/static/static/js/23.0b6cdf4c9dc52c4291c0.js index 40d2fb0b3..3d6701989 100644 --- a/priv/static/static/js/23.4addb03e0862c780c55f.js +++ b/priv/static/static/js/23.0b6cdf4c9dc52c4291c0.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[23],{603:function(e){e.exports=JSON.parse('{"chat":{"title":"Chat"},"features_panel":{"chat":"Chat","gopher":"Gopher","media_proxy":"Mediaproxy","scope_options":"Zichtbaarheidsopties","text_limit":"Tekstlimiet","title":"Kenmerken","who_to_follow":"Wie te volgen","upload_limit":"Upload limiet","pleroma_chat_messages":"Pleroma Chat"},"finder":{"error_fetching_user":"Fout tijdens ophalen gebruiker","find_user":"Gebruiker zoeken"},"general":{"apply":"Toepassen","submit":"Verzenden","more":"Meer","optional":"optioneel","show_more":"Meer tonen","show_less":"Minder tonen","dismiss":"Opheffen","cancel":"Annuleren","disable":"Uitschakelen","enable":"Inschakelen","confirm":"Bevestigen","verify":"Verifiëren","generic_error":"Er is een fout opgetreden","peek":"Spieken","close":"Sluiten","retry":"Opnieuw proberen","error_retry":"Probeer het opnieuw","loading":"Laden…","role":{"moderator":"Moderator","admin":"Beheerder"}},"login":{"login":"Inloggen","description":"Inloggen met OAuth","logout":"Uitloggen","password":"Wachtwoord","placeholder":"bijv. barbapapa","register":"Registreren","username":"Gebruikersnaam","hint":"Log in om deel te nemen aan de discussie","authentication_code":"Authenticatiecode","enter_recovery_code":"Voer een herstelcode in","enter_two_factor_code":"Voer een twee-factorcode in","recovery_code":"Herstelcode","heading":{"totp":"Twee-factorauthenticatie","recovery":"Twee-factorherstelling"}},"nav":{"about":"Over","back":"Terug","chat":"Lokale Chat","friend_requests":"Volgverzoeken","mentions":"Vermeldingen","dms":"Privéberichten","public_tl":"Openbare tijdlijn","timeline":"Tijdlijn","twkn":"Bekende Netwerk","user_search":"Gebruiker Zoeken","who_to_follow":"Wie te volgen","preferences":"Voorkeuren","administration":"Beheer","search":"Zoeken","interactions":"Interacties","chats":"Chats","home_timeline":"Thuis tijdlijn","timelines":"Tijdlijnen","bookmarks":"Bladwijzers"},"notifications":{"broken_favorite":"Onbekende status, aan het zoeken…","favorited_you":"vond je status leuk","followed_you":"volgt jou","load_older":"Oudere meldingen laden","notifications":"Meldingen","read":"Gelezen!","repeated_you":"herhaalde je status","no_more_notifications":"Geen meldingen meer","migrated_to":"is gemigreerd naar","follow_request":"wil je volgen","reacted_with":"reageerde met {0}","error":"Fout bij ophalen van meldingen: {0}"},"post_status":{"new_status":"Nieuwe status plaatsen","account_not_locked_warning":"Je account is niet {0}. Iedereen kan je volgen om je alleen-volgers-berichten te lezen.","account_not_locked_warning_link":"gesloten","attachments_sensitive":"Bijlagen als gevoelig markeren","content_type":{"text/plain":"Platte tekst","text/html":"HTML","text/markdown":"Markdown","text/bbcode":"BBCode"},"content_warning":"Onderwerp (optioneel)","default":"Tijd voor anime!","direct_warning":"Deze post zal enkel zichtbaar zijn voor de personen die genoemd zijn.","posting":"Plaatsen","scope":{"direct":"Privé - bericht enkel naar vermelde gebruikers sturen","private":"Enkel volgers - bericht enkel naar volgers sturen","public":"Openbaar - bericht op openbare tijdlijnen plaatsen","unlisted":"Niet vermelden - niet tonen op openbare tijdlijnen"},"direct_warning_to_all":"Dit bericht zal zichtbaar zijn voor alle vermelde gebruikers.","direct_warning_to_first_only":"Dit bericht zal alleen zichtbaar zijn voor de vermelde gebruikers aan het begin van het bericht.","scope_notice":{"public":"Dit bericht zal voor iedereen zichtbaar zijn","unlisted":"Dit bericht zal niet zichtbaar zijn in de Openbare Tijdlijn en Het Geheel Bekende Netwerk","private":"Dit bericht zal voor alleen je volgers zichtbaar zijn"},"post":"Bericht","empty_status_error":"Kan geen lege status zonder bijlagen plaatsen","preview_empty":"Leeg","preview":"Voorbeeld","media_description":"Mediaomschrijving","media_description_error":"Kon media niet ophalen, probeer het opnieuw"},"registration":{"bio":"Bio","email":"E-mail","fullname":"Weergavenaam","password_confirm":"Wachtwoord bevestiging","registration":"Registratie","token":"Uitnodigingstoken","captcha":"CAPTCHA","new_captcha":"Klik op de afbeelding voor een nieuwe captcha","validations":{"username_required":"moet ingevuld zijn","fullname_required":"moet ingevuld zijn","email_required":"moet ingevuld zijn","password_required":"moet ingevuld zijn","password_confirmation_required":"moet ingevuld zijn","password_confirmation_match":"komt niet overeen met het wachtwoord"},"username_placeholder":"bijv. lain","fullname_placeholder":"bijv. Lain Iwakura","bio_placeholder":"bijv.\\nHallo, ik ben Lain.\\nIk ben een animemeisje woonachtig in een buitenwijk in Japan. Je kent me misschien van the Wired.","reason_placeholder":"Deze instantie keurt registraties handmatig goed.\\nLaat de beheerder weten waarom je wilt registreren.","reason":"Reden voor registratie","register":"Registreren"},"settings":{"attachmentRadius":"Bijlages","attachments":"Bijlages","avatar":"Avatar","avatarAltRadius":"Avatars (meldingen)","avatarRadius":"Avatars","background":"Achtergrond","bio":"Bio","btnRadius":"Knoppen","cBlue":"Blauw (Beantwoorden, volgen)","cGreen":"Groen (Herhalen)","cOrange":"Oranje (Favoriet)","cRed":"Rood (Annuleren)","change_password":"Wachtwoord wijzigen","change_password_error":"Er is een fout opgetreden bij het wijzigen van je wachtwoord.","changed_password":"Wachtwoord succesvol gewijzigd!","collapse_subject":"Klap berichten met een onderwerp in","composing":"Opstellen","confirm_new_password":"Nieuw wachtwoord bevestigen","current_avatar":"Je huidige avatar","current_password":"Huidig wachtwoord","current_profile_banner":"Je huidige profiel banner","data_import_export_tab":"Data-import / export","default_vis":"Standaard zichtbaarheidsbereik","delete_account":"Account verwijderen","delete_account_description":"Permanent je gegevens verwijderen en account deactiveren.","delete_account_error":"Er is een fout opgetreden bij het verwijderen van je account. Indien dit probleem zich voor blijft doen, neem dan contact op met de beheerder van deze instantie.","delete_account_instructions":"Voer je wachtwoord in het onderstaande invoerveld in om het verwijderen van je account te bevestigen.","export_theme":"Voorinstelling opslaan","filtering":"Filtering","filtering_explanation":"Alle statussen die deze woorden bevatten worden genegeerd, één filter per regel","follow_export":"Volgers exporteren","follow_export_button":"Exporteer je volgers naar een csv-bestand","follow_export_processing":"Aan het verwerken, binnen enkele ogenblikken wordt je gevraagd je bestand te downloaden","follow_import":"Volgers importeren","follow_import_error":"Fout bij importeren volgers","follows_imported":"Volgers geïmporteerd! Het kan even duren voordat deze verwerkt zijn.","foreground":"Voorgrond","general":"Algemeen","hide_attachments_in_convo":"Bijlagen in conversaties verbergen","hide_attachments_in_tl":"Bijlagen in tijdlijn verbergen","hide_isp":"Instantie-specifiek paneel verbergen","preload_images":"Afbeeldingen vooraf laden","hide_post_stats":"Bericht statistieken verbergen (bijv. het aantal favorieten)","hide_user_stats":"Gebruikers-statistieken verbergen (bijv. het aantal volgers)","import_followers_from_a_csv_file":"Gevolgden uit een csv bestand importeren","import_theme":"Preset laden","inputRadius":"Invoervelden","checkboxRadius":"Checkboxen","instance_default":"(standaard: {value})","instance_default_simple":"(standaard)","interface":"Interface","interfaceLanguage":"Interface taal","invalid_theme_imported":"Het geselecteerde bestand is niet een door Pleroma ondersteund thema. Er zijn geen aanpassingen gedaan.","limited_availability":"Niet beschikbaar in je browser","links":"Links","lock_account_description":"Volgers enkel na expliciete toestemming toelaten","loop_video":"Video\'s herhalen","loop_video_silent_only":"Enkel video\'s zonder geluid herhalen (bijv. Mastodon\'s \\"gifs\\")","name":"Naam","name_bio":"Naam & bio","new_password":"Nieuw wachtwoord","notification_visibility":"Type meldingen die getoond worden","notification_visibility_follows":"Gevolgden","notification_visibility_likes":"Favorieten","notification_visibility_mentions":"Vermeldingen","notification_visibility_repeats":"Herhalingen","no_rich_text_description":"Verwijder rich text formattering van alle berichten","hide_network_description":"Toon niet wie mij volgt en wie ik volg.","nsfw_clickthrough":"Doorklikbaar verbergen van gevoelige bijlages en link voorbeelden inschakelen","oauth_tokens":"OAuth-tokens","token":"Token","refresh_token":"Token vernieuwen","valid_until":"Geldig tot","revoke_token":"Intrekken","panelRadius":"Panelen","pause_on_unfocused":"Streamen pauzeren wanneer de tab niet in focus is","presets":"Presets","profile_background":"Profiel achtergrond","profile_banner":"Profiel banner","profile_tab":"Profiel","radii_help":"Afronding van hoeken in de interface instellen (in pixels)","replies_in_timeline":"Antwoorden in tijdlijn","reply_visibility_all":"Alle antwoorden tonen","reply_visibility_following":"Enkel antwoorden tonen die aan mij of gevolgde gebruikers gericht zijn","reply_visibility_self":"Enkel antwoorden tonen die aan mij gericht zijn","saving_err":"Fout tijdens opslaan van instellingen","saving_ok":"Instellingen opgeslagen","security_tab":"Beveiliging","scope_copy":"Bereik overnemen bij beantwoorden (Privéberichten blijven altijd privé)","set_new_avatar":"Nieuwe avatar instellen","set_new_profile_background":"Nieuwe profiel achtergrond instellen","set_new_profile_banner":"Nieuwe profiel banner instellen","settings":"Instellingen","subject_input_always_show":"Altijd onderwerpveld tonen","subject_line_behavior":"Onderwerp kopiëren bij beantwoorden","subject_line_email":"Zoals email: \\"re: onderwerp\\"","subject_line_mastodon":"Zoals mastodon: kopieer zoals het is","subject_line_noop":"Niet kopiëren","stop_gifs":"GIFs afspelen bij zweven","streaming":"Automatisch streamen van nieuwe berichten inschakelen wanneer tot boven gescrold is","text":"Tekst","theme":"Thema","theme_help":"Hex kleur codes (#rrggbb) gebruiken om je kleur thema te wijzigen.","theme_help_v2_1":"Je kan ook de kleur en transparantie van bepaalde componenten overschrijven door de checkbox aan te vinken, gebruik de \\"Alles wissen\\" knop om alle overschrijvingen te annuleren.","theme_help_v2_2":"Iconen onder sommige onderdelen zijn achtergrond/tekst contrast indicatoren, zweef er over voor gedetailleerde info. Hou er rekening mee dat bij doorzichtigheid de ergst mogelijke situatie wordt weer gegeven.","tooltipRadius":"Tooltips/alarmen","user_settings":"Gebruikersinstellingen","values":{"false":"nee","true":"ja"},"notifications":"Meldingen","enable_web_push_notifications":"Web push meldingen inschakelen","style":{"switcher":{"keep_color":"Kleuren behouden","keep_shadows":"Schaduwen behouden","keep_opacity":"Transparantie behouden","keep_roundness":"Rondingen behouden","keep_fonts":"Lettertypes behouden","save_load_hint":"\\"Behoud\\" opties behouden de momenteel ingestelde opties bij het selecteren of laden van thema\'s, maar slaan ook de genoemde opties op bij het exporteren van een thema. Wanneer alle selectievakjes zijn uitgeschakeld, zal het exporteren van thema\'s alles opslaan.","reset":"Reset","clear_all":"Alles wissen","clear_opacity":"Transparantie wissen","keep_as_is":"Hou zoals het is","use_snapshot":"Oude versie","use_source":"Nieuwe versie","help":{"future_version_imported":"Het geïmporteerde bestand is gemaakt voor een nieuwere versie van FE.","older_version_imported":"Het geïmporteerde bestand is gemaakt voor een oudere versie van FE.","upgraded_from_v2":"PleromaFE is bijgewerkt, het thema kan iets anders uitzien dan dat je gewend bent.","v2_imported":"Het geïmporteerde bestand is gemaakt voor een oudere FE. We proberen compatibiliteit te maximaliseren, maar het kan toch voorkomen dat er inconsistenties zijn.","snapshot_source_mismatch":"Versie conflict: waarschijnlijk was FE terug gerold en opnieuw bijgewerkt, indien je het thema aangepast hebt met de oudere versie van FE wil je waarschijnlijk de oude versie gebruiken, gebruik anders de nieuwe versie.","migration_napshot_gone":"Voor een onduidelijke reden mist de momentopname, dus sommige dingen kunnen anders uitzien dan je gewend bent.","migration_snapshot_ok":"Voor de zekerheid is een momentopname van het thema geladen. Je kunt proberen om de thema gegevens te laden.","fe_downgraded":"PleromaFE\'s versie is terug gerold.","fe_upgraded":"De thema-engine van PleromaFE is bijgewerkt na de versie update.","snapshot_missing":"Het bestand bevat geen thema momentopname, dus het thema kan anders uitzien dan je oorspronkelijk bedacht had.","snapshot_present":"Thema momentopname is geladen, alle waarden zijn overschreven. Je kunt in plaats daarvan ook de daadwerkelijke data van het thema laden."},"load_theme":"Thema laden"},"common":{"color":"Kleur","opacity":"Transparantie","contrast":{"hint":"Contrast verhouding is {ratio}, {level} {context}","level":{"aa":"voldoet aan de richtlijn van niveau AA (minimum)","aaa":"voldoet aan de richtlijn van niveau AAA (aangeraden)","bad":"voldoet aan geen enkele toegankelijkheidsrichtlijn"},"context":{"18pt":"voor grote (18pt+) tekst","text":"voor tekst"}}},"common_colors":{"_tab_label":"Algemeen","main":"Algemene kleuren","foreground_hint":"Zie \\"Geavanceerd\\" tab voor meer gedetailleerde controle","rgbo":"Iconen, accenten, badges"},"advanced_colors":{"_tab_label":"Geavanceerd","alert":"Alarm achtergrond","alert_error":"Fout","badge":"Badge achtergrond","badge_notification":"Meldingen","panel_header":"Paneel koptekst","top_bar":"Top balk","borders":"Randen","buttons":"Knoppen","inputs":"Invoervelden","faint_text":"Vervaagde tekst","tabs":"Tabbladen","toggled":"Geschakeld","disabled":"Uitgeschakeld","selectedMenu":"Geselecteerd menu item","selectedPost":"Geselecteerd bericht","pressed":"Ingedrukt","highlight":"Gemarkeerde elementen","icons":"Iconen","poll":"Poll grafiek","underlay":"Onderlaag","popover":"Tooltips, menu\'s, popovers","post":"Berichten / Gebruiker bios","alert_neutral":"Neutraal","alert_warning":"Waarschuwing","chat":{"border":"Rand","outgoing":"Uitgaand","incoming":"Binnenkomend"},"wallpaper":"Achtergrond"},"radii":{"_tab_label":"Rondheid"},"shadows":{"_tab_label":"Schaduw en belichting","component":"Onderdeel","override":"Overschrijven","shadow_id":"Schaduw #{value}","blur":"Vervagen","spread":"Spreiding","inset":"Inzet","hint":"Voor schaduw kan je ook --variable gebruiken als een kleur waarde om CSS3 variabelen te gebruiken. Houd er rekening mee dat het instellen van opaciteit in dit geval niet werkt.","filter_hint":{"always_drop_shadow":"Waarschuwing, deze schaduw gebruikt altijd {0} als de browser dit ondersteund.","drop_shadow_syntax":"{0} ondersteund niet de {1} parameter en {2} sleutelwoord.","avatar_inset":"Houdt er rekening mee dat het combineren van zowel inzet and niet-inzet schaduwen op transparante avatars onverwachte resultaten kan opleveren.","spread_zero":"Schaduw met spreiding > 0 worden weergegeven alsof ze op nul staan","inset_classic":"Inzet schaduw zal {0} gebruiken"},"components":{"panel":"Paneel","panelHeader":"Paneel koptekst","topBar":"Top balk","avatar":"Gebruikers avatar (in profiel weergave)","avatarStatus":"Gebruikers avatar (in bericht weergave)","popup":"Popups en tooltips","button":"Knop","buttonHover":"Knop (zweven)","buttonPressed":"Knop (ingedrukt)","buttonPressedHover":"Knop (ingedrukt+zweven)","input":"Invoerveld"},"hintV3":"Voor schaduwen kun je ook de {0} notatie gebruiken om de andere kleur invoer te gebruiken."},"fonts":{"_tab_label":"Lettertypes","help":"Selecteer het lettertype om te gebruiken voor elementen van de UI. Voor \\"aangepast\\" dien je de exacte naam van het lettertype in te voeren zoals die in het systeem wordt weergegeven.","components":{"interface":"Interface","input":"Invoervelden","post":"Bericht tekst","postCode":"Monospaced tekst in een bericht (rich text)"},"family":"Lettertype naam","size":"Grootte (in px)","weight":"Gewicht (dikgedruktheid)","custom":"Aangepast"},"preview":{"header":"Voorvertoning","content":"Inhoud","error":"Voorbeeld fout","button":"Knop","text":"Nog een boel andere {0} en {1}","mono":"inhoud","input":"Tijd voor anime!","faint_link":"handige gebruikershandleiding","fine_print":"Lees onze {0} om niets nuttig te leren!","header_faint":"Alles komt goed","checkbox":"Ik heb de gebruikersvoorwaarden gelezen","link":"een leuke kleine link"}},"notification_setting_privacy":"Privacy","notification_setting_privacy_option":"Verberg de afzender en inhoud van push meldingen","notification_mutes":"Om niet langer meldingen te ontvangen van een specifieke gebruiker, kun je deze negeren.","app_name":"App naam","security":"Beveiliging","enter_current_password_to_confirm":"Voer je huidige wachtwoord in om je identiteit te bevestigen","mfa":{"otp":"OTP","setup_otp":"OTP instellen","wait_pre_setup_otp":"OTP voorinstellen","confirm_and_enable":"Bevestig en schakel OTP in","title":"Twee-factorauthenticatie","generate_new_recovery_codes":"Genereer nieuwe herstelcodes","recovery_codes":"Herstelcodes.","waiting_a_recovery_codes":"Back-upcodes ontvangen…","authentication_methods":"Authenticatiemethodes","scan":{"title":"Scannen","desc":"Scan de QR-code of voer een sleutel in met je twee-factorapplicatie:","secret_code":"Sleutel"},"verify":{"desc":"Voer de code van je twee-factorapplicatie in om twee-factorauthenticatie in te schakelen:"},"warning_of_generate_new_codes":"Wanneer je nieuwe herstelcodes genereert, zullen je oude codes niet langer werken.","recovery_codes_warning":"Schrijf de codes op of sla ze op een veilige locatie op - anders kun je ze niet meer inzien. Als je toegang tot je 2FA-app en herstelcodes verliest, zal je buitengesloten zijn van je account."},"allow_following_move":"Automatisch volgen toestaan wanneer een gevolgd account migreert","block_export":"Blokkades exporteren","block_import":"Blokkades importeren","blocks_imported":"Blokkades geïmporteerd! Het kan even duren voordat deze verwerkt zijn.","blocks_tab":"Blokkades","change_email":"E-mail wijzigen","change_email_error":"Er is een fout opgetreden tijdens het wijzigen van je e-mailadres.","changed_email":"E-mailadres succesvol gewijzigd!","domain_mutes":"Domeinen","avatar_size_instruction":"De aangeraden minimale afmeting voor avatar-afbeeldingen is 150x150 pixels.","pad_emoji":"Vul emoji aan met spaties wanneer deze met de picker ingevoegd worden","emoji_reactions_on_timeline":"Toon emoji-reacties op de tijdlijn","accent":"Accent","hide_muted_posts":"Berichten van genegeerde gebruikers verbergen","max_thumbnails":"Maximaal aantal miniaturen per bericht","use_one_click_nsfw":"Gevoelige bijlagen met slechts één klik openen","hide_filtered_statuses":"Gefilterde statussen verbergen","import_blocks_from_a_csv_file":"Blokkades van een csv bestand importeren","mutes_tab":"Genegeerden","play_videos_in_modal":"Video\'s in een popup frame afspelen","new_email":"Nieuwe e-mail","notification_visibility_emoji_reactions":"Reacties","no_blocks":"Geen blokkades","no_mutes":"Geen genegeerden","hide_followers_description":"Niet tonen wie mij volgt","hide_followers_count_description":"Niet mijn volgers aantal tonen","hide_follows_count_description":"Niet mijn gevolgde aantal tonen","show_admin_badge":"\\"Beheerder\\" badge in mijn profiel tonen","autohide_floating_post_button":"Nieuw Bericht knop automatisch verbergen (mobiel)","search_user_to_block":"Zoek wie je wilt blokkeren","search_user_to_mute":"Zoek wie je wilt negeren","minimal_scopes_mode":"Bericht bereik-opties minimaliseren","post_status_content_type":"Bericht status content type","user_mutes":"Gebruikers","useStreamingApi":"Berichten en meldingen in real-time ontvangen","useStreamingApiWarning":"(Afgeraden, experimenteel, kan berichten overslaan)","type_domains_to_mute":"Zoek domeinen om te negeren","upload_a_photo":"Foto uploaden","fun":"Plezier","greentext":"Meme pijlen","block_export_button":"Exporteer je geblokkeerde gebruikers naar een csv-bestand","block_import_error":"Fout bij importeren blokkades","discoverable":"Sta toe dat dit account ontdekt kan worden in zoekresultaten en andere diensten","use_contain_fit":"Bijlage in miniaturen niet bijsnijden","notification_visibility_moves":"Gebruiker Migraties","hide_follows_description":"Niet tonen wie ik volg","show_moderator_badge":"\\"Moderator\\" badge in mijn profiel tonen","notification_setting_filters":"Filters","notification_blocks":"Door een gebruiker te blokkeren, ontvang je geen meldingen meer van de gebruiker en wordt je abonnement op de gebruiker opgeheven.","version":{"frontend_version":"Frontend versie","backend_version":"Backend versie","title":"Versie"},"mutes_and_blocks":"Negeringen en Blokkades","profile_fields":{"value":"Inhoud","name":"Label","add_field":"Veld toevoegen","label":"Profiel metadata"},"bot":"Dit is een bot-account","setting_changed":"Instelling verschilt van standaard waarde","save":"Wijzigingen opslaan","hide_media_previews":"Media voorbeelden verbergen","word_filter":"Woord filter","chatMessageRadius":"Chatbericht","mute_export":"Genegeerden export","mute_export_button":"Exporteer je genegeerden naar een csv-bestand","mute_import_error":"Fout tijdens het importeren van genegeerden","mute_import":"Genegeerden import","mutes_imported":"Genegeerden geïmporteerd! Het kan even duren voordat deze verwerkt zijn.","more_settings":"Meer instellingen","notification_setting_hide_notification_contents":"Afzender en inhoud van push meldingen verbergen","notification_setting_block_from_strangers":"Meldingen van gebruikers die je niet volgt blokkeren","virtual_scrolling":"Tijdlijn rendering optimaliseren","sensitive_by_default":"Berichten standaard als gevoelig markeren","reset_avatar_confirm":"Wil je echt de avatar herstellen?","reset_banner_confirm":"Wil je echt de banner herstellen?","reset_background_confirm":"Wil je echt de achtergrond herstellen?","reset_profile_banner":"Profiel banner herstellen","reset_profile_background":"Profiel achtergrond herstellen","reset_avatar":"Avatar herstellen","reply_visibility_self_short":"Alleen antwoorden aan mijzelf tonen","reply_visibility_following_short":"Antwoorden naar mijn gevolgden tonen","file_export_import":{"errors":{"file_slightly_new":"Bestand minor versie is verschillend, sommige instellingen kunnen mogelijk niet worden geladen","file_too_old":"Incompatibele hoofdversie: {fileMajor}, bestandsversie is te oud en wordt niet ondersteund (minimale versie {feMajor})","file_too_new":"Incompatibele hoofdversie: {fileMajor}, deze PleromaFE (instellingen versie {feMajor}) is te oud om deze te ondersteunen","invalid_file":"Het geselecteerde bestand is niet een door Pleroma ondersteunde instellingen back-up. Er zijn geen wijzigingen gemaakt."},"restore_settings":"Instellingen uit bestand herstellen","backup_settings_theme":"Instellingen en thema naar bestand back-uppen","backup_settings":"Instellingen naar bestand back-uppen","backup_restore":"Instellingen backup"},"hide_wallpaper":"Instantie achtergrond verbergen","hide_all_muted_posts":"Genegeerde berichten verbergen","import_mutes_from_a_csv_file":"Importeer genegeerden van een csv bestand"},"timeline":{"collapse":"Inklappen","conversation":"Conversatie","error_fetching":"Fout bij ophalen van updates","load_older":"Oudere statussen laden","no_retweet_hint":"Bericht is gemarkeerd als enkel volgers of direct en kan niet worden herhaald","repeated":"herhaalde","show_new":"Nieuwe tonen","up_to_date":"Up-to-date","no_statuses":"Geen statussen","no_more_statuses":"Geen statussen meer","socket_broke":"Realtime verbinding verloren: CloseEvent code {0}","socket_reconnected":"Realtime verbinding opgezet","reload":"Verversen","error":"Fout tijdens het ophalen van tijdlijn: {0}"},"user_card":{"approve":"Goedkeuren","block":"Blokkeren","blocked":"Geblokkeerd!","deny":"Weigeren","favorites":"Favorieten","follow":"Volgen","follow_sent":"Aanvraag verzonden!","follow_progress":"Aanvragen…","follow_again":"Aanvraag opnieuw zenden?","follow_unfollow":"Stop volgen","followees":"Aan het volgen","followers":"Volgers","following":"Aan het volgen!","follows_you":"Volgt jou!","its_you":"\'t is jij!","mute":"Negeren","muted":"Genegeerd","per_day":"per dag","remote_follow":"Volg vanop afstand","statuses":"Statussen","admin_menu":{"delete_user_confirmation":"Weet je het heel zeker? Deze uitvoering kan niet ongedaan worden gemaakt.","delete_user":"Gebruiker verwijderen","quarantine":"Federeren van gebruikers berichten verbieden","disable_any_subscription":"Volgen van gebruiker in zijn geheel verbieden","disable_remote_subscription":"Volgen van gebruiker vanaf andere instanties verbieden","sandbox":"Berichten forceren om alleen voor volgers zichtbaar te zijn","force_unlisted":"Berichten forceren om niet publiekelijk getoond te worden","strip_media":"Media van berichten verwijderen","force_nsfw":"Alle berichten als gevoelig markeren","delete_account":"Account verwijderen","deactivate_account":"Account deactiveren","activate_account":"Account activeren","revoke_moderator":"Moderatorsrechten intrekken","grant_moderator":"Moderatorsrechten toekennen","revoke_admin":"Beheerdersrechten intrekken","grant_admin":"Beheerdersrechten toekennen","moderation":"Moderatie"},"show_repeats":"Herhalingen tonen","hide_repeats":"Herhalingen verbergen","mute_progress":"Negeren…","unmute_progress":"Negering opheffen…","unmute":"Negering opheffen","block_progress":"Blokkeren…","unblock_progress":"Blokkade opheffen…","unblock":"Blokkade opheffen","unsubscribe":"Abonnement opzeggen","subscribe":"Abonneren","report":"Aangeven","mention":"Vermelding","media":"Media","hidden":"Verborgen","highlight":{"side":"Zijstreep","striped":"Gestreepte achtergrond","solid":"Effen achtergrond","disabled":"Geen highlight"},"bot":"Bot","message":"Bericht"},"user_profile":{"timeline_title":"Gebruikerstijdlijn","profile_loading_error":"Sorry, er is een fout opgetreden bij het laden van dit profiel.","profile_does_not_exist":"Sorry, dit profiel bestaat niet."},"who_to_follow":{"more":"Meer","who_to_follow":"Wie te volgen"},"tool_tip":{"media_upload":"Media uploaden","repeat":"Herhalen","reply":"Beantwoorden","favorite":"Favoriet maken","user_settings":"Gebruikers Instellingen","reject_follow_request":"Volg-verzoek afwijzen","accept_follow_request":"Volg-aanvraag accepteren","add_reaction":"Reactie toevoegen","bookmark":"Bladwijzer"},"upload":{"error":{"base":"Upload mislukt.","file_too_big":"Bestand is te groot [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]","default":"Probeer het later opnieuw","message":"Upload is mislukt: {0}"},"file_size_units":{"B":"B","KiB":"KiB","MiB":"MiB","GiB":"GiB","TiB":"TiB"}},"about":{"mrf":{"federation":"Federatie","keyword":{"reject":"Afwijzen","replace":"Vervangen","is_replaced_by":"→","keyword_policies":"Zoekwoordbeleid","ftl_removal":"Verwijdering van \\"Het Geheel Bekende Netwerk\\" Tijdlijn"},"mrf_policies_desc":"MRF-regels beïnvloeden het federatiegedrag van de instantie. De volgende regels zijn ingeschakeld:","mrf_policies":"Ingeschakelde MRF-regels","simple":{"simple_policies":"Instantiespecifieke regels","accept":"Accepteren","accept_desc":"Deze instantie accepteert alleen berichten van de volgende instanties:","reject":"Afwijzen","reject_desc":"Deze instantie zal geen berichten accepteren van de volgende instanties:","quarantine":"Quarantaine","quarantine_desc":"Deze instantie zal alleen openbare berichten sturen naar de volgende instanties:","ftl_removal_desc":"Deze instantie verwijdert de volgende instanties van \\"Bekende Netwerk\\" tijdlijn:","media_removal_desc":"Deze instantie verwijdert media van berichten van de volgende instanties:","media_nsfw_desc":"Deze instantie stelt media in als gevoelig in berichten van de volgende instanties:","ftl_removal":"Verwijderen van \\"Bekende Netwerk\\" Tijdlijn","media_removal":"Mediaverwijdering","media_nsfw":"Forceer media als gevoelig"}},"staff":"Personeel"},"domain_mute_card":{"mute":"Negeren","mute_progress":"Negeren…","unmute":"Negering opheffen","unmute_progress":"Negering wordt opgeheven…"},"exporter":{"export":"Exporteren","processing":"Verwerken, er wordt zo gevraagd om je bestand te downloaden"},"image_cropper":{"save":"Opslaan","save_without_cropping":"Opslaan zonder bijsnijden","cancel":"Annuleren","crop_picture":"Afbeelding bijsnijden"},"importer":{"submit":"Verzenden","success":"Succesvol geïmporteerd.","error":"Er is een fout opgetreden bij het importeren van dit bestand."},"media_modal":{"previous":"Vorige","next":"Volgende"},"polls":{"add_poll":"Poll toevoegen","add_option":"Optie toevoegen","option":"Optie","votes":"stemmen","vote":"Stem","single_choice":"Enkele keuze","multiple_choices":"Meerkeuze","expiry":"Poll leeftijd","expires_in":"Poll eindigt in {0}","expired":"Poll is {0} geleden beëindigd","not_enough_options":"Te weinig opties in poll","type":"Poll-type","votes_count":"{count} stem | {count} stemmen","people_voted_count":"{count} persoon heeft gestemd | {count} personen hebben gestemd"},"emoji":{"emoji":"Emoji","keep_open":"Picker openhouden","search_emoji":"Emoji zoeken","add_emoji":"Emoji invoegen","unicode":"Unicode-emoji","load_all":"Alle {emojiAmount} emoji worden geladen","stickers":"Stickers","load_all_hint":"Eerste {saneAmount} emoji geladen, alle emoji tegelijk laden kan problemen veroorzaken met prestaties.","custom":"Gepersonaliseerde emoji"},"interactions":{"favs_repeats":"Herhalingen en favorieten","follows":"Nieuwe gevolgden","moves":"Gebruikermigraties","load_older":"Oudere interacties laden"},"remote_user_resolver":{"searching_for":"Zoeken naar","error":"Niet gevonden.","remote_user_resolver":"Externe gebruikers-zoeker"},"selectable_list":{"select_all":"Alles selecteren"},"password_reset":{"password_reset_required_but_mailer_is_disabled":"Je dient je wachtwoord opnieuw in te stellen, maar wachtwoord reset is uitgeschakeld. Neem contact op met de beheerder van deze instantie.","password_reset_required":"Je dient je wachtwoord opnieuw in te stellen om in te kunnen loggen.","password_reset_disabled":"Wachtwoord reset is uitgeschakeld. Neem contact op met de beheerder van deze instantie.","too_many_requests":"Je hebt het maximaal aantal pogingen bereikt, probeer het later opnieuw.","return_home":"Terugkeren naar de home pagina","check_email":"Controleer je email inbox voor een link om je wachtwoord opnieuw in te stellen.","placeholder":"Je email of gebruikersnaam","instruction":"Voer je email adres of gebruikersnaam in. We sturen je een link om je wachtwoord opnieuw in te stellen.","password_reset":"Wachtwoord opnieuw instellen","forgot_password":"Wachtwoord vergeten?"},"search":{"no_results":"Geen resultaten","people_talking":"{count} personen aan het praten","person_talking":"{count} persoon aan het praten","hashtags":"Hashtags","people":"Personen"},"user_reporting":{"generic_error":"Er is een fout opgetreden tijdens het verwerken van je verzoek.","submit":"Verzenden","forward_to":"Doorsturen naar {0}","forward_description":"Dit account hoort bij een andere server. Wil je een kopie van het rapport ook daarheen sturen?","additional_comments":"Aanvullende opmerkingen","add_comment_description":"Het rapport zal naar de moderators van de instantie worden verstuurd. Je kunt hieronder uitleg bijvoegen waarom je dit account wilt aangeven:","title":"{0} aangeven"},"status":{"copy_link":"Link naar status kopiëren","status_unavailable":"Status niet beschikbaar","unmute_conversation":"Conversatie niet meer negeren","mute_conversation":"Conversatie negeren","replies_list":"Antwoorden:","reply_to":"Antwoorden aan","delete_confirm":"Wil je echt deze status verwijderen?","pin":"Aan profiel vastmaken","pinned":"Vastgezet","unpin":"Van profiel losmaken","delete":"Status verwijderen","repeats":"Herhalingen","favorites":"Favorieten","thread_muted_and_words":", heeft woorden:","thread_muted":"Thread genegeerd","expand":"Uitklappen","nsfw":"Gevoelig","status_deleted":"Dit bericht is verwijderd","hide_content":"Inhoud verbergen","show_content":"Inhoud tonen","hide_full_subject":"Volledig onderwerp verbergen","show_full_subject":"Volledig onderwerp tonen","external_source":"Externe bron","unbookmark":"Bladwijzer verwijderen","bookmark":"Bladwijzer toevoegen"},"time":{"years_short":"{0}j","year_short":"{0}j","years":"{0} jaren","year":"{0} jaar","weeks_short":"{0}w","week_short":"{0}w","weeks":"{0} weken","week":"{0} week","seconds_short":"{0}s","second_short":"{0}s","seconds":"{0} seconden","second":"{0} seconde","now_short":"nu","now":"zojuist","months_short":"{0}ma","month_short":"{0}ma","months":"{0} maanden","month":"{0} maand","minutes_short":"{0}min","minute_short":"{0}min","minutes":"{0} minuten","minute":"{0} minuut","in_past":"{0} geleden","in_future":"over {0}","hours_short":"{0}u","hour_short":"{0}u","hours":"{0} uren","hour":"{0} uur","days_short":"{0}d","day_short":"{0}d","days":"{0} dagen","day":"{0} dag"},"shoutbox":{"title":"Shoutbox"},"errors":{"storage_unavailable":"Pleroma kon browseropslag niet benaderen. Je login of lokale instellingen worden niet opgeslagen en je kunt onverwachte problemen ondervinden. Probeer cookies te accepteren."},"display_date":{"today":"Vandaag"},"file_type":{"file":"Bestand","image":"Afbeelding","video":"Video","audio":"Audio"},"chats":{"empty_chat_list_placeholder":"Je hebt nog geen chats. Start een nieuwe chat!","error_sending_message":"Er is iets fout gegaan tijdens het verzenden van het bericht.","error_loading_chat":"Er is iets fout gegaan tijdens het laden van de chat.","delete_confirm":"Wil je echt dit bericht verwijderen?","more":"Meer","empty_message_error":"Kan niet een leeg bericht plaatsen","new":"Nieuwe Chat","chats":"Chats","delete":"Verwijderen","message_user":"Spreek met {nickname}","you":"Jij:"}}')}}]); -//# sourceMappingURL=23.4addb03e0862c780c55f.js.map \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[23],{616:function(e){e.exports=JSON.parse('{"chat":{"title":"Chat"},"features_panel":{"chat":"Chat","gopher":"Gopher","media_proxy":"Mediaproxy","scope_options":"Zichtbaarheidsopties","text_limit":"Tekstlimiet","title":"Kenmerken","who_to_follow":"Wie te volgen","upload_limit":"Upload limiet","pleroma_chat_messages":"Pleroma Chat"},"finder":{"error_fetching_user":"Fout tijdens ophalen gebruiker","find_user":"Gebruiker zoeken"},"general":{"apply":"Toepassen","submit":"Verzenden","more":"Meer","optional":"optioneel","show_more":"Meer tonen","show_less":"Minder tonen","dismiss":"Opheffen","cancel":"Annuleren","disable":"Uitschakelen","enable":"Inschakelen","confirm":"Bevestigen","verify":"Verifiëren","generic_error":"Er is een fout opgetreden","peek":"Spieken","close":"Sluiten","retry":"Opnieuw proberen","error_retry":"Probeer het opnieuw","loading":"Laden…","role":{"moderator":"Moderator","admin":"Beheerder"}},"login":{"login":"Inloggen","description":"Inloggen met OAuth","logout":"Uitloggen","password":"Wachtwoord","placeholder":"bijv. barbapapa","register":"Registreren","username":"Gebruikersnaam","hint":"Log in om deel te nemen aan de discussie","authentication_code":"Authenticatiecode","enter_recovery_code":"Voer een herstelcode in","enter_two_factor_code":"Voer een twee-factorcode in","recovery_code":"Herstelcode","heading":{"totp":"Twee-factorauthenticatie","recovery":"Twee-factorherstelling"}},"nav":{"about":"Over","back":"Terug","chat":"Lokale Chat","friend_requests":"Volgverzoeken","mentions":"Vermeldingen","dms":"Privéberichten","public_tl":"Openbare tijdlijn","timeline":"Tijdlijn","twkn":"Bekende Netwerk","user_search":"Gebruiker Zoeken","who_to_follow":"Wie te volgen","preferences":"Voorkeuren","administration":"Beheer","search":"Zoeken","interactions":"Interacties","chats":"Chats","home_timeline":"Thuis tijdlijn","timelines":"Tijdlijnen","bookmarks":"Bladwijzers"},"notifications":{"broken_favorite":"Onbekende status, aan het zoeken…","favorited_you":"vond je status leuk","followed_you":"volgt jou","load_older":"Oudere meldingen laden","notifications":"Meldingen","read":"Gelezen!","repeated_you":"herhaalde je status","no_more_notifications":"Geen meldingen meer","migrated_to":"is gemigreerd naar","follow_request":"wil je volgen","reacted_with":"reageerde met {0}","error":"Fout bij ophalen van meldingen: {0}"},"post_status":{"new_status":"Nieuwe status plaatsen","account_not_locked_warning":"Je account is niet {0}. Iedereen kan je volgen om je alleen-volgers-berichten te lezen.","account_not_locked_warning_link":"gesloten","attachments_sensitive":"Bijlagen als gevoelig markeren","content_type":{"text/plain":"Platte tekst","text/html":"HTML","text/markdown":"Markdown","text/bbcode":"BBCode"},"content_warning":"Onderwerp (optioneel)","default":"Tijd voor anime!","direct_warning":"Deze post zal enkel zichtbaar zijn voor de personen die genoemd zijn.","posting":"Plaatsen","scope":{"direct":"Privé - bericht enkel naar vermelde gebruikers sturen","private":"Enkel volgers - bericht enkel naar volgers sturen","public":"Openbaar - bericht op openbare tijdlijnen plaatsen","unlisted":"Niet vermelden - niet tonen op openbare tijdlijnen"},"direct_warning_to_all":"Dit bericht zal zichtbaar zijn voor alle vermelde gebruikers.","direct_warning_to_first_only":"Dit bericht zal alleen zichtbaar zijn voor de vermelde gebruikers aan het begin van het bericht.","scope_notice":{"public":"Dit bericht zal voor iedereen zichtbaar zijn","unlisted":"Dit bericht zal niet zichtbaar zijn in de Openbare Tijdlijn en Het Geheel Bekende Netwerk","private":"Dit bericht zal voor alleen je volgers zichtbaar zijn"},"post":"Bericht","empty_status_error":"Kan geen lege status zonder bijlagen plaatsen","preview_empty":"Leeg","preview":"Voorbeeld","media_description":"Mediaomschrijving","media_description_error":"Kon media niet ophalen, probeer het opnieuw"},"registration":{"bio":"Bio","email":"E-mail","fullname":"Weergavenaam","password_confirm":"Wachtwoord bevestiging","registration":"Registratie","token":"Uitnodigingstoken","captcha":"CAPTCHA","new_captcha":"Klik op de afbeelding voor een nieuwe captcha","validations":{"username_required":"moet ingevuld zijn","fullname_required":"moet ingevuld zijn","email_required":"moet ingevuld zijn","password_required":"moet ingevuld zijn","password_confirmation_required":"moet ingevuld zijn","password_confirmation_match":"komt niet overeen met het wachtwoord"},"username_placeholder":"bijv. lain","fullname_placeholder":"bijv. Lain Iwakura","bio_placeholder":"bijv.\\nHallo, ik ben Lain.\\nIk ben een animemeisje woonachtig in een buitenwijk in Japan. Je kent me misschien van the Wired.","reason_placeholder":"Deze instantie keurt registraties handmatig goed.\\nLaat de beheerder weten waarom je wilt registreren.","reason":"Reden voor registratie","register":"Registreren"},"settings":{"attachmentRadius":"Bijlages","attachments":"Bijlages","avatar":"Avatar","avatarAltRadius":"Avatars (meldingen)","avatarRadius":"Avatars","background":"Achtergrond","bio":"Bio","btnRadius":"Knoppen","cBlue":"Blauw (Beantwoorden, volgen)","cGreen":"Groen (Herhalen)","cOrange":"Oranje (Favoriet)","cRed":"Rood (Annuleren)","change_password":"Wachtwoord wijzigen","change_password_error":"Er is een fout opgetreden bij het wijzigen van je wachtwoord.","changed_password":"Wachtwoord succesvol gewijzigd!","collapse_subject":"Klap berichten met een onderwerp in","composing":"Opstellen","confirm_new_password":"Nieuw wachtwoord bevestigen","current_avatar":"Je huidige avatar","current_password":"Huidig wachtwoord","current_profile_banner":"Je huidige profiel banner","data_import_export_tab":"Data-import / export","default_vis":"Standaard zichtbaarheidsbereik","delete_account":"Account verwijderen","delete_account_description":"Permanent je gegevens verwijderen en account deactiveren.","delete_account_error":"Er is een fout opgetreden bij het verwijderen van je account. Indien dit probleem zich voor blijft doen, neem dan contact op met de beheerder van deze instantie.","delete_account_instructions":"Voer je wachtwoord in het onderstaande invoerveld in om het verwijderen van je account te bevestigen.","export_theme":"Voorinstelling opslaan","filtering":"Filtering","filtering_explanation":"Alle statussen die deze woorden bevatten worden genegeerd, één filter per regel","follow_export":"Volgers exporteren","follow_export_button":"Exporteer je volgers naar een csv-bestand","follow_export_processing":"Aan het verwerken, binnen enkele ogenblikken wordt je gevraagd je bestand te downloaden","follow_import":"Volgers importeren","follow_import_error":"Fout bij importeren volgers","follows_imported":"Volgers geïmporteerd! Het kan even duren voordat deze verwerkt zijn.","foreground":"Voorgrond","general":"Algemeen","hide_attachments_in_convo":"Bijlagen in conversaties verbergen","hide_attachments_in_tl":"Bijlagen in tijdlijn verbergen","hide_isp":"Instantie-specifiek paneel verbergen","preload_images":"Afbeeldingen vooraf laden","hide_post_stats":"Bericht statistieken verbergen (bijv. het aantal favorieten)","hide_user_stats":"Gebruikers-statistieken verbergen (bijv. het aantal volgers)","import_followers_from_a_csv_file":"Gevolgden uit een csv bestand importeren","import_theme":"Preset laden","inputRadius":"Invoervelden","checkboxRadius":"Checkboxen","instance_default":"(standaard: {value})","instance_default_simple":"(standaard)","interface":"Interface","interfaceLanguage":"Interface taal","invalid_theme_imported":"Het geselecteerde bestand is niet een door Pleroma ondersteund thema. Er zijn geen aanpassingen gedaan.","limited_availability":"Niet beschikbaar in je browser","links":"Links","lock_account_description":"Volgers enkel na expliciete toestemming toelaten","loop_video":"Video\'s herhalen","loop_video_silent_only":"Enkel video\'s zonder geluid herhalen (bijv. Mastodon\'s \\"gifs\\")","name":"Naam","name_bio":"Naam & bio","new_password":"Nieuw wachtwoord","notification_visibility":"Type meldingen die getoond worden","notification_visibility_follows":"Gevolgden","notification_visibility_likes":"Favorieten","notification_visibility_mentions":"Vermeldingen","notification_visibility_repeats":"Herhalingen","no_rich_text_description":"Verwijder rich text formattering van alle berichten","hide_network_description":"Toon niet wie mij volgt en wie ik volg.","nsfw_clickthrough":"Doorklikbaar verbergen van gevoelige bijlages en link voorbeelden inschakelen","oauth_tokens":"OAuth-tokens","token":"Token","refresh_token":"Token vernieuwen","valid_until":"Geldig tot","revoke_token":"Intrekken","panelRadius":"Panelen","pause_on_unfocused":"Streamen pauzeren wanneer de tab niet in focus is","presets":"Presets","profile_background":"Profiel achtergrond","profile_banner":"Profiel banner","profile_tab":"Profiel","radii_help":"Afronding van hoeken in de interface instellen (in pixels)","replies_in_timeline":"Antwoorden in tijdlijn","reply_visibility_all":"Alle antwoorden tonen","reply_visibility_following":"Enkel antwoorden tonen die aan mij of gevolgde gebruikers gericht zijn","reply_visibility_self":"Enkel antwoorden tonen die aan mij gericht zijn","saving_err":"Fout tijdens opslaan van instellingen","saving_ok":"Instellingen opgeslagen","security_tab":"Beveiliging","scope_copy":"Bereik overnemen bij beantwoorden (Privéberichten blijven altijd privé)","set_new_avatar":"Nieuwe avatar instellen","set_new_profile_background":"Nieuwe profiel achtergrond instellen","set_new_profile_banner":"Nieuwe profiel banner instellen","settings":"Instellingen","subject_input_always_show":"Altijd onderwerpveld tonen","subject_line_behavior":"Onderwerp kopiëren bij beantwoorden","subject_line_email":"Zoals email: \\"re: onderwerp\\"","subject_line_mastodon":"Zoals mastodon: kopieer zoals het is","subject_line_noop":"Niet kopiëren","stop_gifs":"GIFs afspelen bij zweven","streaming":"Automatisch streamen van nieuwe berichten inschakelen wanneer tot boven gescrold is","text":"Tekst","theme":"Thema","theme_help":"Hex kleur codes (#rrggbb) gebruiken om je kleur thema te wijzigen.","theme_help_v2_1":"Je kan ook de kleur en transparantie van bepaalde componenten overschrijven door de checkbox aan te vinken, gebruik de \\"Alles wissen\\" knop om alle overschrijvingen te annuleren.","theme_help_v2_2":"Iconen onder sommige onderdelen zijn achtergrond/tekst contrast indicatoren, zweef er over voor gedetailleerde info. Hou er rekening mee dat bij doorzichtigheid de ergst mogelijke situatie wordt weer gegeven.","tooltipRadius":"Tooltips/alarmen","user_settings":"Gebruikersinstellingen","values":{"false":"nee","true":"ja"},"notifications":"Meldingen","enable_web_push_notifications":"Web push meldingen inschakelen","style":{"switcher":{"keep_color":"Kleuren behouden","keep_shadows":"Schaduwen behouden","keep_opacity":"Transparantie behouden","keep_roundness":"Rondingen behouden","keep_fonts":"Lettertypes behouden","save_load_hint":"\\"Behoud\\" opties behouden de momenteel ingestelde opties bij het selecteren of laden van thema\'s, maar slaan ook de genoemde opties op bij het exporteren van een thema. Wanneer alle selectievakjes zijn uitgeschakeld, zal het exporteren van thema\'s alles opslaan.","reset":"Reset","clear_all":"Alles wissen","clear_opacity":"Transparantie wissen","keep_as_is":"Hou zoals het is","use_snapshot":"Oude versie","use_source":"Nieuwe versie","help":{"future_version_imported":"Het geïmporteerde bestand is gemaakt voor een nieuwere versie van FE.","older_version_imported":"Het geïmporteerde bestand is gemaakt voor een oudere versie van FE.","upgraded_from_v2":"PleromaFE is bijgewerkt, het thema kan iets anders uitzien dan dat je gewend bent.","v2_imported":"Het geïmporteerde bestand is gemaakt voor een oudere FE. We proberen compatibiliteit te maximaliseren, maar het kan toch voorkomen dat er inconsistenties zijn.","snapshot_source_mismatch":"Versie conflict: waarschijnlijk was FE terug gerold en opnieuw bijgewerkt, indien je het thema aangepast hebt met de oudere versie van FE wil je waarschijnlijk de oude versie gebruiken, gebruik anders de nieuwe versie.","migration_napshot_gone":"Voor een onduidelijke reden mist de momentopname, dus sommige dingen kunnen anders uitzien dan je gewend bent.","migration_snapshot_ok":"Voor de zekerheid is een momentopname van het thema geladen. Je kunt proberen om de thema gegevens te laden.","fe_downgraded":"PleromaFE\'s versie is terug gerold.","fe_upgraded":"De thema-engine van PleromaFE is bijgewerkt na de versie update.","snapshot_missing":"Het bestand bevat geen thema momentopname, dus het thema kan anders uitzien dan je oorspronkelijk bedacht had.","snapshot_present":"Thema momentopname is geladen, alle waarden zijn overschreven. Je kunt in plaats daarvan ook de daadwerkelijke data van het thema laden."},"load_theme":"Thema laden"},"common":{"color":"Kleur","opacity":"Transparantie","contrast":{"hint":"Contrast verhouding is {ratio}, {level} {context}","level":{"aa":"voldoet aan de richtlijn van niveau AA (minimum)","aaa":"voldoet aan de richtlijn van niveau AAA (aangeraden)","bad":"voldoet aan geen enkele toegankelijkheidsrichtlijn"},"context":{"18pt":"voor grote (18pt+) tekst","text":"voor tekst"}}},"common_colors":{"_tab_label":"Algemeen","main":"Algemene kleuren","foreground_hint":"Zie \\"Geavanceerd\\" tab voor meer gedetailleerde controle","rgbo":"Iconen, accenten, badges"},"advanced_colors":{"_tab_label":"Geavanceerd","alert":"Alarm achtergrond","alert_error":"Fout","badge":"Badge achtergrond","badge_notification":"Meldingen","panel_header":"Paneel koptekst","top_bar":"Top balk","borders":"Randen","buttons":"Knoppen","inputs":"Invoervelden","faint_text":"Vervaagde tekst","tabs":"Tabbladen","toggled":"Geschakeld","disabled":"Uitgeschakeld","selectedMenu":"Geselecteerd menu item","selectedPost":"Geselecteerd bericht","pressed":"Ingedrukt","highlight":"Gemarkeerde elementen","icons":"Iconen","poll":"Poll grafiek","underlay":"Onderlaag","popover":"Tooltips, menu\'s, popovers","post":"Berichten / Gebruiker bios","alert_neutral":"Neutraal","alert_warning":"Waarschuwing","chat":{"border":"Rand","outgoing":"Uitgaand","incoming":"Binnenkomend"},"wallpaper":"Achtergrond"},"radii":{"_tab_label":"Rondheid"},"shadows":{"_tab_label":"Schaduw en belichting","component":"Onderdeel","override":"Overschrijven","shadow_id":"Schaduw #{value}","blur":"Vervagen","spread":"Spreiding","inset":"Inzet","hint":"Voor schaduw kan je ook --variable gebruiken als een kleur waarde om CSS3 variabelen te gebruiken. Houd er rekening mee dat het instellen van opaciteit in dit geval niet werkt.","filter_hint":{"always_drop_shadow":"Waarschuwing, deze schaduw gebruikt altijd {0} als de browser dit ondersteund.","drop_shadow_syntax":"{0} ondersteund niet de {1} parameter en {2} sleutelwoord.","avatar_inset":"Houdt er rekening mee dat het combineren van zowel inzet and niet-inzet schaduwen op transparante avatars onverwachte resultaten kan opleveren.","spread_zero":"Schaduw met spreiding > 0 worden weergegeven alsof ze op nul staan","inset_classic":"Inzet schaduw zal {0} gebruiken"},"components":{"panel":"Paneel","panelHeader":"Paneel koptekst","topBar":"Top balk","avatar":"Gebruikers avatar (in profiel weergave)","avatarStatus":"Gebruikers avatar (in bericht weergave)","popup":"Popups en tooltips","button":"Knop","buttonHover":"Knop (zweven)","buttonPressed":"Knop (ingedrukt)","buttonPressedHover":"Knop (ingedrukt+zweven)","input":"Invoerveld"},"hintV3":"Voor schaduwen kun je ook de {0} notatie gebruiken om de andere kleur invoer te gebruiken."},"fonts":{"_tab_label":"Lettertypes","help":"Selecteer het lettertype om te gebruiken voor elementen van de UI. Voor \\"aangepast\\" dien je de exacte naam van het lettertype in te voeren zoals die in het systeem wordt weergegeven.","components":{"interface":"Interface","input":"Invoervelden","post":"Bericht tekst","postCode":"Monospaced tekst in een bericht (rich text)"},"family":"Lettertype naam","size":"Grootte (in px)","weight":"Gewicht (dikgedruktheid)","custom":"Aangepast"},"preview":{"header":"Voorvertoning","content":"Inhoud","error":"Voorbeeld fout","button":"Knop","text":"Nog een boel andere {0} en {1}","mono":"inhoud","input":"Tijd voor anime!","faint_link":"handige gebruikershandleiding","fine_print":"Lees onze {0} om niets nuttig te leren!","header_faint":"Alles komt goed","checkbox":"Ik heb de gebruikersvoorwaarden gelezen","link":"een leuke kleine link"}},"notification_setting_privacy":"Privacy","notification_setting_privacy_option":"Verberg de afzender en inhoud van push meldingen","notification_mutes":"Om niet langer meldingen te ontvangen van een specifieke gebruiker, kun je deze negeren.","app_name":"App naam","security":"Beveiliging","enter_current_password_to_confirm":"Voer je huidige wachtwoord in om je identiteit te bevestigen","mfa":{"otp":"OTP","setup_otp":"OTP instellen","wait_pre_setup_otp":"OTP voorinstellen","confirm_and_enable":"Bevestig en schakel OTP in","title":"Twee-factorauthenticatie","generate_new_recovery_codes":"Genereer nieuwe herstelcodes","recovery_codes":"Herstelcodes.","waiting_a_recovery_codes":"Back-upcodes ontvangen…","authentication_methods":"Authenticatiemethodes","scan":{"title":"Scannen","desc":"Scan de QR-code of voer een sleutel in met je twee-factorapplicatie:","secret_code":"Sleutel"},"verify":{"desc":"Voer de code van je twee-factorapplicatie in om twee-factorauthenticatie in te schakelen:"},"warning_of_generate_new_codes":"Wanneer je nieuwe herstelcodes genereert, zullen je oude codes niet langer werken.","recovery_codes_warning":"Schrijf de codes op of sla ze op een veilige locatie op - anders kun je ze niet meer inzien. Als je toegang tot je 2FA-app en herstelcodes verliest, zal je buitengesloten zijn van je account."},"allow_following_move":"Automatisch volgen toestaan wanneer een gevolgd account migreert","block_export":"Blokkades exporteren","block_import":"Blokkades importeren","blocks_imported":"Blokkades geïmporteerd! Het kan even duren voordat deze verwerkt zijn.","blocks_tab":"Blokkades","change_email":"E-mail wijzigen","change_email_error":"Er is een fout opgetreden tijdens het wijzigen van je e-mailadres.","changed_email":"E-mailadres succesvol gewijzigd!","domain_mutes":"Domeinen","avatar_size_instruction":"De aangeraden minimale afmeting voor avatar-afbeeldingen is 150x150 pixels.","pad_emoji":"Vul emoji aan met spaties wanneer deze met de picker ingevoegd worden","emoji_reactions_on_timeline":"Toon emoji-reacties op de tijdlijn","accent":"Accent","hide_muted_posts":"Berichten van genegeerde gebruikers verbergen","max_thumbnails":"Maximaal aantal miniaturen per bericht","use_one_click_nsfw":"Gevoelige bijlagen met slechts één klik openen","hide_filtered_statuses":"Gefilterde statussen verbergen","import_blocks_from_a_csv_file":"Blokkades van een csv bestand importeren","mutes_tab":"Genegeerden","play_videos_in_modal":"Video\'s in een popup frame afspelen","new_email":"Nieuwe e-mail","notification_visibility_emoji_reactions":"Reacties","no_blocks":"Geen blokkades","no_mutes":"Geen genegeerden","hide_followers_description":"Niet tonen wie mij volgt","hide_followers_count_description":"Niet mijn volgers aantal tonen","hide_follows_count_description":"Niet mijn gevolgde aantal tonen","show_admin_badge":"\\"Beheerder\\" badge in mijn profiel tonen","autohide_floating_post_button":"Nieuw Bericht knop automatisch verbergen (mobiel)","search_user_to_block":"Zoek wie je wilt blokkeren","search_user_to_mute":"Zoek wie je wilt negeren","minimal_scopes_mode":"Bericht bereik-opties minimaliseren","post_status_content_type":"Bericht status content type","user_mutes":"Gebruikers","useStreamingApi":"Berichten en meldingen in real-time ontvangen","useStreamingApiWarning":"(Afgeraden, experimenteel, kan berichten overslaan)","type_domains_to_mute":"Zoek domeinen om te negeren","upload_a_photo":"Foto uploaden","fun":"Plezier","greentext":"Meme pijlen","block_export_button":"Exporteer je geblokkeerde gebruikers naar een csv-bestand","block_import_error":"Fout bij importeren blokkades","discoverable":"Sta toe dat dit account ontdekt kan worden in zoekresultaten en andere diensten","use_contain_fit":"Bijlage in miniaturen niet bijsnijden","notification_visibility_moves":"Gebruiker Migraties","hide_follows_description":"Niet tonen wie ik volg","show_moderator_badge":"\\"Moderator\\" badge in mijn profiel tonen","notification_setting_filters":"Filters","notification_blocks":"Door een gebruiker te blokkeren, ontvang je geen meldingen meer van de gebruiker en wordt je abonnement op de gebruiker opgeheven.","version":{"frontend_version":"Frontend versie","backend_version":"Backend versie","title":"Versie"},"mutes_and_blocks":"Negeringen en Blokkades","profile_fields":{"value":"Inhoud","name":"Label","add_field":"Veld toevoegen","label":"Profiel metadata"},"bot":"Dit is een bot-account","setting_changed":"Instelling verschilt van standaard waarde","save":"Wijzigingen opslaan","hide_media_previews":"Media voorbeelden verbergen","word_filter":"Woord filter","chatMessageRadius":"Chatbericht","mute_export":"Genegeerden export","mute_export_button":"Exporteer je genegeerden naar een csv-bestand","mute_import_error":"Fout tijdens het importeren van genegeerden","mute_import":"Genegeerden import","mutes_imported":"Genegeerden geïmporteerd! Het kan even duren voordat deze verwerkt zijn.","more_settings":"Meer instellingen","notification_setting_hide_notification_contents":"Afzender en inhoud van push meldingen verbergen","notification_setting_block_from_strangers":"Meldingen van gebruikers die je niet volgt blokkeren","virtual_scrolling":"Tijdlijn rendering optimaliseren","sensitive_by_default":"Berichten standaard als gevoelig markeren","reset_avatar_confirm":"Wil je echt de avatar herstellen?","reset_banner_confirm":"Wil je echt de banner herstellen?","reset_background_confirm":"Wil je echt de achtergrond herstellen?","reset_profile_banner":"Profiel banner herstellen","reset_profile_background":"Profiel achtergrond herstellen","reset_avatar":"Avatar herstellen","reply_visibility_self_short":"Alleen antwoorden aan mijzelf tonen","reply_visibility_following_short":"Antwoorden naar mijn gevolgden tonen","file_export_import":{"errors":{"file_slightly_new":"Bestand minor versie is verschillend, sommige instellingen kunnen mogelijk niet worden geladen","file_too_old":"Incompatibele hoofdversie: {fileMajor}, bestandsversie is te oud en wordt niet ondersteund (minimale versie {feMajor})","file_too_new":"Incompatibele hoofdversie: {fileMajor}, deze PleromaFE (instellingen versie {feMajor}) is te oud om deze te ondersteunen","invalid_file":"Het geselecteerde bestand is niet een door Pleroma ondersteunde instellingen back-up. Er zijn geen wijzigingen gemaakt."},"restore_settings":"Instellingen uit bestand herstellen","backup_settings_theme":"Instellingen en thema naar bestand back-uppen","backup_settings":"Instellingen naar bestand back-uppen","backup_restore":"Instellingen backup"},"hide_wallpaper":"Instantie achtergrond verbergen","hide_all_muted_posts":"Genegeerde berichten verbergen","import_mutes_from_a_csv_file":"Importeer genegeerden van een csv bestand"},"timeline":{"collapse":"Inklappen","conversation":"Conversatie","error_fetching":"Fout bij ophalen van updates","load_older":"Oudere statussen laden","no_retweet_hint":"Bericht is gemarkeerd als enkel volgers of direct en kan niet worden herhaald","repeated":"herhaalde","show_new":"Nieuwe tonen","up_to_date":"Up-to-date","no_statuses":"Geen statussen","no_more_statuses":"Geen statussen meer","socket_broke":"Realtime verbinding verloren: CloseEvent code {0}","socket_reconnected":"Realtime verbinding opgezet","reload":"Verversen","error":"Fout tijdens het ophalen van tijdlijn: {0}"},"user_card":{"approve":"Goedkeuren","block":"Blokkeren","blocked":"Geblokkeerd!","deny":"Weigeren","favorites":"Favorieten","follow":"Volgen","follow_cancel":"Aanvraag annuleren","follow_sent":"Aanvraag verzonden!","follow_progress":"Aanvragen…","follow_unfollow":"Stop volgen","followees":"Aan het volgen","followers":"Volgers","following":"Aan het volgen!","follows_you":"Volgt jou!","its_you":"\'t is jij!","mute":"Negeren","muted":"Genegeerd","per_day":"per dag","remote_follow":"Volg vanop afstand","statuses":"Statussen","admin_menu":{"delete_user_confirmation":"Weet je het heel zeker? Deze uitvoering kan niet ongedaan worden gemaakt.","delete_user":"Gebruiker verwijderen","quarantine":"Federeren van gebruikers berichten verbieden","disable_any_subscription":"Volgen van gebruiker in zijn geheel verbieden","disable_remote_subscription":"Volgen van gebruiker vanaf andere instanties verbieden","sandbox":"Berichten forceren om alleen voor volgers zichtbaar te zijn","force_unlisted":"Berichten forceren om niet publiekelijk getoond te worden","strip_media":"Media van berichten verwijderen","force_nsfw":"Alle berichten als gevoelig markeren","delete_account":"Account verwijderen","deactivate_account":"Account deactiveren","activate_account":"Account activeren","revoke_moderator":"Moderatorsrechten intrekken","grant_moderator":"Moderatorsrechten toekennen","revoke_admin":"Beheerdersrechten intrekken","grant_admin":"Beheerdersrechten toekennen","moderation":"Moderatie"},"show_repeats":"Herhalingen tonen","hide_repeats":"Herhalingen verbergen","mute_progress":"Negeren…","unmute_progress":"Negering opheffen…","unmute":"Negering opheffen","block_progress":"Blokkeren…","unblock_progress":"Blokkade opheffen…","unblock":"Blokkade opheffen","unsubscribe":"Abonnement opzeggen","subscribe":"Abonneren","report":"Aangeven","mention":"Vermelding","media":"Media","hidden":"Verborgen","highlight":{"side":"Zijstreep","striped":"Gestreepte achtergrond","solid":"Effen achtergrond","disabled":"Geen highlight"},"bot":"Bot","message":"Bericht"},"user_profile":{"timeline_title":"Gebruikerstijdlijn","profile_loading_error":"Sorry, er is een fout opgetreden bij het laden van dit profiel.","profile_does_not_exist":"Sorry, dit profiel bestaat niet."},"who_to_follow":{"more":"Meer","who_to_follow":"Wie te volgen"},"tool_tip":{"media_upload":"Media uploaden","repeat":"Herhalen","reply":"Beantwoorden","favorite":"Favoriet maken","user_settings":"Gebruikers Instellingen","reject_follow_request":"Volg-verzoek afwijzen","accept_follow_request":"Volg-aanvraag accepteren","add_reaction":"Reactie toevoegen","bookmark":"Bladwijzer"},"upload":{"error":{"base":"Upload mislukt.","file_too_big":"Bestand is te groot [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]","default":"Probeer het later opnieuw","message":"Upload is mislukt: {0}"},"file_size_units":{"B":"B","KiB":"KiB","MiB":"MiB","GiB":"GiB","TiB":"TiB"}},"about":{"mrf":{"federation":"Federatie","keyword":{"reject":"Afwijzen","replace":"Vervangen","is_replaced_by":"→","keyword_policies":"Zoekwoordbeleid","ftl_removal":"Verwijdering van \\"Het Geheel Bekende Netwerk\\" Tijdlijn"},"mrf_policies_desc":"MRF-regels beïnvloeden het federatiegedrag van de instantie. De volgende regels zijn ingeschakeld:","mrf_policies":"Ingeschakelde MRF-regels","simple":{"simple_policies":"Instantiespecifieke regels","instance":"Instantie","reason":"Reden","not_applicable":"n.v.t.","accept":"Accepteren","accept_desc":"Deze instantie accepteert alleen berichten van de volgende instanties:","reject":"Afwijzen","reject_desc":"Deze instantie zal geen berichten accepteren van de volgende instanties:","quarantine":"Quarantaine","quarantine_desc":"Deze instantie zal alleen openbare berichten sturen naar de volgende instanties:","ftl_removal_desc":"Deze instantie verwijdert de volgende instanties van \\"Bekende Netwerk\\" tijdlijn:","media_removal_desc":"Deze instantie verwijdert media van berichten van de volgende instanties:","media_nsfw_desc":"Deze instantie stelt media in als gevoelig in berichten van de volgende instanties:","ftl_removal":"Verwijderen van \\"Bekende Netwerk\\" Tijdlijn","media_removal":"Mediaverwijdering","media_nsfw":"Forceer media als gevoelig"}},"staff":"Personeel"},"domain_mute_card":{"mute":"Negeren","mute_progress":"Negeren…","unmute":"Negering opheffen","unmute_progress":"Negering wordt opgeheven…"},"exporter":{"export":"Exporteren","processing":"Verwerken, er wordt zo gevraagd om je bestand te downloaden"},"image_cropper":{"save":"Opslaan","save_without_cropping":"Opslaan zonder bijsnijden","cancel":"Annuleren","crop_picture":"Afbeelding bijsnijden"},"importer":{"submit":"Verzenden","success":"Succesvol geïmporteerd.","error":"Er is een fout opgetreden bij het importeren van dit bestand."},"media_modal":{"previous":"Vorige","next":"Volgende"},"polls":{"add_poll":"Poll toevoegen","add_option":"Optie toevoegen","option":"Optie","votes":"stemmen","vote":"Stem","single_choice":"Enkele keuze","multiple_choices":"Meerkeuze","expiry":"Poll leeftijd","expires_in":"Poll eindigt in {0}","expired":"Poll is {0} geleden beëindigd","not_enough_options":"Te weinig opties in poll","type":"Poll-type","votes_count":"{count} stem | {count} stemmen","people_voted_count":"{count} persoon heeft gestemd | {count} personen hebben gestemd"},"emoji":{"emoji":"Emoji","keep_open":"Picker openhouden","search_emoji":"Emoji zoeken","add_emoji":"Emoji invoegen","unicode":"Unicode-emoji","load_all":"Alle {emojiAmount} emoji worden geladen","stickers":"Stickers","load_all_hint":"Eerste {saneAmount} emoji geladen, alle emoji tegelijk laden kan problemen veroorzaken met prestaties.","custom":"Gepersonaliseerde emoji"},"interactions":{"favs_repeats":"Herhalingen en favorieten","follows":"Nieuwe gevolgden","moves":"Gebruikermigraties","load_older":"Oudere interacties laden"},"remote_user_resolver":{"searching_for":"Zoeken naar","error":"Niet gevonden.","remote_user_resolver":"Externe gebruikers-zoeker"},"selectable_list":{"select_all":"Alles selecteren"},"password_reset":{"password_reset_required_but_mailer_is_disabled":"Je dient je wachtwoord opnieuw in te stellen, maar wachtwoord reset is uitgeschakeld. Neem contact op met de beheerder van deze instantie.","password_reset_required":"Je dient je wachtwoord opnieuw in te stellen om in te kunnen loggen.","password_reset_disabled":"Wachtwoord reset is uitgeschakeld. Neem contact op met de beheerder van deze instantie.","too_many_requests":"Je hebt het maximaal aantal pogingen bereikt, probeer het later opnieuw.","return_home":"Terugkeren naar de home pagina","check_email":"Controleer je email inbox voor een link om je wachtwoord opnieuw in te stellen.","placeholder":"Je email of gebruikersnaam","instruction":"Voer je email adres of gebruikersnaam in. We sturen je een link om je wachtwoord opnieuw in te stellen.","password_reset":"Wachtwoord opnieuw instellen","forgot_password":"Wachtwoord vergeten?"},"search":{"no_results":"Geen resultaten","people_talking":"{count} personen aan het praten","person_talking":"{count} persoon aan het praten","hashtags":"Hashtags","people":"Personen"},"user_reporting":{"generic_error":"Er is een fout opgetreden tijdens het verwerken van je verzoek.","submit":"Verzenden","forward_to":"Doorsturen naar {0}","forward_description":"Dit account hoort bij een andere server. Wil je een kopie van het rapport ook daarheen sturen?","additional_comments":"Aanvullende opmerkingen","add_comment_description":"Het rapport zal naar de moderators van de instantie worden verstuurd. Je kunt hieronder uitleg bijvoegen waarom je dit account wilt aangeven:","title":"{0} aangeven"},"status":{"copy_link":"Link naar status kopiëren","status_unavailable":"Status niet beschikbaar","unmute_conversation":"Conversatie niet meer negeren","mute_conversation":"Conversatie negeren","replies_list":"Antwoorden:","reply_to":"Antwoorden aan","delete_confirm":"Wil je echt deze status verwijderen?","pin":"Aan profiel vastmaken","pinned":"Vastgezet","unpin":"Van profiel losmaken","delete":"Status verwijderen","repeats":"Herhalingen","favorites":"Favorieten","thread_muted_and_words":", heeft woorden:","thread_muted":"Thread genegeerd","expand":"Uitklappen","nsfw":"Gevoelig","status_deleted":"Dit bericht is verwijderd","hide_content":"Inhoud verbergen","show_content":"Inhoud tonen","hide_full_subject":"Volledig onderwerp verbergen","show_full_subject":"Volledig onderwerp tonen","external_source":"Externe bron","unbookmark":"Bladwijzer verwijderen","bookmark":"Bladwijzer toevoegen"},"time":{"years_short":"{0}j","year_short":"{0}j","years":"{0} jaren","year":"{0} jaar","weeks_short":"{0}w","week_short":"{0}w","weeks":"{0} weken","week":"{0} week","seconds_short":"{0}s","second_short":"{0}s","seconds":"{0} seconden","second":"{0} seconde","now_short":"nu","now":"zojuist","months_short":"{0}ma","month_short":"{0}ma","months":"{0} maanden","month":"{0} maand","minutes_short":"{0}min","minute_short":"{0}min","minutes":"{0} minuten","minute":"{0} minuut","in_past":"{0} geleden","in_future":"over {0}","hours_short":"{0}u","hour_short":"{0}u","hours":"{0} uren","hour":"{0} uur","days_short":"{0}d","day_short":"{0}d","days":"{0} dagen","day":"{0} dag"},"shoutbox":{"title":"Shoutbox"},"errors":{"storage_unavailable":"Pleroma kon browseropslag niet benaderen. Je login of lokale instellingen worden niet opgeslagen en je kunt onverwachte problemen ondervinden. Probeer cookies te accepteren."},"display_date":{"today":"Vandaag"},"file_type":{"file":"Bestand","image":"Afbeelding","video":"Video","audio":"Audio"},"chats":{"empty_chat_list_placeholder":"Je hebt nog geen chats. Start een nieuwe chat!","error_sending_message":"Er is iets fout gegaan tijdens het verzenden van het bericht.","error_loading_chat":"Er is iets fout gegaan tijdens het laden van de chat.","delete_confirm":"Wil je echt dit bericht verwijderen?","more":"Meer","empty_message_error":"Kan niet een leeg bericht plaatsen","new":"Nieuwe Chat","chats":"Chats","delete":"Verwijderen","message_user":"Spreek met {nickname}","you":"Jij:"}}')}}]); +//# sourceMappingURL=23.0b6cdf4c9dc52c4291c0.js.map \ No newline at end of file diff --git a/priv/static/static/js/23.0b6cdf4c9dc52c4291c0.js.map b/priv/static/static/js/23.0b6cdf4c9dc52c4291c0.js.map new file mode 100644 index 000000000..f5200b9dc --- /dev/null +++ b/priv/static/static/js/23.0b6cdf4c9dc52c4291c0.js.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/23.0b6cdf4c9dc52c4291c0.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/23.4addb03e0862c780c55f.js.map b/priv/static/static/js/23.4addb03e0862c780c55f.js.map deleted file mode 100644 index 3ab3410ee..000000000 --- a/priv/static/static/js/23.4addb03e0862c780c55f.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/23.4addb03e0862c780c55f.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/24.e4b623be1780a14a6168.js b/priv/static/static/js/24.5cfb87799bd882b933dd.js similarity index 87% rename from priv/static/static/js/24.e4b623be1780a14a6168.js rename to priv/static/static/js/24.5cfb87799bd882b933dd.js index eadbce6d5..811c4fa52 100644 --- a/priv/static/static/js/24.e4b623be1780a14a6168.js +++ b/priv/static/static/js/24.5cfb87799bd882b933dd.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[24],{604:function(a){a.exports=JSON.parse('{"chat":{"title":"Messatjariá"},"exporter":{"export":"Exportar","processing":"Tractament, vos demandarem lèu de telecargar lo fichièr"},"features_panel":{"chat":"Chat","gopher":"Gopher","media_proxy":"Servidor mandatari mèdia","scope_options":"Nivèls de confidencialitat","text_limit":"Limita de tèxte","title":"Foncionalitats","who_to_follow":"Qual seguir"},"finder":{"error_fetching_user":"Error pendent la cèrca d’un utilizaire","find_user":"Cercar un utilizaire"},"general":{"apply":"Aplicar","submit":"Mandar","more":"Mai","generic_error":"Una error s’es producha","optional":"opcional","show_more":"Mostrar mai","show_less":"Mostrar mens","cancel":"Anullar"},"image_cropper":{"crop_picture":"Talhar l’imatge","save":"Salvar","save_without_cropping":"Salvar sens talhada","cancel":"Anullar"},"importer":{"submit":"Mandar","success":"Corrèctament importat.","error":"Una error s’es producha pendent l’importacion d’aqueste fichièr."},"login":{"login":"Connexion","description":"Connexion via OAuth","logout":"Desconnexion","password":"Senhal","placeholder":"e.g. lain","register":"Se marcar","username":"Nom d’utilizaire","hint":"Connectatz-vos per participar a la discutida"},"media_modal":{"previous":"Precedent","next":"Seguent"},"nav":{"about":"A prepaus","back":"Tornar","chat":"Chat local","friend_requests":"Demandas de seguiment","mentions":"Notificacions","dms":"Messatges privats","public_tl":"Estatuts locals","timeline":"Flux d’actualitat","twkn":"Lo malhum conegut","user_search":"Cèrca d’utilizaires","search":"Cercar","who_to_follow":"Qual seguir","preferences":"Preferéncias"},"notifications":{"broken_favorite":"Estatut desconegut, sèm a lo cercar...","favorited_you":"a aimat vòstre estatut","followed_you":"vos a seguit","load_older":"Cargar las notificacions mai ancianas","notifications":"Notficacions","read":"Legit !","repeated_you":"a repetit vòstre estatut","no_more_notifications":"Pas mai de notificacions"},"polls":{"add_poll":"Ajustar un sondatge","add_option":"Ajustar d’opcions","option":"Opcion","votes":"vòtes","vote":"Votar","type":"Tipe de sondatge","single_choice":"Causida unica","multiple_choices":"Causida multipla","expiry":"Durada del sondatge","expires_in":"Lo sondatge s’acabarà {0}","expired":"Sondatge acabat {0}","not_enough_options":"I a pas pro d’opcions"},"stickers":{"add_sticker":"Ajustar un pegasolet"},"interactions":{"favs_repeats":"Repeticions e favorits","follows":"Nòus seguidors","load_older":"Cargar d’interaccions anterioras"},"post_status":{"new_status":"Publicar d’estatuts novèls","account_not_locked_warning":"Vòstre compte es pas {0}. Qual que siá pòt vos seguir per veire vòstras publicacions destinadas pas qu’a vòstres seguidors.","account_not_locked_warning_link":"clavat","attachments_sensitive":"Marcar las pèças juntas coma sensiblas","content_type":{"text/plain":"Tèxte brut","text/html":"HTML","text/markdown":"Markdown","text/bbcode":"BBCode"},"content_warning":"Avís de contengut (opcional)","default":"Escrivètz aquí vòstre estatut.","direct_warning_to_all":"Aquesta publicacion serà pas que visibla pels utilizaires mencionats.","direct_warning_to_first_only":"Aquesta publicacion serà pas que visibla pels utilizaires mencionats a la debuta del messatge.","posting":"Mandadís","scope":{"direct":"Dirècte - Publicar pels utilizaires mencionats solament","private":"Seguidors solament - Publicar pels sols seguidors","public":"Public - Publicar pel flux d’actualitat public","unlisted":"Pas listat - Publicar pas pel flux public"}},"registration":{"bio":"Biografia","email":"Adreça de corrièl","fullname":"Nom complèt","password_confirm":"Confirmar lo senhal","registration":"Inscripcion","token":"Geton de convidat","captcha":"CAPTCHA","new_captcha":"Clicatz l’imatge per obténer una nòva captcha","username_placeholder":"e.g. lain","fullname_placeholder":"e.g. Lain Iwakura","bio_placeholder":"e.g.\\nHi, Soi lo Lain\\nSoi afocada d’animes e vivi al Japan. Benlèu que me coneissètz de the Wired.","validations":{"username_required":"pòt pas èsser void","fullname_required":"pòt pas èsser void","email_required":"pòt pas èsser void","password_required":"pòt pas èsser void","password_confirmation_required":"pòt pas èsser void","password_confirmation_match":"deu èsser lo meteis senhal"}},"selectable_list":{"select_all":"O seleccionar tot"},"settings":{"app_name":"Nom de l’aplicacion","attachmentRadius":"Pèças juntas","attachments":"Pèças juntas","avatar":"Avatar","avatarAltRadius":"Avatars (Notificacions)","avatarRadius":"Avatars","background":"Rèire plan","bio":"Biografia","block_export":"Exportar los blocatges","block_export_button":"Exportar los blocatges dins un fichièr csv","block_import":"Impòrt de blocatges","block_import_error":"Error en importar los blocatges","blocks_imported":"Blocatges importats ! Lo tractament tardarà un pauc.","blocks_tab":"Blocatges","btnRadius":"Botons","cBlue":"Blau (Respondre, seguir)","cGreen":"Verd (Repertir)","cOrange":"Irange (Aimar)","cRed":"Roge (Anullar)","change_password":"Cambiar lo senhal","change_password_error":"Una error s’es producha en cambiant lo senhal.","changed_password":"Senhal corrèctament cambiat !","collapse_subject":"Replegar las publicacions amb de subjèctes","composing":"Escritura","confirm_new_password":"Confirmatz lo nòu senhal","current_avatar":"Vòstre avatar actual","current_password":"Senhal actual","current_profile_banner":"Bandièra actuala del perfil","data_import_export_tab":"Importar / Exportar las donadas","default_vis":"Nivèl de visibilitat per defaut","delete_account":"Suprimir lo compte","delete_account_description":"Suprimir vòstre compte e los messatges per sempre.","delete_account_error":"Una error s’es producha en suprimir lo compte. S’aquò ten d’arribar mercés de contactar vòstre administrator d’instància.","delete_account_instructions":"Picatz vòstre senhal dins lo camp tèxte çai-jos per confirmar la supression del compte.","avatar_size_instruction":"La talha minimum recomandada pels imatges d’avatar es 150x150 pixèls.","export_theme":"Enregistrar la preconfiguracion","filtering":"Filtratge","filtering_explanation":"Totes los estatuts amb aqueles mots seràn en silenci, un mot per linha","follow_export":"Exportar los abonaments","follow_export_button":"Exportar vòstres abonaments dins un fichièr csv","follow_import":"Importar los abonaments","follow_import_error":"Error en important los seguidors","follows_imported":"Seguidors importats. Lo tractament pòt trigar una estona.","foreground":"Endavant","general":"General","hide_attachments_in_convo":"Rescondre las pèças juntas dins las conversacions","hide_attachments_in_tl":"Rescondre las pèças juntas","hide_muted_posts":"Rescondre las publicacions del monde rescondut","max_thumbnails":"Nombre maximum de vinhetas per publicacion","hide_isp":"Amagar lo panèl especial instància","preload_images":"Precargar los imatges","use_one_click_nsfw":"Dobrir las pèças juntas NSFW amb un clic","hide_post_stats":"Amagar las estatisticas de publicacion (ex. lo nombre de favorits)","hide_user_stats":"Amagar las estatisticas de l’utilizaire (ex. lo nombre de seguidors)","hide_filtered_statuses":"Amagar los estatuts filtrats","import_followers_from_a_csv_file":"Importar los seguidors d’un fichièr csv","import_theme":"Cargar un tèma","inputRadius":"Camps tèxte","checkboxRadius":"Casas de marcar","instance_default":"(defaut : {value})","instance_default_simple":"(defaut)","interface":"Interfàcia","interfaceLanguage":"Lenga de l’interfàcia","invalid_theme_imported":"Lo fichièr seleccionat es pas un tèma Pleroma valid. Cap de cambiament es estat fach a vòstre tèma.","limited_availability":"Pas disponible per vòstre navigador","links":"Ligams","lock_account_description":"Limitar vòstre compte als seguidors acceptats solament","loop_video":"Bocla vidèo","loop_video_silent_only":"Legir en bocla solament las vidèos sens son (coma los « Gifs » de Mastodon)","mutes_tab":"Agamats","interactions_tab":"Interaccions","play_videos_in_modal":"Legir las vidèos dirèctament dins la visualizaira mèdia","use_contain_fit":"Talhar pas las pèças juntas per las vinhetas","name":"Nom","name_bio":"Nom & Bio","new_password":"Nòu senhal","notification_visibility_follows":"Abonaments","notification_visibility_likes":"Aimar","notification_visibility_mentions":"Mencions","notification_visibility_repeats":"Repeticions","notification_visibility":"Tipes de notificacion de mostrar","no_rich_text_description":"Netejar lo format tèxte de totas las publicacions","no_blocks":"Cap de blocatge","no_mutes":"Cap d’amagat","hide_follows_description":"Mostrar pas qual seguissi","hide_followers_description":"Mostrar pas qual me seguisson","show_admin_badge":"Mostrar lo badge Admin badge al perfil meu","show_moderator_badge":"Mostrar lo badge Moderator al perfil meu","nsfw_clickthrough":"Activar lo clic per mostrar los imatges marcats coma pels adults o sensibles","oauth_tokens":"Listats OAuth","token":"Geton","refresh_token":"Actualizar lo geton","valid_until":"Valid fins a","revoke_token":"Revocar","panelRadius":"Panèls","pause_on_unfocused":"Pausar la difusion quand l’onglet es pas seleccionat","presets":"Pre-enregistrats","profile_background":"Imatge de fons","profile_banner":"Bandièra del perfil","profile_tab":"Perfil","radii_help":"Configurar los caires arredondits de l’interfàcia (en pixèls)","replies_in_timeline":"Responsas del flux","reply_visibility_all":"Mostrar totas las responsas","reply_visibility_following":"Mostrar pas que las responsas que me son destinada a ieu o un utilizaire que seguissi","reply_visibility_self":"Mostrar pas que las responsas que me son destinadas","saving_err":"Error en enregistrant los paramètres","saving_ok":"Paramètres enregistrats","search_user_to_block":"Cercatz qual volètz blocar","search_user_to_mute":"Cercatz qual volètz rescondre","security_tab":"Seguretat","scope_copy":"Copiar lo nivèl de confidencialitat per las responsas (Totjorn aissí pels Messatges Dirèctes)","minimal_scopes_mode":"Minimizar lo nombre d’opcions per publicacion","set_new_avatar":"Definir un nòu avatar","set_new_profile_background":"Definir un nòu fons de perfil","set_new_profile_banner":"Definir una nòva bandièra de perfil","settings":"Paramètres","subject_input_always_show":"Totjorn mostrar lo camp de subjècte","subject_line_behavior":"Copiar lo subjècte per las responsas","subject_line_email":"Coma los corrièls : \\"re: subjècte\\"","subject_line_mastodon":"Coma mastodon : copiar tal coma es","subject_line_noop":"Copiar pas","post_status_content_type":"Publicar lo tipe de contengut dels estatuts","stop_gifs":"Lançar los GIFs al subrevòl","streaming":"Activar lo cargament automatic dels novèls estatus en anar amont","text":"Tèxte","theme":"Tèma","theme_help_v2_1":"Podètz tanben remplaçar la color d’unes compausants en clicant la case, utilizatz lo boton \\"O escafar tot\\" per escafar totes las subrecargadas.","theme_help_v2_2":"Icons underneath some entries are background/text contrast indicators, hover over for detailed info. Please keep in mind that when using transparency contrast indicators show the worst possible case.","theme_help":"Emplegatz los còdis de color hex (#rrggbb) per personalizar vòstre tèma de color.","tooltipRadius":"Astúcias/alèrtas","upload_a_photo":"Enviar una fotografia","user_settings":"Paramètres utilizaire","values":{"false":"non","true":"òc"},"notifications":"Notificacions","notification_mutes":"Per recebre pas mai d’un utilizaire en particular, botatz-lo en silenci.","notification_blocks":"Blocar un utilizaire arrèsta totas las notificacions tan coma quitar de los seguir.","enable_web_push_notifications":"Activar las notificacions web push","style":{"switcher":{"keep_color":"Gardar las colors","keep_shadows":"Gardar las ombras","keep_opacity":"Gardar l’opacitat","keep_roundness":"Gardar la redondetat","keep_fonts":"Gardar las polissas","save_load_hint":"Las opcions « Gardar » permeton de servar las opcions configuradas actualament quand seleccionatz o cargatz un tèma, permeton tanben d’enregistrar aquelas opcions quand exportatz un tèma. Quand totas las casas son pas marcadas, l’exportacion de tèma o enregistrarà tot.","reset":"Restablir","clear_all":"O escafar tot","clear_opacity":"Escafar l’opacitat"},"common":{"color":"Color","opacity":"Opacitat","contrast":{"hint":"Lo coeficient de contraste es de {ratio}. Dòna {level} {context}","level":{"aa":"un nivèl AA minimum recomandat","aaa":"un nivèl AAA recomandat","bad":"pas un nivèl d’accessibilitat recomandat"},"context":{"18pt":"pel tèxte grand (18pt+)","text":"pel tèxte"}}},"common_colors":{"_tab_label":"Comun","main":"Colors comunas","foreground_hint":"Vejatz « Avançat » per mai de paramètres detalhats","rgbo":"Icònas, accents, badges"},"advanced_colors":{"_tab_label":"Avançat","alert":"Rèire plan d’alèrtas","alert_error":"Error","badge":"Rèire plan dels badges","badge_notification":"Notificacion","panel_header":"Bandièra del tablèu de bòrd","top_bar":"Barra amont","borders":"Caires","buttons":"Botons","inputs":"Camps tèxte","faint_text":"Tèxte descolorit"},"radii":{"_tab_label":"Redondetat"},"shadows":{"_tab_label":"Ombra e luminositat","component":"Compausant","override":"Subrecargar","shadow_id":"Ombra #{value}","blur":"Fosc","spread":"Espandiment","inset":"Incrustacion","hint":"Per las ombras podètz tanben utilizar --variable coma valor de color per emplegar una variable CSS3. Notatz que lo paramètre d’opacitat foncionarà pas dins aquel cas.","filter_hint":{"always_drop_shadow":"Avertiment, aquel ombra utiliza totjorn {0} quand lo navigator es compatible.","drop_shadow_syntax":"{0} es pas compatible amb lo paramètre {1} e lo mot clau {2}.","avatar_inset":"Notatz que combinar d’ombras incrustadas e pas incrustadas pòt donar de resultats inesperats amb los avatars transparents.","spread_zero":"L’ombra amb un espandiment de > 0 apareisserà coma reglat a zèro","inset_classic":"L’ombra d’incrustacion utilizarà {0}"},"components":{"panel":"Tablèu","panelHeader":"Bandièra del tablèu","topBar":"Barra amont","avatar":"Utilizar l’avatar (vista perfil)","avatarStatus":"Avatar de l’utilizaire (afichatge publicacion)","popup":"Fenèstras sorgissentas e astúcias","button":"Boton","buttonHover":"Boton (en passar la mirga)","buttonPressed":"Boton (en quichar)","buttonPressedHover":"Boton (en quichar e passar)","input":"Camp tèxte"}},"fonts":{"_tab_label":"Polissas","help":"Selecionatz la polissa d’utilizar pels elements de l’UI. Per « Personalizada » vos cal picar lo nom exacte tal coma apareis sul sistèma.","components":{"interface":"Interfàcia","input":"Camps tèxte","post":"Tèxte de publicacion","postCode":"Tèxte Monospaced dins las publicacion (tèxte formatat)"},"family":"Nom de la polissa","size":"Talha (en px)","weight":"Largor (gras)","custom":"Personalizada"},"preview":{"header":"Apercebut","content":"Contengut","error":"Error d’exemple","button":"Boton","text":"A tròç de mai de {0} e {1}","mono":"contengut","input":"arribada al país.","faint_link":"manual d’ajuda","fine_print":"Legissètz nòstre {0} per legir pas res d’util !","header_faint":"Va plan","checkbox":"Ai legit los tèrmes e condicions d’utilizacion","link":"un pichon ligam simpatic"}},"version":{"title":"Version","backend_version":"Version Backend","frontend_version":"Version Frontend"}},"time":{"day":"{0} jorn","days":"{0} jorns","day_short":"{0} jorn","days_short":"{0} jorns","hour":"{0} ora","hours":"{0} oras","hour_short":"{0}h","hours_short":"{0}h","in_future":"d’aquí {0}","in_past":"fa {0}","minute":"{0} minuta","minutes":"{0} minutas","minute_short":"{0}min","minutes_short":"{0}min","month":"{0} mes","months":"{0} meses","month_short":"{0} mes","months_short":"{0} meses","now":"ara meteis","now_short":"ara meteis","second":"{0} segonda","seconds":"{0} segondas","second_short":"{0}s","seconds_short":"{0}s","week":"{0} setmana.","weeks":"{0} setmanas.","week_short":"{0} setm.","weeks_short":"{0} setm.","year":"{0} an","years":"{0} ans","year_short":"{0} an","years_short":"{0} ans"},"timeline":{"collapse":"Tampar","conversation":"Conversacion","error_fetching":"Error en cercant de mesas a jorn","load_older":"Ne veire mai","no_retweet_hint":"Las publicacions marcadas pels seguidors solament o dirèctas se pòdon pas repetir","repeated":"repetit","show_new":"Ne veire mai","up_to_date":"A jorn","no_more_statuses":"Pas mai d’estatuts","no_statuses":"Cap d’estatuts"},"status":{"favorites":"Li a agradat","repeats":"A repetit","reply_to":"Respond a","replies_list":"Responsas :"},"user_card":{"approve":"Validar","block":"Blocar","blocked":"Blocat !","deny":"Refusar","favorites":"Favorits","follow":"Seguir","follow_sent":"Demanda enviada !","follow_progress":"Demanda…","follow_again":"Tornar enviar la demanda ?","follow_unfollow":"Quitar de seguir","followees":"Abonaments","followers":"Seguidors","following":"Seguit !","follows_you":"Vos sèc !","its_you":"Sètz vos !","media":"Mèdia","mute":"Amagar","muted":"Amagat","per_day":"per jorn","remote_follow":"Seguir a distància","statuses":"Estatuts","subscribe":"S’abonar","unsubscribe":"Se desabonar","unblock":"Desblocar","unblock_progress":"Desblocatge...","block_progress":"Blocatge...","unmute":"Tornar mostrar","unmute_progress":"Afichatge...","mute_progress":"A amagar...","admin_menu":{"moderation":"Moderacion","grant_admin":"Passar Admin","revoke_admin":"Revocar Admin","grant_moderator":"Passar Moderator","revoke_moderator":"Revocar Moderator","activate_account":"Activar lo compte","deactivate_account":"Desactivar lo compte","delete_account":"Suprimir lo compte","force_nsfw":"Marcar totas las publicacions coma sensiblas","strip_media":"Tirar los mèdias de las publicacions","force_unlisted":"Forçar las publicacions en pas-listadas","sandbox":"Forçar las publicacions en seguidors solament","disable_remote_subscription":"Desactivar lo seguiment d’utilizaire d’instàncias alonhadas","disable_any_subscription":"Desactivar tot seguiment","quarantine":"Defendre la federacion de las publicacions de l’utilizaire","delete_user":"Suprimir l’utilizaire","delete_user_confirmation":"Volètz vertadièrament far aquò ? Aquesta accion se pòt pas anullar."}},"user_profile":{"timeline_title":"Flux utilizaire","profile_does_not_exist":"Aqueste perfil existís pas.","profile_loading_error":"Una error s’es producha en cargant aqueste perfil."},"who_to_follow":{"more":"Mai","who_to_follow":"Qual seguir"},"tool_tip":{"media_upload":"Enviar un mèdia","repeat":"Repetir","reply":"Respondre","favorite":"aimar","user_settings":"Paramètres utilizaire"},"upload":{"error":{"base":"Mandadís fracassat.","file_too_big":"Fichièr tròp grand [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]","default":"Tornatz ensajar mai tard"},"file_size_units":{"B":"o","KiB":"Kio","MiB":"Mio","GiB":"Gio","TiB":"Tio"}},"search":{"people":"Gent","hashtags":"Etiquetas","person_talking":"{count} persona ne parla","people_talking":"{count} personas ne parlan","no_results":"Cap de resultats"}}')}}]); -//# sourceMappingURL=24.e4b623be1780a14a6168.js.map \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[24],{617:function(a){a.exports=JSON.parse('{"chat":{"title":"Messatjariá"},"exporter":{"export":"Exportar","processing":"Tractament, vos demandarem lèu de telecargar lo fichièr"},"features_panel":{"chat":"Chat","gopher":"Gopher","media_proxy":"Servidor mandatari mèdia","scope_options":"Nivèls de confidencialitat","text_limit":"Limita de tèxte","title":"Foncionalitats","who_to_follow":"Qual seguir"},"finder":{"error_fetching_user":"Error pendent la cèrca d’un utilizaire","find_user":"Cercar un utilizaire"},"general":{"apply":"Aplicar","submit":"Mandar","more":"Mai","generic_error":"Una error s’es producha","optional":"opcional","show_more":"Mostrar mai","show_less":"Mostrar mens","cancel":"Anullar"},"image_cropper":{"crop_picture":"Talhar l’imatge","save":"Salvar","save_without_cropping":"Salvar sens talhada","cancel":"Anullar"},"importer":{"submit":"Mandar","success":"Corrèctament importat.","error":"Una error s’es producha pendent l’importacion d’aqueste fichièr."},"login":{"login":"Connexion","description":"Connexion via OAuth","logout":"Desconnexion","password":"Senhal","placeholder":"e.g. lain","register":"Se marcar","username":"Nom d’utilizaire","hint":"Connectatz-vos per participar a la discutida"},"media_modal":{"previous":"Precedent","next":"Seguent"},"nav":{"about":"A prepaus","back":"Tornar","chat":"Chat local","friend_requests":"Demandas de seguiment","mentions":"Notificacions","dms":"Messatges privats","public_tl":"Estatuts locals","timeline":"Flux d’actualitat","twkn":"Lo malhum conegut","user_search":"Cèrca d’utilizaires","search":"Cercar","who_to_follow":"Qual seguir","preferences":"Preferéncias"},"notifications":{"broken_favorite":"Estatut desconegut, sèm a lo cercar...","favorited_you":"a aimat vòstre estatut","followed_you":"vos a seguit","load_older":"Cargar las notificacions mai ancianas","notifications":"Notficacions","read":"Legit !","repeated_you":"a repetit vòstre estatut","no_more_notifications":"Pas mai de notificacions"},"polls":{"add_poll":"Ajustar un sondatge","add_option":"Ajustar d’opcions","option":"Opcion","votes":"vòtes","vote":"Votar","type":"Tipe de sondatge","single_choice":"Causida unica","multiple_choices":"Causida multipla","expiry":"Durada del sondatge","expires_in":"Lo sondatge s’acabarà {0}","expired":"Sondatge acabat {0}","not_enough_options":"I a pas pro d’opcions"},"stickers":{"add_sticker":"Ajustar un pegasolet"},"interactions":{"favs_repeats":"Repeticions e favorits","follows":"Nòus seguidors","load_older":"Cargar d’interaccions anterioras"},"post_status":{"new_status":"Publicar d’estatuts novèls","account_not_locked_warning":"Vòstre compte es pas {0}. Qual que siá pòt vos seguir per veire vòstras publicacions destinadas pas qu’a vòstres seguidors.","account_not_locked_warning_link":"clavat","attachments_sensitive":"Marcar las pèças juntas coma sensiblas","content_type":{"text/plain":"Tèxte brut","text/html":"HTML","text/markdown":"Markdown","text/bbcode":"BBCode"},"content_warning":"Avís de contengut (opcional)","default":"Escrivètz aquí vòstre estatut.","direct_warning_to_all":"Aquesta publicacion serà pas que visibla pels utilizaires mencionats.","direct_warning_to_first_only":"Aquesta publicacion serà pas que visibla pels utilizaires mencionats a la debuta del messatge.","posting":"Mandadís","scope":{"direct":"Dirècte - Publicar pels utilizaires mencionats solament","private":"Seguidors solament - Publicar pels sols seguidors","public":"Public - Publicar pel flux d’actualitat public","unlisted":"Pas listat - Publicar pas pel flux public"}},"registration":{"bio":"Biografia","email":"Adreça de corrièl","fullname":"Nom complèt","password_confirm":"Confirmar lo senhal","registration":"Inscripcion","token":"Geton de convidat","captcha":"CAPTCHA","new_captcha":"Clicatz l’imatge per obténer una nòva captcha","username_placeholder":"e.g. lain","fullname_placeholder":"e.g. Lain Iwakura","bio_placeholder":"e.g.\\nHi, Soi lo Lain\\nSoi afocada d’animes e vivi al Japan. Benlèu que me coneissètz de the Wired.","validations":{"username_required":"pòt pas èsser void","fullname_required":"pòt pas èsser void","email_required":"pòt pas èsser void","password_required":"pòt pas èsser void","password_confirmation_required":"pòt pas èsser void","password_confirmation_match":"deu èsser lo meteis senhal"}},"selectable_list":{"select_all":"O seleccionar tot"},"settings":{"app_name":"Nom de l’aplicacion","attachmentRadius":"Pèças juntas","attachments":"Pèças juntas","avatar":"Avatar","avatarAltRadius":"Avatars (Notificacions)","avatarRadius":"Avatars","background":"Rèire plan","bio":"Biografia","block_export":"Exportar los blocatges","block_export_button":"Exportar los blocatges dins un fichièr csv","block_import":"Impòrt de blocatges","block_import_error":"Error en importar los blocatges","blocks_imported":"Blocatges importats ! Lo tractament tardarà un pauc.","blocks_tab":"Blocatges","btnRadius":"Botons","cBlue":"Blau (Respondre, seguir)","cGreen":"Verd (Repertir)","cOrange":"Irange (Aimar)","cRed":"Roge (Anullar)","change_password":"Cambiar lo senhal","change_password_error":"Una error s’es producha en cambiant lo senhal.","changed_password":"Senhal corrèctament cambiat !","collapse_subject":"Replegar las publicacions amb de subjèctes","composing":"Escritura","confirm_new_password":"Confirmatz lo nòu senhal","current_avatar":"Vòstre avatar actual","current_password":"Senhal actual","current_profile_banner":"Bandièra actuala del perfil","data_import_export_tab":"Importar / Exportar las donadas","default_vis":"Nivèl de visibilitat per defaut","delete_account":"Suprimir lo compte","delete_account_description":"Suprimir vòstre compte e los messatges per sempre.","delete_account_error":"Una error s’es producha en suprimir lo compte. S’aquò ten d’arribar mercés de contactar vòstre administrator d’instància.","delete_account_instructions":"Picatz vòstre senhal dins lo camp tèxte çai-jos per confirmar la supression del compte.","avatar_size_instruction":"La talha minimum recomandada pels imatges d’avatar es 150x150 pixèls.","export_theme":"Enregistrar la preconfiguracion","filtering":"Filtratge","filtering_explanation":"Totes los estatuts amb aqueles mots seràn en silenci, un mot per linha","follow_export":"Exportar los abonaments","follow_export_button":"Exportar vòstres abonaments dins un fichièr csv","follow_import":"Importar los abonaments","follow_import_error":"Error en important los seguidors","follows_imported":"Seguidors importats. Lo tractament pòt trigar una estona.","foreground":"Endavant","general":"General","hide_attachments_in_convo":"Rescondre las pèças juntas dins las conversacions","hide_attachments_in_tl":"Rescondre las pèças juntas","hide_muted_posts":"Rescondre las publicacions del monde rescondut","max_thumbnails":"Nombre maximum de vinhetas per publicacion","hide_isp":"Amagar lo panèl especial instància","preload_images":"Precargar los imatges","use_one_click_nsfw":"Dobrir las pèças juntas NSFW amb un clic","hide_post_stats":"Amagar las estatisticas de publicacion (ex. lo nombre de favorits)","hide_user_stats":"Amagar las estatisticas de l’utilizaire (ex. lo nombre de seguidors)","hide_filtered_statuses":"Amagar los estatuts filtrats","import_followers_from_a_csv_file":"Importar los seguidors d’un fichièr csv","import_theme":"Cargar un tèma","inputRadius":"Camps tèxte","checkboxRadius":"Casas de marcar","instance_default":"(defaut : {value})","instance_default_simple":"(defaut)","interface":"Interfàcia","interfaceLanguage":"Lenga de l’interfàcia","invalid_theme_imported":"Lo fichièr seleccionat es pas un tèma Pleroma valid. Cap de cambiament es estat fach a vòstre tèma.","limited_availability":"Pas disponible per vòstre navigador","links":"Ligams","lock_account_description":"Limitar vòstre compte als seguidors acceptats solament","loop_video":"Bocla vidèo","loop_video_silent_only":"Legir en bocla solament las vidèos sens son (coma los « Gifs » de Mastodon)","mutes_tab":"Agamats","interactions_tab":"Interaccions","play_videos_in_modal":"Legir las vidèos dirèctament dins la visualizaira mèdia","use_contain_fit":"Talhar pas las pèças juntas per las vinhetas","name":"Nom","name_bio":"Nom & Bio","new_password":"Nòu senhal","notification_visibility_follows":"Abonaments","notification_visibility_likes":"Aimar","notification_visibility_mentions":"Mencions","notification_visibility_repeats":"Repeticions","notification_visibility":"Tipes de notificacion de mostrar","no_rich_text_description":"Netejar lo format tèxte de totas las publicacions","no_blocks":"Cap de blocatge","no_mutes":"Cap d’amagat","hide_follows_description":"Mostrar pas qual seguissi","hide_followers_description":"Mostrar pas qual me seguisson","show_admin_badge":"Mostrar lo badge Admin badge al perfil meu","show_moderator_badge":"Mostrar lo badge Moderator al perfil meu","nsfw_clickthrough":"Activar lo clic per mostrar los imatges marcats coma pels adults o sensibles","oauth_tokens":"Listats OAuth","token":"Geton","refresh_token":"Actualizar lo geton","valid_until":"Valid fins a","revoke_token":"Revocar","panelRadius":"Panèls","pause_on_unfocused":"Pausar la difusion quand l’onglet es pas seleccionat","presets":"Pre-enregistrats","profile_background":"Imatge de fons","profile_banner":"Bandièra del perfil","profile_tab":"Perfil","radii_help":"Configurar los caires arredondits de l’interfàcia (en pixèls)","replies_in_timeline":"Responsas del flux","reply_visibility_all":"Mostrar totas las responsas","reply_visibility_following":"Mostrar pas que las responsas que me son destinada a ieu o un utilizaire que seguissi","reply_visibility_self":"Mostrar pas que las responsas que me son destinadas","saving_err":"Error en enregistrant los paramètres","saving_ok":"Paramètres enregistrats","search_user_to_block":"Cercatz qual volètz blocar","search_user_to_mute":"Cercatz qual volètz rescondre","security_tab":"Seguretat","scope_copy":"Copiar lo nivèl de confidencialitat per las responsas (Totjorn aissí pels Messatges Dirèctes)","minimal_scopes_mode":"Minimizar lo nombre d’opcions per publicacion","set_new_avatar":"Definir un nòu avatar","set_new_profile_background":"Definir un nòu fons de perfil","set_new_profile_banner":"Definir una nòva bandièra de perfil","settings":"Paramètres","subject_input_always_show":"Totjorn mostrar lo camp de subjècte","subject_line_behavior":"Copiar lo subjècte per las responsas","subject_line_email":"Coma los corrièls : \\"re: subjècte\\"","subject_line_mastodon":"Coma mastodon : copiar tal coma es","subject_line_noop":"Copiar pas","post_status_content_type":"Publicar lo tipe de contengut dels estatuts","stop_gifs":"Lançar los GIFs al subrevòl","streaming":"Activar lo cargament automatic dels novèls estatus en anar amont","text":"Tèxte","theme":"Tèma","theme_help_v2_1":"Podètz tanben remplaçar la color d’unes compausants en clicant la case, utilizatz lo boton \\"O escafar tot\\" per escafar totes las subrecargadas.","theme_help_v2_2":"Icons underneath some entries are background/text contrast indicators, hover over for detailed info. Please keep in mind that when using transparency contrast indicators show the worst possible case.","theme_help":"Emplegatz los còdis de color hex (#rrggbb) per personalizar vòstre tèma de color.","tooltipRadius":"Astúcias/alèrtas","upload_a_photo":"Enviar una fotografia","user_settings":"Paramètres utilizaire","values":{"false":"non","true":"òc"},"notifications":"Notificacions","notification_mutes":"Per recebre pas mai d’un utilizaire en particular, botatz-lo en silenci.","notification_blocks":"Blocar un utilizaire arrèsta totas las notificacions tan coma quitar de los seguir.","enable_web_push_notifications":"Activar las notificacions web push","style":{"switcher":{"keep_color":"Gardar las colors","keep_shadows":"Gardar las ombras","keep_opacity":"Gardar l’opacitat","keep_roundness":"Gardar la redondetat","keep_fonts":"Gardar las polissas","save_load_hint":"Las opcions « Gardar » permeton de servar las opcions configuradas actualament quand seleccionatz o cargatz un tèma, permeton tanben d’enregistrar aquelas opcions quand exportatz un tèma. Quand totas las casas son pas marcadas, l’exportacion de tèma o enregistrarà tot.","reset":"Restablir","clear_all":"O escafar tot","clear_opacity":"Escafar l’opacitat"},"common":{"color":"Color","opacity":"Opacitat","contrast":{"hint":"Lo coeficient de contraste es de {ratio}. Dòna {level} {context}","level":{"aa":"un nivèl AA minimum recomandat","aaa":"un nivèl AAA recomandat","bad":"pas un nivèl d’accessibilitat recomandat"},"context":{"18pt":"pel tèxte grand (18pt+)","text":"pel tèxte"}}},"common_colors":{"_tab_label":"Comun","main":"Colors comunas","foreground_hint":"Vejatz « Avançat » per mai de paramètres detalhats","rgbo":"Icònas, accents, badges"},"advanced_colors":{"_tab_label":"Avançat","alert":"Rèire plan d’alèrtas","alert_error":"Error","badge":"Rèire plan dels badges","badge_notification":"Notificacion","panel_header":"Bandièra del tablèu de bòrd","top_bar":"Barra amont","borders":"Caires","buttons":"Botons","inputs":"Camps tèxte","faint_text":"Tèxte descolorit"},"radii":{"_tab_label":"Redondetat"},"shadows":{"_tab_label":"Ombra e luminositat","component":"Compausant","override":"Subrecargar","shadow_id":"Ombra #{value}","blur":"Fosc","spread":"Espandiment","inset":"Incrustacion","hint":"Per las ombras podètz tanben utilizar --variable coma valor de color per emplegar una variable CSS3. Notatz que lo paramètre d’opacitat foncionarà pas dins aquel cas.","filter_hint":{"always_drop_shadow":"Avertiment, aquel ombra utiliza totjorn {0} quand lo navigator es compatible.","drop_shadow_syntax":"{0} es pas compatible amb lo paramètre {1} e lo mot clau {2}.","avatar_inset":"Notatz que combinar d’ombras incrustadas e pas incrustadas pòt donar de resultats inesperats amb los avatars transparents.","spread_zero":"L’ombra amb un espandiment de > 0 apareisserà coma reglat a zèro","inset_classic":"L’ombra d’incrustacion utilizarà {0}"},"components":{"panel":"Tablèu","panelHeader":"Bandièra del tablèu","topBar":"Barra amont","avatar":"Utilizar l’avatar (vista perfil)","avatarStatus":"Avatar de l’utilizaire (afichatge publicacion)","popup":"Fenèstras sorgissentas e astúcias","button":"Boton","buttonHover":"Boton (en passar la mirga)","buttonPressed":"Boton (en quichar)","buttonPressedHover":"Boton (en quichar e passar)","input":"Camp tèxte"}},"fonts":{"_tab_label":"Polissas","help":"Selecionatz la polissa d’utilizar pels elements de l’UI. Per « Personalizada » vos cal picar lo nom exacte tal coma apareis sul sistèma.","components":{"interface":"Interfàcia","input":"Camps tèxte","post":"Tèxte de publicacion","postCode":"Tèxte Monospaced dins las publicacion (tèxte formatat)"},"family":"Nom de la polissa","size":"Talha (en px)","weight":"Largor (gras)","custom":"Personalizada"},"preview":{"header":"Apercebut","content":"Contengut","error":"Error d’exemple","button":"Boton","text":"A tròç de mai de {0} e {1}","mono":"contengut","input":"arribada al país.","faint_link":"manual d’ajuda","fine_print":"Legissètz nòstre {0} per legir pas res d’util !","header_faint":"Va plan","checkbox":"Ai legit los tèrmes e condicions d’utilizacion","link":"un pichon ligam simpatic"}},"version":{"title":"Version","backend_version":"Version Backend","frontend_version":"Version Frontend"}},"time":{"day":"{0} jorn","days":"{0} jorns","day_short":"{0} jorn","days_short":"{0} jorns","hour":"{0} ora","hours":"{0} oras","hour_short":"{0}h","hours_short":"{0}h","in_future":"d’aquí {0}","in_past":"fa {0}","minute":"{0} minuta","minutes":"{0} minutas","minute_short":"{0}min","minutes_short":"{0}min","month":"{0} mes","months":"{0} meses","month_short":"{0} mes","months_short":"{0} meses","now":"ara meteis","now_short":"ara meteis","second":"{0} segonda","seconds":"{0} segondas","second_short":"{0}s","seconds_short":"{0}s","week":"{0} setmana.","weeks":"{0} setmanas.","week_short":"{0} setm.","weeks_short":"{0} setm.","year":"{0} an","years":"{0} ans","year_short":"{0} an","years_short":"{0} ans"},"timeline":{"collapse":"Tampar","conversation":"Conversacion","error_fetching":"Error en cercant de mesas a jorn","load_older":"Ne veire mai","no_retweet_hint":"Las publicacions marcadas pels seguidors solament o dirèctas se pòdon pas repetir","repeated":"repetit","show_new":"Ne veire mai","up_to_date":"A jorn","no_more_statuses":"Pas mai d’estatuts","no_statuses":"Cap d’estatuts"},"status":{"favorites":"Li a agradat","repeats":"A repetit","reply_to":"Respond a","replies_list":"Responsas :"},"user_card":{"approve":"Validar","block":"Blocar","blocked":"Blocat !","deny":"Refusar","favorites":"Favorits","follow":"Seguir","follow_sent":"Demanda enviada !","follow_progress":"Demanda…","follow_unfollow":"Quitar de seguir","followees":"Abonaments","followers":"Seguidors","following":"Seguit !","follows_you":"Vos sèc !","its_you":"Sètz vos !","media":"Mèdia","mute":"Amagar","muted":"Amagat","per_day":"per jorn","remote_follow":"Seguir a distància","statuses":"Estatuts","subscribe":"S’abonar","unsubscribe":"Se desabonar","unblock":"Desblocar","unblock_progress":"Desblocatge...","block_progress":"Blocatge...","unmute":"Tornar mostrar","unmute_progress":"Afichatge...","mute_progress":"A amagar...","admin_menu":{"moderation":"Moderacion","grant_admin":"Passar Admin","revoke_admin":"Revocar Admin","grant_moderator":"Passar Moderator","revoke_moderator":"Revocar Moderator","activate_account":"Activar lo compte","deactivate_account":"Desactivar lo compte","delete_account":"Suprimir lo compte","force_nsfw":"Marcar totas las publicacions coma sensiblas","strip_media":"Tirar los mèdias de las publicacions","force_unlisted":"Forçar las publicacions en pas-listadas","sandbox":"Forçar las publicacions en seguidors solament","disable_remote_subscription":"Desactivar lo seguiment d’utilizaire d’instàncias alonhadas","disable_any_subscription":"Desactivar tot seguiment","quarantine":"Defendre la federacion de las publicacions de l’utilizaire","delete_user":"Suprimir l’utilizaire","delete_user_confirmation":"Volètz vertadièrament far aquò ? Aquesta accion se pòt pas anullar."}},"user_profile":{"timeline_title":"Flux utilizaire","profile_does_not_exist":"Aqueste perfil existís pas.","profile_loading_error":"Una error s’es producha en cargant aqueste perfil."},"who_to_follow":{"more":"Mai","who_to_follow":"Qual seguir"},"tool_tip":{"media_upload":"Enviar un mèdia","repeat":"Repetir","reply":"Respondre","favorite":"aimar","user_settings":"Paramètres utilizaire"},"upload":{"error":{"base":"Mandadís fracassat.","file_too_big":"Fichièr tròp grand [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]","default":"Tornatz ensajar mai tard"},"file_size_units":{"B":"o","KiB":"Kio","MiB":"Mio","GiB":"Gio","TiB":"Tio"}},"search":{"people":"Gent","hashtags":"Etiquetas","person_talking":"{count} persona ne parla","people_talking":"{count} personas ne parlan","no_results":"Cap de resultats"}}')}}]); +//# sourceMappingURL=24.5cfb87799bd882b933dd.js.map \ No newline at end of file diff --git a/priv/static/static/js/24.5cfb87799bd882b933dd.js.map b/priv/static/static/js/24.5cfb87799bd882b933dd.js.map new file mode 100644 index 000000000..c03306f8a --- /dev/null +++ b/priv/static/static/js/24.5cfb87799bd882b933dd.js.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/24.5cfb87799bd882b933dd.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/24.e4b623be1780a14a6168.js.map b/priv/static/static/js/24.e4b623be1780a14a6168.js.map deleted file mode 100644 index 5a1291203..000000000 --- a/priv/static/static/js/24.e4b623be1780a14a6168.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/24.e4b623be1780a14a6168.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/25.34eeae0070f7f1eb6843.js b/priv/static/static/js/25.34eeae0070f7f1eb6843.js deleted file mode 100644 index 92130ae8e..000000000 --- a/priv/static/static/js/25.34eeae0070f7f1eb6843.js +++ /dev/null @@ -1,2 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[25],{605:function(e){e.exports=JSON.parse('{"about":{"mrf":{"federation":"Federacja","keyword":{"keyword_policies":"Zasady słów kluczowych","ftl_removal":"Usunięcie z \\"Całej znanej sieci\\"","reject":"Odrzucanie","replace":"Zastąpienie","is_replaced_by":"→"},"mrf_policies":"Włączone zasady MRF","mrf_policies_desc":"Zasady MRF zmieniają zachowanie federowania instancji. Następujące zasady są włączone:","simple":{"simple_policies":"Zasady specyficzne dla instancji","accept":"Akceptowanie","accept_desc":"Ta instancja akceptuje tylko posty z wymienionych instancji:","reject":"Odrzucanie","reject_desc":"Ta instancja odrzuca posty z wymienionych instancji:","quarantine":"Kwarantanna","quarantine_desc":"Ta instancja wysyła tylko publiczne posty do wymienionych instancji:","ftl_removal":"Usunięcie z \\"Całej znanej sieci\\"","ftl_removal_desc":"Ta instancja usuwa wymienionych instancje z \\"Całej znanej sieci\\":","media_removal":"Usuwanie multimediów","media_removal_desc":"Ta instancja usuwa multimedia z postów od wymienionych instancji:","media_nsfw":"Multimedia ustawione jako wrażliwe","media_nsfw_desc":"Ta instancja wymusza, by multimedia z wymienionych instancji były ustawione jako wrażliwe:"}},"staff":"Administracja"},"chat":{"title":"Czat"},"domain_mute_card":{"mute":"Wycisz","mute_progress":"Wyciszam…","unmute":"Odcisz","unmute_progress":"Odciszam…"},"exporter":{"export":"Eksportuj","processing":"Przetwarzam, za chwilę zostaniesz zapytany(-na) o ściągnięcie pliku"},"features_panel":{"chat":"Czat","gopher":"Gopher","media_proxy":"Proxy mediów","scope_options":"Ustawienia zakresu","text_limit":"Limit tekstu","title":"Funkcje","who_to_follow":"Propozycje obserwacji","pleroma_chat_messages":"Czat Pleromy","upload_limit":"Limit wysyłania"},"finder":{"error_fetching_user":"Błąd przy pobieraniu profilu","find_user":"Znajdź użytkownika"},"general":{"apply":"Zastosuj","submit":"Wyślij","more":"Więcej","generic_error":"Wystąpił błąd","optional":"nieobowiązkowe","show_more":"Pokaż więcej","show_less":"Pokaż mniej","dismiss":"Odrzuć","cancel":"Anuluj","disable":"Wyłącz","enable":"Włącz","confirm":"Potwierdź","verify":"Zweryfikuj","close":"Zamknij","loading":"Ładowanie…","retry":"Spróbuj ponownie","peek":"Spójrz","error_retry":"Spróbuj ponownie"},"image_cropper":{"crop_picture":"Przytnij obrazek","save":"Zapisz","save_without_cropping":"Zapisz bez przycinania","cancel":"Anuluj"},"importer":{"submit":"Wyślij","success":"Zaimportowano pomyślnie.","error":"Wystąpił błąd podczas importowania pliku."},"login":{"login":"Zaloguj","description":"Zaloguj używając OAuth","logout":"Wyloguj","password":"Hasło","placeholder":"n.p. lain","register":"Zarejestruj","username":"Użytkownik","hint":"Zaloguj się, aby dołączyć do dyskusji","authentication_code":"Kod weryfikacyjny","enter_recovery_code":"Wprowadź kod zapasowy","enter_two_factor_code":"Wprowadź kod weryfikacyjny","recovery_code":"Kod zapasowy","heading":{"totp":"Weryfikacja dwuetapowa","recovery":"Zapasowa weryfikacja dwuetapowa"}},"media_modal":{"previous":"Poprzednie","next":"Następne"},"nav":{"about":"O nas","administration":"Administracja","back":"Wróć","chat":"Lokalny czat","friend_requests":"Prośby o możliwość obserwacji","mentions":"Wzmianki","interactions":"Interakcje","dms":"Wiadomości prywatne","public_tl":"Publiczna oś czasu","timeline":"Oś czasu","twkn":"Znana sieć","user_search":"Wyszukiwanie użytkowników","search":"Wyszukiwanie","who_to_follow":"Sugestie obserwacji","preferences":"Preferencje","bookmarks":"Zakładki","chats":"Czaty","timelines":"Osie czasu"},"notifications":{"broken_favorite":"Nieznany status, szukam go…","favorited_you":"dodał(-a) twój status do ulubionych","followed_you":"obserwuje cię","load_older":"Załaduj starsze powiadomienia","notifications":"Powiadomienia","read":"Przeczytane!","repeated_you":"powtórzył(-a) twój status","no_more_notifications":"Nie masz więcej powiadomień","migrated_to":"wyemigrował do","reacted_with":"zareagował z {0}","follow_request":"chce ciebie obserwować","error":"Błąd pobierania powiadomień: {0}"},"polls":{"add_poll":"Dodaj ankietę","add_option":"Dodaj opcję","option":"Opcja","votes":"głosów","vote":"Głosuj","type":"Typ ankiety","single_choice":"jednokrotnego wyboru","multiple_choices":"wielokrotnego wyboru","expiry":"Czas trwania ankiety","expires_in":"Ankieta kończy się za {0}","expired":"Ankieta skończyła się {0} temu","not_enough_options":"Zbyt mało unikalnych opcji w ankiecie"},"emoji":{"stickers":"Naklejki","emoji":"Emoji","keep_open":"Zostaw selektor otwarty","search_emoji":"Wyszukaj emoji","add_emoji":"Wstaw emoji","custom":"Niestandardowe emoji","unicode":"Emoji unicode","load_all_hint":"Załadowano pierwsze {saneAmount} emoji, Załadowanie wszystkich emoji może spowodować problemy z wydajnością.","load_all":"Ładuję wszystkie {emojiAmount} emoji"},"interactions":{"favs_repeats":"Powtórzenia i ulubione","follows":"Nowi obserwujący","moves":"Użytkownik migruje","load_older":"Załaduj starsze interakcje"},"post_status":{"new_status":"Dodaj nowy status","account_not_locked_warning":"Twoje konto nie jest {0}. Każdy może cię zaobserwować aby zobaczyć wpisy tylko dla obserwujących.","account_not_locked_warning_link":"zablokowane","attachments_sensitive":"Oznacz załączniki jako wrażliwe","content_type":{"text/plain":"Czysty tekst","text/html":"HTML","text/markdown":"Markdown","text/bbcode":"BBCode"},"content_warning":"Temat (nieobowiązkowy)","default":"Właśnie wróciłem z kościoła","direct_warning_to_all":"Ten wpis zobaczą wszystkie osoby, o których wspomniałeś(-aś).","direct_warning_to_first_only":"Ten wpis zobaczą tylko te osoby, o których wspomniałeś(-aś) na początku wiadomości.","posting":"Wysyłanie","scope_notice":{"public":"Ten post będzie widoczny dla każdego","private":"Ten post będzie widoczny tylko dla twoich obserwujących","unlisted":"Ten post nie będzie widoczny na publicznej osi czasu i całej znanej sieci"},"scope":{"direct":"Bezpośredni – Tylko dla wspomnianych użytkowników","private":"Tylko dla obserwujących – Umieść dla osób, które cię obserwują","public":"Publiczny – Umieść na publicznych osiach czasu","unlisted":"Niewidoczny – Nie umieszczaj na publicznych osiach czasu"},"preview_empty":"Pusty","preview":"Podgląd","empty_status_error":"Nie można wysłać pustego wpisu bez plików","media_description_error":"Nie udało się zaktualizować mediów, spróbuj ponownie","media_description":"Opis mediów"},"registration":{"bio":"Bio","email":"E-mail","fullname":"Wyświetlana nazwa profilu","password_confirm":"Potwierdzenie hasła","registration":"Rejestracja","token":"Token zaproszenia","captcha":"CAPTCHA","new_captcha":"Naciśnij na obrazek, aby dostać nowy kod captcha","username_placeholder":"np. lain","fullname_placeholder":"np. Lain Iwakura","bio_placeholder":"e.g.\\nCześć, jestem Lain.\\nJestem dziewczynką z anime żyjącą na peryferiach Japonii. Możesz znać mnie z Wired.","validations":{"username_required":"nie może być pusta","fullname_required":"nie może być pusta","email_required":"nie może być pusty","password_required":"nie może być puste","password_confirmation_required":"nie może być puste","password_confirmation_match":"musi być takie jak hasło"}},"remote_user_resolver":{"remote_user_resolver":"Wyszukiwarka użytkowników nietutejszych","searching_for":"Szukam","error":"Nie znaleziono."},"selectable_list":{"select_all":"Zaznacz wszystko"},"settings":{"app_name":"Nazwa aplikacji","security":"Bezpieczeństwo","enter_current_password_to_confirm":"Wprowadź obecne hasło, by potwierdzić twoją tożsamość","mfa":{"otp":"OTP","setup_otp":"Ustaw OTP","wait_pre_setup_otp":"początkowe ustawianie OTP","confirm_and_enable":"Potwierdź i włącz OTP","title":"Weryfikacja dwuetapowa","generate_new_recovery_codes":"Wygeneruj nowe kody zapasowe","warning_of_generate_new_codes":"Po tym gdy wygenerujesz nowe kody zapasowe, stare przestaną działać.","recovery_codes":"Kody zapasowe.","waiting_a_recovery_codes":"Otrzymuję kody zapasowe…","recovery_codes_warning":"Spisz kody na kartce papieru, albo zapisz je w bezpiecznym miejscu - inaczej nie zobaczysz ich już nigdy. Jeśli stracisz dostęp do twojej aplikacji 2FA i kodów zapasowych, nie będziesz miał(-a) dostępu do swojego konta.","authentication_methods":"Metody weryfikacji","scan":{"title":"Skanuj","desc":"Zeskanuj ten kod QR używając twojej aplikacji 2FA albo wpisz ten klucz:","secret_code":"Klucz"},"verify":{"desc":"By włączyć weryfikację dwuetapową, wpisz kod z twojej aplikacji 2FA:"}},"allow_following_move":"Zezwalaj na automatyczną obserwację gdy obserwowane konto migruje","attachmentRadius":"Załączniki","attachments":"Załączniki","avatar":"Awatar","avatarAltRadius":"Awatary (powiadomienia)","avatarRadius":"Awatary","background":"Tło","bio":"Bio","block_export":"Eksport blokad","block_export_button":"Eksportuj twoje blokady do pliku .csv","block_import":"Import blokad","block_import_error":"Wystąpił błąd podczas importowania blokad","blocks_imported":"Zaimportowano blokady, przetwarzanie może zająć trochę czasu.","blocks_tab":"Bloki","btnRadius":"Przyciski","cBlue":"Niebieski (odpowiedz, obserwuj)","cGreen":"Zielony (powtórzenia)","cOrange":"Pomarańczowy (ulubione)","cRed":"Czerwony (anuluj)","change_email":"Zmień email","change_email_error":"Wystąpił problem podczas zmiany emaila.","changed_email":"Pomyślnie zmieniono email!","change_password":"Zmień hasło","change_password_error":"Podczas zmiany hasła wystąpił problem.","changed_password":"Pomyślnie zmieniono hasło!","collapse_subject":"Zwijaj posty z tematami","composing":"Pisanie","confirm_new_password":"Potwierdź nowe hasło","current_avatar":"Twój obecny awatar","current_password":"Obecne hasło","current_profile_banner":"Twój obecny banner profilu","data_import_export_tab":"Import/eksport danych","default_vis":"Domyślny zakres widoczności","delete_account":"Usuń konto","delete_account_description":"Trwale usuń dane i zdezaktywuj konto.","delete_account_error":"Wystąpił problem z usuwaniem twojego konta. Jeżeli problem powtarza się, poinformuj administratora swojej instancji.","delete_account_instructions":"Wprowadź swoje hasło w poniższe pole aby potwierdzić usunięcie konta.","discoverable":"Zezwól na odkrywanie tego konta w wynikach wyszukiwania i innych usługach","domain_mutes":"Domeny","avatar_size_instruction":"Zalecany minimalny rozmiar awatarów to 150x150 pikseli.","pad_emoji":"Dodaj odstęp z obu stron emoji podczas dodawania selektorem","emoji_reactions_on_timeline":"Pokaż reakcje emoji na osi czasu","export_theme":"Zapisz motyw","filtering":"Filtrowanie","filtering_explanation":"Wszystkie statusy zawierające te słowa będą wyciszone. Jedno słowo na linijkę.","follow_export":"Eksport obserwowanych","follow_export_button":"Eksportuj swoją listę obserwowanych do pliku CSV","follow_import":"Import obserwowanych","follow_import_error":"Błąd przy importowaniu obserwowanych","follows_imported":"Obserwowani zaimportowani! Przetwarzanie może trochę potrwać.","accent":"Akcent","foreground":"Pierwszy plan","general":"Ogólne","hide_attachments_in_convo":"Ukrywaj załączniki w rozmowach","hide_attachments_in_tl":"Ukrywaj załączniki w osi czasu","hide_muted_posts":"Ukrywaj wpisy wyciszonych użytkowników","max_thumbnails":"Maksymalna liczba miniatur w poście","hide_isp":"Ukryj panel informacji o instancji","preload_images":"Ładuj wstępnie obrazy","use_one_click_nsfw":"Otwieraj załączniki NSFW jednym kliknięciem","hide_post_stats":"Ukrywaj statysyki postów (np. liczbę polubień)","hide_user_stats":"Ukrywaj statysyki użytkowników (np. liczbę obserwujących)","hide_filtered_statuses":"Ukrywaj filtrowane statusy","import_blocks_from_a_csv_file":"Importuj blokady z pliku CSV","import_followers_from_a_csv_file":"Importuj obserwowanych z pliku CSV","import_theme":"Załaduj motyw","inputRadius":"Pola tekstowe","checkboxRadius":"Pola wyboru","instance_default":"(domyślnie: {value})","instance_default_simple":"(domyślne)","interface":"Interfejs","interfaceLanguage":"Język interfejsu","invalid_theme_imported":"Wybrany plik nie jest obsługiwanym motywem Pleromy. Nie dokonano zmian w twoim motywie.","limited_availability":"Niedostępne w twojej przeglądarce","links":"Łącza","lock_account_description":"Spraw, by konto mogli wyświetlać tylko zatwierdzeni obserwujący","loop_video":"Zapętlaj filmy","loop_video_silent_only":"Zapętlaj tylko filmy bez dźwięku (np. mastodonowe „gify”)","mutes_tab":"Wyciszenia","play_videos_in_modal":"Odtwarzaj filmy bezpośrednio w przeglądarce mediów","use_contain_fit":"Nie przycinaj załączników na miniaturach","name":"Imię","name_bio":"Imię i bio","new_email":"Nowy email","new_password":"Nowe hasło","notification_visibility":"Rodzaje powiadomień do wyświetlania","notification_visibility_follows":"Obserwacje","notification_visibility_likes":"Ulubione","notification_visibility_mentions":"Wzmianki","notification_visibility_repeats":"Powtórzenia","notification_visibility_moves":"Użytkownik migruje","notification_visibility_emoji_reactions":"Reakcje","no_rich_text_description":"Usuwaj formatowanie ze wszystkich postów","no_blocks":"Brak blokad","no_mutes":"Brak wyciszeń","hide_follows_description":"Nie pokazuj kogo obserwuję","hide_followers_description":"Nie pokazuj kto mnie obserwuje","hide_follows_count_description":"Nie pokazuj licznika obserwowanych","hide_followers_count_description":"Nie pokazuj licznika obserwujących","show_admin_badge":"Pokazuj odznakę Administrator na moim profilu","show_moderator_badge":"Pokazuj odznakę Moderator na moim profilu","nsfw_clickthrough":"Włącz domyślne ukrywanie załączników o treści nieprzyzwoitej (NSFW)","oauth_tokens":"Tokeny OAuth","token":"Token","refresh_token":"Odśwież token","valid_until":"Ważne do","revoke_token":"Odwołać","panelRadius":"Panele","pause_on_unfocused":"Wstrzymuj strumieniowanie kiedy karta nie jest aktywna","presets":"Gotowe motywy","profile_background":"Tło profilu","profile_banner":"Banner profilu","profile_tab":"Profil","radii_help":"Ustaw zaokrąglenie krawędzi interfejsu (w pikselach)","replies_in_timeline":"Odpowiedzi na osi czasu","reply_visibility_all":"Pokazuj wszystkie odpowiedzi","reply_visibility_following":"Pokazuj tylko odpowiedzi skierowane do mnie i osób które obserwuję","reply_visibility_self":"Pokazuj tylko odpowiedzi skierowane do mnie","autohide_floating_post_button":"Ukryj automatycznie przycisk \\"Nowy post\\" (mobile)","saving_err":"Nie udało się zapisać ustawień","saving_ok":"Zapisano ustawienia","search_user_to_block":"Wyszukaj kogo chcesz zablokować","search_user_to_mute":"Wyszukaj kogo chcesz wyciszyć","security_tab":"Bezpieczeństwo","scope_copy":"Kopiuj zakres podczas odpowiadania (DM-y zawsze są kopiowane)","minimal_scopes_mode":"Zminimalizuj opcje wyboru zakresu postów","set_new_avatar":"Ustaw nowy awatar","set_new_profile_background":"Ustaw nowe tło profilu","set_new_profile_banner":"Ustaw nowy banner profilu","settings":"Ustawienia","subject_input_always_show":"Zawsze pokazuj pole tematu","subject_line_behavior":"Kopiuj temat podczas odpowiedzi","subject_line_email":"Jak w mailach – „re: temat”","subject_line_mastodon":"Jak na Mastodonie – po prostu kopiuj","subject_line_noop":"Nie kopiuj","post_status_content_type":"Post status content type","stop_gifs":"Odtwarzaj GIFy po najechaniu kursorem","streaming":"Włącz automatycznie strumieniowanie nowych postów gdy jesteś na początku strony","user_mutes":"Użytkownicy","useStreamingApi":"Otrzymuj posty i powiadomienia w czasie rzeczywistym","useStreamingApiWarning":"(Niezalecane, eksperymentalne, pomija posty)","text":"Tekst","theme":"Motyw","theme_help":"Użyj kolorów w notacji szesnastkowej (#rrggbb), by stworzyć swój motyw.","theme_help_v2_1":"Możesz też zastąpić kolory i widoczność poszczególnych komponentów przełączając pola wyboru, użyj „Wyczyść wszystko” aby usunąć wszystkie zastąpienia.","theme_help_v2_2":"Ikony pod niektórych wpisami są wskaźnikami kontrastu pomiędzy tłem a tekstem, po najechaniu na nie otrzymasz szczegółowe informacje. Zapamiętaj, że jeżeli używasz przezroczystości, wskaźniki pokazują najgorszy możliwy przypadek.","tooltipRadius":"Etykiety/alerty","type_domains_to_mute":"Wyszukaj domeny, które chcesz wyciszyć","upload_a_photo":"Wyślij zdjęcie","user_settings":"Ustawienia użytkownika","values":{"false":"nie","true":"tak"},"fun":"Zabawa","greentext":"Memiczne strzałki","notifications":"Powiadomienia","notification_mutes":"By przestać otrzymywać powiadomienia od jednego użytkownika, wycisz go.","notification_blocks":"Blokowanie uzytkownika zatrzymuje wszystkie powiadomienia i odsubskrybowuje go.","enable_web_push_notifications":"Włącz powiadomienia push","style":{"switcher":{"keep_color":"Zachowaj kolory","keep_shadows":"Zachowaj cienie","keep_opacity":"Zachowaj widoczność","keep_roundness":"Zachowaj zaokrąglenie","keep_fonts":"Zachowaj czcionki","save_load_hint":"Opcje „zachowaj” pozwalają na pozostanie przy obecnych opcjach po wybraniu lub załadowaniu motywu, jak i przechowywanie ich podczas eksportowania motywu. Jeżeli wszystkie opcje są odznaczone, eksportowanie motywu spowoduje zapisanie wszystkiego.","reset":"Wyzeruj","clear_all":"Wyczyść wszystko","clear_opacity":"Wyczyść widoczność","load_theme":"Załaduj motyw","keep_as_is":"Zostaw po staremu","use_snapshot":"Stara wersja","use_source":"Nowa wersja","help":{"upgraded_from_v2":"PleromaFE zostało zaaktualizowane, motyw może wyglądać nieco inaczej niż zapamiętałeś(-aś).","v2_imported":"Plik który zaimportowałeś(-aś) został stworzony dla starszego FE. Próbujemy zwiększyć kompatybilność, lecz wciąż mogą występować rozbieżności.","future_version_imported":"Plik który zaimportowałeś(-aś) został stworzony w nowszej wersji FE.","older_version_imported":"Plik który zaimportowałeś(-aś) został stworzony w starszej wersji FE.","snapshot_present":"Migawka motywu jest załadowana, więc wszystkie wartości zostały nadpisane. Zamiast tego możesz załadować właściwe dane motywu.","snapshot_missing":"Nie znaleziono migawki motywu w pliku, więc motyw może wyglądać inaczej niż pierwotnie zaplanowano.","fe_upgraded":"Silnik motywów PleromaFE został zaaktualizowany.","fe_downgraded":"Wersja PleromaFE została cofnięta.","migration_snapshot_ok":"Żeby być bezpiecznym, migawka motywu została załadowana. Możesz spróbować załadować dane motywu.","migration_napshot_gone":"Z jakiegoś powodu migawka zniknęła, niektóre rzeczy mogą wyglądać inaczej niż zapamiętałeś(-aś).","snapshot_source_mismatch":"Konflikt wersji: najprawdopodobniej FE zostało cofnięte do poprzedniej wersji i zaktualizowane ponownie, jeśli zmieniłeś(-aś) motyw używając starszej wersji FE, najprawdopodobniej chcesz używać starszej wersji, w przeciwnym razie użyj nowej wersji."}},"common":{"color":"Kolor","opacity":"Widoczność","contrast":{"hint":"Współczynnik kontrastu wynosi {ratio}, {level} {context}","level":{"aa":"spełnia wymogi poziomu AA (minimalne)","aaa":"spełnia wymogi poziomu AAA (zalecane)","bad":"nie spełnia żadnych wymogów dostępności"},"context":{"18pt":"dla dużego tekstu (18pt+)","text":"dla tekstu"}}},"common_colors":{"_tab_label":"Ogólne","main":"Ogólne kolory","foreground_hint":"Zajrzyj do karty „Zaawansowane”, aby uzyskać dokładniejszą kontrolę","rgbo":"Ikony, wyróżnienia, odznaki"},"advanced_colors":{"_tab_label":"Zaawansowane","alert":"Tło alertu","alert_error":"Błąd","alert_warning":"Ostrzeżenie","alert_neutral":"Neutralne","post":"Posty/Bio użytkowników","badge":"Tło odznaki","popover":"Etykiety, menu, popovery","badge_notification":"Powiadomienie","panel_header":"Nagłówek panelu","top_bar":"Górny pasek","borders":"Granice","buttons":"Przyciski","inputs":"Pola wejścia","faint_text":"Zanikający tekst","underlay":"Podkład","poll":"Wykres ankiety","icons":"Ikony","highlight":"Podświetlone elementy","pressed":"Naciśnięte","selectedPost":"Wybrany post","selectedMenu":"Wybrany element menu","disabled":"Wyłączone","toggled":"Przełączone","tabs":"Karty","chat":{"outgoing":"Wiadomości wychodzące","incoming":"Wiadomości przychodzące","border":"Granica"},"wallpaper":"Tło"},"radii":{"_tab_label":"Zaokrąglenie"},"shadows":{"_tab_label":"Cień i podświetlenie","component":"Komponent","override":"Zastąp","shadow_id":"Cień #{value}","blur":"Rozmycie","spread":"Szerokość","inset":"Inset","hintV3":"Dla cieni możesz również użyć notacji {0} by użyć inny slot koloru.","filter_hint":{"always_drop_shadow":"Ostrzeżenie, ten cień zawsze używa {0} jeżeli to obsługiwane przez przeglądarkę.","drop_shadow_syntax":"{0} nie obsługuje parametru {1} i słowa kluczowego {2}.","avatar_inset":"Pamiętaj że użycie jednocześnie cieni inset i nie inset na awatarach może dać nieoczekiwane wyniki z przezroczystymi awatarami.","spread_zero":"Cienie o ujemnej szerokości będą widoczne tak, jakby wynosiła ona zero","inset_classic":"Cienie inset będą używały {0}"},"components":{"panel":"Panel","panelHeader":"Nagłówek panelu","topBar":"Górny pasek","avatar":"Awatar użytkownika (w widoku profilu)","avatarStatus":"Awatar użytkownika (w widoku wpisu)","popup":"Wyskakujące okna i podpowiedzi","button":"Przycisk","buttonHover":"Przycisk (po najechaniu)","buttonPressed":"Przycisk (naciśnięty)","buttonPressedHover":"Przycisk(naciśnięty+najechany)","input":"Pole wejścia"}},"fonts":{"_tab_label":"Czcionki","help":"Wybierz czcionkę używaną przez elementy UI. Jeżeli wybierzesz niestandardową, musisz wpisać dokładnie tę nazwę, pod którą pojawia się w systemie.","components":{"interface":"Interfejs","input":"Pola wejścia","post":"Tekst postu","postCode":"Tekst o stałej szerokości znaków w sformatowanym poście"},"family":"Nazwa czcionki","size":"Rozmiar (w pikselach)","weight":"Grubość","custom":"Niestandardowa"},"preview":{"header":"Podgląd","content":"Zawartość","error":"Przykładowy błąd","button":"Przycisk","text":"Trochę więcej {0} i {1}","mono":"treści","input":"Właśnie wróciłem z kościoła","faint_link":"pomocny podręcznik","fine_print":"Przeczytaj nasz {0}, aby nie nauczyć się niczego przydatnego!","header_faint":"W porządku","checkbox":"Przeleciałem(-am) przez zasady użytkowania","link":"i fajny mały odnośnik"}},"version":{"title":"Wersja","backend_version":"Wersja back-endu","frontend_version":"Wersja front-endu"},"notification_setting_privacy":"Prywatność","notification_setting_filters":"Filtry","notification_setting_privacy_option":"Ukryj nadawcę i zawartość powiadomień push","reset_avatar":"Zresetuj awatar","profile_fields":{"value":"Zawartość","label":"Metadane profilu","name":"Nazwa","add_field":"Dodaj pole"},"bot":"To konto jest prowadzone przez bota","notification_setting_hide_notification_contents":"Ukryj nadawcę i zawartość powiadomień push","notification_setting_block_from_strangers":"Zablokuj powiadomienia od użytkowników których nie obserwujesz","virtual_scrolling":"Optymalizuj renderowanie osi czasu","reset_background_confirm":"Czy naprawdę chcesz zresetować tło?","reset_banner_confirm":"Czy naprawdę chcesz zresetować banner?","reset_avatar_confirm":"Czy naprawdę chcesz zresetować awatar?","reset_profile_banner":"Zresetuj banner profilowy","reset_profile_background":"Zresetuj tło profilowe","mutes_and_blocks":"Wyciszenia i blokady","chatMessageRadius":"Wiadomość czatu","import_mutes_from_a_csv_file":"Zaimportuj wyciszenia z pliku .csv","mutes_imported":"Zaimportowano wyciszenia! Przetwarzanie zajmie chwilę.","mute_import_error":"Wystąpił błąd podczas importowania wyciszeń","mute_import":"Import wyciszeń","mute_export_button":"Wyeksportuj swoje wyciszenia do pliku .csv","mute_export":"Eksport wyciszeń","hide_wallpaper":"Ukryj tło instancji"},"time":{"day":"{0} dzień","days":"{0} dni","day_short":"{0} d","days_short":"{0} d","hour":"{0} godzina","hours":"{0} godzin","hour_short":"{0} godz.","hours_short":"{0} godz.","in_future":"za {0}","in_past":"{0} temu","minute":"{0} minuta","minutes":"{0} minut","minute_short":"{0} min","minutes_short":"{0} min","month":"{0} miesiąc","months":"{0} miesięcy","month_short":"{0} mies.","months_short":"{0} mies.","now":"teraz","now_short":"teraz","second":"{0} sekunda","seconds":"{0} sekund","second_short":"{0} s","seconds_short":"{0} s","week":"{0} tydzień","weeks":"{0} tygodni","week_short":"{0} tydz.","weeks_short":"{0} tyg.","year":"{0} rok","years":"{0} lata","year_short":"{0} r.","years_short":"{0} lata"},"timeline":{"collapse":"Zwiń","conversation":"Rozmowa","error_fetching":"Błąd pobierania","load_older":"Załaduj starsze statusy","no_retweet_hint":"Wpis oznaczony jako tylko dla obserwujących lub bezpośredni nie może zostać powtórzony","repeated":"powtórzył(-a)","show_new":"Pokaż nowe","up_to_date":"Na bieżąco","no_more_statuses":"Brak kolejnych statusów","no_statuses":"Brak statusów","reload":"Odśwież","error":"Błąd pobierania osi czasu: {0}"},"status":{"favorites":"Ulubione","repeats":"Powtórzenia","delete":"Usuń status","pin":"Przypnij na profilu","unpin":"Odepnij z profilu","pinned":"Przypnięte","delete_confirm":"Czy naprawdę chcesz usunąć ten status?","reply_to":"Odpowiedź dla","replies_list":"Odpowiedzi:","mute_conversation":"Wycisz konwersację","unmute_conversation":"Odcisz konwersację","status_unavailable":"Status niedostępny","copy_link":"Kopiuj link do statusu","unbookmark":"Usuń z zakładek","bookmark":"Dodaj do zakładek","hide_content":"Ukryj zawartość","show_content":"Pokaż zawartość","hide_full_subject":"Ukryj cały temat","show_full_subject":"Pokaż cały temat","thread_muted_and_words":", ma słowa:","thread_muted":"Wątek wyciszony","status_deleted":"Ten wpis został usunięty","expand":"Rozwiń","nsfw":"NSFW","external_source":"Zewnętrzne źródło"},"user_card":{"approve":"Przyjmij","block":"Zablokuj","blocked":"Zablokowany!","deny":"Odrzuć","favorites":"Ulubione","follow":"Obserwuj","follow_sent":"Wysłano prośbę!","follow_progress":"Wysyłam prośbę…","follow_again":"Wysłać prośbę ponownie?","follow_unfollow":"Przestań obserwować","followees":"Obserwowani","followers":"Obserwujący","following":"Obserwowany!","follows_you":"Obserwuje cię!","hidden":"Ukryte","its_you":"To ty!","media":"Media","mention":"Wspomnienie","mute":"Wycisz","muted":"Wyciszony(-a)","per_day":"dziennie","remote_follow":"Zdalna obserwacja","report":"Zgłoś","statuses":"Statusy","subscribe":"Subskrybuj","unsubscribe":"Odsubskrybuj","unblock":"Odblokuj","unblock_progress":"Odblokowuję…","block_progress":"Blokuję…","unmute":"Cofnij wyciszenie","unmute_progress":"Cofam wyciszenie…","mute_progress":"Wyciszam…","hide_repeats":"Ukryj powtórzenia","show_repeats":"Pokaż powtórzenia","admin_menu":{"moderation":"Moderacja","grant_admin":"Przyznaj admina","revoke_admin":"Odwołaj admina","grant_moderator":"Przyznaj moderatora","revoke_moderator":"Odwołaj moderatora","activate_account":"Aktywuj konto","deactivate_account":"Dezaktywuj konto","delete_account":"Usuń konto","force_nsfw":"Oznacz wszystkie posty jako NSFW","strip_media":"Usuń multimedia z postów","force_unlisted":"Wymuś posty na niepubliczne","sandbox":"Wymuś by posty były tylko dla obserwujących","disable_remote_subscription":"Zakaż obserwowania użytkownika ze zdalnych instancji","disable_any_subscription":"Zakaż całkowicie obserwowania użytkownika","quarantine":"Zakaż federowania postów od tego użytkownika","delete_user":"Usuń użytkownika","delete_user_confirmation":"Czy jesteś absolutnie pewny(-a)? Ta operacja nie może być cofnięta."},"message":"Napisz"},"user_profile":{"timeline_title":"Oś czasu użytkownika","profile_does_not_exist":"Przepraszamy, ten profil nie istnieje.","profile_loading_error":"Przepraszamy, wystąpił błąd podczas ładowania tego profilu."},"user_reporting":{"title":"Raportowanie {0}","add_comment_description":"Zgłoszenie zostanie wysłane do moderatorów instancji. Możesz dodać powód dlaczego zgłaszasz owe konto poniżej:","additional_comments":"Dodatkowe komentarze","forward_description":"To konto jest z innego serwera. Wysłać również tam kopię zgłoszenia?","forward_to":"Przekaż do {0}","submit":"Wyślij","generic_error":"Wystąpił błąd podczas przetwarzania twojej prośby."},"who_to_follow":{"more":"Więcej","who_to_follow":"Propozycje obserwacji"},"tool_tip":{"media_upload":"Wyślij media","repeat":"Powtórz","reply":"Odpowiedz","favorite":"Dodaj do ulubionych","add_reaction":"Dodaj reakcję","user_settings":"Ustawienia użytkownika","accept_follow_request":"Akceptuj prośbę o możliwość obserwacji","reject_follow_request":"Odrzuć prośbę o możliwość obserwacji","bookmark":"Zakładka"},"upload":{"error":{"base":"Wysyłanie nie powiodło się.","file_too_big":"Zbyt duży plik [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]","default":"Spróbuj ponownie później","message":"Błąd wysyłania: {0}"},"file_size_units":{"B":"B","KiB":"KiB","MiB":"MiB","GiB":"GiB","TiB":"TiB"}},"search":{"people":"Ludzie","hashtags":"Hasztagi","person_talking":"{count} osoba rozmawia o tym","people_talking":"{count} osób rozmawia o tym","no_results":"Brak wyników"},"password_reset":{"forgot_password":"Zapomniałeś(-aś) hasła?","password_reset":"Reset hasła","instruction":"Wprowadź swój adres email lub nazwę użytkownika. Wyślemy ci link z którym możesz zresetować hasło.","placeholder":"Twój email lub nazwa użytkownika","check_email":"Sprawdź pocztę, aby uzyskać link do zresetowania hasła.","return_home":"Wróć do strony głównej","too_many_requests":"Przekroczyłeś(-aś) limit prób, spróbuj ponownie później.","password_reset_disabled":"Resetowanie hasła jest wyłączone. Proszę skontaktuj się z administratorem tej instancji.","password_reset_required":"Musisz zresetować hasło, by się zalogować.","password_reset_required_but_mailer_is_disabled":"Musisz zresetować hasło, ale resetowanie hasła jest wyłączone. Proszę skontaktuj się z administratorem tej instancji."},"file_type":{"file":"Plik","image":"Zdjęcie","video":"Wideo","audio":"Audio"},"chats":{"more":"Więcej","delete":"Usuń","you":"Ty:","delete_confirm":"Czy na pewno chcesz usunąć tą wiadomość?","message_user":"Napisz do {nickname}","error_sending_message":"Coś poszło nie tak podczas wysyłania wiadomości.","error_loading_chat":"Coś poszło nie tak podczas ładowania czatu.","empty_message_error":"Nie można wysłać pustej wiadomości","new":"Nowy czat","empty_chat_list_placeholder":"Nie masz jeszcze żadnych czatów. Zacznij nowy czat!","chats":"Czaty"},"display_date":{"today":"Dzisiaj"},"shoutbox":{"title":"Shoutbox"},"errors":{"storage_unavailable":"Pleroma nie mogła uzyskać dostępu do pamięci masowej przeglądarki. Twój login lub lokalne ustawienia nie zostaną zapisane i możesz napotkać problemy. Spróbuj włączyć ciasteczka."}}')}}]); -//# sourceMappingURL=25.34eeae0070f7f1eb6843.js.map \ No newline at end of file diff --git a/priv/static/static/js/25.34eeae0070f7f1eb6843.js.map b/priv/static/static/js/25.34eeae0070f7f1eb6843.js.map deleted file mode 100644 index 2af21b09b..000000000 --- a/priv/static/static/js/25.34eeae0070f7f1eb6843.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/25.34eeae0070f7f1eb6843.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/25.8185e4d775cea9fe47e1.js b/priv/static/static/js/25.8185e4d775cea9fe47e1.js new file mode 100644 index 000000000..ca0e22957 --- /dev/null +++ b/priv/static/static/js/25.8185e4d775cea9fe47e1.js @@ -0,0 +1,2 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[25],{618:function(e){e.exports=JSON.parse('{"about":{"mrf":{"federation":"Federacja","keyword":{"keyword_policies":"Zasady słów kluczowych","ftl_removal":"Usunięcie z \\"Całej znanej sieci\\"","reject":"Odrzucanie","replace":"Zastąpienie","is_replaced_by":"→"},"mrf_policies":"Włączone zasady MRF","mrf_policies_desc":"Zasady MRF zmieniają zachowanie federowania instancji. Następujące zasady są włączone:","simple":{"simple_policies":"Zasady specyficzne dla instancji","accept":"Akceptowanie","accept_desc":"Ta instancja akceptuje tylko posty z wymienionych instancji:","reject":"Odrzucanie","reject_desc":"Ta instancja odrzuca posty z wymienionych instancji:","quarantine":"Kwarantanna","quarantine_desc":"Ta instancja wysyła tylko publiczne posty do wymienionych instancji:","ftl_removal":"Usunięcie z „Całej znanej sieci”","ftl_removal_desc":"Ta instancja usuwa wymienionych instancje z „Całej znanej sieci”:","media_removal":"Usuwanie multimediów","media_removal_desc":"Ta instancja usuwa multimedia z postów od wymienionych instancji:","media_nsfw":"Multimedia ustawione jako wrażliwe","media_nsfw_desc":"Ta instancja wymusza, by multimedia z wymienionych instancji były ustawione jako wrażliwe:"}},"staff":"Administracja"},"chat":{"title":"Czat"},"domain_mute_card":{"mute":"Wycisz","mute_progress":"Wyciszam…","unmute":"Odcisz","unmute_progress":"Odciszam…"},"exporter":{"export":"Eksportuj","processing":"Przetwarzam, za chwilę zostaniesz zapytany(-na) o ściągnięcie pliku"},"features_panel":{"chat":"Czat","gopher":"Gopher","media_proxy":"Proxy mediów","scope_options":"Ustawienia zakresu","text_limit":"Limit tekstu","title":"Funkcje","who_to_follow":"Propozycje obserwacji","pleroma_chat_messages":"Czat Pleromy","upload_limit":"Limit wysyłania"},"finder":{"error_fetching_user":"Błąd przy pobieraniu profilu","find_user":"Znajdź użytkownika"},"general":{"apply":"Zastosuj","submit":"Wyślij","more":"Więcej","generic_error":"Wystąpił błąd","optional":"nieobowiązkowe","show_more":"Pokaż więcej","show_less":"Pokaż mniej","dismiss":"Odrzuć","cancel":"Anuluj","disable":"Wyłącz","enable":"Włącz","confirm":"Potwierdź","verify":"Zweryfikuj","close":"Zamknij","loading":"Ładowanie…","retry":"Spróbuj ponownie","peek":"Spójrz","error_retry":"Spróbuj ponownie","flash_content":"Naciśnij, aby wyświetlić zawartości Flash z użyciem Ruffle (eksperymentalnie, może nie działać).","flash_fail":"Nie udało się załadować treści flash, zajrzyj do konsoli, aby odnaleźć szczegóły.","role":{"moderator":"Moderator","admin":"Administrator"}},"image_cropper":{"crop_picture":"Przytnij obrazek","save":"Zapisz","save_without_cropping":"Zapisz bez przycinania","cancel":"Anuluj"},"importer":{"submit":"Wyślij","success":"Zaimportowano pomyślnie.","error":"Wystąpił błąd podczas importowania pliku."},"login":{"login":"Zaloguj","description":"Zaloguj używając OAuth","logout":"Wyloguj","password":"Hasło","placeholder":"n.p. lain","register":"Zarejestruj","username":"Użytkownik","hint":"Zaloguj się, aby dołączyć do dyskusji","authentication_code":"Kod weryfikacyjny","enter_recovery_code":"Wprowadź kod zapasowy","enter_two_factor_code":"Wprowadź kod weryfikacyjny","recovery_code":"Kod zapasowy","heading":{"totp":"Weryfikacja dwuetapowa","recovery":"Zapasowa weryfikacja dwuetapowa"}},"media_modal":{"previous":"Poprzednie","next":"Następne"},"nav":{"about":"O nas","administration":"Administracja","back":"Wróć","chat":"Lokalny czat","friend_requests":"Prośby o możliwość obserwacji","mentions":"Wzmianki","interactions":"Interakcje","dms":"Wiadomości bezpośrednie","public_tl":"Publiczna oś czasu","timeline":"Oś czasu","twkn":"Znana sieć","user_search":"Wyszukiwanie użytkowników","search":"Wyszukiwanie","who_to_follow":"Sugestie obserwacji","preferences":"Preferencje","bookmarks":"Zakładki","chats":"Czaty","timelines":"Osie czasu","home_timeline":"Główna oś czasu"},"notifications":{"broken_favorite":"Nieznany status, szukam go…","favorited_you":"dodał(-a) twój status do ulubionych","followed_you":"obserwuje cię","load_older":"Załaduj starsze powiadomienia","notifications":"Powiadomienia","read":"Przeczytane!","repeated_you":"powtórzył(-a) twój status","no_more_notifications":"Nie masz więcej powiadomień","migrated_to":"wyemigrował do","reacted_with":"zareagował z {0}","follow_request":"chce ciebie obserwować","error":"Błąd pobierania powiadomień: {0}"},"polls":{"add_poll":"Dodaj ankietę","add_option":"Dodaj opcję","option":"Opcja","votes":"głosów","vote":"Głosuj","type":"Typ ankiety","single_choice":"jednokrotnego wyboru","multiple_choices":"wielokrotnego wyboru","expiry":"Czas trwania ankiety","expires_in":"Ankieta kończy się za {0}","expired":"Ankieta skończyła się {0} temu","not_enough_options":"Zbyt mało unikalnych opcji w ankiecie","people_voted_count":"{count} osoba zagłosowała | {count} osoby zagłosowały | {count} osób zagłosowało","votes_count":"{count} głos | {count} głosy | {count} głosów"},"emoji":{"stickers":"Naklejki","emoji":"Emoji","keep_open":"Zostaw selektor otwarty","search_emoji":"Wyszukaj emoji","add_emoji":"Wstaw emoji","custom":"Niestandardowe emoji","unicode":"Emoji unicode","load_all_hint":"Załadowano pierwsze {saneAmount} emoji, Załadowanie wszystkich emoji może spowodować problemy z wydajnością.","load_all":"Ładuję wszystkie {emojiAmount} emoji"},"interactions":{"favs_repeats":"Powtórzenia i ulubione","follows":"Nowi obserwujący","moves":"Użytkownik migruje","load_older":"Załaduj starsze interakcje"},"post_status":{"new_status":"Dodaj nowy status","account_not_locked_warning":"Twoje konto nie jest {0}. Każdy może cię zaobserwować aby zobaczyć wpisy tylko dla obserwujących.","account_not_locked_warning_link":"zablokowane","attachments_sensitive":"Oznacz załączniki jako wrażliwe","content_type":{"text/plain":"Czysty tekst","text/html":"HTML","text/markdown":"Markdown","text/bbcode":"BBCode"},"content_warning":"Temat (nieobowiązkowy)","default":"Właśnie wróciłem z kościoła","direct_warning_to_all":"Ten wpis zobaczą wszystkie osoby, o których wspomniałeś(-aś).","direct_warning_to_first_only":"Ten wpis zobaczą tylko te osoby, o których wspomniałeś(-aś) na początku wiadomości.","posting":"Wysyłanie","scope_notice":{"public":"Ten post będzie widoczny dla każdego","private":"Ten post będzie widoczny tylko dla twoich obserwujących","unlisted":"Ten post nie będzie widoczny na publicznej osi czasu i całej znanej sieci"},"scope":{"direct":"Bezpośredni – tylko dla wspomnianych użytkowników","private":"Tylko dla obserwujących – umieść dla osób, które cię obserwują","public":"Publiczny – umieść na publicznych osiach czasu","unlisted":"Niewidoczny – nie umieszczaj na publicznych osiach czasu"},"preview_empty":"Pusty","preview":"Podgląd","empty_status_error":"Nie można wysłać pustego wpisu bez plików","media_description_error":"Nie udało się zaktualizować mediów, spróbuj ponownie","media_description":"Opis mediów","post":"Opublikuj"},"registration":{"bio":"Bio","email":"E-mail","fullname":"Wyświetlana nazwa profilu","password_confirm":"Potwierdzenie hasła","registration":"Rejestracja","token":"Token zaproszenia","captcha":"CAPTCHA","new_captcha":"Naciśnij na obrazek, aby dostać nowy kod captcha","username_placeholder":"np. lain","fullname_placeholder":"np. Lain Iwakura","bio_placeholder":"e.g.\\nCześć, jestem Lain.\\nJestem dziewczynką z anime żyjącą na peryferiach Japonii. Możesz znać mnie z Wired.","validations":{"username_required":"nie może być pusta","fullname_required":"nie może być pusta","email_required":"nie może być pusty","password_required":"nie może być puste","password_confirmation_required":"nie może być puste","password_confirmation_match":"musi być takie jak hasło"},"reason":"Powód rejestracji","reason_placeholder":"Ta instancja ręcznie zatwierdza rejestracje.\\nPoinformuj administratora, dlaczego chcesz się zarejestrować.","register":"Zarejestruj się"},"remote_user_resolver":{"remote_user_resolver":"Wyszukiwarka użytkowników nietutejszych","searching_for":"Szukam","error":"Nie znaleziono."},"selectable_list":{"select_all":"Zaznacz wszystko"},"settings":{"app_name":"Nazwa aplikacji","security":"Bezpieczeństwo","enter_current_password_to_confirm":"Wprowadź obecne hasło, by potwierdzić twoją tożsamość","mfa":{"otp":"OTP","setup_otp":"Ustaw OTP","wait_pre_setup_otp":"początkowe ustawianie OTP","confirm_and_enable":"Potwierdź i włącz OTP","title":"Weryfikacja dwuetapowa","generate_new_recovery_codes":"Wygeneruj nowe kody zapasowe","warning_of_generate_new_codes":"Po tym gdy wygenerujesz nowe kody zapasowe, stare przestaną działać.","recovery_codes":"Kody zapasowe.","waiting_a_recovery_codes":"Otrzymuję kody zapasowe…","recovery_codes_warning":"Spisz kody na kartce papieru, albo zapisz je w bezpiecznym miejscu - inaczej nie zobaczysz ich już nigdy. Jeśli stracisz dostęp do twojej aplikacji 2FA i kodów zapasowych, nie będziesz miał(-a) dostępu do swojego konta.","authentication_methods":"Metody weryfikacji","scan":{"title":"Skanuj","desc":"Zeskanuj ten kod QR używając twojej aplikacji 2FA albo wpisz ten klucz:","secret_code":"Klucz"},"verify":{"desc":"By włączyć weryfikację dwuetapową, wpisz kod z twojej aplikacji 2FA:"}},"allow_following_move":"Zezwalaj na automatyczną obserwację gdy obserwowane konto migruje","attachmentRadius":"Załączniki","attachments":"Załączniki","avatar":"Awatar","avatarAltRadius":"Awatary (powiadomienia)","avatarRadius":"Awatary","background":"Tło","bio":"Bio","block_export":"Eksport blokad","block_export_button":"Eksportuj twoje blokady do pliku .csv","block_import":"Import blokad","block_import_error":"Wystąpił błąd podczas importowania blokad","blocks_imported":"Zaimportowano blokady, przetwarzanie może zająć trochę czasu.","blocks_tab":"Bloki","btnRadius":"Przyciski","cBlue":"Niebieski (odpowiedz, obserwuj)","cGreen":"Zielony (powtórzenia)","cOrange":"Pomarańczowy (ulubione)","cRed":"Czerwony (anuluj)","change_email":"Zmień e-mail","change_email_error":"Wystąpił problem podczas zmiany emaila.","changed_email":"Pomyślnie zmieniono email!","change_password":"Zmień hasło","change_password_error":"Podczas zmiany hasła wystąpił problem.","changed_password":"Pomyślnie zmieniono hasło!","collapse_subject":"Zwijaj posty z tematami","composing":"Pisanie","confirm_new_password":"Potwierdź nowe hasło","current_avatar":"Twój obecny awatar","current_password":"Obecne hasło","current_profile_banner":"Twój obecny banner profilu","data_import_export_tab":"Import/eksport danych","default_vis":"Domyślny zakres widoczności","delete_account":"Usuń konto","delete_account_description":"Trwale usuń dane i zdezaktywuj konto.","delete_account_error":"Wystąpił problem z usuwaniem twojego konta. Jeżeli problem powtarza się, poinformuj administratora swojej instancji.","delete_account_instructions":"Wprowadź swoje hasło w poniższe pole aby potwierdzić usunięcie konta.","discoverable":"Zezwól na odkrywanie tego konta w wynikach wyszukiwania i innych usługach","domain_mutes":"Domeny","avatar_size_instruction":"Zalecany minimalny rozmiar awatarów to 150x150 pikseli.","pad_emoji":"Dodaj odstęp z obu stron emoji podczas dodawania selektorem","emoji_reactions_on_timeline":"Pokaż reakcje emoji na osi czasu","export_theme":"Zapisz motyw","filtering":"Filtrowanie","filtering_explanation":"Wszystkie statusy zawierające te słowa będą wyciszone. Jedno słowo na linijkę.","follow_export":"Eksport obserwowanych","follow_export_button":"Eksportuj swoją listę obserwowanych do pliku CSV","follow_import":"Import obserwowanych","follow_import_error":"Błąd przy importowaniu obserwowanych","follows_imported":"Obserwowani zaimportowani! Przetwarzanie może trochę potrwać.","accent":"Akcent","foreground":"Pierwszy plan","general":"Ogólne","hide_attachments_in_convo":"Ukrywaj załączniki w rozmowach","hide_attachments_in_tl":"Ukrywaj załączniki w osi czasu","hide_muted_posts":"Ukrywaj wpisy wyciszonych użytkowników","max_thumbnails":"Maksymalna liczba miniatur w poście","hide_isp":"Ukryj panel informacji o instancji","preload_images":"Ładuj wstępnie obrazy","use_one_click_nsfw":"Otwieraj załączniki NSFW jednym kliknięciem","hide_post_stats":"Ukrywaj statysyki postów (np. liczbę polubień)","hide_user_stats":"Ukrywaj statysyki użytkowników (np. liczbę obserwujących)","hide_filtered_statuses":"Ukrywaj filtrowane statusy","import_blocks_from_a_csv_file":"Importuj blokady z pliku CSV","import_followers_from_a_csv_file":"Importuj obserwowanych z pliku CSV","import_theme":"Załaduj motyw","inputRadius":"Pola tekstowe","checkboxRadius":"Pola wyboru","instance_default":"(domyślnie: {value})","instance_default_simple":"(domyślne)","interface":"Interfejs","interfaceLanguage":"Język interfejsu","invalid_theme_imported":"Wybrany plik nie jest obsługiwanym motywem Pleromy. Nie dokonano zmian w twoim motywie.","limited_availability":"Niedostępne w twojej przeglądarce","links":"Łącza","lock_account_description":"Spraw, by konto mogli wyświetlać tylko zatwierdzeni obserwujący","loop_video":"Zapętlaj filmy","loop_video_silent_only":"Zapętlaj tylko filmy bez dźwięku (np. mastodonowe „gify”)","mutes_tab":"Wyciszenia","play_videos_in_modal":"Odtwarzaj filmy bezpośrednio w przeglądarce mediów","use_contain_fit":"Nie przycinaj załączników na miniaturach","name":"Imię","name_bio":"Imię i bio","new_email":"Nowy e-mail","new_password":"Nowe hasło","notification_visibility":"Rodzaje powiadomień do wyświetlania","notification_visibility_follows":"Obserwacje","notification_visibility_likes":"Ulubione","notification_visibility_mentions":"Wzmianki","notification_visibility_repeats":"Powtórzenia","notification_visibility_moves":"Użytkownik migruje","notification_visibility_emoji_reactions":"Reakcje","no_rich_text_description":"Usuwaj formatowanie ze wszystkich postów","no_blocks":"Brak blokad","no_mutes":"Brak wyciszeń","hide_follows_description":"Nie pokazuj kogo obserwuję","hide_followers_description":"Nie pokazuj kto mnie obserwuje","hide_follows_count_description":"Nie pokazuj licznika obserwowanych","hide_followers_count_description":"Nie pokazuj licznika obserwujących","show_admin_badge":"Pokazuj odznakę „Administrator” na moim profilu","show_moderator_badge":"Pokazuj odznakę „Moderator” na moim profilu","nsfw_clickthrough":"Włącz domyślne ukrywanie załączników o treści nieprzyzwoitej (NSFW)","oauth_tokens":"Tokeny OAuth","token":"Token","refresh_token":"Odśwież token","valid_until":"Ważne do","revoke_token":"Odwołać","panelRadius":"Panele","pause_on_unfocused":"Wstrzymuj strumieniowanie kiedy karta nie jest aktywna","presets":"Gotowe motywy","profile_background":"Tło profilu","profile_banner":"Banner profilu","profile_tab":"Profil","radii_help":"Ustaw zaokrąglenie krawędzi interfejsu (w pikselach)","replies_in_timeline":"Odpowiedzi na osi czasu","reply_visibility_all":"Pokazuj wszystkie odpowiedzi","reply_visibility_following":"Pokazuj tylko odpowiedzi skierowane do mnie i osób które obserwuję","reply_visibility_self":"Pokazuj tylko odpowiedzi skierowane do mnie","autohide_floating_post_button":"Ukryj automatycznie przycisk \\"Nowy post\\" (mobile)","saving_err":"Nie udało się zapisać ustawień","saving_ok":"Zapisano ustawienia","search_user_to_block":"Wyszukaj kogo chcesz zablokować","search_user_to_mute":"Wyszukaj kogo chcesz wyciszyć","security_tab":"Bezpieczeństwo","scope_copy":"Kopiuj zakres podczas odpowiadania (DM-y zawsze są kopiowane)","minimal_scopes_mode":"Zminimalizuj opcje wyboru zakresu postów","set_new_avatar":"Ustaw nowy awatar","set_new_profile_background":"Ustaw nowe tło profilu","set_new_profile_banner":"Ustaw nowy banner profilu","settings":"Ustawienia","subject_input_always_show":"Zawsze pokazuj pole tematu","subject_line_behavior":"Kopiuj temat podczas odpowiedzi","subject_line_email":"Jak w mailach – „re: temat”","subject_line_mastodon":"Jak na Mastodonie – po prostu kopiuj","subject_line_noop":"Nie kopiuj","post_status_content_type":"Post status content type","stop_gifs":"Odtwarzaj GIFy po najechaniu kursorem","streaming":"Włącz automatycznie strumieniowanie nowych postów gdy jesteś na początku strony","user_mutes":"Użytkownicy","useStreamingApi":"Otrzymuj posty i powiadomienia w czasie rzeczywistym","useStreamingApiWarning":"(Niezalecane, eksperymentalne, pomija posty)","text":"Tekst","theme":"Motyw","theme_help":"Użyj kolorów w notacji szesnastkowej (#rrggbb), by stworzyć swój motyw.","theme_help_v2_1":"Możesz też zastąpić kolory i widoczność poszczególnych komponentów przełączając pola wyboru, użyj „Wyczyść wszystko” aby usunąć wszystkie zastąpienia.","theme_help_v2_2":"Ikony pod niektórych wpisami są wskaźnikami kontrastu pomiędzy tłem a tekstem, po najechaniu na nie otrzymasz szczegółowe informacje. Zapamiętaj, że jeżeli używasz przezroczystości, wskaźniki pokazują najgorszy możliwy przypadek.","tooltipRadius":"Etykiety/alerty","type_domains_to_mute":"Wyszukaj domeny, które chcesz wyciszyć","upload_a_photo":"Wyślij zdjęcie","user_settings":"Ustawienia użytkownika","values":{"false":"nie","true":"tak"},"fun":"Zabawa","greentext":"Memiczne strzałki","notifications":"Powiadomienia","notification_mutes":"By przestać otrzymywać powiadomienia od jednego użytkownika, wycisz go.","notification_blocks":"Blokowanie uzytkownika zatrzymuje wszystkie powiadomienia i odsubskrybowuje go.","enable_web_push_notifications":"Włącz powiadomienia push","style":{"switcher":{"keep_color":"Zachowaj kolory","keep_shadows":"Zachowaj cienie","keep_opacity":"Zachowaj widoczność","keep_roundness":"Zachowaj zaokrąglenie","keep_fonts":"Zachowaj czcionki","save_load_hint":"Opcje „zachowaj” pozwalają na pozostanie przy obecnych opcjach po wybraniu lub załadowaniu motywu, jak i przechowywanie ich podczas eksportowania motywu. Jeżeli wszystkie opcje są odznaczone, eksportowanie motywu spowoduje zapisanie wszystkiego.","reset":"Wyzeruj","clear_all":"Wyczyść wszystko","clear_opacity":"Wyczyść widoczność","load_theme":"Załaduj motyw","keep_as_is":"Zostaw po staremu","use_snapshot":"Stara wersja","use_source":"Nowa wersja","help":{"upgraded_from_v2":"PleromaFE zostało zaaktualizowane, motyw może wyglądać nieco inaczej niż zapamiętałeś(-aś).","v2_imported":"Plik który zaimportowałeś(-aś) został stworzony dla starszego FE. Próbujemy zwiększyć kompatybilność, lecz wciąż mogą występować rozbieżności.","future_version_imported":"Plik który zaimportowałeś(-aś) został stworzony w nowszej wersji FE.","older_version_imported":"Plik który zaimportowałeś(-aś) został stworzony w starszej wersji FE.","snapshot_present":"Migawka motywu jest załadowana, więc wszystkie wartości zostały nadpisane. Zamiast tego możesz załadować właściwe dane motywu.","snapshot_missing":"Nie znaleziono migawki motywu w pliku, więc motyw może wyglądać inaczej niż pierwotnie zaplanowano.","fe_upgraded":"Silnik motywów PleromaFE został zaaktualizowany.","fe_downgraded":"Wersja PleromaFE została cofnięta.","migration_snapshot_ok":"Żeby być bezpiecznym, migawka motywu została załadowana. Możesz spróbować załadować dane motywu.","migration_napshot_gone":"Z jakiegoś powodu migawka zniknęła, niektóre rzeczy mogą wyglądać inaczej niż zapamiętałeś(-aś).","snapshot_source_mismatch":"Konflikt wersji: najprawdopodobniej FE zostało cofnięte do poprzedniej wersji i zaktualizowane ponownie, jeśli zmieniłeś(-aś) motyw używając starszej wersji FE, najprawdopodobniej chcesz używać starszej wersji, w przeciwnym razie użyj nowej wersji."}},"common":{"color":"Kolor","opacity":"Widoczność","contrast":{"hint":"Współczynnik kontrastu wynosi {ratio}, {level} {context}","level":{"aa":"spełnia wymogi poziomu AA (minimalne)","aaa":"spełnia wymogi poziomu AAA (zalecane)","bad":"nie spełnia żadnych wymogów dostępności"},"context":{"18pt":"dla dużego tekstu (18pt+)","text":"dla tekstu"}}},"common_colors":{"_tab_label":"Ogólne","main":"Ogólne kolory","foreground_hint":"Zajrzyj do karty „Zaawansowane”, aby uzyskać dokładniejszą kontrolę","rgbo":"Ikony, wyróżnienia, odznaki"},"advanced_colors":{"_tab_label":"Zaawansowane","alert":"Tło alertu","alert_error":"Błąd","alert_warning":"Ostrzeżenie","alert_neutral":"Neutralne","post":"Posty/Bio użytkowników","badge":"Tło odznaki","popover":"Etykiety, menu, popovery","badge_notification":"Powiadomienie","panel_header":"Nagłówek panelu","top_bar":"Górny pasek","borders":"Granice","buttons":"Przyciski","inputs":"Pola wejścia","faint_text":"Zanikający tekst","underlay":"Podkład","poll":"Wykres ankiety","icons":"Ikony","highlight":"Podświetlone elementy","pressed":"Naciśnięte","selectedPost":"Wybrany post","selectedMenu":"Wybrany element menu","disabled":"Wyłączone","toggled":"Przełączone","tabs":"Karty","chat":{"outgoing":"Wiadomości wychodzące","incoming":"Wiadomości przychodzące","border":"Granica"},"wallpaper":"Tło"},"radii":{"_tab_label":"Zaokrąglenie"},"shadows":{"_tab_label":"Cień i podświetlenie","component":"Komponent","override":"Zastąp","shadow_id":"Cień #{value}","blur":"Rozmycie","spread":"Szerokość","inset":"Inset","hintV3":"Dla cieni możesz również użyć notacji {0} by użyć inny slot koloru.","filter_hint":{"always_drop_shadow":"Ostrzeżenie, ten cień zawsze używa {0} jeżeli to obsługiwane przez przeglądarkę.","drop_shadow_syntax":"{0} nie obsługuje parametru {1} i słowa kluczowego {2}.","avatar_inset":"Pamiętaj że użycie jednocześnie cieni inset i nie inset na awatarach może dać nieoczekiwane wyniki z przezroczystymi awatarami.","spread_zero":"Cienie o ujemnej szerokości będą widoczne tak, jakby wynosiła ona zero","inset_classic":"Cienie inset będą używały {0}"},"components":{"panel":"Panel","panelHeader":"Nagłówek panelu","topBar":"Górny pasek","avatar":"Awatar użytkownika (w widoku profilu)","avatarStatus":"Awatar użytkownika (w widoku wpisu)","popup":"Wyskakujące okna i podpowiedzi","button":"Przycisk","buttonHover":"Przycisk (po najechaniu)","buttonPressed":"Przycisk (naciśnięty)","buttonPressedHover":"Przycisk(naciśnięty+najechany)","input":"Pole wejścia"}},"fonts":{"_tab_label":"Czcionki","help":"Wybierz czcionkę używaną przez elementy UI. Jeżeli wybierzesz niestandardową, musisz wpisać dokładnie tę nazwę, pod którą pojawia się w systemie.","components":{"interface":"Interfejs","input":"Pola wejścia","post":"Tekst postu","postCode":"Tekst o stałej szerokości znaków w sformatowanym poście"},"family":"Nazwa czcionki","size":"Rozmiar (w pikselach)","weight":"Grubość","custom":"Niestandardowa"},"preview":{"header":"Podgląd","content":"Zawartość","error":"Przykładowy błąd","button":"Przycisk","text":"Trochę więcej {0} i {1}","mono":"treści","input":"Właśnie wróciłem z kościoła","faint_link":"pomocny podręcznik","fine_print":"Przeczytaj nasz {0}, aby nie nauczyć się niczego przydatnego!","header_faint":"W porządku","checkbox":"Przeleciałem(-am) przez zasady użytkowania","link":"i fajny mały odnośnik"}},"version":{"title":"Wersja","backend_version":"Wersja back-endu","frontend_version":"Wersja front-endu"},"notification_setting_privacy":"Prywatność","notification_setting_filters":"Filtry","notification_setting_privacy_option":"Ukryj nadawcę i zawartość powiadomień push","reset_avatar":"Zresetuj awatar","profile_fields":{"value":"Zawartość","label":"Metadane profilu","name":"Nazwa","add_field":"Dodaj pole"},"bot":"To konto jest prowadzone przez bota","notification_setting_hide_notification_contents":"Ukryj nadawcę i zawartość powiadomień push","notification_setting_block_from_strangers":"Zablokuj powiadomienia od użytkowników których nie obserwujesz","virtual_scrolling":"Optymalizuj renderowanie osi czasu","reset_background_confirm":"Czy naprawdę chcesz zresetować tło?","reset_banner_confirm":"Czy naprawdę chcesz zresetować banner?","reset_avatar_confirm":"Czy naprawdę chcesz zresetować awatar?","reset_profile_banner":"Zresetuj banner profilowy","reset_profile_background":"Zresetuj tło profilowe","mutes_and_blocks":"Wyciszenia i blokady","chatMessageRadius":"Wiadomość czatu","import_mutes_from_a_csv_file":"Zaimportuj wyciszenia z pliku .csv","mutes_imported":"Zaimportowano wyciszenia! Przetwarzanie zajmie chwilę.","mute_import_error":"Wystąpił błąd podczas importowania wyciszeń","mute_import":"Import wyciszeń","mute_export_button":"Wyeksportuj swoje wyciszenia do pliku .csv","mute_export":"Eksport wyciszeń","hide_wallpaper":"Ukryj tło instancji","save":"Zapisz zmiany","setting_changed":"Opcja różni się od domyślnej","right_sidebar":"Pokaż pasek boczny po prawej","file_export_import":{"errors":{"invalid_file":"Wybrany plik nie jest obsługiwaną kopią zapasową ustawień Pleromy. Nie dokonano żadnych zmian."},"backup_restore":"Kopia zapasowa ustawień","backup_settings":"Kopia zapasowa ustawień do pliku","backup_settings_theme":"Kopia zapasowa ustawień i motywu do pliku","restore_settings":"Przywróć ustawienia z pliku"},"more_settings":"Więcej ustawień","word_filter":"Filtr słów","hide_media_previews":"Ukryj podgląd mediów","hide_all_muted_posts":"Ukryj wyciszone słowa","reply_visibility_following_short":"Pokazuj odpowiedzi obserwującym","reply_visibility_self_short":"Pokazuj odpowiedzi tylko do mnie","sensitive_by_default":"Domyślnie oznaczaj wpisy jako wrażliwe","hide_shoutbox":"Ukryj shoutbox instancji"},"time":{"day":"{0} dzień","days":"{0} dni","day_short":"{0} d","days_short":"{0} d","hour":"{0} godzina","hours":"{0} godzin","hour_short":"{0} godz.","hours_short":"{0} godz.","in_future":"za {0}","in_past":"{0} temu","minute":"{0} minuta","minutes":"{0} minut","minute_short":"{0} min","minutes_short":"{0} min","month":"{0} miesiąc","months":"{0} miesięcy","month_short":"{0} mies.","months_short":"{0} mies.","now":"teraz","now_short":"teraz","second":"{0} sekunda","seconds":"{0} sekund","second_short":"{0} s","seconds_short":"{0} s","week":"{0} tydzień","weeks":"{0} tygodni","week_short":"{0} tydz.","weeks_short":"{0} tyg.","year":"{0} rok","years":"{0} lata","year_short":"{0} r.","years_short":"{0} lata"},"timeline":{"collapse":"Zwiń","conversation":"Rozmowa","error_fetching":"Błąd pobierania","load_older":"Załaduj starsze statusy","no_retweet_hint":"Wpis oznaczony jako tylko dla obserwujących lub bezpośredni nie może zostać powtórzony","repeated":"powtórzył(-a)","show_new":"Pokaż nowe","up_to_date":"Na bieżąco","no_more_statuses":"Brak kolejnych statusów","no_statuses":"Brak statusów","reload":"Odśwież","error":"Błąd pobierania osi czasu: {0}","socket_broke":"Utracono połączenie w czasie rzeczywistym: kod CloseEvent {0}","socket_reconnected":"Osiągnięto połączenie w czasie rzeczywistym"},"status":{"favorites":"Ulubione","repeats":"Powtórzenia","delete":"Usuń status","pin":"Przypnij na profilu","unpin":"Odepnij z profilu","pinned":"Przypnięte","delete_confirm":"Czy naprawdę chcesz usunąć ten status?","reply_to":"Odpowiedź dla","replies_list":"Odpowiedzi:","mute_conversation":"Wycisz konwersację","unmute_conversation":"Odcisz konwersację","status_unavailable":"Status niedostępny","copy_link":"Kopiuj link do statusu","unbookmark":"Usuń z zakładek","bookmark":"Dodaj do zakładek","hide_content":"Ukryj zawartość","show_content":"Pokaż zawartość","hide_full_subject":"Ukryj cały temat","show_full_subject":"Pokaż cały temat","thread_muted_and_words":", ma słowa:","thread_muted":"Wątek wyciszony","status_deleted":"Ten wpis został usunięty","expand":"Rozwiń","nsfw":"NSFW","external_source":"Zewnętrzne źródło"},"user_card":{"approve":"Przyjmij","block":"Zablokuj","blocked":"Zablokowany!","deny":"Odrzuć","favorites":"Ulubione","follow":"Obserwuj","follow_sent":"Wysłano prośbę!","follow_progress":"Wysyłam prośbę…","follow_unfollow":"Przestań obserwować","followees":"Obserwowani","followers":"Obserwujący","following":"Obserwowany!","follows_you":"Obserwuje cię!","hidden":"Ukryte","its_you":"To ty!","media":"Media","mention":"Wspomnienie","mute":"Wycisz","muted":"Wyciszony(-a)","per_day":"dziennie","remote_follow":"Zdalna obserwacja","report":"Zgłoś","statuses":"Statusy","subscribe":"Subskrybuj","unsubscribe":"Odsubskrybuj","unblock":"Odblokuj","unblock_progress":"Odblokowuję…","block_progress":"Blokuję…","unmute":"Cofnij wyciszenie","unmute_progress":"Cofam wyciszenie…","mute_progress":"Wyciszam…","hide_repeats":"Ukryj powtórzenia","show_repeats":"Pokaż powtórzenia","admin_menu":{"moderation":"Moderacja","grant_admin":"Przyznaj admina","revoke_admin":"Odwołaj admina","grant_moderator":"Przyznaj moderatora","revoke_moderator":"Odwołaj moderatora","activate_account":"Aktywuj konto","deactivate_account":"Dezaktywuj konto","delete_account":"Usuń konto","force_nsfw":"Oznacz wszystkie posty jako NSFW","strip_media":"Usuń multimedia z postów","force_unlisted":"Wymuś posty na niepubliczne","sandbox":"Wymuś by posty były tylko dla obserwujących","disable_remote_subscription":"Zakaż obserwowania użytkownika ze zdalnych instancji","disable_any_subscription":"Zakaż całkowicie obserwowania użytkownika","quarantine":"Zakaż federowania postów od tego użytkownika","delete_user":"Usuń użytkownika","delete_user_confirmation":"Czy jesteś absolutnie pewny(-a)? Ta operacja nie może być cofnięta."},"message":"Napisz","edit_profile":"Edytuj profil","highlight":{"disabled":"Bez wyróżnienia"},"bot":"Bot"},"user_profile":{"timeline_title":"Oś czasu użytkownika","profile_does_not_exist":"Przepraszamy, ten profil nie istnieje.","profile_loading_error":"Przepraszamy, wystąpił błąd podczas ładowania tego profilu."},"user_reporting":{"title":"Raportowanie {0}","add_comment_description":"Zgłoszenie zostanie wysłane do moderatorów instancji. Możesz dodać powód dlaczego zgłaszasz owe konto poniżej:","additional_comments":"Dodatkowe komentarze","forward_description":"To konto jest z innego serwera. Wysłać również tam kopię zgłoszenia?","forward_to":"Przekaż do {0}","submit":"Wyślij","generic_error":"Wystąpił błąd podczas przetwarzania twojej prośby."},"who_to_follow":{"more":"Więcej","who_to_follow":"Propozycje obserwacji"},"tool_tip":{"media_upload":"Wyślij media","repeat":"Powtórz","reply":"Odpowiedz","favorite":"Dodaj do ulubionych","add_reaction":"Dodaj reakcję","user_settings":"Ustawienia użytkownika","accept_follow_request":"Akceptuj prośbę o możliwość obserwacji","reject_follow_request":"Odrzuć prośbę o możliwość obserwacji","bookmark":"Zakładka"},"upload":{"error":{"base":"Wysyłanie nie powiodło się.","file_too_big":"Zbyt duży plik [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]","default":"Spróbuj ponownie później","message":"Błąd wysyłania: {0}"},"file_size_units":{"B":"B","KiB":"KiB","MiB":"MiB","GiB":"GiB","TiB":"TiB"}},"search":{"people":"Ludzie","hashtags":"Hasztagi","person_talking":"{count} osoba rozmawia o tym","people_talking":"{count} osób rozmawia o tym","no_results":"Brak wyników"},"password_reset":{"forgot_password":"Zapomniałeś(-aś) hasła?","password_reset":"Reset hasła","instruction":"Wprowadź swój adres email lub nazwę użytkownika. Wyślemy ci link z którym możesz zresetować hasło.","placeholder":"Twój email lub nazwa użytkownika","check_email":"Sprawdź pocztę, aby uzyskać link do zresetowania hasła.","return_home":"Wróć do strony głównej","too_many_requests":"Przekroczyłeś(-aś) limit prób, spróbuj ponownie później.","password_reset_disabled":"Resetowanie hasła jest wyłączone. Proszę skontaktuj się z administratorem tej instancji.","password_reset_required":"Musisz zresetować hasło, by się zalogować.","password_reset_required_but_mailer_is_disabled":"Musisz zresetować hasło, ale resetowanie hasła jest wyłączone. Proszę skontaktuj się z administratorem tej instancji."},"file_type":{"file":"Plik","image":"Zdjęcie","video":"Wideo","audio":"Audio"},"chats":{"more":"Więcej","delete":"Usuń","you":"Ty:","delete_confirm":"Czy na pewno chcesz usunąć tą wiadomość?","message_user":"Napisz do {nickname}","error_sending_message":"Coś poszło nie tak podczas wysyłania wiadomości.","error_loading_chat":"Coś poszło nie tak podczas ładowania czatu.","empty_message_error":"Nie można wysłać pustej wiadomości","new":"Nowy czat","empty_chat_list_placeholder":"Nie masz jeszcze żadnych czatów. Zacznij nowy czat!","chats":"Czaty"},"display_date":{"today":"Dzisiaj"},"shoutbox":{"title":"Shoutbox"},"errors":{"storage_unavailable":"Pleroma nie mogła uzyskać dostępu do pamięci masowej przeglądarki. Twój login lub lokalne ustawienia nie zostaną zapisane i możesz napotkać problemy. Spróbuj włączyć ciasteczka."}}')}}]); +//# sourceMappingURL=25.8185e4d775cea9fe47e1.js.map \ No newline at end of file diff --git a/priv/static/static/js/25.8185e4d775cea9fe47e1.js.map b/priv/static/static/js/25.8185e4d775cea9fe47e1.js.map new file mode 100644 index 000000000..d559ea56b --- /dev/null +++ b/priv/static/static/js/25.8185e4d775cea9fe47e1.js.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/25.8185e4d775cea9fe47e1.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/26.bd86a0d958de2bb3905a.js b/priv/static/static/js/26.34ec129dd8f860ce4a8e.js similarity index 73% rename from priv/static/static/js/26.bd86a0d958de2bb3905a.js rename to priv/static/static/js/26.34ec129dd8f860ce4a8e.js index 64c5db6ed..797021577 100644 --- a/priv/static/static/js/26.bd86a0d958de2bb3905a.js +++ b/priv/static/static/js/26.34ec129dd8f860ce4a8e.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[26],{606:function(e){e.exports=JSON.parse('{"chat":{"title":"Chat"},"features_panel":{"chat":"Chat","gopher":"Gopher","media_proxy":"Proxy de multimédia","scope_options":"Opções de privacidade","text_limit":"Limite de caracteres","title":"Características","who_to_follow":"Quem seguir","upload_limit":"Limite de carregamento","pleroma_chat_messages":"Chat do Pleroma"},"finder":{"error_fetching_user":"Erro ao pesquisar utilizador","find_user":"Pesquisar utilizador"},"general":{"apply":"Aplicar","submit":"Enviar","more":"Mais","generic_error":"Ocorreu um erro","optional":"opcional","peek":"Espreitar","close":"Fechar","verify":"Verificar","confirm":"Confirmar","enable":"Ativar","disable":"Desativar","cancel":"Cancelar","show_less":"Mostrar menos","show_more":"Mostrar mais","retry":"Tenta novamente","error_retry":"Por favor, tenta novamente","loading":"A carregar…","dismiss":"Ignorar","role":{"moderator":"Moderador","admin":"Admin"}},"image_cropper":{"crop_picture":"Cortar imagem","save":"Guardar","cancel":"Cancelar","save_without_cropping":"Guardar sem recortar"},"login":{"login":"Iniciar Sessão","description":"Iniciar sessão com OAuth","logout":"Terminar sessão","password":"Palavra-passe","placeholder":"ex. lain","register":"Registar","username":"Nome de Utilizador","hint":"Entra para participar na discussão","heading":{"totp":"Autenticação de dois fatores","recovery":"Recuperação de dois fatores"},"recovery_code":"Código de recuperação","authentication_code":"Código de autenticação","enter_two_factor_code":"Introduza o código de dois fatores","enter_recovery_code":"Introduza um código de recuperação"},"media_modal":{"previous":"Anterior","next":"Próximo"},"nav":{"about":"Sobre","back":"Voltar","chat":"Chat local","friend_requests":"Pedidos de seguidores","mentions":"Menções","dms":"Mensagens Diretas","public_tl":"Cronologia Pública","timeline":"Cronologia","twkn":"Rede conhecida","user_search":"Pesquisa por Utilizadores","who_to_follow":"Quem seguir","preferences":"Preferências","search":"Pesquisar","interactions":"Interações","administration":"Administração","chats":"Salas de Chat","timelines":"Cronologias","bookmarks":"Itens Guardados"},"notifications":{"broken_favorite":"Publicação desconhecida, a procurar…","favorited_you":"gostou do teu post","followed_you":"seguiu-te","load_older":"Carregar notificações antigas","notifications":"Notificações","read":"Lido!","repeated_you":"partilhou o teu post","no_more_notifications":"Sem mais notificações","reacted_with":"reagiu com {0}","migrated_to":"migrou para","follow_request":"quer seguir-te","error":"Erro ao obter notificações: {0}"},"post_status":{"new_status":"Publicar nova publicação","account_not_locked_warning":"A sua conta não é {0}. Qualquer pessoa pode seguir-te e ver os seus posts privados (só para seguidores).","account_not_locked_warning_link":"restrito","attachments_sensitive":"Marcar anexos como sensíveis","content_type":{"text/plain":"Texto puro","text/bbcode":"BBCode","text/html":"HTML","text/markdown":"Remarcação"},"content_warning":"Assunto (opcional)","default":"Acabei de chegar a Lisboa.","direct_warning":"Este post será visível apenas para os usuários mencionados.","posting":"A publicar","scope":{"direct":"Direto - Enviar somente aos usuários mencionados","private":"Apenas para seguidores - Enviar apenas para seguidores","public":"Público - Publicar em cronologias públicas","unlisted":"Não listado - Não exibir em cronologias públicas"},"scope_notice":{"unlisted":"Esta publicação não será visível na Cronologia pública e na Rede conhecida por todos","private":"Esta publicação será apenas visível para os teus seguidores","public":"Esta publicação será visível para todos"},"empty_status_error":"Não consegues publicar um post vazio e sem ficheiros","preview_empty":"Vazio","preview":"Pré-visualização","media_description":"Descrição da multimédia","media_description_error":"Falha ao atualizar ficheiro, tente novamente","direct_warning_to_first_only":"Esta publicação só será visível para os utilizadores mencionados no início da mensagem.","direct_warning_to_all":"Esta publicação será visível para todos os utilizadores mencionados."},"registration":{"bio":"Biografia","email":"Endereço de e-mail","fullname":"Nome para exibição","password_confirm":"Confirmação de palavra-passe","registration":"Registo","token":"Código do convite","captcha":"CAPTCHA","new_captcha":"Clique na imagem para carregar um novo captcha","username_placeholder":"ex. lain","fullname_placeholder":"ex. Lain Iwakura","bio_placeholder":"ex.\\nOlá, sou a Lain\\nSou uma menina de anime que vive no Japão suburbano. Devem conhecer-me do \\"the Wired\\".","validations":{"username_required":"não pode ser deixado em branco","fullname_required":"não pode ser deixado em branco","email_required":"não pode ser deixado em branco","password_required":"não pode ser deixado em branco","password_confirmation_required":"não pode ser deixado em branco","password_confirmation_match":"deve corresponder à palavra-passe"}},"settings":{"app_name":"Nome da aplicação","attachmentRadius":"Anexos","attachments":"Anexos","avatar":"Avatar","avatarAltRadius":"Avatares (Notificações)","avatarRadius":"Avatares","background":"Imagem de Fundo","bio":"Biografia","blocks_tab":"Bloqueios","btnRadius":"Botões","cBlue":"Azul (Responder, seguir)","cGreen":"Verde (Partilhar)","cOrange":"Laranja (Favoritar)","cRed":"Vermelho (Cancelar)","change_password":"Mudar palavra-passe","change_password_error":"Ocorreu um erro ao modificar a sua palavra-passe.","changed_password":"Palavra-passe modificada com sucesso!","collapse_subject":"Esconder posts com assunto","composing":"Escrita","confirm_new_password":"Confirmar nova palavra-passe","current_avatar":"Seu avatar atual","current_password":"Palavra-passe atual","current_profile_banner":"Sua capa de perfil atual","data_import_export_tab":"Importação/exportação de dados","default_vis":"Opção de privacidade padrão","delete_account":"Eliminar conta","delete_account_description":"Apagar os seus dados permanentemente e desativar a sua conta.","delete_account_error":"Ocorreu um erro ao remover a sua conta. Se este persistir, por favor entre em contato com o/a administrador/a da instância.","delete_account_instructions":"Escreva a sua palavra-passe no campo abaixo para confirmar a remoção da conta.","avatar_size_instruction":"O tamanho mínimo recomendado para imagens de avatar é 150x150 pixels.","export_theme":"Guardar predefinições","filtering":"Filtragem","filtering_explanation":"Todas as publicações que contenham estas palavras serão silenciadas; uma palavra por linha","follow_export":"Exportar quem você segue","follow_export_button":"Exportar quem você segue para um arquivo CSV","follow_export_processing":"Processando. Em breve você receberá a solicitação de download do arquivo","follow_import":"Importar quem você segue","follow_import_error":"Erro ao importar seguidores","follows_imported":"Seguidores importados! O processamento pode demorar um pouco.","foreground":"Primeiro Plano","general":"Geral","hide_attachments_in_convo":"Ocultar anexos em conversas","hide_attachments_in_tl":"Ocultar anexos na cronologia","max_thumbnails":"Número máximo de miniaturas por post","hide_isp":"Esconder painel específico da instância","preload_images":"Pré-carregar imagens","use_one_click_nsfw":"Abrir anexos sensíveis com um clique","hide_post_stats":"Esconder estatísticas de posts (p. ex. número de favoritos)","hide_user_stats":"Esconder estatísticas do usuário (p. ex. número de seguidores)","hide_filtered_statuses":"Esconder posts filtrados","import_followers_from_a_csv_file":"Importe seguidores a partir de um arquivo CSV","import_theme":"Carregar pré-definição","inputRadius":"Campos de entrada","checkboxRadius":"Caixas de seleção","instance_default":"(padrão: {value})","instance_default_simple":"(padrão)","interface":"Interface","interfaceLanguage":"Idioma da interface","invalid_theme_imported":"O arquivo selecionado não é um tema compatível com o Pleroma. Nenhuma mudança no tema foi feita.","limited_availability":"Indisponível para seu navegador","links":"Links","lock_account_description":"Restringir sua conta a seguidores aprovados","loop_video":"Repetir vídeos","loop_video_silent_only":"Repetir apenas vídeos sem som (como os \\"gifs\\" do Mastodon)","mutes_tab":"Silenciados","play_videos_in_modal":"Reproduzir vídeos diretamente no visualizador de multimédia","use_contain_fit":"Não cortar o anexo na miniatura","name":"Nome","name_bio":"Nome & Biografia","new_password":"Nova palavra-passe","notification_visibility":"Tipos de notificação para mostrar","notification_visibility_follows":"Seguidas","notification_visibility_likes":"Favoritos","notification_visibility_mentions":"Menções","notification_visibility_repeats":"Partilhas","no_rich_text_description":"Remover formatação de todos os posts","no_blocks":"Sem bloqueios","no_mutes":"Sem silenciados","hide_follows_description":"Não mostrar quem estou seguindo","hide_followers_description":"Não mostrar quem me segue","show_admin_badge":"Mostrar título de Administrador em meu perfil","show_moderator_badge":"Mostrar título de Moderador em meu perfil","nsfw_clickthrough":"Ativar clique em anexos e pré-visualizações de links para ocultar anexos NSFW","oauth_tokens":"Token OAuth","token":"Token","refresh_token":"Atualizar Token","valid_until":"Válido até","revoke_token":"Revogar","panelRadius":"Paineis","pause_on_unfocused":"Parar transmissão quando a aba não estiver em primeiro plano","presets":"Predefinições","profile_background":"Pano de fundo de perfil","profile_banner":"Capa de perfil","profile_tab":"Perfil","radii_help":"Arredondar arestas da interface (em pixel)","replies_in_timeline":"Respostas na cronologia","reply_visibility_all":"Mostrar todas as respostas","reply_visibility_following":"Só mostrar respostas direcionadas a mim ou a usuários que sigo","reply_visibility_self":"Só mostrar respostas direcionadas a mim","saving_err":"Erro ao salvar configurações","saving_ok":"Configurações salvas","security_tab":"Segurança","scope_copy":"Copiar opções de privacidade ao responder (Mensagens diretas sempre copiam)","set_new_avatar":"Alterar avatar","set_new_profile_background":"Alterar o pano de fundo de perfil","set_new_profile_banner":"Alterar capa de perfil","settings":"Configurações","subject_input_always_show":"Sempre mostrar campo de assunto","subject_line_behavior":"Copiar assunto ao responder","subject_line_email":"Como num e-mail: \\"re: assunto\\"","subject_line_mastodon":"Como o Mastodon: copiar como está","subject_line_noop":"Não copiar","post_status_content_type":"Tipo de conteúdo do status","stop_gifs":"Reproduzir GIFs ao passar o cursor","streaming":"Habilitar o fluxo automático de postagens no topo da página","text":"Texto","theme":"Tema","theme_help":"Use cores em código hexadecimal (#rrggbb) para personalizar seu esquema de cores.","theme_help_v2_1":"Você também pode sobrescrever as cores e opacidade de alguns componentes ao modificar o checkbox, use \\"Limpar todos\\" para limpar todas as modificações.","theme_help_v2_2":"Alguns ícones em registo são indicadores de fundo/contraste de textos, passe por cima para obter informações detalhadas. Tenha em atenção que os indicadores de contraste não funcionam muito bem com transparência.","tooltipRadius":"Dicas/alertas","upload_a_photo":"Enviar uma foto","user_settings":"Configurações de Usuário","values":{"false":"não","true":"sim"},"notifications":"Notificações","enable_web_push_notifications":"Habilitar notificações web push","style":{"switcher":{"keep_color":"Manter cores","keep_shadows":"Manter sombras","keep_opacity":"Manter opacidade","keep_roundness":"Manter arredondado","keep_fonts":"Manter fontes","save_load_hint":"Manter as opções preserva as opções atuais ao selecionar ou carregar temas; também salva as opções ao exportar um tempo. Quanto todos os campos estiverem desmarcados, tudo será salvo ao exportar o tema.","reset":"Restaurar o padrão","clear_all":"Limpar tudo","clear_opacity":"Limpar opacidade","help":{"upgraded_from_v2":"O PleromaFE foi atualizado, a aparência do tema poderá ser um pouco diferente.","snapshot_source_mismatch":"Conflito de versões: o mais provável é que o FE tenha revertido e voltado a atualizar, foi alterado o tema numa versão anterior do FE, o mais provável é desejar utilizar a versão anterior; caso contrário, utilize a nova versão.","migration_napshot_gone":"Por algum motivo, a pré-visualização estava em falta, algumas coisas poderão parecer diferentes do que se lembra.","migration_snapshot_ok":"Para estar seguro, foi carregada uma versão de pré-visualização do tema. Pode tentar carregar dados do tema.","fe_downgraded":"Versão do PleromaFE revertida.","fe_upgraded":"O criador de temas do PleromaFE foi atualizado depois da atualização da versão.","snapshot_missing":"Não existia nenhuma pré-visualização do tema no ficheiro, então pode parecer diferente do previsto originalmente.","snapshot_present":"Foi carregada uma pré-visualização do tema, todos os valores são substituídos. Caso contrário, pode carregar o tema completo.","older_version_imported":"O ficheiro que importaste foi criado numa versão antiga do FE.","future_version_imported":"O ficheiro que importaste foi criado para uma versão mais recente do FE.","v2_imported":"O ficheiro que importaste foi feito para uma versão antiga do FE. Tentamos maximizar a compatibilidade, porém, poderão existir incongruências."},"use_source":"Nova versão","use_snapshot":"Versão antiga","keep_as_is":"Manter como está","load_theme":"Carregar tema"},"common":{"color":"Cor","opacity":"Opacidade","contrast":{"hint":"A taxa de contraste é {ratio}, {level} {context}","level":{"aa":"padrão Nível AA (mínimo)","aaa":"padrão Nível AAA (recomendado)","bad":"nenhum padrão de acessibilidade"},"context":{"18pt":"para textos longos (18pt+)","text":"para texto"}}},"common_colors":{"_tab_label":"Comum","main":"Cores Comuns","foreground_hint":"Configurações mais detalhadas na aba\\"Avançado\\"","rgbo":"Ícones, acentuação, distintivos"},"advanced_colors":{"_tab_label":"Avançado","alert":"Fundo de alerta","alert_error":"Erro","badge":"Fundo do distintivo","badge_notification":"Notificação","panel_header":"Topo do painel","top_bar":"Barra do topo","borders":"Bordas","buttons":"Botões","inputs":"Caixas de entrada","faint_text":"Texto esmaecido","chat":{"border":"Borda","outgoing":"Enviadas","incoming":"Recebidas"},"tabs":"Abas","toggled":"Alternado","disabled":"Desativado","selectedMenu":"Elemento do menu seleccionado","selectedPost":"Publicação seleccionada","pressed":"Pressionado","highlight":"Elementos destacados","icons":"Ícones","poll":"Gráfico da sondagem","wallpaper":"Fundo de ecrã","underlay":"Sublinhado","popover":"Sugestões, menus, etiquetas","post":"Publicações/Bios","alert_neutral":"Neutro","alert_warning":"Precaução"},"radii":{"_tab_label":"Arredondado"},"shadows":{"_tab_label":"Luz e sombra","component":"Componente","override":"Sobrescrever","shadow_id":"Sombra #{value}","blur":"Borrado","spread":"Difusão","inset":"Inserção","hint":"Para as sombras você também pode usar --variável como valor de cor para utilizar variáveis do CSS3. Tenha em mente que configurar a opacidade não será possível neste caso.","filter_hint":{"always_drop_shadow":"Atenção, esta sombra sempre utiliza {0} quando compatível com o navegador.","drop_shadow_syntax":"{0} não é compatível com o parâmetro {1} e a palavra-chave {2}.","avatar_inset":"Tenha em mente que combinar as sombras de inserção e a não-inserção em avatares pode causar resultados inesperados em avatares transparentes.","spread_zero":"Sombras com difusão > 0 aparecerão como se fossem definidas como zero","inset_classic":"Sombras de inserção utilizarão {0}"},"components":{"panel":"Painel","panelHeader":"Topo do painel","topBar":"Barra do topo","avatar":"Avatar do usuário (na visualização do perfil)","avatarStatus":"Avatar do usuário (na exibição de posts)","popup":"Dicas e notificações","button":"Botão","buttonHover":"Botão (em cima)","buttonPressed":"Botão (pressionado)","buttonPressedHover":"Botão (pressionado+em cima)","input":"Campo de entrada"},"hintV3":"Para as sombras, também pode usar a notação {0} para usar outro espaço de cor."},"fonts":{"_tab_label":"Fontes","help":"Selecione as fontes dos elementos da interface. Para fonte \\"personalizada\\" você deve inserir o mesmo nome da fonte no sistema.","components":{"interface":"Interface","input":"Campo de entrada","post":"Postar texto","postCode":"Texto monoespaçado em post (formatação rica)"},"family":"Nome da fonte","size":"Tamanho (em px)","weight":"Peso","custom":"Personalizada"},"preview":{"header":"Pré-visualizar","content":"Conteúdo","error":"Erro de exemplo","button":"Botão","text":"Vários {0} e {1}","mono":"conteúdo","input":"Acabei de chegar a Lisboa.","faint_link":"manual útil","fine_print":"Leia nosso {0} para não aprender nada!","header_faint":"Isto está bem","checkbox":"Li os termos e condições","link":"um belo link"}},"mfa":{"scan":{"secret_code":"Chave","title":"Scan","desc":"Utilizando a sua aplicação de dois fatores, faça scan deste código QR ou insira a chave de texto:"},"authentication_methods":"Métodos de autenticação","recovery_codes":"Códigos de recuperação.","generate_new_recovery_codes":"Gerar novos códigos de recuperação","confirm_and_enable":"Confirmar e ativar a palavra-passe de utilização única","otp":"Palavra-passe de utilização única","verify":{"desc":"Para ativar a autenticação de dois fatores, introduza o código da sua aplicação de dois fatores:"},"recovery_codes_warning":"Anote os códigos ou armazene-os num lugar seguro - caso contrário, não os voltará a ver. Se perder acesso à sua aplicação de dois fatores e aos códigos de recuperação, a sua conta ficará bloqueada.","waiting_a_recovery_codes":"A receber códigos de recuperação…","warning_of_generate_new_codes":"Quando gera novos códigos de recuperação, os antigos deixam de funcionar.","title":"Autenticação de Dois Fatores","wait_pre_setup_otp":"pré-configuração de palavra-passe de utilização única","setup_otp":"Configurar palavra-passe de utilização única"},"security":"Segurança","mute_import_error":"Erro ao importar os silenciados","mute_import":"Importar silenciados","mute_export_button":"Exporta os silenciados para um ficheiro csv","mute_export":"Exportar silenciados","blocks_imported":"Lista de utilizadores bloqueados importada! O processo pode demorar alguns instantes.","block_import_error":"Erro ao importar a lista de utilizadores bloqueados","block_import":"Importar utilizadores bloqueados","block_export_button":"Exporta a tua lista de utilizadores bloqueados para um ficheiro csv","block_export":"Exportar utilizadores bloqueados","enter_current_password_to_confirm":"Introduza a sua palavra-passe atual para confirmar a sua identidade","mutes_and_blocks":"Silenciados e Bloqueados","chatMessageRadius":"Mensagem de texto","changed_email":"Endereço de e-mail modificado com sucesso!","change_email_error":"Ocorreu um erro ao modificar o seu endereço de e-mail.","change_email":"Mudar Endereço de E-mail","bot":"Esta uma conta robô","import_mutes_from_a_csv_file":"Importar silenciados de um ficheiro csv","mutes_imported":"Silenciados importados! Processá-los pode demorar alguns instantes.","allow_following_move":"Permitir seguimento automático quando a conta for migrada para outra instância","domain_mutes":"Domínios","discoverable":"Permitir a descoberta desta conta em resultados de busca e outros serviços","emoji_reactions_on_timeline":"Mostrar reações de emoji na timeline","hide_muted_posts":"Esconder posts de utilizadores silenciados","hide_follows_count_description":"Não mostrar o número de contas seguidas","hide_followers_count_description":"Não mostrar o número de seguidores","notification_visibility_emoji_reactions":"Reações","new_email":"Novo endereço de e-mail","profile_fields":{"value":"Conteúdo","add_field":"Adicionar campo","label":"Metadados do perfil","name":"Etiqueta"},"import_blocks_from_a_csv_file":"Importar bloqueados a partir de um arquivo CSV","hide_wallpaper":"Esconder papel de parede da instância","notification_setting_privacy":"Privacidade","notification_setting_filters":"Filtros","fun":"Divertido","user_mutes":"Utilizadores","type_domains_to_mute":"Pesquisar domínios para silenciar","useStreamingApiWarning":"(não recomendado, experimental, pode omitir publicações)","useStreamingApi":"Receber publicações e notificações em tempo real","minimal_scopes_mode":"Minimizar as opções de publicação","search_user_to_mute":"Pesquisar utilizadores que pretende silenciar","search_user_to_block":"Pesquisa quais utilizadores desejas bloquear","notification_setting_hide_notification_contents":"Ocultar o remetente e o conteúdo das notificações push","version":{"frontend_version":"Versão do Frontend","backend_version":"Versão do Backend","title":"Versão"},"notification_blocks":"Bloquear um utilizador previne todas as notificações, bem como as desativa.","notification_mutes":"Para deixar de receber notificações de um utilizador específico, silencia-o.","notification_setting_block_from_strangers":"Bloqueia as notificações de utilizadores que não segues","greentext":"Texto verde (meme arrows)","virtual_scrolling":"Otimizar a apresentação da cronologia","reset_background_confirm":"Tens a certeza que desejas redefinir o fundo?","reset_banner_confirm":"Tens a certeza que desejas redefinir a imagem do cabeçalho?","reset_avatar_confirm":"Tens a certeza que desejas redefinir o avatar?","reset_profile_banner":"Redefinir imagem do cabeçalho do perfil","reset_profile_background":"Redefinir fundo de perfil","reset_avatar":"Redefinir avatar","autohide_floating_post_button":"Automaticamente ocultar o botão \'Nova Publicação\' (telemóvel)","notification_visibility_moves":"Utilizador Migrado","accent":"Destaque","pad_emoji":"Preencher espaços ao adicionar emojis do seletor"},"timeline":{"collapse":"Esconder","conversation":"Conversa","error_fetching":"Erro ao buscar atualizações","load_older":"Carregar postagens antigas","no_retweet_hint":"Posts apenas para seguidores ou diretos não podem ser partilhados","repeated":"partilhado","show_new":"Mostrar novas","up_to_date":"Atualizado","no_more_statuses":"Sem mais posts","no_statuses":"Sem posts","reload":"Recarregar","error":"Erro a obter a cronologia: {0}"},"status":{"reply_to":"Responder a","replies_list":"Respostas:","unbookmark":"Remover post dos Items Guardados","expand":"Expandir","nsfw":"NSFW (Não apropriado para trabalho)","status_deleted":"Esta publicação foi apagada","hide_content":"Ocultar o conteúdo","show_content":"Mostrar o conteúdo","hide_full_subject":"Ocultar o assunto completo","show_full_subject":"Mostrar o assunto completo","thread_muted_and_words":", contém:","thread_muted":"Conversação silenciada","external_source":"Fonte externa","copy_link":"Copiar o link do post","status_unavailable":"Publicação indisponível","unmute_conversation":"Mostrar a conversação","mute_conversation":"Silenciar a conversação","delete_confirm":"Tens a certeza que desejas apagar a publicação?","bookmark":"Guardar","pin":"Fixar no perfil","pinned":"Afixado","unpin":"Desafixar do perfil","delete":"Eliminar publicação","repeats":"Partilhados","favorites":"Favoritos"},"user_card":{"approve":"Aprovar","block":"Bloquear","blocked":"Bloqueado!","deny":"Negar","favorites":"Favoritos","follow":"Seguir","follow_sent":"Pedido enviado!","follow_progress":"Enviando…","follow_again":"Enviar solicitação novamente?","follow_unfollow":"Deixar de seguir","followees":"Seguindo","followers":"Seguidores","following":"Seguindo!","follows_you":"Segue você!","its_you":"É você!","media":"Multimédia","mute":"Silenciar","muted":"Silenciado","per_day":"por dia","remote_follow":"Seguir remotamente","statuses":"Postagens","unblock":"Desbloquear","unblock_progress":"A desbloquear…","block_progress":"A bloquear…","unmute":"Retirar silêncio","unmute_progress":"A retirar silêncio…","mute_progress":"A silenciar…","admin_menu":{"delete_user_confirmation":"Tens a certeza? Esta ação não pode ser revertida.","delete_user":"Eliminar utilizador","quarantine":"Não permitir publicações de utilizadores de instâncias remotas","disable_any_subscription":"Não permitir que nenhum utilizador te siga","disable_remote_subscription":"Não permitir seguidores de instâncias remotas","sandbox":"Forçar publicações apenas para seguidores","force_unlisted":"Forçar publicações como não listadas","strip_media":"Eliminar ficheiros multimédia das publicações","force_nsfw":"Marcar todas as publicações como NSFW (não apropriado para o trabalho)","delete_account":"Eliminar Conta","deactivate_account":"Desativar conta","activate_account":"Ativar conta","revoke_moderator":"Revogar permissões de Moderador","grant_moderator":"Conceder permissões de Moderador","revoke_admin":"Revogar permissões de Admin","grant_admin":"Conceder permissões de Admin","moderation":"Moderação"},"show_repeats":"Mostrar partilhas","hide_repeats":"Ocultar partilhas","unsubscribe":"Retirar subscrição","subscribe":"Subscrever","report":"Denunciar","message":"Mensagem","mention":"Mencionar","hidden":"Ocultar"},"user_profile":{"timeline_title":"Cronologia do Utilizador","profile_does_not_exist":"Desculpe, este perfil não existe.","profile_loading_error":"Desculpe, houve um erro ao carregar este perfil."},"who_to_follow":{"more":"Mais","who_to_follow":"Quem seguir"},"tool_tip":{"media_upload":"Envio de multimédia","repeat":"Partilhar","reply":"Responder","favorite":"Favoritar","user_settings":"Configurações do usuário","bookmark":"Guardar","reject_follow_request":"Rejeitar o pedido de seguimento","accept_follow_request":"Aceitar o pedido de seguimento","add_reaction":"Adicionar Reação"},"upload":{"error":{"base":"Falha no envio.","file_too_big":"Arquivo grande demais [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]","default":"Tente novamente mais tarde","message":"Falha ao enviar: {0}"},"file_size_units":{"B":"B","KiB":"KiB","MiB":"MiB","GiB":"GiB","TiB":"TiB"}},"about":{"mrf":{"simple":{"quarantine":"Quarentena","reject":"Rejeitar","accept":"Aceitar","media_removal_desc":"Este domínio remove multimédia das publicações dos seguintes domínios:","media_removal":"Remoção de multimédia","ftl_removal_desc":"Este domínio remove os seguintes domínios da cronologia \\"Rede conhecida por todos\\":","quarantine_desc":"Este domínio apenas irá publicar nos seguintes domínios:","reject_desc":"Este domínio não aceitará mensagens dos seguintes domínios:","accept_desc":"Este domínio aceita apenas mensagens dos seguintes domínios:","simple_policies":"Políticas especificas do domínio","media_nsfw":"Forçar definição de multimédia como Sensível","ftl_removal":"Remoção da cronologia da \\"Rede conhecida por todos\\"","media_nsfw_desc":"Este domínio força a multimédia a ser marcada como sensível nos seguintes domínios:"},"keyword":{"replace":"Substituir","reject":"Rejeitar","is_replaced_by":"→","keyword_policies":"Política de Palavras-Chave","ftl_removal":"Remoção da cronologia da \\"Rede conhecida por todos\\""},"federation":"Federação","mrf_policies":"Ativar Políticas MRF","mrf_policies_desc":"Políticas MRF manipulam o comportamento da federação nos domínios. As seguintes políticas estão ativadas:"},"staff":"Staff"},"remote_user_resolver":{"searching_for":"A pesquisar por","error":"Não encontrado.","remote_user_resolver":"Resolução de utilizador remoto"},"emoji":{"unicode":"Emoji Unicode","custom":"Emoji customizado","add_emoji":"Inserir emoji","search_emoji":"Pesquisar por um emoji","emoji":"Emoji","load_all":"A carregar todos os {emojiAmount} emojis","load_all_hint":"Carregado o primeiro emoji {saneAmount}, carregar todos os emojis pode causar problemas de desempenho.","keep_open":"Manter o seletor aberto","stickers":"Autocolantes"},"polls":{"single_choice":"Escolha única","vote":"Vota","votes":"votos","option":"Opção","add_option":"Adicionar Opção","not_enough_options":"Demasiado poucas opções únicas na sondagem","expired":"A sondagem terminou há {0}","expires_in":"A sondagem termina em {0}","expiry":"Tempo para finalizar sondagem","multiple_choices":"Escolha múltipla","type":"Tipo de sondagem","add_poll":"Adicionar Sondagem"},"importer":{"error":"Ocorreu um erro ao importar este ficheiro.","success":"Importado com sucesso.","submit":"Enviar"},"exporter":{"processing":"A processar, brevemente ser-te-á pedido que descarregues o ficheiro","export":"Exportar"},"domain_mute_card":{"mute_progress":"A silenciar…","mute":"Silenciar","unmute":"Remover silêncio","unmute_progress":"A remover o silêncio…"},"selectable_list":{"select_all":"Seleccionar tudo"},"interactions":{"load_older":"Carregar interações mais antigas","follows":"Novos seguidores","favs_repeats":"Gostos e Partilhas","moves":"O utilizador migra"},"errors":{"storage_unavailable":"O Pleroma não conseguiu aceder ao armazenamento do navegador. A sua sessão ou definições locais não serão armazenadas e poderá encontrar problemas inesperados. Tente ativar as cookies."},"shoutbox":{"title":"Chat Geral"},"chats":{"chats":"Chats","empty_chat_list_placeholder":"Não tens conversações ainda. Inicia uma nova conversa!","error_sending_message":"Ocorreu algo de errado ao enviar a mensagem.","error_loading_chat":"Ocorreu algo de errado ao carregar o chat.","delete_confirm":"Desejas realmente apagar esta mensagem?","more":"Mais","empty_message_error":"Não podes publicar uma mensagem vazia","new":"Nova conversação","delete":"Apagar","message_user":"Mensagem de {nickname}","you":"Tu:"},"search":{"hashtags":"Hashtags","no_results":"Sem resultados","person_talking":"{count} pessoa a falar","people_talking":"{0} pessoas a falar","people":"Pessoas"},"display_date":{"today":"Hoje"},"file_type":{"file":"Ficheiro","image":"Imagem","video":"Vídeo","audio":"Áudio"},"password_reset":{"password_reset_required_but_mailer_is_disabled":"Deves repor a tua palavra-passe, porém, a reposição de palavra-passe está desativada. Contacta o administrador da tua instância.","password_reset_required":"Deves repor a tua palavra-passe para iniciar sessão.","password_reset_disabled":"A reposição da palavra-passe foi desativada. Contacta o administrador da tua instância.","too_many_requests":"Alcançaste o limite de tentativas, tenta novamente mais tarde.","return_home":"Voltar à página principal","check_email":"Verifica o teu endereço de e-mail para obter um link para repor a tua palavra-passe.","placeholder":"O teu endereço de e-mail ou nome de utilizador","instruction":"Introduz o teu endereço de e-mail ou nome de utilizador. Enviaremos um link para repores a tua palavra-passe.","password_reset":"Repor palavra-passe","forgot_password":"Esqueceu-se da palavra-passe?"},"user_reporting":{"generic_error":"Ocorreu um erro ao processar o teu pedido.","submit":"Enviar","forward_to":"Encaminhar para {0}","forward_description":"A conta é de outro servidor. Enviar também uma cópia da denúncia à outra instância?","additional_comments":"Comentários adicionais","add_comment_description":"Esta denúncia será enviada aos moderadores desta instância. Podes fornecer uma explicação pela qual te encontras a denunciar esta conta abaixo:","title":"Denunciar {0}"},"time":{"years_short":"{0}a","year_short":"{0}a","years":"{0} anos","year":"{0} ano","weeks_short":"{0}sem","week_short":"{0}sem","weeks":"{0} semanas","week":"{0} semana","seconds_short":"{0}s","second_short":"{0}s","seconds":"{0} segundos","second":"{0} segundo","now":"agora mesmo","now_short":"agora","months_short":"{0}m","month_short":"{0}m","months":"{0} meses","month":"{0} mês","minutes_short":"{0}min","minute_short":"{0}min","minutes":"{0} minutos","minute":"{0} minuto","in_past":"há {0}","in_future":"em {0}","hours_short":"{0}h","hour_short":"{0}h","hours":"{0} horas","hour":"{0} hora","days_short":"{0}d","day_short":"{0}d","days":"{0} dias","day":"{0} dia"}}')}}]); -//# sourceMappingURL=26.bd86a0d958de2bb3905a.js.map \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[26],{619:function(e){e.exports=JSON.parse('{"chat":{"title":"Chat"},"features_panel":{"chat":"Chat","gopher":"Gopher","media_proxy":"Proxy de multimédia","scope_options":"Opções de privacidade","text_limit":"Limite de caracteres","title":"Características","who_to_follow":"Quem seguir","upload_limit":"Limite de carregamento","pleroma_chat_messages":"Chat do Pleroma"},"finder":{"error_fetching_user":"Erro ao pesquisar utilizador","find_user":"Pesquisar utilizador"},"general":{"apply":"Aplicar","submit":"Enviar","more":"Mais","generic_error":"Ocorreu um erro","optional":"opcional","peek":"Espreitar","close":"Fechar","verify":"Verificar","confirm":"Confirmar","enable":"Ativar","disable":"Desativar","cancel":"Cancelar","show_less":"Mostrar menos","show_more":"Mostrar mais","retry":"Tenta novamente","error_retry":"Por favor, tenta novamente","loading":"A carregar…","dismiss":"Ignorar","role":{"moderator":"Moderador","admin":"Admin"}},"image_cropper":{"crop_picture":"Cortar imagem","save":"Guardar","cancel":"Cancelar","save_without_cropping":"Guardar sem recortar"},"login":{"login":"Iniciar Sessão","description":"Iniciar sessão com OAuth","logout":"Terminar sessão","password":"Palavra-passe","placeholder":"ex. lain","register":"Registar","username":"Nome de Utilizador","hint":"Entra para participar na discussão","heading":{"totp":"Autenticação de dois fatores","recovery":"Recuperação de dois fatores"},"recovery_code":"Código de recuperação","authentication_code":"Código de autenticação","enter_two_factor_code":"Introduza o código de dois fatores","enter_recovery_code":"Introduza um código de recuperação"},"media_modal":{"previous":"Anterior","next":"Próximo"},"nav":{"about":"Sobre","back":"Voltar","chat":"Chat local","friend_requests":"Pedidos de seguidores","mentions":"Menções","dms":"Mensagens Diretas","public_tl":"Cronologia Pública","timeline":"Cronologia","twkn":"Rede conhecida","user_search":"Pesquisa por Utilizadores","who_to_follow":"Quem seguir","preferences":"Preferências","search":"Pesquisar","interactions":"Interações","administration":"Administração","chats":"Salas de Chat","timelines":"Cronologias","bookmarks":"Itens Guardados"},"notifications":{"broken_favorite":"Publicação desconhecida, a procurar…","favorited_you":"gostou do teu post","followed_you":"seguiu-te","load_older":"Carregar notificações antigas","notifications":"Notificações","read":"Lido!","repeated_you":"partilhou o teu post","no_more_notifications":"Sem mais notificações","reacted_with":"reagiu com {0}","migrated_to":"migrou para","follow_request":"quer seguir-te","error":"Erro ao obter notificações: {0}"},"post_status":{"new_status":"Publicar nova publicação","account_not_locked_warning":"A sua conta não é {0}. Qualquer pessoa pode seguir-te e ver os seus posts privados (só para seguidores).","account_not_locked_warning_link":"restrito","attachments_sensitive":"Marcar anexos como sensíveis","content_type":{"text/plain":"Texto puro","text/bbcode":"BBCode","text/html":"HTML","text/markdown":"Remarcação"},"content_warning":"Assunto (opcional)","default":"Acabei de chegar a Lisboa.","direct_warning":"Este post será visível apenas para os usuários mencionados.","posting":"A publicar","scope":{"direct":"Direto - Enviar somente aos usuários mencionados","private":"Apenas para seguidores - Enviar apenas para seguidores","public":"Público - Publicar em cronologias públicas","unlisted":"Não listado - Não exibir em cronologias públicas"},"scope_notice":{"unlisted":"Esta publicação não será visível na Cronologia pública e na Rede conhecida por todos","private":"Esta publicação será apenas visível para os teus seguidores","public":"Esta publicação será visível para todos"},"empty_status_error":"Não consegues publicar um post vazio e sem ficheiros","preview_empty":"Vazio","preview":"Pré-visualização","media_description":"Descrição da multimédia","media_description_error":"Falha ao atualizar ficheiro, tente novamente","direct_warning_to_first_only":"Esta publicação só será visível para os utilizadores mencionados no início da mensagem.","direct_warning_to_all":"Esta publicação será visível para todos os utilizadores mencionados."},"registration":{"bio":"Biografia","email":"Endereço de e-mail","fullname":"Nome para exibição","password_confirm":"Confirmação de palavra-passe","registration":"Registo","token":"Código do convite","captcha":"CAPTCHA","new_captcha":"Clique na imagem para carregar um novo captcha","username_placeholder":"ex. lain","fullname_placeholder":"ex. Lain Iwakura","bio_placeholder":"ex.\\nOlá, sou a Lain\\nSou uma menina de anime que vive no Japão suburbano. Devem conhecer-me do \\"the Wired\\".","validations":{"username_required":"não pode ser deixado em branco","fullname_required":"não pode ser deixado em branco","email_required":"não pode ser deixado em branco","password_required":"não pode ser deixado em branco","password_confirmation_required":"não pode ser deixado em branco","password_confirmation_match":"deve corresponder à palavra-passe"}},"settings":{"app_name":"Nome da aplicação","attachmentRadius":"Anexos","attachments":"Anexos","avatar":"Avatar","avatarAltRadius":"Avatares (Notificações)","avatarRadius":"Avatares","background":"Imagem de Fundo","bio":"Biografia","blocks_tab":"Bloqueios","btnRadius":"Botões","cBlue":"Azul (Responder, seguir)","cGreen":"Verde (Partilhar)","cOrange":"Laranja (Favoritar)","cRed":"Vermelho (Cancelar)","change_password":"Mudar palavra-passe","change_password_error":"Ocorreu um erro ao modificar a sua palavra-passe.","changed_password":"Palavra-passe modificada com sucesso!","collapse_subject":"Esconder posts com assunto","composing":"Escrita","confirm_new_password":"Confirmar nova palavra-passe","current_avatar":"Seu avatar atual","current_password":"Palavra-passe atual","current_profile_banner":"Sua capa de perfil atual","data_import_export_tab":"Importação/exportação de dados","default_vis":"Opção de privacidade padrão","delete_account":"Eliminar conta","delete_account_description":"Apagar os seus dados permanentemente e desativar a sua conta.","delete_account_error":"Ocorreu um erro ao remover a sua conta. Se este persistir, por favor entre em contato com o/a administrador/a da instância.","delete_account_instructions":"Escreva a sua palavra-passe no campo abaixo para confirmar a remoção da conta.","avatar_size_instruction":"O tamanho mínimo recomendado para imagens de avatar é 150x150 pixels.","export_theme":"Guardar predefinições","filtering":"Filtragem","filtering_explanation":"Todas as publicações que contenham estas palavras serão silenciadas; uma palavra por linha","follow_export":"Exportar quem você segue","follow_export_button":"Exportar quem você segue para um arquivo CSV","follow_export_processing":"Processando. Em breve você receberá a solicitação de download do arquivo","follow_import":"Importar quem você segue","follow_import_error":"Erro ao importar seguidores","follows_imported":"Seguidores importados! O processamento pode demorar um pouco.","foreground":"Primeiro Plano","general":"Geral","hide_attachments_in_convo":"Ocultar anexos em conversas","hide_attachments_in_tl":"Ocultar anexos na cronologia","max_thumbnails":"Número máximo de miniaturas por post","hide_isp":"Esconder painel específico da instância","preload_images":"Pré-carregar imagens","use_one_click_nsfw":"Abrir anexos sensíveis com um clique","hide_post_stats":"Esconder estatísticas de posts (p. ex. número de favoritos)","hide_user_stats":"Esconder estatísticas do usuário (p. ex. número de seguidores)","hide_filtered_statuses":"Esconder posts filtrados","import_followers_from_a_csv_file":"Importe seguidores a partir de um arquivo CSV","import_theme":"Carregar pré-definição","inputRadius":"Campos de entrada","checkboxRadius":"Caixas de seleção","instance_default":"(padrão: {value})","instance_default_simple":"(padrão)","interface":"Interface","interfaceLanguage":"Idioma da interface","invalid_theme_imported":"O arquivo selecionado não é um tema compatível com o Pleroma. Nenhuma mudança no tema foi feita.","limited_availability":"Indisponível para seu navegador","links":"Links","lock_account_description":"Restringir sua conta a seguidores aprovados","loop_video":"Repetir vídeos","loop_video_silent_only":"Repetir apenas vídeos sem som (como os \\"gifs\\" do Mastodon)","mutes_tab":"Silenciados","play_videos_in_modal":"Reproduzir vídeos diretamente no visualizador de multimédia","use_contain_fit":"Não cortar o anexo na miniatura","name":"Nome","name_bio":"Nome & Biografia","new_password":"Nova palavra-passe","notification_visibility":"Tipos de notificação para mostrar","notification_visibility_follows":"Seguidas","notification_visibility_likes":"Favoritos","notification_visibility_mentions":"Menções","notification_visibility_repeats":"Partilhas","no_rich_text_description":"Remover formatação de todos os posts","no_blocks":"Sem bloqueios","no_mutes":"Sem silenciados","hide_follows_description":"Não mostrar quem estou seguindo","hide_followers_description":"Não mostrar quem me segue","show_admin_badge":"Mostrar título de Administrador em meu perfil","show_moderator_badge":"Mostrar título de Moderador em meu perfil","nsfw_clickthrough":"Ativar clique em anexos e pré-visualizações de links para ocultar anexos NSFW","oauth_tokens":"Token OAuth","token":"Token","refresh_token":"Atualizar Token","valid_until":"Válido até","revoke_token":"Revogar","panelRadius":"Paineis","pause_on_unfocused":"Parar transmissão quando a aba não estiver em primeiro plano","presets":"Predefinições","profile_background":"Pano de fundo de perfil","profile_banner":"Capa de perfil","profile_tab":"Perfil","radii_help":"Arredondar arestas da interface (em pixel)","replies_in_timeline":"Respostas na cronologia","reply_visibility_all":"Mostrar todas as respostas","reply_visibility_following":"Só mostrar respostas direcionadas a mim ou a usuários que sigo","reply_visibility_self":"Só mostrar respostas direcionadas a mim","saving_err":"Erro ao salvar configurações","saving_ok":"Configurações salvas","security_tab":"Segurança","scope_copy":"Copiar opções de privacidade ao responder (Mensagens diretas sempre copiam)","set_new_avatar":"Alterar avatar","set_new_profile_background":"Alterar o pano de fundo de perfil","set_new_profile_banner":"Alterar capa de perfil","settings":"Configurações","subject_input_always_show":"Sempre mostrar campo de assunto","subject_line_behavior":"Copiar assunto ao responder","subject_line_email":"Como num e-mail: \\"re: assunto\\"","subject_line_mastodon":"Como o Mastodon: copiar como está","subject_line_noop":"Não copiar","post_status_content_type":"Tipo de conteúdo do status","stop_gifs":"Reproduzir GIFs ao passar o cursor","streaming":"Habilitar o fluxo automático de postagens no topo da página","text":"Texto","theme":"Tema","theme_help":"Use cores em código hexadecimal (#rrggbb) para personalizar seu esquema de cores.","theme_help_v2_1":"Você também pode sobrescrever as cores e opacidade de alguns componentes ao modificar o checkbox, use \\"Limpar todos\\" para limpar todas as modificações.","theme_help_v2_2":"Alguns ícones em registo são indicadores de fundo/contraste de textos, passe por cima para obter informações detalhadas. Tenha em atenção que os indicadores de contraste não funcionam muito bem com transparência.","tooltipRadius":"Dicas/alertas","upload_a_photo":"Enviar uma foto","user_settings":"Configurações de Usuário","values":{"false":"não","true":"sim"},"notifications":"Notificações","enable_web_push_notifications":"Habilitar notificações web push","style":{"switcher":{"keep_color":"Manter cores","keep_shadows":"Manter sombras","keep_opacity":"Manter opacidade","keep_roundness":"Manter arredondado","keep_fonts":"Manter fontes","save_load_hint":"Manter as opções preserva as opções atuais ao selecionar ou carregar temas; também salva as opções ao exportar um tempo. Quanto todos os campos estiverem desmarcados, tudo será salvo ao exportar o tema.","reset":"Restaurar o padrão","clear_all":"Limpar tudo","clear_opacity":"Limpar opacidade","help":{"upgraded_from_v2":"O PleromaFE foi atualizado, a aparência do tema poderá ser um pouco diferente.","snapshot_source_mismatch":"Conflito de versões: o mais provável é que o FE tenha revertido e voltado a atualizar, foi alterado o tema numa versão anterior do FE, o mais provável é desejar utilizar a versão anterior; caso contrário, utilize a nova versão.","migration_napshot_gone":"Por algum motivo, a pré-visualização estava em falta, algumas coisas poderão parecer diferentes do que se lembra.","migration_snapshot_ok":"Para estar seguro, foi carregada uma versão de pré-visualização do tema. Pode tentar carregar dados do tema.","fe_downgraded":"Versão do PleromaFE revertida.","fe_upgraded":"O criador de temas do PleromaFE foi atualizado depois da atualização da versão.","snapshot_missing":"Não existia nenhuma pré-visualização do tema no ficheiro, então pode parecer diferente do previsto originalmente.","snapshot_present":"Foi carregada uma pré-visualização do tema, todos os valores são substituídos. Caso contrário, pode carregar o tema completo.","older_version_imported":"O ficheiro que importaste foi criado numa versão antiga do FE.","future_version_imported":"O ficheiro que importaste foi criado para uma versão mais recente do FE.","v2_imported":"O ficheiro que importaste foi feito para uma versão antiga do FE. Tentamos maximizar a compatibilidade, porém, poderão existir incongruências."},"use_source":"Nova versão","use_snapshot":"Versão antiga","keep_as_is":"Manter como está","load_theme":"Carregar tema"},"common":{"color":"Cor","opacity":"Opacidade","contrast":{"hint":"A taxa de contraste é {ratio}, {level} {context}","level":{"aa":"padrão Nível AA (mínimo)","aaa":"padrão Nível AAA (recomendado)","bad":"nenhum padrão de acessibilidade"},"context":{"18pt":"para textos longos (18pt+)","text":"para texto"}}},"common_colors":{"_tab_label":"Comum","main":"Cores Comuns","foreground_hint":"Configurações mais detalhadas na aba\\"Avançado\\"","rgbo":"Ícones, acentuação, distintivos"},"advanced_colors":{"_tab_label":"Avançado","alert":"Fundo de alerta","alert_error":"Erro","badge":"Fundo do distintivo","badge_notification":"Notificação","panel_header":"Topo do painel","top_bar":"Barra do topo","borders":"Bordas","buttons":"Botões","inputs":"Caixas de entrada","faint_text":"Texto esmaecido","chat":{"border":"Borda","outgoing":"Enviadas","incoming":"Recebidas"},"tabs":"Abas","toggled":"Alternado","disabled":"Desativado","selectedMenu":"Elemento do menu seleccionado","selectedPost":"Publicação seleccionada","pressed":"Pressionado","highlight":"Elementos destacados","icons":"Ícones","poll":"Gráfico da sondagem","wallpaper":"Fundo de ecrã","underlay":"Sublinhado","popover":"Sugestões, menus, etiquetas","post":"Publicações/Bios","alert_neutral":"Neutro","alert_warning":"Precaução"},"radii":{"_tab_label":"Arredondado"},"shadows":{"_tab_label":"Luz e sombra","component":"Componente","override":"Sobrescrever","shadow_id":"Sombra #{value}","blur":"Borrado","spread":"Difusão","inset":"Inserção","hint":"Para as sombras você também pode usar --variável como valor de cor para utilizar variáveis do CSS3. Tenha em mente que configurar a opacidade não será possível neste caso.","filter_hint":{"always_drop_shadow":"Atenção, esta sombra sempre utiliza {0} quando compatível com o navegador.","drop_shadow_syntax":"{0} não é compatível com o parâmetro {1} e a palavra-chave {2}.","avatar_inset":"Tenha em mente que combinar as sombras de inserção e a não-inserção em avatares pode causar resultados inesperados em avatares transparentes.","spread_zero":"Sombras com difusão > 0 aparecerão como se fossem definidas como zero","inset_classic":"Sombras de inserção utilizarão {0}"},"components":{"panel":"Painel","panelHeader":"Topo do painel","topBar":"Barra do topo","avatar":"Avatar do usuário (na visualização do perfil)","avatarStatus":"Avatar do usuário (na exibição de posts)","popup":"Dicas e notificações","button":"Botão","buttonHover":"Botão (em cima)","buttonPressed":"Botão (pressionado)","buttonPressedHover":"Botão (pressionado+em cima)","input":"Campo de entrada"},"hintV3":"Para as sombras, também pode usar a notação {0} para usar outro espaço de cor."},"fonts":{"_tab_label":"Fontes","help":"Selecione as fontes dos elementos da interface. Para fonte \\"personalizada\\" você deve inserir o mesmo nome da fonte no sistema.","components":{"interface":"Interface","input":"Campo de entrada","post":"Postar texto","postCode":"Texto monoespaçado em post (formatação rica)"},"family":"Nome da fonte","size":"Tamanho (em px)","weight":"Peso","custom":"Personalizada"},"preview":{"header":"Pré-visualizar","content":"Conteúdo","error":"Erro de exemplo","button":"Botão","text":"Vários {0} e {1}","mono":"conteúdo","input":"Acabei de chegar a Lisboa.","faint_link":"manual útil","fine_print":"Leia nosso {0} para não aprender nada!","header_faint":"Isto está bem","checkbox":"Li os termos e condições","link":"um belo link"}},"mfa":{"scan":{"secret_code":"Chave","title":"Scan","desc":"Utilizando a sua aplicação de dois fatores, faça scan deste código QR ou insira a chave de texto:"},"authentication_methods":"Métodos de autenticação","recovery_codes":"Códigos de recuperação.","generate_new_recovery_codes":"Gerar novos códigos de recuperação","confirm_and_enable":"Confirmar e ativar a palavra-passe de utilização única","otp":"Palavra-passe de utilização única","verify":{"desc":"Para ativar a autenticação de dois fatores, introduza o código da sua aplicação de dois fatores:"},"recovery_codes_warning":"Anote os códigos ou armazene-os num lugar seguro - caso contrário, não os voltará a ver. Se perder acesso à sua aplicação de dois fatores e aos códigos de recuperação, a sua conta ficará bloqueada.","waiting_a_recovery_codes":"A receber códigos de recuperação…","warning_of_generate_new_codes":"Quando gera novos códigos de recuperação, os antigos deixam de funcionar.","title":"Autenticação de Dois Fatores","wait_pre_setup_otp":"pré-configuração de palavra-passe de utilização única","setup_otp":"Configurar palavra-passe de utilização única"},"security":"Segurança","mute_import_error":"Erro ao importar os silenciados","mute_import":"Importar silenciados","mute_export_button":"Exporta os silenciados para um ficheiro csv","mute_export":"Exportar silenciados","blocks_imported":"Lista de utilizadores bloqueados importada! O processo pode demorar alguns instantes.","block_import_error":"Erro ao importar a lista de utilizadores bloqueados","block_import":"Importar utilizadores bloqueados","block_export_button":"Exporta a tua lista de utilizadores bloqueados para um ficheiro csv","block_export":"Exportar utilizadores bloqueados","enter_current_password_to_confirm":"Introduza a sua palavra-passe atual para confirmar a sua identidade","mutes_and_blocks":"Silenciados e Bloqueados","chatMessageRadius":"Mensagem de texto","changed_email":"Endereço de e-mail modificado com sucesso!","change_email_error":"Ocorreu um erro ao modificar o seu endereço de e-mail.","change_email":"Mudar Endereço de E-mail","bot":"Esta uma conta robô","import_mutes_from_a_csv_file":"Importar silenciados de um ficheiro csv","mutes_imported":"Silenciados importados! Processá-los pode demorar alguns instantes.","allow_following_move":"Permitir seguimento automático quando a conta for migrada para outra instância","domain_mutes":"Domínios","discoverable":"Permitir a descoberta desta conta em resultados de busca e outros serviços","emoji_reactions_on_timeline":"Mostrar reações de emoji na timeline","hide_muted_posts":"Esconder posts de utilizadores silenciados","hide_follows_count_description":"Não mostrar o número de contas seguidas","hide_followers_count_description":"Não mostrar o número de seguidores","notification_visibility_emoji_reactions":"Reações","new_email":"Novo endereço de e-mail","profile_fields":{"value":"Conteúdo","add_field":"Adicionar campo","label":"Metadados do perfil","name":"Etiqueta"},"import_blocks_from_a_csv_file":"Importar bloqueados a partir de um arquivo CSV","hide_wallpaper":"Esconder papel de parede da instância","notification_setting_privacy":"Privacidade","notification_setting_filters":"Filtros","fun":"Divertido","user_mutes":"Utilizadores","type_domains_to_mute":"Pesquisar domínios para silenciar","useStreamingApiWarning":"(não recomendado, experimental, pode omitir publicações)","useStreamingApi":"Receber publicações e notificações em tempo real","minimal_scopes_mode":"Minimizar as opções de publicação","search_user_to_mute":"Pesquisar utilizadores que pretende silenciar","search_user_to_block":"Pesquisa quais utilizadores desejas bloquear","notification_setting_hide_notification_contents":"Ocultar o remetente e o conteúdo das notificações push","version":{"frontend_version":"Versão do Frontend","backend_version":"Versão do Backend","title":"Versão"},"notification_blocks":"Bloquear um utilizador previne todas as notificações, bem como as desativa.","notification_mutes":"Para deixar de receber notificações de um utilizador específico, silencia-o.","notification_setting_block_from_strangers":"Bloqueia as notificações de utilizadores que não segues","greentext":"Texto verde (meme arrows)","virtual_scrolling":"Otimizar a apresentação da cronologia","reset_background_confirm":"Tens a certeza que desejas redefinir o fundo?","reset_banner_confirm":"Tens a certeza que desejas redefinir a imagem do cabeçalho?","reset_avatar_confirm":"Tens a certeza que desejas redefinir o avatar?","reset_profile_banner":"Redefinir imagem do cabeçalho do perfil","reset_profile_background":"Redefinir fundo de perfil","reset_avatar":"Redefinir avatar","autohide_floating_post_button":"Automaticamente ocultar o botão \'Nova Publicação\' (telemóvel)","notification_visibility_moves":"Utilizador Migrado","accent":"Destaque","pad_emoji":"Preencher espaços ao adicionar emojis do seletor"},"timeline":{"collapse":"Esconder","conversation":"Conversa","error_fetching":"Erro ao buscar atualizações","load_older":"Carregar postagens antigas","no_retweet_hint":"Posts apenas para seguidores ou diretos não podem ser partilhados","repeated":"partilhado","show_new":"Mostrar novas","up_to_date":"Atualizado","no_more_statuses":"Sem mais posts","no_statuses":"Sem posts","reload":"Recarregar","error":"Erro a obter a cronologia: {0}"},"status":{"reply_to":"Responder a","replies_list":"Respostas:","unbookmark":"Remover post dos Items Guardados","expand":"Expandir","nsfw":"NSFW (Não apropriado para trabalho)","status_deleted":"Esta publicação foi apagada","hide_content":"Ocultar o conteúdo","show_content":"Mostrar o conteúdo","hide_full_subject":"Ocultar o assunto completo","show_full_subject":"Mostrar o assunto completo","thread_muted_and_words":", contém:","thread_muted":"Conversação silenciada","external_source":"Fonte externa","copy_link":"Copiar o link do post","status_unavailable":"Publicação indisponível","unmute_conversation":"Mostrar a conversação","mute_conversation":"Silenciar a conversação","delete_confirm":"Tens a certeza que desejas apagar a publicação?","bookmark":"Guardar","pin":"Fixar no perfil","pinned":"Afixado","unpin":"Desafixar do perfil","delete":"Eliminar publicação","repeats":"Partilhados","favorites":"Favoritos"},"user_card":{"approve":"Aprovar","block":"Bloquear","blocked":"Bloqueado!","deny":"Negar","favorites":"Favoritos","follow":"Seguir","follow_sent":"Pedido enviado!","follow_progress":"Enviando…","follow_unfollow":"Deixar de seguir","followees":"Seguindo","followers":"Seguidores","following":"Seguindo!","follows_you":"Segue você!","its_you":"É você!","media":"Multimédia","mute":"Silenciar","muted":"Silenciado","per_day":"por dia","remote_follow":"Seguir remotamente","statuses":"Postagens","unblock":"Desbloquear","unblock_progress":"A desbloquear…","block_progress":"A bloquear…","unmute":"Retirar silêncio","unmute_progress":"A retirar silêncio…","mute_progress":"A silenciar…","admin_menu":{"delete_user_confirmation":"Tens a certeza? Esta ação não pode ser revertida.","delete_user":"Eliminar utilizador","quarantine":"Não permitir publicações de utilizadores de instâncias remotas","disable_any_subscription":"Não permitir que nenhum utilizador te siga","disable_remote_subscription":"Não permitir seguidores de instâncias remotas","sandbox":"Forçar publicações apenas para seguidores","force_unlisted":"Forçar publicações como não listadas","strip_media":"Eliminar ficheiros multimédia das publicações","force_nsfw":"Marcar todas as publicações como NSFW (não apropriado para o trabalho)","delete_account":"Eliminar Conta","deactivate_account":"Desativar conta","activate_account":"Ativar conta","revoke_moderator":"Revogar permissões de Moderador","grant_moderator":"Conceder permissões de Moderador","revoke_admin":"Revogar permissões de Admin","grant_admin":"Conceder permissões de Admin","moderation":"Moderação"},"show_repeats":"Mostrar partilhas","hide_repeats":"Ocultar partilhas","unsubscribe":"Retirar subscrição","subscribe":"Subscrever","report":"Denunciar","message":"Mensagem","mention":"Mencionar","hidden":"Ocultar"},"user_profile":{"timeline_title":"Cronologia do Utilizador","profile_does_not_exist":"Desculpe, este perfil não existe.","profile_loading_error":"Desculpe, houve um erro ao carregar este perfil."},"who_to_follow":{"more":"Mais","who_to_follow":"Quem seguir"},"tool_tip":{"media_upload":"Envio de multimédia","repeat":"Partilhar","reply":"Responder","favorite":"Favoritar","user_settings":"Configurações do usuário","bookmark":"Guardar","reject_follow_request":"Rejeitar o pedido de seguimento","accept_follow_request":"Aceitar o pedido de seguimento","add_reaction":"Adicionar Reação"},"upload":{"error":{"base":"Falha no envio.","file_too_big":"Arquivo grande demais [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]","default":"Tente novamente mais tarde","message":"Falha ao enviar: {0}"},"file_size_units":{"B":"B","KiB":"KiB","MiB":"MiB","GiB":"GiB","TiB":"TiB"}},"about":{"mrf":{"simple":{"quarantine":"Quarentena","reject":"Rejeitar","accept":"Aceitar","media_removal_desc":"Este domínio remove multimédia das publicações dos seguintes domínios:","media_removal":"Remoção de multimédia","ftl_removal_desc":"Este domínio remove os seguintes domínios da cronologia \\"Rede conhecida por todos\\":","quarantine_desc":"Este domínio apenas irá publicar nos seguintes domínios:","reject_desc":"Este domínio não aceitará mensagens dos seguintes domínios:","accept_desc":"Este domínio aceita apenas mensagens dos seguintes domínios:","simple_policies":"Políticas especificas do domínio","media_nsfw":"Forçar definição de multimédia como Sensível","ftl_removal":"Remoção da cronologia da \\"Rede conhecida por todos\\"","media_nsfw_desc":"Este domínio força a multimédia a ser marcada como sensível nos seguintes domínios:"},"keyword":{"replace":"Substituir","reject":"Rejeitar","is_replaced_by":"→","keyword_policies":"Política de Palavras-Chave","ftl_removal":"Remoção da cronologia da \\"Rede conhecida por todos\\""},"federation":"Federação","mrf_policies":"Ativar Políticas MRF","mrf_policies_desc":"Políticas MRF manipulam o comportamento da federação nos domínios. As seguintes políticas estão ativadas:"},"staff":"Staff"},"remote_user_resolver":{"searching_for":"A pesquisar por","error":"Não encontrado.","remote_user_resolver":"Resolução de utilizador remoto"},"emoji":{"unicode":"Emoji Unicode","custom":"Emoji customizado","add_emoji":"Inserir emoji","search_emoji":"Pesquisar por um emoji","emoji":"Emoji","load_all":"A carregar todos os {emojiAmount} emojis","load_all_hint":"Carregado o primeiro emoji {saneAmount}, carregar todos os emojis pode causar problemas de desempenho.","keep_open":"Manter o seletor aberto","stickers":"Autocolantes"},"polls":{"single_choice":"Escolha única","vote":"Vota","votes":"votos","option":"Opção","add_option":"Adicionar Opção","not_enough_options":"Demasiado poucas opções únicas na sondagem","expired":"A sondagem terminou há {0}","expires_in":"A sondagem termina em {0}","expiry":"Tempo para finalizar sondagem","multiple_choices":"Escolha múltipla","type":"Tipo de sondagem","add_poll":"Adicionar Sondagem"},"importer":{"error":"Ocorreu um erro ao importar este ficheiro.","success":"Importado com sucesso.","submit":"Enviar"},"exporter":{"processing":"A processar, brevemente ser-te-á pedido que descarregues o ficheiro","export":"Exportar"},"domain_mute_card":{"mute_progress":"A silenciar…","mute":"Silenciar","unmute":"Remover silêncio","unmute_progress":"A remover o silêncio…"},"selectable_list":{"select_all":"Seleccionar tudo"},"interactions":{"load_older":"Carregar interações mais antigas","follows":"Novos seguidores","favs_repeats":"Gostos e Partilhas","moves":"O utilizador migra"},"errors":{"storage_unavailable":"O Pleroma não conseguiu aceder ao armazenamento do navegador. A sua sessão ou definições locais não serão armazenadas e poderá encontrar problemas inesperados. Tente ativar as cookies."},"shoutbox":{"title":"Chat Geral"},"chats":{"chats":"Chats","empty_chat_list_placeholder":"Não tens conversações ainda. Inicia uma nova conversa!","error_sending_message":"Ocorreu algo de errado ao enviar a mensagem.","error_loading_chat":"Ocorreu algo de errado ao carregar o chat.","delete_confirm":"Desejas realmente apagar esta mensagem?","more":"Mais","empty_message_error":"Não podes publicar uma mensagem vazia","new":"Nova conversação","delete":"Apagar","message_user":"Mensagem de {nickname}","you":"Tu:"},"search":{"hashtags":"Hashtags","no_results":"Sem resultados","person_talking":"{count} pessoa a falar","people_talking":"{0} pessoas a falar","people":"Pessoas"},"display_date":{"today":"Hoje"},"file_type":{"file":"Ficheiro","image":"Imagem","video":"Vídeo","audio":"Áudio"},"password_reset":{"password_reset_required_but_mailer_is_disabled":"Deves repor a tua palavra-passe, porém, a reposição de palavra-passe está desativada. Contacta o administrador da tua instância.","password_reset_required":"Deves repor a tua palavra-passe para iniciar sessão.","password_reset_disabled":"A reposição da palavra-passe foi desativada. Contacta o administrador da tua instância.","too_many_requests":"Alcançaste o limite de tentativas, tenta novamente mais tarde.","return_home":"Voltar à página principal","check_email":"Verifica o teu endereço de e-mail para obter um link para repor a tua palavra-passe.","placeholder":"O teu endereço de e-mail ou nome de utilizador","instruction":"Introduz o teu endereço de e-mail ou nome de utilizador. Enviaremos um link para repores a tua palavra-passe.","password_reset":"Repor palavra-passe","forgot_password":"Esqueceu-se da palavra-passe?"},"user_reporting":{"generic_error":"Ocorreu um erro ao processar o teu pedido.","submit":"Enviar","forward_to":"Encaminhar para {0}","forward_description":"A conta é de outro servidor. Enviar também uma cópia da denúncia à outra instância?","additional_comments":"Comentários adicionais","add_comment_description":"Esta denúncia será enviada aos moderadores desta instância. Podes fornecer uma explicação pela qual te encontras a denunciar esta conta abaixo:","title":"Denunciar {0}"},"time":{"years_short":"{0}a","year_short":"{0}a","years":"{0} anos","year":"{0} ano","weeks_short":"{0}sem","week_short":"{0}sem","weeks":"{0} semanas","week":"{0} semana","seconds_short":"{0}s","second_short":"{0}s","seconds":"{0} segundos","second":"{0} segundo","now":"agora mesmo","now_short":"agora","months_short":"{0}m","month_short":"{0}m","months":"{0} meses","month":"{0} mês","minutes_short":"{0}min","minute_short":"{0}min","minutes":"{0} minutos","minute":"{0} minuto","in_past":"há {0}","in_future":"em {0}","hours_short":"{0}h","hour_short":"{0}h","hours":"{0} horas","hour":"{0} hora","days_short":"{0}d","day_short":"{0}d","days":"{0} dias","day":"{0} dia"}}')}}]); +//# sourceMappingURL=26.34ec129dd8f860ce4a8e.js.map \ No newline at end of file diff --git a/priv/static/static/js/26.34ec129dd8f860ce4a8e.js.map b/priv/static/static/js/26.34ec129dd8f860ce4a8e.js.map new file mode 100644 index 000000000..abff4e927 --- /dev/null +++ b/priv/static/static/js/26.34ec129dd8f860ce4a8e.js.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/26.34ec129dd8f860ce4a8e.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/26.bd86a0d958de2bb3905a.js.map b/priv/static/static/js/26.bd86a0d958de2bb3905a.js.map deleted file mode 100644 index a2e972c31..000000000 --- a/priv/static/static/js/26.bd86a0d958de2bb3905a.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/26.bd86a0d958de2bb3905a.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/27.7d4ab8716762d6f57135.js b/priv/static/static/js/27.0f4a5145681cfb5a896e.js similarity index 94% rename from priv/static/static/js/27.7d4ab8716762d6f57135.js rename to priv/static/static/js/27.0f4a5145681cfb5a896e.js index 95a37be1f..5df92f6ad 100644 --- a/priv/static/static/js/27.7d4ab8716762d6f57135.js +++ b/priv/static/static/js/27.0f4a5145681cfb5a896e.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[27],{607:function(e){e.exports=JSON.parse('{"finder":{"error_fetching_user":"Eroare la preluarea utilizatorului","find_user":"Găsește utilizator"},"general":{"submit":"trimite"},"login":{"login":"Loghează","logout":"Deloghează","password":"Parolă","placeholder":"d.e. lain","register":"Înregistrare","username":"Nume utilizator"},"nav":{"mentions":"Menționări","public_tl":"Cronologie Publică","timeline":"Cronologie","twkn":"Toată Reșeaua Cunoscută"},"notifications":{"followed_you":"te-a urmărit","notifications":"Notificări","read":"Citit!"},"post_status":{"default":"Nu de mult am aterizat în L.A.","posting":"Postează"},"registration":{"bio":"Bio","email":"Email","fullname":"Numele întreg","password_confirm":"Cofirmă parola","registration":"Îregistrare"},"settings":{"attachments":"Atașamente","avatar":"Avatar","bio":"Bio","current_avatar":"Avatarul curent","current_profile_banner":"Bannerul curent al profilului","filtering":"Filtru","filtering_explanation":"Toate stările care conțin aceste cuvinte vor fi puse pe mut, una pe linie","hide_attachments_in_convo":"Ascunde atașamentele în conversații","hide_attachments_in_tl":"Ascunde atașamentele în cronologie","name":"Nume","name_bio":"Nume și Bio","nsfw_clickthrough":"Permite ascunderea al atașamentelor NSFW","profile_background":"Fundalul de profil","profile_banner":"Banner de profil","set_new_avatar":"Setează avatar nou","set_new_profile_background":"Setează fundal nou","set_new_profile_banner":"Setează banner nou la profil","settings":"Setări","theme":"Temă","user_settings":"Setările utilizatorului"},"timeline":{"conversation":"Conversație","error_fetching":"Erare la preluarea actualizărilor","load_older":"Încarcă stări mai vechi","show_new":"Arată cele noi","up_to_date":"La zi"},"user_card":{"block":"Blochează","blocked":"Blocat!","follow":"Urmărește","followees":"Urmărește","followers":"Următori","following":"Urmărit!","follows_you":"Te urmărește!","mute":"Pune pe mut","muted":"Pus pe mut","per_day":"pe zi","statuses":"Stări"}}')}}]); -//# sourceMappingURL=27.7d4ab8716762d6f57135.js.map \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[27],{620:function(e){e.exports=JSON.parse('{"finder":{"error_fetching_user":"Eroare la preluarea utilizatorului","find_user":"Găsește utilizator"},"general":{"submit":"trimite"},"login":{"login":"Loghează","logout":"Deloghează","password":"Parolă","placeholder":"d.e. lain","register":"Înregistrare","username":"Nume utilizator"},"nav":{"mentions":"Menționări","public_tl":"Cronologie Publică","timeline":"Cronologie","twkn":"Toată Reșeaua Cunoscută"},"notifications":{"followed_you":"te-a urmărit","notifications":"Notificări","read":"Citit!"},"post_status":{"default":"Nu de mult am aterizat în L.A.","posting":"Postează"},"registration":{"bio":"Bio","email":"Email","fullname":"Numele întreg","password_confirm":"Cofirmă parola","registration":"Îregistrare"},"settings":{"attachments":"Atașamente","avatar":"Avatar","bio":"Bio","current_avatar":"Avatarul curent","current_profile_banner":"Bannerul curent al profilului","filtering":"Filtru","filtering_explanation":"Toate stările care conțin aceste cuvinte vor fi puse pe mut, una pe linie","hide_attachments_in_convo":"Ascunde atașamentele în conversații","hide_attachments_in_tl":"Ascunde atașamentele în cronologie","name":"Nume","name_bio":"Nume și Bio","nsfw_clickthrough":"Permite ascunderea al atașamentelor NSFW","profile_background":"Fundalul de profil","profile_banner":"Banner de profil","set_new_avatar":"Setează avatar nou","set_new_profile_background":"Setează fundal nou","set_new_profile_banner":"Setează banner nou la profil","settings":"Setări","theme":"Temă","user_settings":"Setările utilizatorului"},"timeline":{"conversation":"Conversație","error_fetching":"Erare la preluarea actualizărilor","load_older":"Încarcă stări mai vechi","show_new":"Arată cele noi","up_to_date":"La zi"},"user_card":{"block":"Blochează","blocked":"Blocat!","follow":"Urmărește","followees":"Urmărește","followers":"Următori","following":"Urmărit!","follows_you":"Te urmărește!","mute":"Pune pe mut","muted":"Pus pe mut","per_day":"pe zi","statuses":"Stări"}}')}}]); +//# sourceMappingURL=27.0f4a5145681cfb5a896e.js.map \ No newline at end of file diff --git a/priv/static/static/js/27.0f4a5145681cfb5a896e.js.map b/priv/static/static/js/27.0f4a5145681cfb5a896e.js.map new file mode 100644 index 000000000..da741bf41 --- /dev/null +++ b/priv/static/static/js/27.0f4a5145681cfb5a896e.js.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/27.0f4a5145681cfb5a896e.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/27.7d4ab8716762d6f57135.js.map b/priv/static/static/js/27.7d4ab8716762d6f57135.js.map deleted file mode 100644 index b9b2aa6e1..000000000 --- a/priv/static/static/js/27.7d4ab8716762d6f57135.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/27.7d4ab8716762d6f57135.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/28.a88999ebb3f7ec930aad.js b/priv/static/static/js/28.75c01cd71372c39d5af8.js similarity index 75% rename from priv/static/static/js/28.a88999ebb3f7ec930aad.js rename to priv/static/static/js/28.75c01cd71372c39d5af8.js index 423aebca9..63067ea18 100644 --- a/priv/static/static/js/28.a88999ebb3f7ec930aad.js +++ b/priv/static/static/js/28.75c01cd71372c39d5af8.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[28],{608:function(e){e.exports=JSON.parse('{"chat":{"title":"Чат"},"finder":{"error_fetching_user":"Пользователь не найден","find_user":"Найти пользователя"},"general":{"apply":"Применить","submit":"Отправить","cancel":"Отмена","disable":"Оключить","enable":"Включить","confirm":"Подтвердить","verify":"Подтверждение","more":"Больше","generic_error":"Произошла ошибка","optional":"не обязательно","show_less":"Показать меньше","show_more":"Показать больше","peek":"Свернуть","dismiss":"Закрыть","retry":"Попробуйте еще раз","error_retry":"Пожалуйста попробуйте еще раз","close":"Закрыть","loading":"Загрузка…","role":{"moderator":"Модератор","admin":"Администратор"}},"login":{"login":"Войти","logout":"Выйти","password":"Пароль","placeholder":"e.c. lain","register":"Зарегистрироваться","username":"Имя пользователя","authentication_code":"Код аутентификации","enter_recovery_code":"Ввести код восстановления","enter_two_factor_code":"Ввести код аутентификации","recovery_code":"Код восстановления","heading":{"TotpForm":"Двухфакторная аутентификация","RecoveryForm":"Two-factor recovery","totp":"Двухэтапная аутентификация","recovery":"Восстановление двухэтапной аутентификации"},"hint":"Войдите чтобы присоединиться к дискуссии","description":"Войти с помощью OAuth"},"nav":{"back":"Назад","chat":"Локальный чат","mentions":"Упоминания","interactions":"Взаимодействия","public_tl":"Локальная лента","timeline":"Главная","twkn":"Федеративная лента","search":"Поиск","friend_requests":"Запросы на чтение","bookmarks":"Закладки","chats":"Беседы","timelines":"Ленты","preferences":"Настройки","who_to_follow":"Кого читать","dms":"Личные сообщения","administration":"Панель администратора","about":"Об узле","user_search":"Поиск пользователей","home_timeline":"Главная"},"notifications":{"broken_favorite":"Неизвестный статус, ищем…","favorited_you":"нравится ваш статус","followed_you":"начал(а) читать вас","load_older":"Загрузить старые уведомления","notifications":"Уведомления","read":"Прочесть","repeated_you":"повторил(а) ваш статус","follow_request":"хочет читать вас","reacted_with":"добавил(а) реакцию: {0}","migrated_to":"перехал на","no_more_notifications":"Нет дальнейших уведомлений","error":"Ошибка при обновлении уведомлений: {0}"},"interactions":{"favs_repeats":"Повторы и отметки «Нравится»","follows":"Новые читатели","load_older":"Загрузить старые взаимодействия","moves":"Переезды"},"post_status":{"account_not_locked_warning":"Ваша учетная запись не {0}. Кто угодно может начать читать вас чтобы видеть статусы только для читателей.","account_not_locked_warning_link":"закрыт","attachments_sensitive":"Вложения имеют щекотливый характер","content_warning":"Тема (не обязательно)","default":"Что нового?","direct_warning":"Этот пост будет виден только упомянутым пользователям","posting":"Отправляется","scope_notice":{"public":"Этот статус будет виден всем","private":"Этот статус будет виден только вашим читателям","unlisted":"Этот статус не будет виден в локальной и федеративной ленте"},"scope":{"direct":"Личное сообщение - этот статус видят только те, кто в нём упомянут","private":"Для читателей - этот статус видят только ваши читатели","public":"Публичный - этот статус виден всем","unlisted":"Тихий - этот пост виден всем, но не отображается в публичных лентах"},"preview_empty":"Пустой предпросмотр","media_description_error":"Не удалось обновить вложение, попробуйте еще раз","empty_status_error":"Нельзя отправить пустой статус без вложений","preview":"Предпросмотр","direct_warning_to_first_only":"Это сообщение увидят только пользователи упомянутые в его начале.","direct_warning_to_all":"Это сообщение увидят все упомянутые пользователи.","content_type":{"text/bbcode":"BBCode","text/html":"HTML","text/markdown":"Markdown","text/plain":"Простой текст"},"media_description":"Описание вложения","new_status":"Написать новый статус","post":"Опубликовать"},"registration":{"bio":"О себе","email":"Электронная почта","fullname":"Отображаемое имя","password_confirm":"Подтверждение пароля","registration":"Регистрация","token":"Код приглашения","validations":{"username_required":"не должно быть пустым","fullname_required":"не должно быть пустым","email_required":"не должен быть пустым","password_required":"не должен быть пустым","password_confirmation_required":"не должно быть пустым","password_confirmation_match":"должно совпадать с паролем"},"bio_placeholder":"например:\\nПривет, я Игорь Печкин.\\nРаботаю почтальоном в деревне Простоквашино. С недавних пор велосипедист.","fullname_placeholder":"например: Почтальон Печкин","username_placeholder":"например: pechkin","captcha":"Код подтверждения","new_captcha":"Нажмите на изображение чтобы получить новый код","reason_placeholder":"Данный узел обрабатывает запросы на регистрацию вручную.\\nРасскажите администрации почему вы хотите зарегистрироваться.","reason":"Причина регистрации","register":"Зарегистрироваться"},"settings":{"enter_current_password_to_confirm":"Введите свой текущий пароль","mfa":{"otp":"OTP","setup_otp":"Настройка OTP","wait_pre_setup_otp":"предварительная настройка OTP","confirm_and_enable":"Подтвердить и включить OTP","title":"Двухэтапная аутентификация","generate_new_recovery_codes":"Получить новые коды востановления","warning_of_generate_new_codes":"После получения новых кодов восстановления, старые больше не будут работать.","recovery_codes":"Коды восстановления.","waiting_a_recovery_codes":"Получение кодов восстановления…","recovery_codes_warning":"Запишите эти коды и держите в безопасном месте - иначе вы их больше не увидите. Если вы потеряете доступ к OTP приложению - без резервных кодов вы больше не сможете залогиниться.","authentication_methods":"Методы аутентификации","scan":{"title":"Сканирование","desc":"Отсканируйте QR-код приложением для двухэтапной аутентификации или введите текстовый ключ:","secret_code":"Ключ"},"verify":{"desc":"Чтобы включить двухэтапную аутентификацию, введите код из приложения-аутентификатора:"}},"attachmentRadius":"Прикреплённые файлы","attachments":"Вложения","avatar":"Аватар","avatarAltRadius":"Аватары в уведомлениях","avatarRadius":"Аватары","background":"Фон","bio":"О себе","btnRadius":"Кнопки","bot":"Это учётная запись бота","cBlue":"Ответить, читать","cGreen":"Повторить","cOrange":"Нравится","cRed":"Отменить","change_email":"Сменить адрес электронной почты","change_email_error":"Произошла ошибка при попытке изменить электронную почту.","changed_email":"Электронная почта изменена успешно!","change_password":"Сменить пароль","change_password_error":"Произошла ошибка при попытке изменить пароль.","changed_password":"Пароль изменён успешно!","collapse_subject":"Сворачивать статусы с темой","confirm_new_password":"Подтверждение нового пароля","current_avatar":"Текущий аватар","current_password":"Текущий пароль","current_profile_banner":"Текущий баннер профиля","data_import_export_tab":"Импорт / Экспорт данных","delete_account":"Удалить учетную запись","delete_account_description":"Навсегда удалить вашу учётную запись и ваши статусы.","delete_account_error":"Возникла ошибка в процессе удаления вашей учетной записи. Если это повторяется, свяжитесь с администратором данного узла.","delete_account_instructions":"Введите ваш пароль в поле ниже для подтверждения удаления.","export_theme":"Сохранить Тему","filtering":"Фильтрация","filtering_explanation":"Все статусы, содержащие данные слова, будут игнорироваться, по одному в строке","follow_export":"Экспортировать читаемых","follow_export_button":"Экспортировать читаемых в файл .csv","follow_export_processing":"Ведётся обработка, скоро вам будет предложено загрузить файл","follow_import":"Импортировать читаемых","follow_import_error":"Ошибка при импортировании читаемых","follows_imported":"Список читаемых импортирован. Обработка займёт некоторое время..","foreground":"Передний план","general":"Общие","hide_attachments_in_convo":"Прятать вложения в разговорах","hide_attachments_in_tl":"Прятать вложения в ленте","hide_isp":"Скрыть серверную панель","import_followers_from_a_csv_file":"Импортировать читаемых из файла .csv","import_theme":"Загрузить Тему","inputRadius":"Поля ввода","checkboxRadius":"Чекбоксы","instance_default":"(по умолчанию: {value})","instance_default_simple":"(по умолчанию)","interface":"Интерфейс","interfaceLanguage":"Язык интерфейса","limited_availability":"Не доступно в вашем браузере","links":"Ссылки","lock_account_description":"Сделать учетную запись закрытой — подтверждать читателей вручную","loop_video":"Зациливать видео","loop_video_silent_only":"Зацикливать только беззвучные видео (т.е. \\"гифки\\" с Mastodon)","name":"Имя","name_bio":"Личные данные","new_email":"Новый адрес электронной почты","new_password":"Новый пароль","fun":"Потешное","greentext":"Мемные стрелочки","notification_visibility":"Показывать уведомления","notification_visibility_follows":"Новые читатели","notification_visibility_likes":"Лайки","notification_visibility_mentions":"Упоминания","notification_visibility_repeats":"Повторы","no_rich_text_description":"Убрать форматирование из всех статусов","hide_follows_description":"Не показывать кого я читаю","hide_followers_description":"Не показывать кто читает меня","hide_follows_count_description":"Не показывать число читаемых пользователей","hide_followers_count_description":"Не показывать число моих читателей","show_admin_badge":"Показывать значок администратора в моем профиле","show_moderator_badge":"Показывать значок модератора в моем профиле","nsfw_clickthrough":"Включить скрытие вложений и предпросмотра ссылок для статусов щекотливого характера","oauth_tokens":"OAuth токены","token":"Токен","refresh_token":"Рефреш токен","valid_until":"Годен до","revoke_token":"Удалить","panelRadius":"Панели","pause_on_unfocused":"Приостановить загрузку когда вкладка не в фокусе","presets":"Пресеты","profile_background":"Фон профиля","profile_banner":"Баннер профиля","profile_tab":"Профиль","radii_help":"Скругление углов элементов интерфейса (в пикселях)","replies_in_timeline":"Ответы в ленте","reply_visibility_all":"Показывать все ответы","reply_visibility_following":"Показывать только ответы мне или тем кого я читаю","reply_visibility_self":"Показывать только ответы мне","autohide_floating_post_button":"Автоматически скрывать кнопку \\"Написать новый статус\\" (в мобильной версии)","saving_err":"Не удалось сохранить настройки","saving_ok":"Сохранено","security_tab":"Безопасность","scope_copy":"Копировать видимость поста при ответе (всегда включено для личных сообщений)","minimal_scopes_mode":"Показывать только личное сообщение и публичный статус в опциях видимости","set_new_avatar":"Загрузить новый аватар","set_new_profile_background":"Загрузить новый фон профиля","set_new_profile_banner":"Загрузить новый баннер профиля","settings":"Настройки","subject_input_always_show":"Всегда показывать поле ввода темы","stop_gifs":"Проигрывать GIF анимации только при наведении","streaming":"Включить автоматическую загрузку новых сообщений при прокрутке вверх","useStreamingApi":"Получать сообщения и уведомления в реальном времени","useStreamingApiWarning":"(Не рекомендуется, экспериментально, статусы могут пропадать)","text":"Текст","theme":"Тема","theme_help":"Используйте шестнадцатеричные коды цветов (#rrggbb) для настройки темы.","theme_help_v2_1":"Вы так же можете перепоределить цвета определенных компонентов нажав соотв. галочку. Используйте кнопку \\"Очистить всё\\" чтобы снять все переопределения.","theme_help_v2_2":"Под некоторыми полями ввода это идикаторы контрастности, наведите на них мышью чтобы узнать больше. Приспользовании прозрачности контраст расчитывается для наихудшего варианта.","tooltipRadius":"Всплывающие подсказки/уведомления","user_settings":"Настройки пользователя","values":{"false":"нет","true":"да"},"style":{"switcher":{"keep_color":"Оставить цвета","keep_shadows":"Оставить тени","keep_opacity":"Оставить прозрачность","keep_roundness":"Оставить скругление","keep_fonts":"Оставить шрифты","save_load_hint":"Опции \\"оставить...\\" позволяют сохранить текущие настройки при выборе другой темы или импорта её из файла. Так же они влияют на то какие компоненты будут сохранены при экспорте темы. Когда все галочки сняты все компоненты будут экспортированы.","reset":"Сбросить","clear_all":"Очистить всё","clear_opacity":"Очистить прозрачность","use_source":"Новая версия","use_snapshot":"Старая версия","keep_as_is":"Оставить, как есть","load_theme":"Загрузить тему","help":{"fe_upgraded":"Движок тем для фронт-энда Pleroma был изменен после обновления.","older_version_imported":"Файл, который вы импортировали, был сделан в старой версии фронт-энда.","future_version_imported":"Файл, который вы импортировали, был сделан в новой версии фронт-энда.","v2_imported":"Файл, который вы импортировали, был сделан под старый фронт-энд. Мы стараемся улучшить совместимость, но все еще возможны несостыковки.","upgraded_from_v2":"Фронт-энд Pleroma был изменен. Выбранная тема может выглядеть слегка по-другому.","fe_downgraded":"Версия фронт-энда Pleroma была откачена."}},"common":{"color":"Цвет","opacity":"Прозрачность","contrast":{"hint":"Уровень контраста: {ratio}, что {level} {context}","level":{"aa":"соответствует гайдлайну Level AA (минимальный)","aaa":"соответствует гайдлайну Level AAA (рекомендуемый)","bad":"не соответствует каким либо гайдлайнам"},"context":{"18pt":"для крупного (18pt+) текста","text":"для текста"}}},"common_colors":{"_tab_label":"Общие","main":"Общие цвета","foreground_hint":"См. вкладку \\"Дополнительно\\" для более детального контроля","rgbo":"Иконки, акценты, ярылки"},"advanced_colors":{"_tab_label":"Дополнительно","alert":"Фон уведомлений","alert_error":"Ошибки","badge":"Фон значков","badge_notification":"Уведомления","panel_header":"Заголовок панели","top_bar":"Верхняя полоска","borders":"Границы","buttons":"Кнопки","inputs":"Поля ввода","faint_text":"Маловажный текст","post":"Статусы и раздел \\"О себе\\"","alert_neutral":"Нейтральный","alert_warning":"Предупреждение","selectedPost":"Выбранный статус","pressed":"Нажатие","highlight":"Выделенные элементы","icons":"Иконки","poll":"График результатов опроса","wallpaper":"Фон","chat":{"border":"Границы","outgoing":"Исходящие","incoming":"Входящие"},"tabs":"Вкладки","toggled":"Включено","disabled":"Отключено","selectedMenu":"Выбранный пункт меню"},"radii":{"_tab_label":"Скругление"},"shadows":{"_tab_label":"Светотень","component":"Компонент","override":"Переопределить","shadow_id":"Тень №{value}","blur":"Размытие","spread":"Разброс","inset":"Внутренняя","hint":"Для теней вы так же можете использовать --variable в качестве цвета чтобы использовать CSS3-переменные. В таком случае прозрачность работать не будет.","filter_hint":{"always_drop_shadow":"Внимание, эта тень всегда использует {0} когда браузер поддерживает это.","drop_shadow_syntax":"{0} не поддерживает параметр {1} и ключевое слово {2}.","avatar_inset":"Одновременное использование внутренних и внешних теней на (прозрачных) аватарках может дать не те результаты что вы ожидаете.","spread_zero":"Тени с разбросом > 0 будут выглядеть как если бы разброс установлен в 0","inset_classic":"Внутренние тени будут использовать {0}"},"components":{"panel":"Панель","panelHeader":"Заголовок панели","topBar":"Верхняя полоска","avatar":"Аватар (профиль)","avatarStatus":"Аватар (в ленте)","popup":"Всплывающие подсказки","button":"Кнопки","buttonHover":"Кнопки (наведен курсор)","buttonPressed":"Кнопки (нажата)","buttonPressedHover":"Кнопки (нажата+наведен курсор)","input":"Поля ввода"}},"fonts":{"_tab_label":"Шрифты","help":"Выберите тип шрифта для использования в интерфейсе. При выборе варианта \\"другой\\" надо ввести название шрифта в точности как он называется в системе.","components":{"interface":"Интерфейс","input":"Поля ввода","post":"Текст постов","postCode":"Моноширинный текст в статусе (форматирование)"},"family":"Шрифт","size":"Размер (в пикселях)","weight":"Ширина","custom":"Другой"},"preview":{"header":"Пример","content":"Контент","error":"Ошибка стоп 000","button":"Кнопка","text":"Еще немного {0} и масенькая {1}","mono":"контента","input":"Что нового?","faint_link":"Его придется убрать","fine_print":"Если проблемы остались — ваш гуртовщик мыши плохо стоит. {0}.","header_faint":"Все идет по плану","checkbox":"Я подтверждаю что не было ни единого разрыва","link":"ссылка"}},"allow_following_move":"Автоматически начать читать новый профиль при переезде","hide_user_stats":"Не показывать статистику пользователей (например количество читателей)","discoverable":"Разрешить показывать учетную запись в поисковых системах и прочих сервисах","default_vis":"Видимость статусов по умолчанию","mutes_and_blocks":"Блокировки и игнорируемые","composing":"Составление статусов","chatMessageRadius":"Сообщения в беседе","blocks_tab":"Блокировки","import_mutes_from_a_csv_file":"Импортировать игнорируемых из CSV файла","mutes_imported":"Игнорируемые импортированы! Обработка может занять некоторое время.","mute_import_error":"Произошла ошибка при импорте игнорируемых","mute_import":"Импорт игнорируемых","block_export_button":"Экспортирует блокировки в CSV файл","mute_export_button":"Экспортирует игнорируемых пользователей в CSV файл","mute_export":"Экспорт игнорируемых","blocks_imported":"Блокировки импортированы! Обработка может занять некоторое время.","block_import_error":"Произошла ошибка при импорте блокировок","block_import":"Импорт блокировок","block_export":"Экспортировать блокировки","security":"Безопасность","app_name":"Приложение","user_mutes":"Пользователи","post_status_content_type":"Формат составляемых статусов по умолчанию","subject_line_noop":"Не копировать","subject_line_mastodon":"Как в Mastodon: скопировать как есть","subject_line_email":"Как в электронной почте: \\"re: тема\\"","subject_line_behavior":"Копировать тему в ответах","no_mutes":"Нет игнорируемых","no_blocks":"Нет блокировок","notification_visibility_emoji_reactions":"Реакции","notification_visibility_moves":"Переезды","use_contain_fit":"Не обрезать вложения в миниатюрах","profile_fields":{"value":"Значение","name":"Пункт","add_field":"Добавить поле","label":"Таблица метаданных профиля"},"play_videos_in_modal":"Проигрывать видео во всплывающей рамке","mutes_tab":"Игнорируемые","invalid_theme_imported":"Выбраный файл не является темой Pleroma. Изменений в тему не было внесено.","import_blocks_from_a_csv_file":"Импортировать блокировки из CSV файла","hide_filtered_statuses":"Не показывать отфильтрованные статусы","hide_muted_posts":"Не показывать статусы игнорируемых пользователей","hide_post_stats":"Не показывать статистику статусов (например количество отметок «Нравится»)","use_one_click_nsfw":"Открывать вложения имеющие щекотливый характер одним кликом","preload_images":"Предварительно загружать изображения","max_thumbnails":"Максимальное число миниатюр показываемых в статусе","emoji_reactions_on_timeline":"Показывать эмодзи реакции в ленте","domain_mutes":"Узлы","notification_setting_privacy":"Приватность","notification_setting_block_from_strangers":"Не показывать уведомления от пользователей которых вы не читаете","notification_setting_filters":"Фильтрация","notifications":"Уведомления","virtual_scrolling":"Оптимизировать рендеринг ленты","hide_wallpaper":"Скрыть обои узла","accent":"Акцент","upload_a_photo":"Загрузить изображение","notification_mutes":"Чтобы не получать уведомления от конкретного пользователя, заглушите его.","reset_avatar_confirm":"Вы точно хотите сбросить аватар?","reset_profile_banner":"Сбросить баннер профиля","reset_profile_background":"Сбросить фон профиля","reset_avatar":"Сбросить аватар","search_user_to_mute":"Поиск того, кого вы хотите заглушить","search_user_to_block":"Поиск того, кого вы хотите заблокировать","pad_emoji":"Разделять эмодзи пробелами, когда они добавляются из меню","avatar_size_instruction":"Рекомендуется использовать изображение больше чем 150 на 150 пикселей в качестве аватара.","enable_web_push_notifications":"Включить web push-уведомления","notification_blocks":"Блокировка пользователя выключает все уведомления от него, а также отписывает вас от него.","notification_setting_hide_notification_contents":"Скрыть отправителя и содержимое push-уведомлений","version":{"title":"Версия","frontend_version":"Версия фронт-энда","backend_version":"Версия бэк-энда"},"word_filter":"Фильтр слов","sensitive_by_default":"Помечать статусы как имеющие щекотливый характер по умолчанию","reply_visibility_self_short":"Показывать ответы только вам","reply_visibility_following_short":"Показывать ответы тем кого вы читаете","hide_all_muted_posts":"Не показывать игнорируемые статусы","hide_media_previews":"Не показывать вложения в ленте","setting_changed":"Отличается от значения по умолчанию","reset_background_confirm":"Вы точно хотите сбросить фон?","reset_banner_confirm":"Вы точно хотите сбросить баннер?","type_domains_to_mute":"Поиск узлов, которые вы хотите заглушить","more_settings":"Остальные настройки","save":"Сохранить изменения"},"timeline":{"collapse":"Свернуть","conversation":"Разговор","error_fetching":"Ошибка при обновлении","load_older":"Загрузить старые статусы","no_retweet_hint":"Статус помечен как \\"только для читателей\\" или \\"личное сообщение\\" и потому не может быть повторён","repeated":"повторил(а)","show_new":"Показать новые","up_to_date":"Обновлено","error":"Ошибка при обновлении ленты: {0}"},"status":{"bookmark":"Добавить в закладки","unbookmark":"Удалить из закладок","status_deleted":"Статус удален","reply_to":"Ответ","repeats":"Повторы","favorites":"Понравилось","unmute_conversation":"Прекратить игнорировать разговор","mute_conversation":"Игнорировать разговор","thread_muted":"Разговор игнорируется","external_source":"Перейти к источнику","delete_confirm":"Вы действительно хотите удалить данный статус?","delete":"Удалить","copy_link":"Скопировать ссылку"},"user_card":{"block":"Заблокировать","blocked":"Заблокирован","favorites":"Понравившиеся","follow":"Читать","follow_sent":"Запрос отправлен!","follow_progress":"Запрашиваем…","follow_again":"Запросить еще раз?","follow_unfollow":"Перестать читать","followees":"Читаемые","followers":"Читатели","following":"Читаете!","follows_you":"Читает вас!","mute":"Игнорировать","muted":"Игнорирую","per_day":"в день","remote_follow":"Читать удалённо","statuses":"Статусы","admin_menu":{"moderation":"Опции модератора","grant_admin":"Сделать администратором","revoke_admin":"Забрать права администратора","grant_moderator":"Сделать модератором","revoke_moderator":"Забрать права модератора","activate_account":"Активировать учетную запись","deactivate_account":"Деактивировать учетную запись","delete_account":"Удалить учетную запись","force_nsfw":"Отмечать статусы пользователя как имеющие щекотливый характер","strip_media":"Убирать вложения из статусов пользователя","force_unlisted":"Не показывать статусы в публичных лентах","sandbox":"Принудить видимость постов только читателям","disable_remote_subscription":"Запретить читать с других узлов","disable_any_subscription":"Запретить читать пользователя","quarantine":"Не федерировать статусы пользователя","delete_user":"Удалить пользователя","delete_user_confirmation":"Вы уверены? Это действие нельзя отменить."},"media":"С вложениями","mention":"Упомянуть","show_repeats":"Показывать повторы","hide_repeats":"Скрыть повторы","report":"Пожаловаться","message":"Написать сообщение","highlight":{"side":"Полоска сбоку","striped":"Фон в полоску","solid":"Сплошной фон","disabled":"Нет выделения"}},"user_profile":{"timeline_title":"Лента пользователя"},"search":{"people":"Люди","hashtags":"Хэштэги","person_talking":"Популярно у {count} человека","people_talking":"Популярно у {count} человек","no_results":"Ничего не найдено"},"password_reset":{"forgot_password":"Забыли пароль?","password_reset":"Сброс пароля","instruction":"Введите ваш адрес электронной почты или имя пользователя: на вашу электронную почту будет отправлена ссылка для сброса пароля.","placeholder":"Ваш адрес электронной почты или имя пользователя","check_email":"Проверьте вашу электронную почту и перейдите по ссылке для сброса пароля.","return_home":"Вернуться на главную страницу","too_many_requests":"Вы исчерпали допустимое количество попыток, попробуйте позже.","password_reset_disabled":"Автоматический сброс пароля отключен. Свяжитесь с администратором данного узла для сброса пароля.","password_reset_required_but_mailer_is_disabled":"Вы должны сбросить свой пароль, однако автоматический сброс пароля отключен. Пожалуйста свяжитесь с администратором данного узла."},"about":{"mrf":{"federation":"Федерация","simple":{"accept_desc":"Данный узел принимает сообщения только со следующих узлов:","ftl_removal_desc":"Данный узел скрывает следующие узлы с федеративной ленты:","media_nsfw_desc":"Данный узел принужденно помечает вложения со следующих узлов как имеющие щекотливый характер:","simple_policies":"Правила для определенных узлов","accept":"Белый список","reject":"Черный список","reject_desc":"Данный узел не принимает сообщения со следующих узлов:","quarantine":"Зона карантина","quarantine_desc":"Данный узел отправляет только публичные статусы следующим узлам:","ftl_removal":"Скрытие с федеративной ленты","media_removal":"Удаление вложений","media_removal_desc":"Данный узел удаляет вложения со следующих узлов:","media_nsfw":"Принужденно помеченно как имеющее щекотливый характер"},"keyword":{"ftl_removal":"Убрать из федеративной ленты","reject":"Отклонить","keyword_policies":"Действия на ключевые слова","replace":"Заменить","is_replaced_by":"→"},"mrf_policies":"Активные правила MRF (модуль переписывания сообщений)","mrf_policies_desc":"Правила MRF (модуль переписывания сообщений) влияют на федерацию данного узла. Следующие правила активны:"},"staff":"Администрация"},"domain_mute_card":{"mute":"Игнорировать","mute_progress":"В процессе…","unmute":"Прекратить игнорирование","unmute_progress":"В процессе…"},"exporter":{"export":"Экспорт","processing":"Запрос в обработке, вам скоро будет предложено загрузить файл"},"features_panel":{"chat":"Чат","media_proxy":"Прокси для внешних вложений","text_limit":"Лимит символов","title":"Особенности","gopher":"Gopher","who_to_follow":"Предложения кого читать","pleroma_chat_messages":"Pleroma Чат","upload_limit":"Наибольший размер загружаемого файла","scope_options":"Настраиваемая видимость статусов"},"tool_tip":{"accept_follow_request":"Принять запрос на чтение","reject_follow_request":"Отклонить запрос на чтение","media_upload":"Прикрепить вложение"},"image_cropper":{"save_without_cropping":"Сохранить не обрезая","save":"Сохранить","crop_picture":"Обрезать картинку","cancel":"Отменить"},"errors":{"storage_unavailable":"Pleroma не смогла получить доступ к хранилищу браузера. Ваша сессия и настройки не будут сохранены, и вы можете столкнуться с непредвиденными проблемами. Попробуйте включить файлы cookie."},"polls":{"not_enough_options":"Недостаточно уникальных вариантов в опросе","expired":"Опрос закончился {0} назад","expires_in":"Опрос заканчивается через {0}","expiry":"Срок опроса","multiple_choices":"Несколько вариантов","single_choice":"Один вариант","type":"Тип опроса","vote":"Проголосовать","votes":"голосов","option":"Вариант","add_option":"Добавить вариант","add_poll":"Прикрепить опрос","votes_count":"{count} голос | {count} голосов","people_voted_count":"{count} человек проголосовал | {count} человек проголосовали"},"media_modal":{"next":"Следующая","previous":"Предыдущая"},"importer":{"error":"Произошла ошибка при импорте файла.","success":"Импорт прошел успешно.","submit":"Отправить"},"selectable_list":{"select_all":"Выбрать все"},"emoji":{"load_all":"Все {emojiAmount} эмодзи загружаются","load_all_hint":"Загружены первые {saneAmount} эмодзи, загрузка всех эмодзи может привести к проблемам с производительностью.","unicode":"Стандартные эмодзи","custom":"Пользовательские эмодзи","add_emoji":"Добавить эмодзи","search_emoji":"Поиск эмодзи","keep_open":"Оставить окно выбора открытым","emoji":"Эмодзи","stickers":"Стикеры"},"shoutbox":{"title":"Болтовня"},"time":{"days_short":"{0}дн","years_short":"{0}г","year_short":"{0}г","weeks_short":"{0}нед","week_short":"{0}нед","seconds_short":"{0}сек","second_short":"{0}с","now_short":"только что","now":"только что","months_short":"{0}мес","month_short":"{0}мес","minutes_short":"{0}мин","minute_short":"{0}мин","in_past":"{0} назад","in_future":"через {0}","hours_short":"{0}ч","hour_short":"{0}ч","hour":"{0} час","day_short":"{0}д","days":"{0} дней"},"chats":{"empty_chat_list_placeholder":"У вас пока нет бесед. Начните одну!","delete_confirm":"Вы точно хотите удалить сообщение?","empty_message_error":"Нельзя отправить пустое сообщение","new":"Новая беседа","chats":"Беседы","delete":"Удалить","message_user":"Напишите {nickname}","you":"Вы:","error_sending_message":"Произошла ошибка при отправке сообщения."},"remote_user_resolver":{"error":"Не найдено.","searching_for":"Ищем"},"upload":{"error":{"message":"Произошла ошибка при загрузке: {0}"}},"user_reporting":{"add_comment_description":"Жалоба будет направлена модераторам вашего узла. Вы можете указать причину жалобы ниже:","forward_description":"Данный пользователь находится на другом узле. Отослать туда копию вашей жалобы?"},"file_type":{"file":"Файл","video":"Видеозапись","audio":"Аудиозапись","image":"Изображение"}}')}}]); -//# sourceMappingURL=28.a88999ebb3f7ec930aad.js.map \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[28],{621:function(e){e.exports=JSON.parse('{"chat":{"title":"Чат"},"finder":{"error_fetching_user":"Пользователь не найден","find_user":"Найти пользователя"},"general":{"apply":"Применить","submit":"Отправить","cancel":"Отмена","disable":"Оключить","enable":"Включить","confirm":"Подтвердить","verify":"Подтверждение","more":"Больше","generic_error":"Произошла ошибка","optional":"не обязательно","show_less":"Показать меньше","show_more":"Показать больше","peek":"Свернуть","dismiss":"Закрыть","retry":"Попробуйте еще раз","error_retry":"Пожалуйста попробуйте еще раз","close":"Закрыть","loading":"Загрузка…","role":{"moderator":"Модератор","admin":"Администратор"}},"login":{"login":"Войти","logout":"Выйти","password":"Пароль","placeholder":"e.c. lain","register":"Зарегистрироваться","username":"Имя пользователя","authentication_code":"Код аутентификации","enter_recovery_code":"Ввести код восстановления","enter_two_factor_code":"Ввести код аутентификации","recovery_code":"Код восстановления","heading":{"TotpForm":"Двухфакторная аутентификация","RecoveryForm":"Two-factor recovery","totp":"Двухэтапная аутентификация","recovery":"Восстановление двухэтапной аутентификации"},"hint":"Войдите чтобы присоединиться к дискуссии","description":"Войти с помощью OAuth"},"nav":{"back":"Назад","chat":"Локальный чат","mentions":"Упоминания","interactions":"Взаимодействия","public_tl":"Локальная лента","timeline":"Главная","twkn":"Федеративная лента","search":"Поиск","friend_requests":"Запросы на чтение","bookmarks":"Закладки","chats":"Беседы","timelines":"Ленты","preferences":"Настройки","who_to_follow":"Кого читать","dms":"Личные сообщения","administration":"Панель администратора","about":"Об узле","user_search":"Поиск пользователей","home_timeline":"Главная"},"notifications":{"broken_favorite":"Неизвестный статус, ищем…","favorited_you":"нравится ваш статус","followed_you":"начал(а) читать вас","load_older":"Загрузить старые уведомления","notifications":"Уведомления","read":"Прочесть","repeated_you":"повторил(а) ваш статус","follow_request":"хочет читать вас","reacted_with":"добавил(а) реакцию: {0}","migrated_to":"перехал на","no_more_notifications":"Нет дальнейших уведомлений","error":"Ошибка при обновлении уведомлений: {0}"},"interactions":{"favs_repeats":"Повторы и отметки «Нравится»","follows":"Новые читатели","load_older":"Загрузить старые взаимодействия","moves":"Переезды"},"post_status":{"account_not_locked_warning":"Ваша учетная запись не {0}. Кто угодно может начать читать вас чтобы видеть статусы только для читателей.","account_not_locked_warning_link":"закрыт","attachments_sensitive":"Вложения имеют щекотливый характер","content_warning":"Тема (не обязательно)","default":"Что нового?","direct_warning":"Этот пост будет виден только упомянутым пользователям","posting":"Отправляется","scope_notice":{"public":"Этот статус будет виден всем","private":"Этот статус будет виден только вашим читателям","unlisted":"Этот статус не будет виден в локальной и федеративной ленте"},"scope":{"direct":"Личное сообщение - этот статус видят только те, кто в нём упомянут","private":"Для читателей - этот статус видят только ваши читатели","public":"Публичный - этот статус виден всем","unlisted":"Тихий - этот пост виден всем, но не отображается в публичных лентах"},"preview_empty":"Пустой предпросмотр","media_description_error":"Не удалось обновить вложение, попробуйте еще раз","empty_status_error":"Нельзя отправить пустой статус без вложений","preview":"Предпросмотр","direct_warning_to_first_only":"Это сообщение увидят только пользователи упомянутые в его начале.","direct_warning_to_all":"Это сообщение увидят все упомянутые пользователи.","content_type":{"text/bbcode":"BBCode","text/html":"HTML","text/markdown":"Markdown","text/plain":"Простой текст"},"media_description":"Описание вложения","new_status":"Написать новый статус","post":"Опубликовать"},"registration":{"bio":"О себе","email":"Электронная почта","fullname":"Отображаемое имя","password_confirm":"Подтверждение пароля","registration":"Регистрация","token":"Код приглашения","validations":{"username_required":"не должно быть пустым","fullname_required":"не должно быть пустым","email_required":"не должен быть пустым","password_required":"не должен быть пустым","password_confirmation_required":"не должно быть пустым","password_confirmation_match":"должно совпадать с паролем"},"bio_placeholder":"например:\\nПривет, я Игорь Печкин.\\nРаботаю почтальоном в деревне Простоквашино. С недавних пор велосипедист.","fullname_placeholder":"например: Почтальон Печкин","username_placeholder":"например: pechkin","captcha":"Код подтверждения","new_captcha":"Нажмите на изображение чтобы получить новый код","reason_placeholder":"Данный узел обрабатывает запросы на регистрацию вручную.\\nРасскажите администрации почему вы хотите зарегистрироваться.","reason":"Причина регистрации","register":"Зарегистрироваться"},"settings":{"enter_current_password_to_confirm":"Введите свой текущий пароль","mfa":{"otp":"OTP","setup_otp":"Настройка OTP","wait_pre_setup_otp":"предварительная настройка OTP","confirm_and_enable":"Подтвердить и включить OTP","title":"Двухэтапная аутентификация","generate_new_recovery_codes":"Получить новые коды востановления","warning_of_generate_new_codes":"После получения новых кодов восстановления, старые больше не будут работать.","recovery_codes":"Коды восстановления.","waiting_a_recovery_codes":"Получение кодов восстановления…","recovery_codes_warning":"Запишите эти коды и держите в безопасном месте - иначе вы их больше не увидите. Если вы потеряете доступ к OTP приложению - без резервных кодов вы больше не сможете залогиниться.","authentication_methods":"Методы аутентификации","scan":{"title":"Сканирование","desc":"Отсканируйте QR-код приложением для двухэтапной аутентификации или введите текстовый ключ:","secret_code":"Ключ"},"verify":{"desc":"Чтобы включить двухэтапную аутентификацию, введите код из приложения-аутентификатора:"}},"attachmentRadius":"Прикреплённые файлы","attachments":"Вложения","avatar":"Аватар","avatarAltRadius":"Аватары в уведомлениях","avatarRadius":"Аватары","background":"Фон","bio":"О себе","btnRadius":"Кнопки","bot":"Это учётная запись бота","cBlue":"Ответить, читать","cGreen":"Повторить","cOrange":"Нравится","cRed":"Отменить","change_email":"Сменить адрес электронной почты","change_email_error":"Произошла ошибка при попытке изменить электронную почту.","changed_email":"Электронная почта изменена успешно!","change_password":"Сменить пароль","change_password_error":"Произошла ошибка при попытке изменить пароль.","changed_password":"Пароль изменён успешно!","collapse_subject":"Сворачивать статусы с темой","confirm_new_password":"Подтверждение нового пароля","current_avatar":"Текущий аватар","current_password":"Текущий пароль","current_profile_banner":"Текущий баннер профиля","data_import_export_tab":"Импорт / Экспорт данных","delete_account":"Удалить учетную запись","delete_account_description":"Навсегда удалить вашу учётную запись и ваши статусы.","delete_account_error":"Возникла ошибка в процессе удаления вашей учетной записи. Если это повторяется, свяжитесь с администратором данного узла.","delete_account_instructions":"Введите ваш пароль в поле ниже для подтверждения удаления.","export_theme":"Сохранить Тему","filtering":"Фильтрация","filtering_explanation":"Все статусы, содержащие данные слова, будут игнорироваться, по одному в строке","follow_export":"Экспортировать читаемых","follow_export_button":"Экспортировать читаемых в файл .csv","follow_export_processing":"Ведётся обработка, скоро вам будет предложено загрузить файл","follow_import":"Импортировать читаемых","follow_import_error":"Ошибка при импортировании читаемых","follows_imported":"Список читаемых импортирован. Обработка займёт некоторое время..","foreground":"Передний план","general":"Общие","hide_attachments_in_convo":"Прятать вложения в разговорах","hide_attachments_in_tl":"Прятать вложения в ленте","hide_isp":"Скрыть серверную панель","import_followers_from_a_csv_file":"Импортировать читаемых из файла .csv","import_theme":"Загрузить Тему","inputRadius":"Поля ввода","checkboxRadius":"Чекбоксы","instance_default":"(по умолчанию: {value})","instance_default_simple":"(по умолчанию)","interface":"Интерфейс","interfaceLanguage":"Язык интерфейса","limited_availability":"Не доступно в вашем браузере","links":"Ссылки","lock_account_description":"Сделать учетную запись закрытой — подтверждать читателей вручную","loop_video":"Зациливать видео","loop_video_silent_only":"Зацикливать только беззвучные видео (т.е. \\"гифки\\" с Mastodon)","name":"Имя","name_bio":"Личные данные","new_email":"Новый адрес электронной почты","new_password":"Новый пароль","fun":"Потешное","greentext":"Мемные стрелочки","notification_visibility":"Показывать уведомления","notification_visibility_follows":"Новые читатели","notification_visibility_likes":"Лайки","notification_visibility_mentions":"Упоминания","notification_visibility_repeats":"Повторы","no_rich_text_description":"Убрать форматирование из всех статусов","hide_follows_description":"Не показывать кого я читаю","hide_followers_description":"Не показывать кто читает меня","hide_follows_count_description":"Не показывать число читаемых пользователей","hide_followers_count_description":"Не показывать число моих читателей","show_admin_badge":"Показывать значок администратора в моем профиле","show_moderator_badge":"Показывать значок модератора в моем профиле","nsfw_clickthrough":"Включить скрытие вложений и предпросмотра ссылок для статусов щекотливого характера","oauth_tokens":"OAuth токены","token":"Токен","refresh_token":"Рефреш токен","valid_until":"Годен до","revoke_token":"Удалить","panelRadius":"Панели","pause_on_unfocused":"Приостановить загрузку когда вкладка не в фокусе","presets":"Пресеты","profile_background":"Фон профиля","profile_banner":"Баннер профиля","profile_tab":"Профиль","radii_help":"Скругление углов элементов интерфейса (в пикселях)","replies_in_timeline":"Ответы в ленте","reply_visibility_all":"Показывать все ответы","reply_visibility_following":"Показывать только ответы мне или тем кого я читаю","reply_visibility_self":"Показывать только ответы мне","autohide_floating_post_button":"Автоматически скрывать кнопку \\"Написать новый статус\\" (в мобильной версии)","saving_err":"Не удалось сохранить настройки","saving_ok":"Сохранено","security_tab":"Безопасность","scope_copy":"Копировать видимость поста при ответе (всегда включено для личных сообщений)","minimal_scopes_mode":"Показывать только личное сообщение и публичный статус в опциях видимости","set_new_avatar":"Загрузить новый аватар","set_new_profile_background":"Загрузить новый фон профиля","set_new_profile_banner":"Загрузить новый баннер профиля","settings":"Настройки","subject_input_always_show":"Всегда показывать поле ввода темы","stop_gifs":"Проигрывать GIF анимации только при наведении","streaming":"Включить автоматическую загрузку новых сообщений при прокрутке вверх","useStreamingApi":"Получать сообщения и уведомления в реальном времени","useStreamingApiWarning":"(Не рекомендуется, экспериментально, статусы могут пропадать)","text":"Текст","theme":"Тема","theme_help":"Используйте шестнадцатеричные коды цветов (#rrggbb) для настройки темы.","theme_help_v2_1":"Вы так же можете перепоределить цвета определенных компонентов нажав соотв. галочку. Используйте кнопку \\"Очистить всё\\" чтобы снять все переопределения.","theme_help_v2_2":"Под некоторыми полями ввода это идикаторы контрастности, наведите на них мышью чтобы узнать больше. Приспользовании прозрачности контраст расчитывается для наихудшего варианта.","tooltipRadius":"Всплывающие подсказки/уведомления","user_settings":"Настройки пользователя","values":{"false":"нет","true":"да"},"style":{"switcher":{"keep_color":"Оставить цвета","keep_shadows":"Оставить тени","keep_opacity":"Оставить прозрачность","keep_roundness":"Оставить скругление","keep_fonts":"Оставить шрифты","save_load_hint":"Опции \\"оставить...\\" позволяют сохранить текущие настройки при выборе другой темы или импорта её из файла. Так же они влияют на то какие компоненты будут сохранены при экспорте темы. Когда все галочки сняты все компоненты будут экспортированы.","reset":"Сбросить","clear_all":"Очистить всё","clear_opacity":"Очистить прозрачность","use_source":"Новая версия","use_snapshot":"Старая версия","keep_as_is":"Оставить, как есть","load_theme":"Загрузить тему","help":{"fe_upgraded":"Движок тем для фронт-энда Pleroma был изменен после обновления.","older_version_imported":"Файл, который вы импортировали, был сделан в старой версии фронт-энда.","future_version_imported":"Файл, который вы импортировали, был сделан в новой версии фронт-энда.","v2_imported":"Файл, который вы импортировали, был сделан под старый фронт-энд. Мы стараемся улучшить совместимость, но все еще возможны несостыковки.","upgraded_from_v2":"Фронт-энд Pleroma был изменен. Выбранная тема может выглядеть слегка по-другому.","fe_downgraded":"Версия фронт-энда Pleroma была откачена."}},"common":{"color":"Цвет","opacity":"Прозрачность","contrast":{"hint":"Уровень контраста: {ratio}, что {level} {context}","level":{"aa":"соответствует гайдлайну Level AA (минимальный)","aaa":"соответствует гайдлайну Level AAA (рекомендуемый)","bad":"не соответствует каким либо гайдлайнам"},"context":{"18pt":"для крупного (18pt+) текста","text":"для текста"}}},"common_colors":{"_tab_label":"Общие","main":"Общие цвета","foreground_hint":"См. вкладку \\"Дополнительно\\" для более детального контроля","rgbo":"Иконки, акценты, ярылки"},"advanced_colors":{"_tab_label":"Дополнительно","alert":"Фон уведомлений","alert_error":"Ошибки","badge":"Фон значков","badge_notification":"Уведомления","panel_header":"Заголовок панели","top_bar":"Верхняя полоска","borders":"Границы","buttons":"Кнопки","inputs":"Поля ввода","faint_text":"Маловажный текст","post":"Статусы и раздел \\"О себе\\"","alert_neutral":"Нейтральный","alert_warning":"Предупреждение","selectedPost":"Выбранный статус","pressed":"Нажатие","highlight":"Выделенные элементы","icons":"Иконки","poll":"График результатов опроса","wallpaper":"Фон","chat":{"border":"Границы","outgoing":"Исходящие","incoming":"Входящие"},"tabs":"Вкладки","toggled":"Включено","disabled":"Отключено","selectedMenu":"Выбранный пункт меню"},"radii":{"_tab_label":"Скругление"},"shadows":{"_tab_label":"Светотень","component":"Компонент","override":"Переопределить","shadow_id":"Тень №{value}","blur":"Размытие","spread":"Разброс","inset":"Внутренняя","hint":"Для теней вы так же можете использовать --variable в качестве цвета чтобы использовать CSS3-переменные. В таком случае прозрачность работать не будет.","filter_hint":{"always_drop_shadow":"Внимание, эта тень всегда использует {0} когда браузер поддерживает это.","drop_shadow_syntax":"{0} не поддерживает параметр {1} и ключевое слово {2}.","avatar_inset":"Одновременное использование внутренних и внешних теней на (прозрачных) аватарках может дать не те результаты что вы ожидаете.","spread_zero":"Тени с разбросом > 0 будут выглядеть как если бы разброс установлен в 0","inset_classic":"Внутренние тени будут использовать {0}"},"components":{"panel":"Панель","panelHeader":"Заголовок панели","topBar":"Верхняя полоска","avatar":"Аватар (профиль)","avatarStatus":"Аватар (в ленте)","popup":"Всплывающие подсказки","button":"Кнопки","buttonHover":"Кнопки (наведен курсор)","buttonPressed":"Кнопки (нажата)","buttonPressedHover":"Кнопки (нажата+наведен курсор)","input":"Поля ввода"}},"fonts":{"_tab_label":"Шрифты","help":"Выберите тип шрифта для использования в интерфейсе. При выборе варианта \\"другой\\" надо ввести название шрифта в точности как он называется в системе.","components":{"interface":"Интерфейс","input":"Поля ввода","post":"Текст постов","postCode":"Моноширинный текст в статусе (форматирование)"},"family":"Шрифт","size":"Размер (в пикселях)","weight":"Ширина","custom":"Другой"},"preview":{"header":"Пример","content":"Контент","error":"Ошибка стоп 000","button":"Кнопка","text":"Еще немного {0} и масенькая {1}","mono":"контента","input":"Что нового?","faint_link":"Его придется убрать","fine_print":"Если проблемы остались — ваш гуртовщик мыши плохо стоит. {0}.","header_faint":"Все идет по плану","checkbox":"Я подтверждаю что не было ни единого разрыва","link":"ссылка"}},"allow_following_move":"Автоматически начать читать новый профиль при переезде","hide_user_stats":"Не показывать статистику пользователей (например количество читателей)","discoverable":"Разрешить показывать учетную запись в поисковых системах и прочих сервисах","default_vis":"Видимость статусов по умолчанию","mutes_and_blocks":"Блокировки и игнорируемые","composing":"Составление статусов","chatMessageRadius":"Сообщения в беседе","blocks_tab":"Блокировки","import_mutes_from_a_csv_file":"Импортировать игнорируемых из CSV файла","mutes_imported":"Игнорируемые импортированы! Обработка может занять некоторое время.","mute_import_error":"Произошла ошибка при импорте игнорируемых","mute_import":"Импорт игнорируемых","block_export_button":"Экспортирует блокировки в CSV файл","mute_export_button":"Экспортирует игнорируемых пользователей в CSV файл","mute_export":"Экспорт игнорируемых","blocks_imported":"Блокировки импортированы! Обработка может занять некоторое время.","block_import_error":"Произошла ошибка при импорте блокировок","block_import":"Импорт блокировок","block_export":"Экспортировать блокировки","security":"Безопасность","app_name":"Приложение","user_mutes":"Пользователи","post_status_content_type":"Формат составляемых статусов по умолчанию","subject_line_noop":"Не копировать","subject_line_mastodon":"Как в Mastodon: скопировать как есть","subject_line_email":"Как в электронной почте: \\"re: тема\\"","subject_line_behavior":"Копировать тему в ответах","no_mutes":"Нет игнорируемых","no_blocks":"Нет блокировок","notification_visibility_emoji_reactions":"Реакции","notification_visibility_moves":"Переезды","use_contain_fit":"Не обрезать вложения в миниатюрах","profile_fields":{"value":"Значение","name":"Пункт","add_field":"Добавить поле","label":"Таблица метаданных профиля"},"play_videos_in_modal":"Проигрывать видео во всплывающей рамке","mutes_tab":"Игнорируемые","invalid_theme_imported":"Выбраный файл не является темой Pleroma. Изменений в тему не было внесено.","import_blocks_from_a_csv_file":"Импортировать блокировки из CSV файла","hide_filtered_statuses":"Не показывать отфильтрованные статусы","hide_muted_posts":"Не показывать статусы игнорируемых пользователей","hide_post_stats":"Не показывать статистику статусов (например количество отметок «Нравится»)","use_one_click_nsfw":"Открывать вложения имеющие щекотливый характер одним кликом","preload_images":"Предварительно загружать изображения","max_thumbnails":"Максимальное число миниатюр показываемых в статусе","emoji_reactions_on_timeline":"Показывать эмодзи реакции в ленте","domain_mutes":"Узлы","notification_setting_privacy":"Приватность","notification_setting_block_from_strangers":"Не показывать уведомления от пользователей которых вы не читаете","notification_setting_filters":"Фильтрация","notifications":"Уведомления","virtual_scrolling":"Оптимизировать рендеринг ленты","hide_wallpaper":"Скрыть обои узла","accent":"Акцент","upload_a_photo":"Загрузить изображение","notification_mutes":"Чтобы не получать уведомления от конкретного пользователя, заглушите его.","reset_avatar_confirm":"Вы точно хотите сбросить аватар?","reset_profile_banner":"Сбросить баннер профиля","reset_profile_background":"Сбросить фон профиля","reset_avatar":"Сбросить аватар","search_user_to_mute":"Поиск того, кого вы хотите заглушить","search_user_to_block":"Поиск того, кого вы хотите заблокировать","pad_emoji":"Разделять эмодзи пробелами, когда они добавляются из меню","avatar_size_instruction":"Рекомендуется использовать изображение больше чем 150 на 150 пикселей в качестве аватара.","enable_web_push_notifications":"Включить web push-уведомления","notification_blocks":"Блокировка пользователя выключает все уведомления от него, а также отписывает вас от него.","notification_setting_hide_notification_contents":"Скрыть отправителя и содержимое push-уведомлений","version":{"title":"Версия","frontend_version":"Версия фронт-энда","backend_version":"Версия бэк-энда"},"word_filter":"Фильтр слов","sensitive_by_default":"Помечать статусы как имеющие щекотливый характер по умолчанию","reply_visibility_self_short":"Показывать ответы только вам","reply_visibility_following_short":"Показывать ответы тем кого вы читаете","hide_all_muted_posts":"Не показывать игнорируемые статусы","hide_media_previews":"Не показывать вложения в ленте","setting_changed":"Отличается от значения по умолчанию","reset_background_confirm":"Вы точно хотите сбросить фон?","reset_banner_confirm":"Вы точно хотите сбросить баннер?","type_domains_to_mute":"Поиск узлов, которые вы хотите заглушить","more_settings":"Остальные настройки","save":"Сохранить изменения"},"timeline":{"collapse":"Свернуть","conversation":"Разговор","error_fetching":"Ошибка при обновлении","load_older":"Загрузить старые статусы","no_retweet_hint":"Статус помечен как \\"только для читателей\\" или \\"личное сообщение\\" и потому не может быть повторён","repeated":"повторил(а)","show_new":"Показать новые","up_to_date":"Обновлено","error":"Ошибка при обновлении ленты: {0}"},"status":{"bookmark":"Добавить в закладки","unbookmark":"Удалить из закладок","status_deleted":"Статус удален","reply_to":"Ответ","repeats":"Повторы","favorites":"Понравилось","unmute_conversation":"Прекратить игнорировать разговор","mute_conversation":"Игнорировать разговор","thread_muted":"Разговор игнорируется","external_source":"Перейти к источнику","delete_confirm":"Вы действительно хотите удалить данный статус?","delete":"Удалить","copy_link":"Скопировать ссылку"},"user_card":{"block":"Заблокировать","blocked":"Заблокирован","favorites":"Понравившиеся","follow":"Читать","follow_sent":"Запрос отправлен!","follow_progress":"Запрашиваем…","follow_unfollow":"Перестать читать","followees":"Читаемые","followers":"Читатели","following":"Читаете!","follows_you":"Читает вас!","mute":"Игнорировать","muted":"Игнорирую","per_day":"в день","remote_follow":"Читать удалённо","statuses":"Статусы","admin_menu":{"moderation":"Опции модератора","grant_admin":"Сделать администратором","revoke_admin":"Забрать права администратора","grant_moderator":"Сделать модератором","revoke_moderator":"Забрать права модератора","activate_account":"Активировать учетную запись","deactivate_account":"Деактивировать учетную запись","delete_account":"Удалить учетную запись","force_nsfw":"Отмечать статусы пользователя как имеющие щекотливый характер","strip_media":"Убирать вложения из статусов пользователя","force_unlisted":"Не показывать статусы в публичных лентах","sandbox":"Принудить видимость постов только читателям","disable_remote_subscription":"Запретить читать с других узлов","disable_any_subscription":"Запретить читать пользователя","quarantine":"Не федерировать статусы пользователя","delete_user":"Удалить пользователя","delete_user_confirmation":"Вы уверены? Это действие нельзя отменить."},"media":"С вложениями","mention":"Упомянуть","show_repeats":"Показывать повторы","hide_repeats":"Скрыть повторы","report":"Пожаловаться","message":"Написать сообщение","highlight":{"side":"Полоска сбоку","striped":"Фон в полоску","solid":"Сплошной фон","disabled":"Нет выделения"}},"user_profile":{"timeline_title":"Лента пользователя"},"search":{"people":"Люди","hashtags":"Хэштэги","person_talking":"Популярно у {count} человека","people_talking":"Популярно у {count} человек","no_results":"Ничего не найдено"},"password_reset":{"forgot_password":"Забыли пароль?","password_reset":"Сброс пароля","instruction":"Введите ваш адрес электронной почты или имя пользователя: на вашу электронную почту будет отправлена ссылка для сброса пароля.","placeholder":"Ваш адрес электронной почты или имя пользователя","check_email":"Проверьте вашу электронную почту и перейдите по ссылке для сброса пароля.","return_home":"Вернуться на главную страницу","too_many_requests":"Вы исчерпали допустимое количество попыток, попробуйте позже.","password_reset_disabled":"Автоматический сброс пароля отключен. Свяжитесь с администратором данного узла для сброса пароля.","password_reset_required_but_mailer_is_disabled":"Вы должны сбросить свой пароль, однако автоматический сброс пароля отключен. Пожалуйста свяжитесь с администратором данного узла."},"about":{"mrf":{"federation":"Федерация","simple":{"accept_desc":"Данный узел принимает сообщения только со следующих узлов:","ftl_removal_desc":"Данный узел скрывает следующие узлы с федеративной ленты:","media_nsfw_desc":"Данный узел принужденно помечает вложения со следующих узлов как имеющие щекотливый характер:","simple_policies":"Правила для определенных узлов","accept":"Белый список","reject":"Черный список","reject_desc":"Данный узел не принимает сообщения со следующих узлов:","quarantine":"Зона карантина","quarantine_desc":"Данный узел отправляет только публичные статусы следующим узлам:","ftl_removal":"Скрытие с федеративной ленты","media_removal":"Удаление вложений","media_removal_desc":"Данный узел удаляет вложения со следующих узлов:","media_nsfw":"Принужденно помеченно как имеющее щекотливый характер"},"keyword":{"ftl_removal":"Убрать из федеративной ленты","reject":"Отклонить","keyword_policies":"Действия на ключевые слова","replace":"Заменить","is_replaced_by":"→"},"mrf_policies":"Активные правила MRF (модуль переписывания сообщений)","mrf_policies_desc":"Правила MRF (модуль переписывания сообщений) влияют на федерацию данного узла. Следующие правила активны:"},"staff":"Администрация"},"domain_mute_card":{"mute":"Игнорировать","mute_progress":"В процессе…","unmute":"Прекратить игнорирование","unmute_progress":"В процессе…"},"exporter":{"export":"Экспорт","processing":"Запрос в обработке, вам скоро будет предложено загрузить файл"},"features_panel":{"chat":"Чат","media_proxy":"Прокси для внешних вложений","text_limit":"Лимит символов","title":"Особенности","gopher":"Gopher","who_to_follow":"Предложения кого читать","pleroma_chat_messages":"Pleroma Чат","upload_limit":"Наибольший размер загружаемого файла","scope_options":"Настраиваемая видимость статусов"},"tool_tip":{"accept_follow_request":"Принять запрос на чтение","reject_follow_request":"Отклонить запрос на чтение","media_upload":"Прикрепить вложение"},"image_cropper":{"save_without_cropping":"Сохранить не обрезая","save":"Сохранить","crop_picture":"Обрезать картинку","cancel":"Отменить"},"errors":{"storage_unavailable":"Pleroma не смогла получить доступ к хранилищу браузера. Ваша сессия и настройки не будут сохранены, и вы можете столкнуться с непредвиденными проблемами. Попробуйте включить файлы cookie."},"polls":{"not_enough_options":"Недостаточно уникальных вариантов в опросе","expired":"Опрос закончился {0} назад","expires_in":"Опрос заканчивается через {0}","expiry":"Срок опроса","multiple_choices":"Несколько вариантов","single_choice":"Один вариант","type":"Тип опроса","vote":"Проголосовать","votes":"голосов","option":"Вариант","add_option":"Добавить вариант","add_poll":"Прикрепить опрос","votes_count":"{count} голос | {count} голосов","people_voted_count":"{count} человек проголосовал | {count} человек проголосовали"},"media_modal":{"next":"Следующая","previous":"Предыдущая"},"importer":{"error":"Произошла ошибка при импорте файла.","success":"Импорт прошел успешно.","submit":"Отправить"},"selectable_list":{"select_all":"Выбрать все"},"emoji":{"load_all":"Все {emojiAmount} эмодзи загружаются","load_all_hint":"Загружены первые {saneAmount} эмодзи, загрузка всех эмодзи может привести к проблемам с производительностью.","unicode":"Стандартные эмодзи","custom":"Пользовательские эмодзи","add_emoji":"Добавить эмодзи","search_emoji":"Поиск эмодзи","keep_open":"Оставить окно выбора открытым","emoji":"Эмодзи","stickers":"Стикеры"},"shoutbox":{"title":"Болтовня"},"time":{"days_short":"{0}дн","years_short":"{0}г","year_short":"{0}г","weeks_short":"{0}нед","week_short":"{0}нед","seconds_short":"{0}сек","second_short":"{0}с","now_short":"только что","now":"только что","months_short":"{0}мес","month_short":"{0}мес","minutes_short":"{0}мин","minute_short":"{0}мин","in_past":"{0} назад","in_future":"через {0}","hours_short":"{0}ч","hour_short":"{0}ч","hour":"{0} час","day_short":"{0}д","days":"{0} дней"},"chats":{"empty_chat_list_placeholder":"У вас пока нет бесед. Начните одну!","delete_confirm":"Вы точно хотите удалить сообщение?","empty_message_error":"Нельзя отправить пустое сообщение","new":"Новая беседа","chats":"Беседы","delete":"Удалить","message_user":"Напишите {nickname}","you":"Вы:","error_sending_message":"Произошла ошибка при отправке сообщения."},"remote_user_resolver":{"error":"Не найдено.","searching_for":"Ищем"},"upload":{"error":{"message":"Произошла ошибка при загрузке: {0}"}},"user_reporting":{"add_comment_description":"Жалоба будет направлена модераторам вашего узла. Вы можете указать причину жалобы ниже:","forward_description":"Данный пользователь находится на другом узле. Отослать туда копию вашей жалобы?"},"file_type":{"file":"Файл","video":"Видеозапись","audio":"Аудиозапись","image":"Изображение"}}')}}]); +//# sourceMappingURL=28.75c01cd71372c39d5af8.js.map \ No newline at end of file diff --git a/priv/static/static/js/28.75c01cd71372c39d5af8.js.map b/priv/static/static/js/28.75c01cd71372c39d5af8.js.map new file mode 100644 index 000000000..4b21e788e --- /dev/null +++ b/priv/static/static/js/28.75c01cd71372c39d5af8.js.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/28.75c01cd71372c39d5af8.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/28.a88999ebb3f7ec930aad.js.map b/priv/static/static/js/28.a88999ebb3f7ec930aad.js.map deleted file mode 100644 index d67ecaec2..000000000 --- a/priv/static/static/js/28.a88999ebb3f7ec930aad.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/28.a88999ebb3f7ec930aad.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/29.519f681d194c212ae75f.js.map b/priv/static/static/js/29.519f681d194c212ae75f.js.map deleted file mode 100644 index e9c22ff88..000000000 --- a/priv/static/static/js/29.519f681d194c212ae75f.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/29.519f681d194c212ae75f.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/29.519f681d194c212ae75f.js b/priv/static/static/js/29.b53cf1f3bcece005d78a.js similarity index 93% rename from priv/static/static/js/29.519f681d194c212ae75f.js rename to priv/static/static/js/29.b53cf1f3bcece005d78a.js index aa2571733..3b357be95 100644 --- a/priv/static/static/js/29.519f681d194c212ae75f.js +++ b/priv/static/static/js/29.b53cf1f3bcece005d78a.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[29],{609:function(e){e.exports=JSON.parse('{"chat.title":"చాట్","features_panel.chat":"చాట్","features_panel.gopher":"గోఫర్","features_panel.media_proxy":"మీడియా ప్రాక్సీ","features_panel.scope_options":"స్కోప్ ఎంపికలు","features_panel.text_limit":"వచన పరిమితి","features_panel.title":"లక్షణాలు","features_panel.who_to_follow":"ఎవరిని అనుసరించాలి","finder.error_fetching_user":"వినియోగదారుని పొందడంలో లోపం","finder.find_user":"వినియోగదారుని కనుగొనండి","general.apply":"వర్తించు","general.submit":"సమర్పించు","general.more":"మరిన్ని","general.generic_error":"ఒక తప్పిదం సంభవించినది","general.optional":"ఐచ్చికం","image_cropper.crop_picture":"చిత్రాన్ని కత్తిరించండి","image_cropper.save":"దాచు","image_cropper.save_without_cropping":"కత్తిరించకుండా సేవ్ చేయి","image_cropper.cancel":"రద్దుచేయి","login.login":"లాగిన్","login.description":"OAuth తో లాగిన్ అవ్వండి","login.logout":"లాగౌట్","login.password":"సంకేతపదము","login.placeholder":"ఉదా. lain","login.register":"నమోదు చేసుకోండి","login.username":"వాడుకరి పేరు","login.hint":"చర్చలో చేరడానికి లాగిన్ అవ్వండి","media_modal.previous":"ముందరి పుట","media_modal.next":"తరువాత","nav.about":"గురించి","nav.back":"వెనక్కి","nav.chat":"స్థానిక చాట్","nav.friend_requests":"అనుసరించడానికి అభ్యర్థనలు","nav.mentions":"ప్రస్తావనలు","nav.dms":"నేరుగా పంపిన సందేశాలు","nav.public_tl":"ప్రజా కాలక్రమం","nav.timeline":"కాలక్రమం","nav.twkn":"మొత్తం తెలిసిన నెట్వర్క్","nav.user_search":"వాడుకరి శోధన","nav.who_to_follow":"ఎవరిని అనుసరించాలి","nav.preferences":"ప్రాధాన్యతలు","notifications.broken_favorite":"తెలియని స్థితి, దాని కోసం శోధిస్తోంది...","notifications.favorited_you":"మీ స్థితిని ఇష్టపడ్డారు","notifications.followed_you":"మిమ్మల్ని అనుసరించారు","notifications.load_older":"పాత నోటిఫికేషన్లను లోడ్ చేయండి","notifications.notifications":"ప్రకటనలు","notifications.read":"చదివాను!","notifications.repeated_you":"మీ స్థితిని పునరావృతం చేసారు","notifications.no_more_notifications":"ఇక నోటిఫికేషన్లు లేవు","post_status.new_status":"క్రొత్త స్థితిని పోస్ట్ చేయండి","post_status.account_not_locked_warning":"మీ ఖాతా {౦} కాదు. ఎవరైనా మిమ్మల్ని అనుసరించి అనుచరులకు మాత్రమే ఉద్దేశించిన పోస్టులను చూడవచ్చు.","post_status.account_not_locked_warning_link":"తాళం వేయబడినది","post_status.attachments_sensitive":"జోడింపులను సున్నితమైనవిగా గుర్తించండి","post_status.content_type.text/plain":"సాధారణ అక్షరాలు","post_status.content_type.text/html":"హెచ్‌టిఎమ్ఎల్","post_status.content_type.text/markdown":"మార్క్డౌన్","post_status.content_warning":"విషయం (ఐచ్ఛికం)","post_status.default":"ఇప్పుడే విజయవాడలో దిగాను.","post_status.direct_warning":"ఈ పోస్ట్ మాత్రమే పేర్కొన్న వినియోగదారులకు మాత్రమే కనిపిస్తుంది.","post_status.posting":"పోస్ట్ చేస్తున్నా","post_status.scope.direct":"ప్రత్యక్ష - పేర్కొన్న వినియోగదారులకు మాత్రమే పోస్ట్ చేయబడుతుంది","post_status.scope.private":"అనుచరులకు మాత్రమే - అనుచరులకు మాత్రమే పోస్ట్ చేయబడుతుంది","post_status.scope.public":"పబ్లిక్ - ప్రజా కాలక్రమాలకు పోస్ట్ చేయబడుతుంది","post_status.scope.unlisted":"జాబితా చేయబడనిది - ప్రజా కాలక్రమాలకు పోస్ట్ చేయవద్దు","registration.bio":"బయో","registration.email":"ఈ మెయిల్","registration.fullname":"ప్రదర్శన పేరు","registration.password_confirm":"పాస్వర్డ్ నిర్ధారణ","registration.registration":"నమోదు","registration.token":"ఆహ్వాన టోకెన్","registration.captcha":"కాప్చా","registration.new_captcha":"కొత్త కాప్చా పొందుటకు చిత్రం మీద క్లిక్ చేయండి","registration.username_placeholder":"ఉదా. lain","registration.fullname_placeholder":"ఉదా. Lain Iwakura","registration.bio_placeholder":"e.g.\\nHi, I\'m Lain.\\nI’m an anime girl living in suburban Japan. You may know me from the Wired.","registration.validations.username_required":"ఖాళీగా విడిచిపెట్టరాదు","registration.validations.fullname_required":"ఖాళీగా విడిచిపెట్టరాదు","registration.validations.email_required":"ఖాళీగా విడిచిపెట్టరాదు","registration.validations.password_required":"ఖాళీగా విడిచిపెట్టరాదు","registration.validations.password_confirmation_required":"ఖాళీగా విడిచిపెట్టరాదు","registration.validations.password_confirmation_match":"సంకేతపదం వలె ఉండాలి","settings.app_name":"అనువర్తన పేరు","settings.attachmentRadius":"జోడింపులు","settings.attachments":"జోడింపులు","settings.avatar":"అవతారం","settings.avatarAltRadius":"అవతారాలు (ప్రకటనలు)","settings.avatarRadius":"అవతారాలు","settings.background":"బ్యాక్‌గ్రౌండు","settings.bio":"బయో","settings.blocks_tab":"బ్లాక్‌లు","settings.btnRadius":"బటన్లు","settings.cBlue":"నీలం (ప్రత్యుత్తరం, అనుసరించండి)","settings.cGreen":"Green (Retweet)","settings.cOrange":"ఆరెంజ్ (ఇష్టపడు)","settings.cRed":"Red (Cancel)","settings.change_password":"పాస్‌వర్డ్ మార్చండి","settings.change_password_error":"మీ పాస్వర్డ్ను మార్చడంలో సమస్య ఉంది.","settings.changed_password":"పాస్వర్డ్ విజయవంతంగా మార్చబడింది!","settings.collapse_subject":"Collapse posts with subjects","settings.composing":"Composing","settings.confirm_new_password":"కొత్త పాస్వర్డ్ను నిర్ధారించండి","settings.current_avatar":"మీ ప్రస్తుత అవతారం","settings.current_password":"ప్రస్తుత పాస్వర్డ్","settings.current_profile_banner":"మీ ప్రస్తుత ప్రొఫైల్ బ్యానర్","settings.data_import_export_tab":"Data Import / Export","settings.default_vis":"Default visibility scope","settings.delete_account":"Delete Account","settings.delete_account_description":"మీ ఖాతా మరియు మీ అన్ని సందేశాలను శాశ్వతంగా తొలగించండి.","settings.delete_account_error":"There was an issue deleting your account. If this persists please contact your instance administrator.","settings.delete_account_instructions":"ఖాతా తొలగింపును నిర్ధారించడానికి దిగువ ఇన్పుట్లో మీ పాస్వర్డ్ను టైప్ చేయండి.","settings.avatar_size_instruction":"అవతార్ చిత్రాలకు సిఫార్సు చేసిన కనీస పరిమాణం 150x150 పిక్సెల్స్.","settings.export_theme":"Save preset","settings.filtering":"వడపోత","settings.filtering_explanation":"All statuses containing these words will be muted, one per line","settings.follow_export":"Follow export","settings.follow_export_button":"Export your follows to a csv file","settings.follow_export_processing":"Processing, you\'ll soon be asked to download your file","settings.follow_import":"Follow import","settings.follow_import_error":"అనుచరులను దిగుమతి చేయడంలో లోపం","settings.follows_imported":"Follows imported! Processing them will take a while.","settings.foreground":"Foreground","settings.general":"General","settings.hide_attachments_in_convo":"సంభాషణలలో జోడింపులను దాచు","settings.hide_attachments_in_tl":"కాలక్రమంలో జోడింపులను దాచు","settings.hide_muted_posts":"మ్యూట్ చేసిన వినియోగదారుల యొక్క పోస్ట్లను దాచిపెట్టు","settings.max_thumbnails":"Maximum amount of thumbnails per post","settings.hide_isp":"Hide instance-specific panel","settings.preload_images":"Preload images","settings.use_one_click_nsfw":"కేవలం ఒక క్లిక్ తో NSFW జోడింపులను తెరవండి","settings.hide_post_stats":"Hide post statistics (e.g. the number of favorites)","settings.hide_user_stats":"Hide user statistics (e.g. the number of followers)","settings.hide_filtered_statuses":"Hide filtered statuses","settings.import_followers_from_a_csv_file":"Import follows from a csv file","settings.import_theme":"Load preset","settings.inputRadius":"Input fields","settings.checkboxRadius":"Checkboxes","settings.instance_default":"(default: {value})","settings.instance_default_simple":"(default)","settings.interface":"Interface","settings.interfaceLanguage":"Interface language","settings.invalid_theme_imported":"The selected file is not a supported Pleroma theme. No changes to your theme were made.","settings.limited_availability":"మీ బ్రౌజర్లో అందుబాటులో లేదు","settings.links":"Links","settings.lock_account_description":"మీ ఖాతాను ఆమోదించిన అనుచరులకు మాత్రమే పరిమితం చేయండి","settings.loop_video":"Loop videos","settings.loop_video_silent_only":"Loop only videos without sound (i.e. Mastodon\'s \\"gifs\\")","settings.mutes_tab":"మ్యూట్ చేయబడినవి","settings.play_videos_in_modal":"మీడియా వీక్షికలో నేరుగా వీడియోలను ప్లే చేయి","settings.use_contain_fit":"అటాచ్మెంట్ సూక్ష్మచిత్రాలను కత్తిరించవద్దు","settings.name":"Name","settings.name_bio":"పేరు & బయో","settings.new_password":"కొత్త సంకేతపదం","settings.notification_visibility":"చూపించవలసిన నోటిఫికేషన్ రకాలు","settings.notification_visibility_follows":"Follows","settings.notification_visibility_likes":"ఇష్టాలు","settings.notification_visibility_mentions":"ప్రస్తావనలు","settings.notification_visibility_repeats":"పునఃప్రసారాలు","settings.no_rich_text_description":"అన్ని పోస్ట్ల నుండి రిచ్ టెక్స్ట్ ఫార్మాటింగ్ను స్ట్రిప్ చేయండి","settings.no_blocks":"బ్లాక్స్ లేవు","settings.no_mutes":"మ్యూట్లు లేవు","settings.hide_follows_description":"నేను ఎవరిని అనుసరిస్తున్నానో చూపించవద్దు","settings.hide_followers_description":"నన్ను ఎవరు అనుసరిస్తున్నారో చూపవద్దు","settings.show_admin_badge":"నా ప్రొఫైల్ లో అడ్మిన్ బ్యాడ్జ్ చూపించు","settings.show_moderator_badge":"నా ప్రొఫైల్లో మోడరేటర్ బ్యాడ్జ్ని చూపించు","settings.nsfw_clickthrough":"Enable clickthrough NSFW attachment hiding","settings.oauth_tokens":"OAuth tokens","settings.token":"Token","settings.refresh_token":"Refresh Token","settings.valid_until":"Valid Until","settings.revoke_token":"Revoke","settings.panelRadius":"Panels","settings.pause_on_unfocused":"Pause streaming when tab is not focused","settings.presets":"Presets","settings.profile_background":"Profile Background","settings.profile_banner":"Profile Banner","settings.profile_tab":"Profile","settings.radii_help":"Set up interface edge rounding (in pixels)","settings.replies_in_timeline":"Replies in timeline","settings.reply_visibility_all":"Show all replies","settings.reply_visibility_following":"Only show replies directed at me or users I\'m following","settings.reply_visibility_self":"Only show replies directed at me","settings.saving_err":"Error saving settings","settings.saving_ok":"Settings saved","settings.security_tab":"Security","settings.scope_copy":"Copy scope when replying (DMs are always copied)","settings.set_new_avatar":"Set new avatar","settings.set_new_profile_background":"Set new profile background","settings.set_new_profile_banner":"Set new profile banner","settings.settings":"Settings","settings.subject_input_always_show":"Always show subject field","settings.subject_line_behavior":"Copy subject when replying","settings.subject_line_email":"Like email: \\"re: subject\\"","settings.subject_line_mastodon":"Like mastodon: copy as is","settings.subject_line_noop":"Do not copy","settings.post_status_content_type":"Post status content type","settings.stop_gifs":"Play-on-hover GIFs","settings.streaming":"Enable automatic streaming of new posts when scrolled to the top","settings.text":"Text","settings.theme":"Theme","settings.theme_help":"Use hex color codes (#rrggbb) to customize your color theme.","settings.theme_help_v2_1":"You can also override certain component\'s colors and opacity by toggling the checkbox, use \\"Clear all\\" button to clear all overrides.","settings.theme_help_v2_2":"Icons underneath some entries are background/text contrast indicators, hover over for detailed info. Please keep in mind that when using transparency contrast indicators show the worst possible case.","settings.tooltipRadius":"Tooltips/alerts","settings.upload_a_photo":"Upload a photo","settings.user_settings":"User Settings","settings.values.false":"no","settings.values.true":"yes","settings.notifications":"Notifications","settings.enable_web_push_notifications":"Enable web push notifications","settings.style.switcher.keep_color":"Keep colors","settings.style.switcher.keep_shadows":"Keep shadows","settings.style.switcher.keep_opacity":"Keep opacity","settings.style.switcher.keep_roundness":"Keep roundness","settings.style.switcher.keep_fonts":"Keep fonts","settings.style.switcher.save_load_hint":"\\"Keep\\" options preserve currently set options when selecting or loading themes, it also stores said options when exporting a theme. When all checkboxes unset, exporting theme will save everything.","settings.style.switcher.reset":"Reset","settings.style.switcher.clear_all":"Clear all","settings.style.switcher.clear_opacity":"Clear opacity","settings.style.common.color":"Color","settings.style.common.opacity":"Opacity","settings.style.common.contrast.hint":"Contrast ratio is {ratio}, it {level} {context}","settings.style.common.contrast.level.aa":"meets Level AA guideline (minimal)","settings.style.common.contrast.level.aaa":"meets Level AAA guideline (recommended)","settings.style.common.contrast.level.bad":"doesn\'t meet any accessibility guidelines","settings.style.common.contrast.context.18pt":"for large (18pt+) text","settings.style.common.contrast.context.text":"for text","settings.style.common_colors._tab_label":"Common","settings.style.common_colors.main":"Common colors","settings.style.common_colors.foreground_hint":"See \\"Advanced\\" tab for more detailed control","settings.style.common_colors.rgbo":"Icons, accents, badges","settings.style.advanced_colors._tab_label":"Advanced","settings.style.advanced_colors.alert":"Alert background","settings.style.advanced_colors.alert_error":"Error","settings.style.advanced_colors.badge":"Badge background","settings.style.advanced_colors.badge_notification":"Notification","settings.style.advanced_colors.panel_header":"Panel header","settings.style.advanced_colors.top_bar":"Top bar","settings.style.advanced_colors.borders":"Borders","settings.style.advanced_colors.buttons":"Buttons","settings.style.advanced_colors.inputs":"Input fields","settings.style.advanced_colors.faint_text":"Faded text","settings.style.radii._tab_label":"Roundness","settings.style.shadows._tab_label":"Shadow and lighting","settings.style.shadows.component":"Component","settings.style.shadows.override":"Override","settings.style.shadows.shadow_id":"Shadow #{value}","settings.style.shadows.blur":"Blur","settings.style.shadows.spread":"Spread","settings.style.shadows.inset":"Inset","settings.style.shadows.hint":"For shadows you can also use --variable as a color value to use CSS3 variables. Please note that setting opacity won\'t work in this case.","settings.style.shadows.filter_hint.always_drop_shadow":"Warning, this shadow always uses {0} when browser supports it.","settings.style.shadows.filter_hint.drop_shadow_syntax":"{0} does not support {1} parameter and {2} keyword.","settings.style.shadows.filter_hint.avatar_inset":"Please note that combining both inset and non-inset shadows on avatars might give unexpected results with transparent avatars.","settings.style.shadows.filter_hint.spread_zero":"Shadows with spread > 0 will appear as if it was set to zero","settings.style.shadows.filter_hint.inset_classic":"Inset shadows will be using {0}","settings.style.shadows.components.panel":"Panel","settings.style.shadows.components.panelHeader":"Panel header","settings.style.shadows.components.topBar":"Top bar","settings.style.shadows.components.avatar":"User avatar (in profile view)","settings.style.shadows.components.avatarStatus":"User avatar (in post display)","settings.style.shadows.components.popup":"Popups and tooltips","settings.style.shadows.components.button":"Button","settings.style.shadows.components.buttonHover":"Button (hover)","settings.style.shadows.components.buttonPressed":"Button (pressed)","settings.style.shadows.components.buttonPressedHover":"Button (pressed+hover)","settings.style.shadows.components.input":"Input field","settings.style.fonts._tab_label":"Fonts","settings.style.fonts.help":"Select font to use for elements of UI. For \\"custom\\" you have to enter exact font name as it appears in system.","settings.style.fonts.components.interface":"Interface","settings.style.fonts.components.input":"Input fields","settings.style.fonts.components.post":"Post text","settings.style.fonts.components.postCode":"Monospaced text in a post (rich text)","settings.style.fonts.family":"Font name","settings.style.fonts.size":"Size (in px)","settings.style.fonts.weight":"Weight (boldness)","settings.style.fonts.custom":"Custom","settings.style.preview.header":"Preview","settings.style.preview.content":"Content","settings.style.preview.error":"Example error","settings.style.preview.button":"Button","settings.style.preview.text":"A bunch of more {0} and {1}","settings.style.preview.mono":"content","settings.style.preview.input":"Just landed in L.A.","settings.style.preview.faint_link":"helpful manual","settings.style.preview.fine_print":"Read our {0} to learn nothing useful!","settings.style.preview.header_faint":"This is fine","settings.style.preview.checkbox":"I have skimmed over terms and conditions","settings.style.preview.link":"a nice lil\' link","settings.version.title":"Version","settings.version.backend_version":"Backend Version","settings.version.frontend_version":"Frontend Version","timeline.collapse":"Collapse","timeline.conversation":"Conversation","timeline.error_fetching":"Error fetching updates","timeline.load_older":"Load older statuses","timeline.no_retweet_hint":"Post is marked as followers-only or direct and cannot be repeated","timeline.repeated":"repeated","timeline.show_new":"Show new","timeline.up_to_date":"Up-to-date","timeline.no_more_statuses":"No more statuses","timeline.no_statuses":"No statuses","status.reply_to":"Reply to","status.replies_list":"Replies:","user_card.approve":"Approve","user_card.block":"Block","user_card.blocked":"Blocked!","user_card.deny":"Deny","user_card.favorites":"Favorites","user_card.follow":"Follow","user_card.follow_sent":"Request sent!","user_card.follow_progress":"Requesting…","user_card.follow_again":"Send request again?","user_card.follow_unfollow":"Unfollow","user_card.followees":"Following","user_card.followers":"Followers","user_card.following":"Following!","user_card.follows_you":"Follows you!","user_card.its_you":"It\'s you!","user_card.media":"Media","user_card.mute":"Mute","user_card.muted":"Muted","user_card.per_day":"per day","user_card.remote_follow":"Remote follow","user_card.statuses":"Statuses","user_card.unblock":"Unblock","user_card.unblock_progress":"Unblocking...","user_card.block_progress":"Blocking...","user_card.unmute":"Unmute","user_card.unmute_progress":"Unmuting...","user_card.mute_progress":"Muting...","user_profile.timeline_title":"User Timeline","user_profile.profile_does_not_exist":"Sorry, this profile does not exist.","user_profile.profile_loading_error":"Sorry, there was an error loading this profile.","who_to_follow.more":"More","who_to_follow.who_to_follow":"Who to follow","tool_tip.media_upload":"Upload Media","tool_tip.repeat":"Repeat","tool_tip.reply":"Reply","tool_tip.favorite":"Favorite","tool_tip.user_settings":"User Settings","upload.error.base":"Upload failed.","upload.error.file_too_big":"File too big [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]","upload.error.default":"Try again later","upload.file_size_units.B":"B","upload.file_size_units.KiB":"KiB","upload.file_size_units.MiB":"MiB","upload.file_size_units.GiB":"GiB","upload.file_size_units.TiB":"TiB"}')}}]); -//# sourceMappingURL=29.519f681d194c212ae75f.js.map \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[29],{622:function(e){e.exports=JSON.parse('{"chat.title":"చాట్","features_panel.chat":"చాట్","features_panel.gopher":"గోఫర్","features_panel.media_proxy":"మీడియా ప్రాక్సీ","features_panel.scope_options":"స్కోప్ ఎంపికలు","features_panel.text_limit":"వచన పరిమితి","features_panel.title":"లక్షణాలు","features_panel.who_to_follow":"ఎవరిని అనుసరించాలి","finder.error_fetching_user":"వినియోగదారుని పొందడంలో లోపం","finder.find_user":"వినియోగదారుని కనుగొనండి","general.apply":"వర్తించు","general.submit":"సమర్పించు","general.more":"మరిన్ని","general.generic_error":"ఒక తప్పిదం సంభవించినది","general.optional":"ఐచ్చికం","image_cropper.crop_picture":"చిత్రాన్ని కత్తిరించండి","image_cropper.save":"దాచు","image_cropper.save_without_cropping":"కత్తిరించకుండా సేవ్ చేయి","image_cropper.cancel":"రద్దుచేయి","login.login":"లాగిన్","login.description":"OAuth తో లాగిన్ అవ్వండి","login.logout":"లాగౌట్","login.password":"సంకేతపదము","login.placeholder":"ఉదా. lain","login.register":"నమోదు చేసుకోండి","login.username":"వాడుకరి పేరు","login.hint":"చర్చలో చేరడానికి లాగిన్ అవ్వండి","media_modal.previous":"ముందరి పుట","media_modal.next":"తరువాత","nav.about":"గురించి","nav.back":"వెనక్కి","nav.chat":"స్థానిక చాట్","nav.friend_requests":"అనుసరించడానికి అభ్యర్థనలు","nav.mentions":"ప్రస్తావనలు","nav.dms":"నేరుగా పంపిన సందేశాలు","nav.public_tl":"ప్రజా కాలక్రమం","nav.timeline":"కాలక్రమం","nav.twkn":"మొత్తం తెలిసిన నెట్వర్క్","nav.user_search":"వాడుకరి శోధన","nav.who_to_follow":"ఎవరిని అనుసరించాలి","nav.preferences":"ప్రాధాన్యతలు","notifications.broken_favorite":"తెలియని స్థితి, దాని కోసం శోధిస్తోంది...","notifications.favorited_you":"మీ స్థితిని ఇష్టపడ్డారు","notifications.followed_you":"మిమ్మల్ని అనుసరించారు","notifications.load_older":"పాత నోటిఫికేషన్లను లోడ్ చేయండి","notifications.notifications":"ప్రకటనలు","notifications.read":"చదివాను!","notifications.repeated_you":"మీ స్థితిని పునరావృతం చేసారు","notifications.no_more_notifications":"ఇక నోటిఫికేషన్లు లేవు","post_status.new_status":"క్రొత్త స్థితిని పోస్ట్ చేయండి","post_status.account_not_locked_warning":"మీ ఖాతా {౦} కాదు. ఎవరైనా మిమ్మల్ని అనుసరించి అనుచరులకు మాత్రమే ఉద్దేశించిన పోస్టులను చూడవచ్చు.","post_status.account_not_locked_warning_link":"తాళం వేయబడినది","post_status.attachments_sensitive":"జోడింపులను సున్నితమైనవిగా గుర్తించండి","post_status.content_type.text/plain":"సాధారణ అక్షరాలు","post_status.content_type.text/html":"హెచ్‌టిఎమ్ఎల్","post_status.content_type.text/markdown":"మార్క్డౌన్","post_status.content_warning":"విషయం (ఐచ్ఛికం)","post_status.default":"ఇప్పుడే విజయవాడలో దిగాను.","post_status.direct_warning":"ఈ పోస్ట్ మాత్రమే పేర్కొన్న వినియోగదారులకు మాత్రమే కనిపిస్తుంది.","post_status.posting":"పోస్ట్ చేస్తున్నా","post_status.scope.direct":"ప్రత్యక్ష - పేర్కొన్న వినియోగదారులకు మాత్రమే పోస్ట్ చేయబడుతుంది","post_status.scope.private":"అనుచరులకు మాత్రమే - అనుచరులకు మాత్రమే పోస్ట్ చేయబడుతుంది","post_status.scope.public":"పబ్లిక్ - ప్రజా కాలక్రమాలకు పోస్ట్ చేయబడుతుంది","post_status.scope.unlisted":"జాబితా చేయబడనిది - ప్రజా కాలక్రమాలకు పోస్ట్ చేయవద్దు","registration.bio":"బయో","registration.email":"ఈ మెయిల్","registration.fullname":"ప్రదర్శన పేరు","registration.password_confirm":"పాస్వర్డ్ నిర్ధారణ","registration.registration":"నమోదు","registration.token":"ఆహ్వాన టోకెన్","registration.captcha":"కాప్చా","registration.new_captcha":"కొత్త కాప్చా పొందుటకు చిత్రం మీద క్లిక్ చేయండి","registration.username_placeholder":"ఉదా. lain","registration.fullname_placeholder":"ఉదా. Lain Iwakura","registration.bio_placeholder":"e.g.\\nHi, I\'m Lain.\\nI’m an anime girl living in suburban Japan. You may know me from the Wired.","registration.validations.username_required":"ఖాళీగా విడిచిపెట్టరాదు","registration.validations.fullname_required":"ఖాళీగా విడిచిపెట్టరాదు","registration.validations.email_required":"ఖాళీగా విడిచిపెట్టరాదు","registration.validations.password_required":"ఖాళీగా విడిచిపెట్టరాదు","registration.validations.password_confirmation_required":"ఖాళీగా విడిచిపెట్టరాదు","registration.validations.password_confirmation_match":"సంకేతపదం వలె ఉండాలి","settings.app_name":"అనువర్తన పేరు","settings.attachmentRadius":"జోడింపులు","settings.attachments":"జోడింపులు","settings.avatar":"అవతారం","settings.avatarAltRadius":"అవతారాలు (ప్రకటనలు)","settings.avatarRadius":"అవతారాలు","settings.background":"బ్యాక్‌గ్రౌండు","settings.bio":"బయో","settings.blocks_tab":"బ్లాక్‌లు","settings.btnRadius":"బటన్లు","settings.cBlue":"నీలం (ప్రత్యుత్తరం, అనుసరించండి)","settings.cGreen":"Green (Retweet)","settings.cOrange":"ఆరెంజ్ (ఇష్టపడు)","settings.cRed":"Red (Cancel)","settings.change_password":"పాస్‌వర్డ్ మార్చండి","settings.change_password_error":"మీ పాస్వర్డ్ను మార్చడంలో సమస్య ఉంది.","settings.changed_password":"పాస్వర్డ్ విజయవంతంగా మార్చబడింది!","settings.collapse_subject":"Collapse posts with subjects","settings.composing":"Composing","settings.confirm_new_password":"కొత్త పాస్వర్డ్ను నిర్ధారించండి","settings.current_avatar":"మీ ప్రస్తుత అవతారం","settings.current_password":"ప్రస్తుత పాస్వర్డ్","settings.current_profile_banner":"మీ ప్రస్తుత ప్రొఫైల్ బ్యానర్","settings.data_import_export_tab":"Data Import / Export","settings.default_vis":"Default visibility scope","settings.delete_account":"Delete Account","settings.delete_account_description":"మీ ఖాతా మరియు మీ అన్ని సందేశాలను శాశ్వతంగా తొలగించండి.","settings.delete_account_error":"There was an issue deleting your account. If this persists please contact your instance administrator.","settings.delete_account_instructions":"ఖాతా తొలగింపును నిర్ధారించడానికి దిగువ ఇన్పుట్లో మీ పాస్వర్డ్ను టైప్ చేయండి.","settings.avatar_size_instruction":"అవతార్ చిత్రాలకు సిఫార్సు చేసిన కనీస పరిమాణం 150x150 పిక్సెల్స్.","settings.export_theme":"Save preset","settings.filtering":"వడపోత","settings.filtering_explanation":"All statuses containing these words will be muted, one per line","settings.follow_export":"Follow export","settings.follow_export_button":"Export your follows to a csv file","settings.follow_export_processing":"Processing, you\'ll soon be asked to download your file","settings.follow_import":"Follow import","settings.follow_import_error":"అనుచరులను దిగుమతి చేయడంలో లోపం","settings.follows_imported":"Follows imported! Processing them will take a while.","settings.foreground":"Foreground","settings.general":"General","settings.hide_attachments_in_convo":"సంభాషణలలో జోడింపులను దాచు","settings.hide_attachments_in_tl":"కాలక్రమంలో జోడింపులను దాచు","settings.hide_muted_posts":"మ్యూట్ చేసిన వినియోగదారుల యొక్క పోస్ట్లను దాచిపెట్టు","settings.max_thumbnails":"Maximum amount of thumbnails per post","settings.hide_isp":"Hide instance-specific panel","settings.preload_images":"Preload images","settings.use_one_click_nsfw":"కేవలం ఒక క్లిక్ తో NSFW జోడింపులను తెరవండి","settings.hide_post_stats":"Hide post statistics (e.g. the number of favorites)","settings.hide_user_stats":"Hide user statistics (e.g. the number of followers)","settings.hide_filtered_statuses":"Hide filtered statuses","settings.import_followers_from_a_csv_file":"Import follows from a csv file","settings.import_theme":"Load preset","settings.inputRadius":"Input fields","settings.checkboxRadius":"Checkboxes","settings.instance_default":"(default: {value})","settings.instance_default_simple":"(default)","settings.interface":"Interface","settings.interfaceLanguage":"Interface language","settings.invalid_theme_imported":"The selected file is not a supported Pleroma theme. No changes to your theme were made.","settings.limited_availability":"మీ బ్రౌజర్లో అందుబాటులో లేదు","settings.links":"Links","settings.lock_account_description":"మీ ఖాతాను ఆమోదించిన అనుచరులకు మాత్రమే పరిమితం చేయండి","settings.loop_video":"Loop videos","settings.loop_video_silent_only":"Loop only videos without sound (i.e. Mastodon\'s \\"gifs\\")","settings.mutes_tab":"మ్యూట్ చేయబడినవి","settings.play_videos_in_modal":"మీడియా వీక్షికలో నేరుగా వీడియోలను ప్లే చేయి","settings.use_contain_fit":"అటాచ్మెంట్ సూక్ష్మచిత్రాలను కత్తిరించవద్దు","settings.name":"Name","settings.name_bio":"పేరు & బయో","settings.new_password":"కొత్త సంకేతపదం","settings.notification_visibility":"చూపించవలసిన నోటిఫికేషన్ రకాలు","settings.notification_visibility_follows":"Follows","settings.notification_visibility_likes":"ఇష్టాలు","settings.notification_visibility_mentions":"ప్రస్తావనలు","settings.notification_visibility_repeats":"పునఃప్రసారాలు","settings.no_rich_text_description":"అన్ని పోస్ట్ల నుండి రిచ్ టెక్స్ట్ ఫార్మాటింగ్ను స్ట్రిప్ చేయండి","settings.no_blocks":"బ్లాక్స్ లేవు","settings.no_mutes":"మ్యూట్లు లేవు","settings.hide_follows_description":"నేను ఎవరిని అనుసరిస్తున్నానో చూపించవద్దు","settings.hide_followers_description":"నన్ను ఎవరు అనుసరిస్తున్నారో చూపవద్దు","settings.show_admin_badge":"నా ప్రొఫైల్ లో అడ్మిన్ బ్యాడ్జ్ చూపించు","settings.show_moderator_badge":"నా ప్రొఫైల్లో మోడరేటర్ బ్యాడ్జ్ని చూపించు","settings.nsfw_clickthrough":"Enable clickthrough NSFW attachment hiding","settings.oauth_tokens":"OAuth tokens","settings.token":"Token","settings.refresh_token":"Refresh Token","settings.valid_until":"Valid Until","settings.revoke_token":"Revoke","settings.panelRadius":"Panels","settings.pause_on_unfocused":"Pause streaming when tab is not focused","settings.presets":"Presets","settings.profile_background":"Profile Background","settings.profile_banner":"Profile Banner","settings.profile_tab":"Profile","settings.radii_help":"Set up interface edge rounding (in pixels)","settings.replies_in_timeline":"Replies in timeline","settings.reply_visibility_all":"Show all replies","settings.reply_visibility_following":"Only show replies directed at me or users I\'m following","settings.reply_visibility_self":"Only show replies directed at me","settings.saving_err":"Error saving settings","settings.saving_ok":"Settings saved","settings.security_tab":"Security","settings.scope_copy":"Copy scope when replying (DMs are always copied)","settings.set_new_avatar":"Set new avatar","settings.set_new_profile_background":"Set new profile background","settings.set_new_profile_banner":"Set new profile banner","settings.settings":"Settings","settings.subject_input_always_show":"Always show subject field","settings.subject_line_behavior":"Copy subject when replying","settings.subject_line_email":"Like email: \\"re: subject\\"","settings.subject_line_mastodon":"Like mastodon: copy as is","settings.subject_line_noop":"Do not copy","settings.post_status_content_type":"Post status content type","settings.stop_gifs":"Play-on-hover GIFs","settings.streaming":"Enable automatic streaming of new posts when scrolled to the top","settings.text":"Text","settings.theme":"Theme","settings.theme_help":"Use hex color codes (#rrggbb) to customize your color theme.","settings.theme_help_v2_1":"You can also override certain component\'s colors and opacity by toggling the checkbox, use \\"Clear all\\" button to clear all overrides.","settings.theme_help_v2_2":"Icons underneath some entries are background/text contrast indicators, hover over for detailed info. Please keep in mind that when using transparency contrast indicators show the worst possible case.","settings.tooltipRadius":"Tooltips/alerts","settings.upload_a_photo":"Upload a photo","settings.user_settings":"User Settings","settings.values.false":"no","settings.values.true":"yes","settings.notifications":"Notifications","settings.enable_web_push_notifications":"Enable web push notifications","settings.style.switcher.keep_color":"Keep colors","settings.style.switcher.keep_shadows":"Keep shadows","settings.style.switcher.keep_opacity":"Keep opacity","settings.style.switcher.keep_roundness":"Keep roundness","settings.style.switcher.keep_fonts":"Keep fonts","settings.style.switcher.save_load_hint":"\\"Keep\\" options preserve currently set options when selecting or loading themes, it also stores said options when exporting a theme. When all checkboxes unset, exporting theme will save everything.","settings.style.switcher.reset":"Reset","settings.style.switcher.clear_all":"Clear all","settings.style.switcher.clear_opacity":"Clear opacity","settings.style.common.color":"Color","settings.style.common.opacity":"Opacity","settings.style.common.contrast.hint":"Contrast ratio is {ratio}, it {level} {context}","settings.style.common.contrast.level.aa":"meets Level AA guideline (minimal)","settings.style.common.contrast.level.aaa":"meets Level AAA guideline (recommended)","settings.style.common.contrast.level.bad":"doesn\'t meet any accessibility guidelines","settings.style.common.contrast.context.18pt":"for large (18pt+) text","settings.style.common.contrast.context.text":"for text","settings.style.common_colors._tab_label":"Common","settings.style.common_colors.main":"Common colors","settings.style.common_colors.foreground_hint":"See \\"Advanced\\" tab for more detailed control","settings.style.common_colors.rgbo":"Icons, accents, badges","settings.style.advanced_colors._tab_label":"Advanced","settings.style.advanced_colors.alert":"Alert background","settings.style.advanced_colors.alert_error":"Error","settings.style.advanced_colors.badge":"Badge background","settings.style.advanced_colors.badge_notification":"Notification","settings.style.advanced_colors.panel_header":"Panel header","settings.style.advanced_colors.top_bar":"Top bar","settings.style.advanced_colors.borders":"Borders","settings.style.advanced_colors.buttons":"Buttons","settings.style.advanced_colors.inputs":"Input fields","settings.style.advanced_colors.faint_text":"Faded text","settings.style.radii._tab_label":"Roundness","settings.style.shadows._tab_label":"Shadow and lighting","settings.style.shadows.component":"Component","settings.style.shadows.override":"Override","settings.style.shadows.shadow_id":"Shadow #{value}","settings.style.shadows.blur":"Blur","settings.style.shadows.spread":"Spread","settings.style.shadows.inset":"Inset","settings.style.shadows.hint":"For shadows you can also use --variable as a color value to use CSS3 variables. Please note that setting opacity won\'t work in this case.","settings.style.shadows.filter_hint.always_drop_shadow":"Warning, this shadow always uses {0} when browser supports it.","settings.style.shadows.filter_hint.drop_shadow_syntax":"{0} does not support {1} parameter and {2} keyword.","settings.style.shadows.filter_hint.avatar_inset":"Please note that combining both inset and non-inset shadows on avatars might give unexpected results with transparent avatars.","settings.style.shadows.filter_hint.spread_zero":"Shadows with spread > 0 will appear as if it was set to zero","settings.style.shadows.filter_hint.inset_classic":"Inset shadows will be using {0}","settings.style.shadows.components.panel":"Panel","settings.style.shadows.components.panelHeader":"Panel header","settings.style.shadows.components.topBar":"Top bar","settings.style.shadows.components.avatar":"User avatar (in profile view)","settings.style.shadows.components.avatarStatus":"User avatar (in post display)","settings.style.shadows.components.popup":"Popups and tooltips","settings.style.shadows.components.button":"Button","settings.style.shadows.components.buttonHover":"Button (hover)","settings.style.shadows.components.buttonPressed":"Button (pressed)","settings.style.shadows.components.buttonPressedHover":"Button (pressed+hover)","settings.style.shadows.components.input":"Input field","settings.style.fonts._tab_label":"Fonts","settings.style.fonts.help":"Select font to use for elements of UI. For \\"custom\\" you have to enter exact font name as it appears in system.","settings.style.fonts.components.interface":"Interface","settings.style.fonts.components.input":"Input fields","settings.style.fonts.components.post":"Post text","settings.style.fonts.components.postCode":"Monospaced text in a post (rich text)","settings.style.fonts.family":"Font name","settings.style.fonts.size":"Size (in px)","settings.style.fonts.weight":"Weight (boldness)","settings.style.fonts.custom":"Custom","settings.style.preview.header":"Preview","settings.style.preview.content":"Content","settings.style.preview.error":"Example error","settings.style.preview.button":"Button","settings.style.preview.text":"A bunch of more {0} and {1}","settings.style.preview.mono":"content","settings.style.preview.input":"Just landed in L.A.","settings.style.preview.faint_link":"helpful manual","settings.style.preview.fine_print":"Read our {0} to learn nothing useful!","settings.style.preview.header_faint":"This is fine","settings.style.preview.checkbox":"I have skimmed over terms and conditions","settings.style.preview.link":"a nice lil\' link","settings.version.title":"Version","settings.version.backend_version":"Backend Version","settings.version.frontend_version":"Frontend Version","timeline.collapse":"Collapse","timeline.conversation":"Conversation","timeline.error_fetching":"Error fetching updates","timeline.load_older":"Load older statuses","timeline.no_retweet_hint":"Post is marked as followers-only or direct and cannot be repeated","timeline.repeated":"repeated","timeline.show_new":"Show new","timeline.up_to_date":"Up-to-date","timeline.no_more_statuses":"No more statuses","timeline.no_statuses":"No statuses","status.reply_to":"Reply to","status.replies_list":"Replies:","user_card.approve":"Approve","user_card.block":"Block","user_card.blocked":"Blocked!","user_card.deny":"Deny","user_card.favorites":"Favorites","user_card.follow":"Follow","user_card.follow_sent":"Request sent!","user_card.follow_progress":"Requesting…","user_card.follow_unfollow":"Unfollow","user_card.followees":"Following","user_card.followers":"Followers","user_card.following":"Following!","user_card.follows_you":"Follows you!","user_card.its_you":"It\'s you!","user_card.media":"Media","user_card.mute":"Mute","user_card.muted":"Muted","user_card.per_day":"per day","user_card.remote_follow":"Remote follow","user_card.statuses":"Statuses","user_card.unblock":"Unblock","user_card.unblock_progress":"Unblocking...","user_card.block_progress":"Blocking...","user_card.unmute":"Unmute","user_card.unmute_progress":"Unmuting...","user_card.mute_progress":"Muting...","user_profile.timeline_title":"User Timeline","user_profile.profile_does_not_exist":"Sorry, this profile does not exist.","user_profile.profile_loading_error":"Sorry, there was an error loading this profile.","who_to_follow.more":"More","who_to_follow.who_to_follow":"Who to follow","tool_tip.media_upload":"Upload Media","tool_tip.repeat":"Repeat","tool_tip.reply":"Reply","tool_tip.favorite":"Favorite","tool_tip.user_settings":"User Settings","upload.error.base":"Upload failed.","upload.error.file_too_big":"File too big [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]","upload.error.default":"Try again later","upload.file_size_units.B":"B","upload.file_size_units.KiB":"KiB","upload.file_size_units.MiB":"MiB","upload.file_size_units.GiB":"GiB","upload.file_size_units.TiB":"TiB"}')}}]); +//# sourceMappingURL=29.b53cf1f3bcece005d78a.js.map \ No newline at end of file diff --git a/priv/static/static/js/29.b53cf1f3bcece005d78a.js.map b/priv/static/static/js/29.b53cf1f3bcece005d78a.js.map new file mode 100644 index 000000000..f3d6781f8 --- /dev/null +++ b/priv/static/static/js/29.b53cf1f3bcece005d78a.js.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/29.b53cf1f3bcece005d78a.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/3.6c8e014d70907359ad5a.js b/priv/static/static/js/3.bde677e65143f0cd1105.js similarity index 99% rename from priv/static/static/js/3.6c8e014d70907359ad5a.js rename to priv/static/static/js/3.bde677e65143f0cd1105.js index 8c925ea7c..4bea37abd 100644 --- a/priv/static/static/js/3.6c8e014d70907359ad5a.js +++ b/priv/static/static/js/3.bde677e65143f0cd1105.js @@ -1,4 +1,4 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[3],{613:function(t,e,a){var n=a(236),i=a(235),r=a(237);t.exports=function(t){return n(t)||i(t)||r()}},635:function(t,e,a){var n=a(238),i=a(239),r=a(636),o=a(637),s=a(240),h=a(53),c=/^\s+|\s+$/g;t.exports=function(t,e,a){if((t=h(t))&&(a||void 0===e))return t.replace(c,"");if(!t||!(e=n(e)))return t;var u=s(t),l=s(e),d=o(u,l),m=r(u,l)+1;return i(u,d,m).join("")}},636:function(t,e,a){var n=a(151);t.exports=function(t,e){for(var a=t.length;a--&&n(e,t[a],0)>-1;);return a}},637:function(t,e,a){var n=a(151);t.exports=function(t,e){for(var a=-1,i=t.length;++a-1;);return a}},646:function(t,e,a){"use strict";(function(t){ +(window.webpackJsonp=window.webpackJsonp||[]).push([[3],{626:function(t,e,a){var n=a(240),i=a(239),r=a(241);t.exports=function(t){return n(t)||i(t)||r()}},648:function(t,e,a){var n=a(242),i=a(243),r=a(649),o=a(650),s=a(244),h=a(55),c=/^\s+|\s+$/g;t.exports=function(t,e,a){if((t=h(t))&&(a||void 0===e))return t.replace(c,"");if(!t||!(e=n(e)))return t;var u=s(t),l=s(e),d=o(u,l),m=r(u,l)+1;return i(u,d,m).join("")}},649:function(t,e,a){var n=a(156);t.exports=function(t,e){for(var a=t.length;a--&&n(e,t[a],0)>-1;);return a}},650:function(t,e,a){var n=a(156);t.exports=function(t,e){for(var a=-1,i=t.length;++a-1;);return a}},659:function(t,e,a){"use strict";(function(t){ /*! * vue-qrcode v1.0.0 * https://fengyuanchen.github.io/vue-qrcode @@ -8,7 +8,7 @@ * * Date: 2018-10-21T13:04:02.951Z */ -var a="undefined"!=typeof window?window:void 0!==t?t:"undefined"!=typeof self?self:{};function n(){throw new Error("Dynamic requires are not currently supported by rollup-plugin-commonjs")}var i=function(t,e){return t(e={exports:{}},e.exports),e.exports}((function(t,e){t.exports=function t(e,a,i){function r(s,h){if(!a[s]){if(!e[s]){if(!h&&n)return n();if(o)return o(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var u=a[s]={exports:{}};e[s][0].call(u.exports,(function(t){return r(e[s][1][t]||t)}),u,u.exports,t,e,a,i)}return a[s].exports}for(var o=n,s=0;s>>7-t%8&1)},put:function(t,e){for(var a=0;a>>e-a-1&1))},getLengthInBits:function(){return this.length},putBit:function(t){var e=Math.floor(this.length/8);this.buffer.length<=e&&this.buffer.push(0),t&&(this.buffer[e]|=128>>>this.length%8),this.length++}},e.exports=n},{}],4:[function(t,e,a){var n=t("../utils/buffer");function i(t){if(!t||t<1)throw new Error("BitMatrix size must be defined and greater than 0");this.size=t,this.data=new n(t*t),this.data.fill(0),this.reservedBit=new n(t*t),this.reservedBit.fill(0)}i.prototype.set=function(t,e,a,n){var i=t*this.size+e;this.data[i]=a,n&&(this.reservedBit[i]=!0)},i.prototype.get=function(t,e){return this.data[t*this.size+e]},i.prototype.xor=function(t,e,a){this.data[t*this.size+e]^=a},i.prototype.isReserved=function(t,e){return this.reservedBit[t*this.size+e]},e.exports=i},{"../utils/buffer":27}],5:[function(t,e,a){var n=t("../utils/buffer"),i=t("./mode");function r(t){this.mode=i.BYTE,this.data=new n(t)}r.getBitsLength=function(t){return 8*t},r.prototype.getLength=function(){return this.data.length},r.prototype.getBitsLength=function(){return r.getBitsLength(this.data.length)},r.prototype.write=function(t){for(var e=0,a=this.data.length;e=0&&t.bit<4},a.from=function(t,e){if(a.isValid(t))return t;try{return function(t){if("string"!=typeof t)throw new Error("Param is not a string");switch(t.toLowerCase()){case"l":case"low":return a.L;case"m":case"medium":return a.M;case"q":case"quartile":return a.Q;case"h":case"high":return a.H;default:throw new Error("Unknown EC Level: "+t)}}(t)}catch(t){return e}}},{}],8:[function(t,e,a){var n=t("./utils").getSymbolSize;a.getPositions=function(t){var e=n(t);return[[0,0],[e-7,0],[0,e-7]]}},{"./utils":20}],9:[function(t,e,a){var n=t("./utils"),i=n.getBCHDigit(1335);a.getEncodedBits=function(t,e){for(var a=t.bit<<3|e,r=a<<10;n.getBCHDigit(r)-i>=0;)r^=1335<=33088&&a<=40956)a-=33088;else{if(!(a>=57408&&a<=60351))throw new Error("Invalid SJIS character: "+this.data[e]+"\nMake sure your charset is UTF-8");a-=49472}a=192*(a>>>8&255)+(255&a),t.put(a,13)}},e.exports=r},{"./mode":13,"./utils":20}],12:[function(t,e,a){a.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};var n=3,i=3,r=40,o=10;function s(t,e,n){switch(t){case a.Patterns.PATTERN000:return(e+n)%2==0;case a.Patterns.PATTERN001:return e%2==0;case a.Patterns.PATTERN010:return n%3==0;case a.Patterns.PATTERN011:return(e+n)%3==0;case a.Patterns.PATTERN100:return(Math.floor(e/2)+Math.floor(n/3))%2==0;case a.Patterns.PATTERN101:return e*n%2+e*n%3==0;case a.Patterns.PATTERN110:return(e*n%2+e*n%3)%2==0;case a.Patterns.PATTERN111:return(e*n%3+(e+n)%2)%2==0;default:throw new Error("bad maskPattern:"+t)}}a.isValid=function(t){return null!=t&&""!==t&&!isNaN(t)&&t>=0&&t<=7},a.from=function(t){return a.isValid(t)?parseInt(t,10):void 0},a.getPenaltyN1=function(t){for(var e=t.size,a=0,i=0,r=0,o=null,s=null,h=0;h=5&&(a+=n+(i-5)),o=u,i=1),(u=t.get(c,h))===s?r++:(r>=5&&(a+=n+(r-5)),s=u,r=1)}i>=5&&(a+=n+(i-5)),r>=5&&(a+=n+(r-5))}return a},a.getPenaltyN2=function(t){for(var e=t.size,a=0,n=0;n=10&&(1488===n||93===n)&&a++,i=i<<1&2047|t.get(s,o),s>=10&&(1488===i||93===i)&&a++}return a*r},a.getPenaltyN4=function(t){for(var e=0,a=t.data.length,n=0;n=1&&e<10?t.ccBits[0]:e<27?t.ccBits[1]:t.ccBits[2]},a.getBestModeForData=function(t){return i.testNumeric(t)?a.NUMERIC:i.testAlphanumeric(t)?a.ALPHANUMERIC:i.testKanji(t)?a.KANJI:a.BYTE},a.toString=function(t){if(t&&t.id)return t.id;throw new Error("Invalid mode")},a.isValid=function(t){return t&&t.bit&&t.ccBits},a.from=function(t,e){if(a.isValid(t))return t;try{return function(t){if("string"!=typeof t)throw new Error("Param is not a string");switch(t.toLowerCase()){case"numeric":return a.NUMERIC;case"alphanumeric":return a.ALPHANUMERIC;case"kanji":return a.KANJI;case"byte":return a.BYTE;default:throw new Error("Unknown mode: "+t)}}(t)}catch(t){return e}}},{"./regex":18,"./version-check":21}],14:[function(t,e,a){var n=t("./mode");function i(t){this.mode=n.NUMERIC,this.data=t.toString()}i.getBitsLength=function(t){return 10*Math.floor(t/3)+(t%3?t%3*3+1:0)},i.prototype.getLength=function(){return this.data.length},i.prototype.getBitsLength=function(){return i.getBitsLength(this.data.length)},i.prototype.write=function(t){var e,a,n;for(e=0;e+3<=this.data.length;e+=3)a=this.data.substr(e,3),n=parseInt(a,10),t.put(n,10);var i=this.data.length-e;i>0&&(a=this.data.substr(e),n=parseInt(a,10),t.put(n,3*i+1))},e.exports=i},{"./mode":13}],15:[function(t,e,a){var n=t("../utils/buffer"),i=t("./galois-field");a.mul=function(t,e){var a=new n(t.length+e.length-1);a.fill(0);for(var r=0;r=0;){for(var r=a[0],o=0;o>n&1),n<6?t.set(n,8,i,!0):n<8?t.set(n+1,8,i,!0):t.set(r-15+n,8,i,!0),n<8?t.set(8,r-n-1,i,!0):n<9?t.set(8,15-n-1+1,i,!0):t.set(8,15-n-1,i,!0);t.set(r-8,8,1,!0)}function y(t,e,a){var r=new o;a.forEach((function(e){r.put(e.mode.bit,4),r.put(e.getLength(),p.getCharCountIndicator(e.mode,t)),e.write(r)}));var s=8*(i.getSymbolTotalCodewords(t)-l.getTotalCodewordsCount(t,e));for(r.getLengthInBits()+4<=s&&r.put(0,4);r.getLengthInBits()%8!=0;)r.putBit(0);for(var h=(s-r.getLengthInBits())/8,c=0;c=0&&s<=6&&(0===h||6===h)||h>=0&&h<=6&&(0===s||6===s)||s>=2&&s<=4&&h>=2&&h<=4?t.set(r+s,o+h,!0,!0):t.set(r+s,o+h,!1,!0))}(b,e),function(t){for(var e=t.size,a=8;a=7&&function(t,e){for(var a,n,i,r=t.size,o=m.getEncodedBits(e),s=0;s<18;s++)a=Math.floor(s/3),n=s%3+r-8-3,i=1==(o>>s&1),t.set(a,n,i,!0),t.set(n,a,i,!0)}(b,e),function(t,e){for(var a=t.size,n=-1,i=a-1,r=7,o=0,s=a-1;s>0;s-=2)for(6===s&&s--;;){for(var h=0;h<2;h++)if(!t.isReserved(i,s-h)){var c=!1;o>>r&1)),t.set(i,s-h,c),-1==--r&&(o++,r=7)}if((i+=n)<0||a<=i){i-=n,n=-n;break}}}(b,f),isNaN(n)&&(n=u.getBestMask(b,w.bind(null,b,a))),u.applyMask(n,b),w(b,a,n),{modules:b,version:e,errorCorrectionLevel:a,maskPattern:n,segments:r}}a.create=function(t,e){if(void 0===t||""===t)throw new Error("No input text");var a,n,o=r.M;return void 0!==e&&(o=r.from(e.errorCorrectionLevel,r.M),a=m.from(e.version),n=u.from(e.maskPattern),e.toSJISFunc&&i.setToSJISFunction(e.toSJISFunc)),b(t,a,o,n)}},{"../utils/buffer":27,"./alignment-pattern":1,"./bit-buffer":3,"./bit-matrix":4,"./error-correction-code":6,"./error-correction-level":7,"./finder-pattern":8,"./format-info":9,"./mask-pattern":12,"./mode":13,"./reed-solomon-encoder":17,"./segments":19,"./utils":20,"./version":22,isarray:30}],17:[function(t,e,a){var n=t("../utils/buffer"),i=t("./polynomial");function r(t){this.genPoly=void 0,this.degree=t,this.degree&&this.initialize(this.degree)}r.prototype.initialize=function(t){this.degree=t,this.genPoly=i.generateECPolynomial(this.degree)},r.prototype.encode=function(t){if(!this.genPoly)throw new Error("Encoder not initialized");var e=new n(this.degree);e.fill(0);var a=n.concat([t,e],t.length+this.degree),r=i.mod(a,this.genPoly),o=this.degree-r.length;if(o>0){var s=new n(this.degree);return s.fill(0),r.copy(s,o),s}return r},e.exports=r},{"../utils/buffer":27,"./polynomial":15}],18:[function(t,e,a){var n="(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+",i="(?:(?![A-Z0-9 $%*+\\-./:]|"+(n=n.replace(/u/g,"\\u"))+")(?:.|[\r\n]))+";a.KANJI=new RegExp(n,"g"),a.BYTE_KANJI=new RegExp("[^A-Z0-9 $%*+\\-./:]+","g"),a.BYTE=new RegExp(i,"g"),a.NUMERIC=new RegExp("[0-9]+","g"),a.ALPHANUMERIC=new RegExp("[A-Z $%*+\\-./:]+","g");var r=new RegExp("^"+n+"$"),o=new RegExp("^[0-9]+$"),s=new RegExp("^[A-Z0-9 $%*+\\-./:]+$");a.testKanji=function(t){return r.test(t)},a.testNumeric=function(t){return o.test(t)},a.testAlphanumeric=function(t){return s.test(t)}},{}],19:[function(t,e,a){var n=t("./mode"),i=t("./numeric-data"),r=t("./alphanumeric-data"),o=t("./byte-data"),s=t("./kanji-data"),h=t("./regex"),c=t("./utils"),u=t("dijkstrajs");function l(t){return unescape(encodeURIComponent(t)).length}function d(t,e,a){for(var n,i=[];null!==(n=t.exec(a));)i.push({data:n[0],index:n.index,mode:e,length:n[0].length});return i}function m(t){var e,a,i=d(h.NUMERIC,n.NUMERIC,t),r=d(h.ALPHANUMERIC,n.ALPHANUMERIC,t);return c.isKanjiModeEnabled()?(e=d(h.BYTE,n.BYTE,t),a=d(h.KANJI,n.KANJI,t)):(e=d(h.BYTE_KANJI,n.BYTE,t),a=[]),i.concat(r,e,a).sort((function(t,e){return t.index-e.index})).map((function(t){return{data:t.data,mode:t.mode,length:t.length}}))}function f(t,e){switch(e){case n.NUMERIC:return i.getBitsLength(t);case n.ALPHANUMERIC:return r.getBitsLength(t);case n.KANJI:return s.getBitsLength(t);case n.BYTE:return o.getBitsLength(t)}}function p(t,e){var a,h=n.getBestModeForData(t);if((a=n.from(e,h))!==n.BYTE&&a.bit=0?t[t.length-1]:null;return a&&a.mode===e.mode?(t[t.length-1].data+=e.data,t):(t.push(e),t)}),[])}(o))},a.rawSplit=function(t){return a.fromArray(m(t,c.isKanjiModeEnabled()))}},{"./alphanumeric-data":2,"./byte-data":5,"./kanji-data":11,"./mode":13,"./numeric-data":14,"./regex":18,"./utils":20,dijkstrajs:29}],20:[function(t,e,a){var n,i=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];a.getSymbolSize=function(t){if(!t)throw new Error('"version" cannot be null or undefined');if(t<1||t>40)throw new Error('"version" should be in range from 1 to 40');return 4*t+17},a.getSymbolTotalCodewords=function(t){return i[t]},a.getBCHDigit=function(t){for(var e=0;0!==t;)e++,t>>>=1;return e},a.setToSJISFunction=function(t){if("function"!=typeof t)throw new Error('"toSJISFunc" is not a valid function.');n=t},a.isKanjiModeEnabled=function(){return void 0!==n},a.toSJIS=function(t){return n(t)}},{}],21:[function(t,e,a){a.isValid=function(t){return!isNaN(t)&&t>=1&&t<=40}},{}],22:[function(t,e,a){var n=t("./utils"),i=t("./error-correction-code"),r=t("./error-correction-level"),o=t("./mode"),s=t("./version-check"),h=t("isarray"),c=n.getBCHDigit(7973);function u(t,e){return o.getCharCountIndicator(t,e)+4}function l(t,e){var a=0;return t.forEach((function(t){var n=u(t.mode,e);a+=n+t.getBitsLength()})),a}a.from=function(t,e){return s.isValid(t)?parseInt(t,10):e},a.getCapacity=function(t,e,a){if(!s.isValid(t))throw new Error("Invalid QR Code version");void 0===a&&(a=o.BYTE);var r=8*(n.getSymbolTotalCodewords(t)-i.getTotalCodewordsCount(t,e));if(a===o.MIXED)return r;var h=r-u(a,t);switch(a){case o.NUMERIC:return Math.floor(h/10*3);case o.ALPHANUMERIC:return Math.floor(h/11*2);case o.KANJI:return Math.floor(h/13);case o.BYTE:default:return Math.floor(h/8)}},a.getBestVersionForData=function(t,e){var n,i=r.from(e,r.M);if(h(t)){if(t.length>1)return function(t,e){for(var n=1;n<=40;n++)if(l(t,n)<=a.getCapacity(n,e,o.MIXED))return n}(t,i);if(0===t.length)return 1;n=t[0]}else n=t;return function(t,e,n){for(var i=1;i<=40;i++)if(e<=a.getCapacity(i,n,t))return i}(n.mode,n.getLength(),i)},a.getEncodedBits=function(t){if(!s.isValid(t)||t<7)throw new Error("Invalid QR Code version");for(var e=t<<12;n.getBCHDigit(e)-c>=0;)e^=7973<':"",l="0&&c>0&&t[h-1]||(n+=o?r("M",c+a,.5+u+a):r("m",i,0),i=0,o=!1),c+1',d='viewBox="0 0 '+c+" "+c+'"',m=''+u+l+"\n";return"function"==typeof a&&a(null,m),m}},{"./utils":26}],26:[function(t,e,a){function n(t){if("string"!=typeof t)throw new Error("Color should be defined as hex string");var e=t.slice().replace("#","").split("");if(e.length<3||5===e.length||e.length>8)throw new Error("Invalid hex color: "+t);3!==e.length&&4!==e.length||(e=Array.prototype.concat.apply([],e.map((function(t){return[t,t]})))),6===e.length&&e.push("F","F");var a=parseInt(e.join(""),16);return{r:a>>24&255,g:a>>16&255,b:a>>8&255,a:255&a,hex:"#"+e.slice(0,6).join("")}}a.getOptions=function(t){t||(t={}),t.color||(t.color={});var e=void 0===t.margin||null===t.margin||t.margin<0?4:t.margin,a=t.width&&t.width>=21?t.width:void 0,i=t.scale||4;return{width:a,scale:a?4:i,margin:e,color:{dark:n(t.color.dark||"#000000ff"),light:n(t.color.light||"#ffffffff")},type:t.type,rendererOpts:t.rendererOpts||{}}},a.getScale=function(t,e){return e.width&&e.width>=t+2*e.margin?e.width/(t+2*e.margin):e.scale},a.getImageWidth=function(t,e){var n=a.getScale(t,e);return Math.floor((t+2*e.margin)*n)},a.qrToImageData=function(t,e,n){for(var i=e.modules.size,r=e.modules.data,o=a.getScale(i,n),s=Math.floor((i+2*n.margin)*o),h=n.margin*o,c=[n.color.light,n.color.dark],u=0;u=h&&l>=h&&u=i)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+i.toString(16)+" bytes");return 0|t}function s(t,e){var a;return r.TYPED_ARRAY_SUPPORT?(a=new Uint8Array(e)).__proto__=r.prototype:(null===(a=t)&&(a=new r(e)),a.length=e),a}function h(t,e){var a=s(t,e<0?0:0|o(e));if(!r.TYPED_ARRAY_SUPPORT)for(var n=0;n55295&&a<57344){if(!i){if(a>56319){(e-=3)>-1&&r.push(239,191,189);continue}if(o+1===n){(e-=3)>-1&&r.push(239,191,189);continue}i=a;continue}if(a<56320){(e-=3)>-1&&r.push(239,191,189),i=a;continue}a=65536+(i-55296<<10|a-56320)}else i&&(e-=3)>-1&&r.push(239,191,189);if(i=null,a<128){if((e-=1)<0)break;r.push(a)}else if(a<2048){if((e-=2)<0)break;r.push(a>>6|192,63&a|128)}else if(a<65536){if((e-=3)<0)break;r.push(a>>12|224,a>>6&63|128,63&a|128)}else{if(!(a<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;r.push(a>>18|240,a>>12&63|128,a>>6&63|128,63&a|128)}}return r}function l(t){return r.isBuffer(t)?t.length:"undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer)?t.byteLength:("string"!=typeof t&&(t=""+t),0===t.length?0:u(t).length)}r.TYPED_ARRAY_SUPPORT&&(r.prototype.__proto__=Uint8Array.prototype,r.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&r[Symbol.species]===r&&Object.defineProperty(r,Symbol.species,{value:null,configurable:!0,enumerable:!1,writable:!1})),r.prototype.write=function(t,e,a){void 0===e||void 0===a&&"string"==typeof e?(a=this.length,e=0):isFinite(e)&&(e|=0,isFinite(a)?a|=0:a=void 0);var n=this.length-e;if((void 0===a||a>n)&&(a=n),t.length>0&&(a<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");return function(t,e,a,n){return function(t,e,a,n){for(var i=0;i=e.length||i>=t.length);++i)e[i+a]=t[i];return i}(u(e,t.length-a),t,a,n)}(this,t,e,a)},r.prototype.slice=function(t,e){var a,n=this.length;if((t=~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),(e=void 0===e?n:~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),e=t.length&&(e=t.length),e||(e=0),n>0&&n=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-e=0;--i)t[i+e]=this[i+a];else if(o<1e3||!r.TYPED_ARRAY_SUPPORT)for(i=0;i>>=0,a=void 0===a?this.length:a>>>0,t||(t=0),"number"==typeof t)for(i=e;il)&&(r[h]=l,m.push(h,l),i[h]=s));if(void 0!==a&&void 0===r[a]){var f=["Could not find a path from ",e," to ",a,"."].join("");throw new Error(f)}return i},extract_shortest_path_from_predecessor_list:function(t,e){for(var a=[],n=e;n;)a.push(n),t[n],n=t[n];return a.reverse(),a},find_path:function(t,e,a){var i=n.single_source_shortest_paths(t,e,a);return n.extract_shortest_path_from_predecessor_list(i,a)},PriorityQueue:{make:function(t){var e,a=n.PriorityQueue,i={};for(e in t=t||{},a)a.hasOwnProperty(e)&&(i[e]=a[e]);return i.queue=[],i.sorter=t.sorter||a.default_sorter,i},default_sorter:function(t,e){return t.cost-e.cost},push:function(t,e){var a={value:t,cost:e};this.queue.push(a),this.queue.sort(this.sorter)},pop:function(){return this.queue.shift()},empty:function(){return 0===this.queue.length}}};void 0!==e&&(e.exports=n)},{}],30:[function(t,e,a){var n={}.toString;e.exports=Array.isArray||function(t){return"[object Array]"==n.call(t)}},{}],31:[function(t,e,n){(function(t){e.exports="object"==typeof self&&self.self===self&&self||"object"==typeof t&&t.global===t&&t||this}).call(this,void 0!==a?a:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[23])(23)})),r={name:"qrcode",props:{options:Object,tag:{type:String,default:"canvas"},value:null},render:function(t){return t(this.tag,this.$slots.default)},watch:{$props:{deep:!0,immediate:!0,handler:function(){this.$el&&this.generate()}}},methods:{generate:function(){var t=this,e=this.options,a=this.tag,n=String(this.value);"canvas"===a?i.toCanvas(this.$el,n,e,(function(t){if(t)throw t})):"img"===a?i.toDataURL(n,e,(function(e,a){if(e)throw e;t.$el.src=a})):i.toString(n,e,(function(e,a){if(e)throw e;t.$el.innerHTML=a}))}},mounted:function(){this.generate()}};e.a=r}).call(this,a(41))},651:function(t,e,a){"use strict"; +var a="undefined"!=typeof window?window:void 0!==t?t:"undefined"!=typeof self?self:{};function n(){throw new Error("Dynamic requires are not currently supported by rollup-plugin-commonjs")}var i=function(t,e){return t(e={exports:{}},e.exports),e.exports}((function(t,e){t.exports=function t(e,a,i){function r(s,h){if(!a[s]){if(!e[s]){if(!h&&n)return n();if(o)return o(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var u=a[s]={exports:{}};e[s][0].call(u.exports,(function(t){return r(e[s][1][t]||t)}),u,u.exports,t,e,a,i)}return a[s].exports}for(var o=n,s=0;s>>7-t%8&1)},put:function(t,e){for(var a=0;a>>e-a-1&1))},getLengthInBits:function(){return this.length},putBit:function(t){var e=Math.floor(this.length/8);this.buffer.length<=e&&this.buffer.push(0),t&&(this.buffer[e]|=128>>>this.length%8),this.length++}},e.exports=n},{}],4:[function(t,e,a){var n=t("../utils/buffer");function i(t){if(!t||t<1)throw new Error("BitMatrix size must be defined and greater than 0");this.size=t,this.data=new n(t*t),this.data.fill(0),this.reservedBit=new n(t*t),this.reservedBit.fill(0)}i.prototype.set=function(t,e,a,n){var i=t*this.size+e;this.data[i]=a,n&&(this.reservedBit[i]=!0)},i.prototype.get=function(t,e){return this.data[t*this.size+e]},i.prototype.xor=function(t,e,a){this.data[t*this.size+e]^=a},i.prototype.isReserved=function(t,e){return this.reservedBit[t*this.size+e]},e.exports=i},{"../utils/buffer":27}],5:[function(t,e,a){var n=t("../utils/buffer"),i=t("./mode");function r(t){this.mode=i.BYTE,this.data=new n(t)}r.getBitsLength=function(t){return 8*t},r.prototype.getLength=function(){return this.data.length},r.prototype.getBitsLength=function(){return r.getBitsLength(this.data.length)},r.prototype.write=function(t){for(var e=0,a=this.data.length;e=0&&t.bit<4},a.from=function(t,e){if(a.isValid(t))return t;try{return function(t){if("string"!=typeof t)throw new Error("Param is not a string");switch(t.toLowerCase()){case"l":case"low":return a.L;case"m":case"medium":return a.M;case"q":case"quartile":return a.Q;case"h":case"high":return a.H;default:throw new Error("Unknown EC Level: "+t)}}(t)}catch(t){return e}}},{}],8:[function(t,e,a){var n=t("./utils").getSymbolSize;a.getPositions=function(t){var e=n(t);return[[0,0],[e-7,0],[0,e-7]]}},{"./utils":20}],9:[function(t,e,a){var n=t("./utils"),i=n.getBCHDigit(1335);a.getEncodedBits=function(t,e){for(var a=t.bit<<3|e,r=a<<10;n.getBCHDigit(r)-i>=0;)r^=1335<=33088&&a<=40956)a-=33088;else{if(!(a>=57408&&a<=60351))throw new Error("Invalid SJIS character: "+this.data[e]+"\nMake sure your charset is UTF-8");a-=49472}a=192*(a>>>8&255)+(255&a),t.put(a,13)}},e.exports=r},{"./mode":13,"./utils":20}],12:[function(t,e,a){a.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};var n=3,i=3,r=40,o=10;function s(t,e,n){switch(t){case a.Patterns.PATTERN000:return(e+n)%2==0;case a.Patterns.PATTERN001:return e%2==0;case a.Patterns.PATTERN010:return n%3==0;case a.Patterns.PATTERN011:return(e+n)%3==0;case a.Patterns.PATTERN100:return(Math.floor(e/2)+Math.floor(n/3))%2==0;case a.Patterns.PATTERN101:return e*n%2+e*n%3==0;case a.Patterns.PATTERN110:return(e*n%2+e*n%3)%2==0;case a.Patterns.PATTERN111:return(e*n%3+(e+n)%2)%2==0;default:throw new Error("bad maskPattern:"+t)}}a.isValid=function(t){return null!=t&&""!==t&&!isNaN(t)&&t>=0&&t<=7},a.from=function(t){return a.isValid(t)?parseInt(t,10):void 0},a.getPenaltyN1=function(t){for(var e=t.size,a=0,i=0,r=0,o=null,s=null,h=0;h=5&&(a+=n+(i-5)),o=u,i=1),(u=t.get(c,h))===s?r++:(r>=5&&(a+=n+(r-5)),s=u,r=1)}i>=5&&(a+=n+(i-5)),r>=5&&(a+=n+(r-5))}return a},a.getPenaltyN2=function(t){for(var e=t.size,a=0,n=0;n=10&&(1488===n||93===n)&&a++,i=i<<1&2047|t.get(s,o),s>=10&&(1488===i||93===i)&&a++}return a*r},a.getPenaltyN4=function(t){for(var e=0,a=t.data.length,n=0;n=1&&e<10?t.ccBits[0]:e<27?t.ccBits[1]:t.ccBits[2]},a.getBestModeForData=function(t){return i.testNumeric(t)?a.NUMERIC:i.testAlphanumeric(t)?a.ALPHANUMERIC:i.testKanji(t)?a.KANJI:a.BYTE},a.toString=function(t){if(t&&t.id)return t.id;throw new Error("Invalid mode")},a.isValid=function(t){return t&&t.bit&&t.ccBits},a.from=function(t,e){if(a.isValid(t))return t;try{return function(t){if("string"!=typeof t)throw new Error("Param is not a string");switch(t.toLowerCase()){case"numeric":return a.NUMERIC;case"alphanumeric":return a.ALPHANUMERIC;case"kanji":return a.KANJI;case"byte":return a.BYTE;default:throw new Error("Unknown mode: "+t)}}(t)}catch(t){return e}}},{"./regex":18,"./version-check":21}],14:[function(t,e,a){var n=t("./mode");function i(t){this.mode=n.NUMERIC,this.data=t.toString()}i.getBitsLength=function(t){return 10*Math.floor(t/3)+(t%3?t%3*3+1:0)},i.prototype.getLength=function(){return this.data.length},i.prototype.getBitsLength=function(){return i.getBitsLength(this.data.length)},i.prototype.write=function(t){var e,a,n;for(e=0;e+3<=this.data.length;e+=3)a=this.data.substr(e,3),n=parseInt(a,10),t.put(n,10);var i=this.data.length-e;i>0&&(a=this.data.substr(e),n=parseInt(a,10),t.put(n,3*i+1))},e.exports=i},{"./mode":13}],15:[function(t,e,a){var n=t("../utils/buffer"),i=t("./galois-field");a.mul=function(t,e){var a=new n(t.length+e.length-1);a.fill(0);for(var r=0;r=0;){for(var r=a[0],o=0;o>n&1),n<6?t.set(n,8,i,!0):n<8?t.set(n+1,8,i,!0):t.set(r-15+n,8,i,!0),n<8?t.set(8,r-n-1,i,!0):n<9?t.set(8,15-n-1+1,i,!0):t.set(8,15-n-1,i,!0);t.set(r-8,8,1,!0)}function y(t,e,a){var r=new o;a.forEach((function(e){r.put(e.mode.bit,4),r.put(e.getLength(),p.getCharCountIndicator(e.mode,t)),e.write(r)}));var s=8*(i.getSymbolTotalCodewords(t)-l.getTotalCodewordsCount(t,e));for(r.getLengthInBits()+4<=s&&r.put(0,4);r.getLengthInBits()%8!=0;)r.putBit(0);for(var h=(s-r.getLengthInBits())/8,c=0;c=0&&s<=6&&(0===h||6===h)||h>=0&&h<=6&&(0===s||6===s)||s>=2&&s<=4&&h>=2&&h<=4?t.set(r+s,o+h,!0,!0):t.set(r+s,o+h,!1,!0))}(b,e),function(t){for(var e=t.size,a=8;a=7&&function(t,e){for(var a,n,i,r=t.size,o=m.getEncodedBits(e),s=0;s<18;s++)a=Math.floor(s/3),n=s%3+r-8-3,i=1==(o>>s&1),t.set(a,n,i,!0),t.set(n,a,i,!0)}(b,e),function(t,e){for(var a=t.size,n=-1,i=a-1,r=7,o=0,s=a-1;s>0;s-=2)for(6===s&&s--;;){for(var h=0;h<2;h++)if(!t.isReserved(i,s-h)){var c=!1;o>>r&1)),t.set(i,s-h,c),-1==--r&&(o++,r=7)}if((i+=n)<0||a<=i){i-=n,n=-n;break}}}(b,f),isNaN(n)&&(n=u.getBestMask(b,w.bind(null,b,a))),u.applyMask(n,b),w(b,a,n),{modules:b,version:e,errorCorrectionLevel:a,maskPattern:n,segments:r}}a.create=function(t,e){if(void 0===t||""===t)throw new Error("No input text");var a,n,o=r.M;return void 0!==e&&(o=r.from(e.errorCorrectionLevel,r.M),a=m.from(e.version),n=u.from(e.maskPattern),e.toSJISFunc&&i.setToSJISFunction(e.toSJISFunc)),b(t,a,o,n)}},{"../utils/buffer":27,"./alignment-pattern":1,"./bit-buffer":3,"./bit-matrix":4,"./error-correction-code":6,"./error-correction-level":7,"./finder-pattern":8,"./format-info":9,"./mask-pattern":12,"./mode":13,"./reed-solomon-encoder":17,"./segments":19,"./utils":20,"./version":22,isarray:30}],17:[function(t,e,a){var n=t("../utils/buffer"),i=t("./polynomial");function r(t){this.genPoly=void 0,this.degree=t,this.degree&&this.initialize(this.degree)}r.prototype.initialize=function(t){this.degree=t,this.genPoly=i.generateECPolynomial(this.degree)},r.prototype.encode=function(t){if(!this.genPoly)throw new Error("Encoder not initialized");var e=new n(this.degree);e.fill(0);var a=n.concat([t,e],t.length+this.degree),r=i.mod(a,this.genPoly),o=this.degree-r.length;if(o>0){var s=new n(this.degree);return s.fill(0),r.copy(s,o),s}return r},e.exports=r},{"../utils/buffer":27,"./polynomial":15}],18:[function(t,e,a){var n="(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+",i="(?:(?![A-Z0-9 $%*+\\-./:]|"+(n=n.replace(/u/g,"\\u"))+")(?:.|[\r\n]))+";a.KANJI=new RegExp(n,"g"),a.BYTE_KANJI=new RegExp("[^A-Z0-9 $%*+\\-./:]+","g"),a.BYTE=new RegExp(i,"g"),a.NUMERIC=new RegExp("[0-9]+","g"),a.ALPHANUMERIC=new RegExp("[A-Z $%*+\\-./:]+","g");var r=new RegExp("^"+n+"$"),o=new RegExp("^[0-9]+$"),s=new RegExp("^[A-Z0-9 $%*+\\-./:]+$");a.testKanji=function(t){return r.test(t)},a.testNumeric=function(t){return o.test(t)},a.testAlphanumeric=function(t){return s.test(t)}},{}],19:[function(t,e,a){var n=t("./mode"),i=t("./numeric-data"),r=t("./alphanumeric-data"),o=t("./byte-data"),s=t("./kanji-data"),h=t("./regex"),c=t("./utils"),u=t("dijkstrajs");function l(t){return unescape(encodeURIComponent(t)).length}function d(t,e,a){for(var n,i=[];null!==(n=t.exec(a));)i.push({data:n[0],index:n.index,mode:e,length:n[0].length});return i}function m(t){var e,a,i=d(h.NUMERIC,n.NUMERIC,t),r=d(h.ALPHANUMERIC,n.ALPHANUMERIC,t);return c.isKanjiModeEnabled()?(e=d(h.BYTE,n.BYTE,t),a=d(h.KANJI,n.KANJI,t)):(e=d(h.BYTE_KANJI,n.BYTE,t),a=[]),i.concat(r,e,a).sort((function(t,e){return t.index-e.index})).map((function(t){return{data:t.data,mode:t.mode,length:t.length}}))}function f(t,e){switch(e){case n.NUMERIC:return i.getBitsLength(t);case n.ALPHANUMERIC:return r.getBitsLength(t);case n.KANJI:return s.getBitsLength(t);case n.BYTE:return o.getBitsLength(t)}}function p(t,e){var a,h=n.getBestModeForData(t);if((a=n.from(e,h))!==n.BYTE&&a.bit=0?t[t.length-1]:null;return a&&a.mode===e.mode?(t[t.length-1].data+=e.data,t):(t.push(e),t)}),[])}(o))},a.rawSplit=function(t){return a.fromArray(m(t,c.isKanjiModeEnabled()))}},{"./alphanumeric-data":2,"./byte-data":5,"./kanji-data":11,"./mode":13,"./numeric-data":14,"./regex":18,"./utils":20,dijkstrajs:29}],20:[function(t,e,a){var n,i=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];a.getSymbolSize=function(t){if(!t)throw new Error('"version" cannot be null or undefined');if(t<1||t>40)throw new Error('"version" should be in range from 1 to 40');return 4*t+17},a.getSymbolTotalCodewords=function(t){return i[t]},a.getBCHDigit=function(t){for(var e=0;0!==t;)e++,t>>>=1;return e},a.setToSJISFunction=function(t){if("function"!=typeof t)throw new Error('"toSJISFunc" is not a valid function.');n=t},a.isKanjiModeEnabled=function(){return void 0!==n},a.toSJIS=function(t){return n(t)}},{}],21:[function(t,e,a){a.isValid=function(t){return!isNaN(t)&&t>=1&&t<=40}},{}],22:[function(t,e,a){var n=t("./utils"),i=t("./error-correction-code"),r=t("./error-correction-level"),o=t("./mode"),s=t("./version-check"),h=t("isarray"),c=n.getBCHDigit(7973);function u(t,e){return o.getCharCountIndicator(t,e)+4}function l(t,e){var a=0;return t.forEach((function(t){var n=u(t.mode,e);a+=n+t.getBitsLength()})),a}a.from=function(t,e){return s.isValid(t)?parseInt(t,10):e},a.getCapacity=function(t,e,a){if(!s.isValid(t))throw new Error("Invalid QR Code version");void 0===a&&(a=o.BYTE);var r=8*(n.getSymbolTotalCodewords(t)-i.getTotalCodewordsCount(t,e));if(a===o.MIXED)return r;var h=r-u(a,t);switch(a){case o.NUMERIC:return Math.floor(h/10*3);case o.ALPHANUMERIC:return Math.floor(h/11*2);case o.KANJI:return Math.floor(h/13);case o.BYTE:default:return Math.floor(h/8)}},a.getBestVersionForData=function(t,e){var n,i=r.from(e,r.M);if(h(t)){if(t.length>1)return function(t,e){for(var n=1;n<=40;n++)if(l(t,n)<=a.getCapacity(n,e,o.MIXED))return n}(t,i);if(0===t.length)return 1;n=t[0]}else n=t;return function(t,e,n){for(var i=1;i<=40;i++)if(e<=a.getCapacity(i,n,t))return i}(n.mode,n.getLength(),i)},a.getEncodedBits=function(t){if(!s.isValid(t)||t<7)throw new Error("Invalid QR Code version");for(var e=t<<12;n.getBCHDigit(e)-c>=0;)e^=7973<':"",l="0&&c>0&&t[h-1]||(n+=o?r("M",c+a,.5+u+a):r("m",i,0),i=0,o=!1),c+1',d='viewBox="0 0 '+c+" "+c+'"',m=''+u+l+"\n";return"function"==typeof a&&a(null,m),m}},{"./utils":26}],26:[function(t,e,a){function n(t){if("string"!=typeof t)throw new Error("Color should be defined as hex string");var e=t.slice().replace("#","").split("");if(e.length<3||5===e.length||e.length>8)throw new Error("Invalid hex color: "+t);3!==e.length&&4!==e.length||(e=Array.prototype.concat.apply([],e.map((function(t){return[t,t]})))),6===e.length&&e.push("F","F");var a=parseInt(e.join(""),16);return{r:a>>24&255,g:a>>16&255,b:a>>8&255,a:255&a,hex:"#"+e.slice(0,6).join("")}}a.getOptions=function(t){t||(t={}),t.color||(t.color={});var e=void 0===t.margin||null===t.margin||t.margin<0?4:t.margin,a=t.width&&t.width>=21?t.width:void 0,i=t.scale||4;return{width:a,scale:a?4:i,margin:e,color:{dark:n(t.color.dark||"#000000ff"),light:n(t.color.light||"#ffffffff")},type:t.type,rendererOpts:t.rendererOpts||{}}},a.getScale=function(t,e){return e.width&&e.width>=t+2*e.margin?e.width/(t+2*e.margin):e.scale},a.getImageWidth=function(t,e){var n=a.getScale(t,e);return Math.floor((t+2*e.margin)*n)},a.qrToImageData=function(t,e,n){for(var i=e.modules.size,r=e.modules.data,o=a.getScale(i,n),s=Math.floor((i+2*n.margin)*o),h=n.margin*o,c=[n.color.light,n.color.dark],u=0;u=h&&l>=h&&u=i)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+i.toString(16)+" bytes");return 0|t}function s(t,e){var a;return r.TYPED_ARRAY_SUPPORT?(a=new Uint8Array(e)).__proto__=r.prototype:(null===(a=t)&&(a=new r(e)),a.length=e),a}function h(t,e){var a=s(t,e<0?0:0|o(e));if(!r.TYPED_ARRAY_SUPPORT)for(var n=0;n55295&&a<57344){if(!i){if(a>56319){(e-=3)>-1&&r.push(239,191,189);continue}if(o+1===n){(e-=3)>-1&&r.push(239,191,189);continue}i=a;continue}if(a<56320){(e-=3)>-1&&r.push(239,191,189),i=a;continue}a=65536+(i-55296<<10|a-56320)}else i&&(e-=3)>-1&&r.push(239,191,189);if(i=null,a<128){if((e-=1)<0)break;r.push(a)}else if(a<2048){if((e-=2)<0)break;r.push(a>>6|192,63&a|128)}else if(a<65536){if((e-=3)<0)break;r.push(a>>12|224,a>>6&63|128,63&a|128)}else{if(!(a<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;r.push(a>>18|240,a>>12&63|128,a>>6&63|128,63&a|128)}}return r}function l(t){return r.isBuffer(t)?t.length:"undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer)?t.byteLength:("string"!=typeof t&&(t=""+t),0===t.length?0:u(t).length)}r.TYPED_ARRAY_SUPPORT&&(r.prototype.__proto__=Uint8Array.prototype,r.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&r[Symbol.species]===r&&Object.defineProperty(r,Symbol.species,{value:null,configurable:!0,enumerable:!1,writable:!1})),r.prototype.write=function(t,e,a){void 0===e||void 0===a&&"string"==typeof e?(a=this.length,e=0):isFinite(e)&&(e|=0,isFinite(a)?a|=0:a=void 0);var n=this.length-e;if((void 0===a||a>n)&&(a=n),t.length>0&&(a<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");return function(t,e,a,n){return function(t,e,a,n){for(var i=0;i=e.length||i>=t.length);++i)e[i+a]=t[i];return i}(u(e,t.length-a),t,a,n)}(this,t,e,a)},r.prototype.slice=function(t,e){var a,n=this.length;if((t=~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),(e=void 0===e?n:~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),e=t.length&&(e=t.length),e||(e=0),n>0&&n=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-e=0;--i)t[i+e]=this[i+a];else if(o<1e3||!r.TYPED_ARRAY_SUPPORT)for(i=0;i>>=0,a=void 0===a?this.length:a>>>0,t||(t=0),"number"==typeof t)for(i=e;il)&&(r[h]=l,m.push(h,l),i[h]=s));if(void 0!==a&&void 0===r[a]){var f=["Could not find a path from ",e," to ",a,"."].join("");throw new Error(f)}return i},extract_shortest_path_from_predecessor_list:function(t,e){for(var a=[],n=e;n;)a.push(n),t[n],n=t[n];return a.reverse(),a},find_path:function(t,e,a){var i=n.single_source_shortest_paths(t,e,a);return n.extract_shortest_path_from_predecessor_list(i,a)},PriorityQueue:{make:function(t){var e,a=n.PriorityQueue,i={};for(e in t=t||{},a)a.hasOwnProperty(e)&&(i[e]=a[e]);return i.queue=[],i.sorter=t.sorter||a.default_sorter,i},default_sorter:function(t,e){return t.cost-e.cost},push:function(t,e){var a={value:t,cost:e};this.queue.push(a),this.queue.sort(this.sorter)},pop:function(){return this.queue.shift()},empty:function(){return 0===this.queue.length}}};void 0!==e&&(e.exports=n)},{}],30:[function(t,e,a){var n={}.toString;e.exports=Array.isArray||function(t){return"[object Array]"==n.call(t)}},{}],31:[function(t,e,n){(function(t){e.exports="object"==typeof self&&self.self===self&&self||"object"==typeof t&&t.global===t&&t||this}).call(this,void 0!==a?a:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[23])(23)})),r={name:"qrcode",props:{options:Object,tag:{type:String,default:"canvas"},value:null},render:function(t){return t(this.tag,this.$slots.default)},watch:{$props:{deep:!0,immediate:!0,handler:function(){this.$el&&this.generate()}}},methods:{generate:function(){var t=this,e=this.options,a=this.tag,n=String(this.value);"canvas"===a?i.toCanvas(this.$el,n,e,(function(t){if(t)throw t})):"img"===a?i.toDataURL(n,e,(function(e,a){if(e)throw e;t.$el.src=a})):i.toString(n,e,(function(e,a){if(e)throw e;t.$el.innerHTML=a}))}},mounted:function(){this.generate()}};e.a=r}).call(this,a(44))},664:function(t,e,a){"use strict"; /*! * Cropper.js v1.4.3 * https://fengyuanchen.github.io/cropperjs @@ -17,5 +17,5 @@ var a="undefined"!=typeof window?window:void 0!==t?t:"undefined"!=typeof self?se * Released under the MIT license * * Date: 2018-10-24T13:07:15.032Z - */function n(t){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function r(t,e){for(var a=0;a1?e-1:0),n=1;n0&&a.forEach((function(e){A(e)&&Object.keys(e).forEach((function(a){t[a]=e[a]}))})),t},I=/\.\d*(?:0|9){12}\d*$/;function z(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1e11;return I.test(t)?Math.round(t*e)/e:t}var O=/^(?:width|height|left|top|marginLeft|marginTop)$/;function Y(t,e){var a=t.style;L(e,(function(t,e){O.test(e)&&B(t)&&(t+="px"),a[e]=t}))}function H(t,e){if(e)if(B(t.length))L(t,(function(t){H(t,e)}));else if(t.classList)t.classList.add(e);else{var a=t.className.trim();a?a.indexOf(e)<0&&(t.className="".concat(a," ").concat(e)):t.className=e}}function U(t,e){e&&(B(t.length)?L(t,(function(t){U(t,e)})):t.classList?t.classList.remove(e):t.className.indexOf(e)>=0&&(t.className=t.className.replace(e,"")))}function j(t,e,a){e&&(B(t.length)?L(t,(function(t){j(t,e,a)})):a?H(t,e):U(t,e))}var _=/([a-z\d])([A-Z])/g;function W(t){return t.replace(_,"$1-$2").toLowerCase()}function X(t,e){return A(t[e])?t[e]:t.dataset?t.dataset[e]:t.getAttribute("data-".concat(W(e)))}function K(t,e,a){A(a)?t[e]=a:t.dataset?t.dataset[e]=a:t.setAttribute("data-".concat(W(e)),a)}var F=/\s\s*/,q=function(){var t=!1;if(s){var e=!1,a=function(){},n=Object.defineProperty({},"once",{get:function(){return t=!0,e},set:function(t){e=t}});h.addEventListener("test",a,n),h.removeEventListener("test",a,n)}return t}();function J(t,e,a){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=a;e.trim().split(F).forEach((function(e){if(!q){var r=t.listeners;r&&r[e]&&r[e][a]&&(i=r[e][a],delete r[e][a],0===Object.keys(r[e]).length&&delete r[e],0===Object.keys(r).length&&delete t.listeners)}t.removeEventListener(e,i,n)}))}function V(t,e,a){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=a;e.trim().split(F).forEach((function(e){if(n.once&&!q){var r=t.listeners,o=void 0===r?{}:r;i=function(){delete o[e][a],t.removeEventListener(e,i,n);for(var r=arguments.length,s=new Array(r),h=0;h1&&void 0!==arguments[1]?arguments[1]:"contain",r=function(t){return it(t)&&t>0};if(r(n)&&r(a)){var o=a*e;"contain"===i&&o>n||"cover"===i&&o=8&&(r=h+u)}}}if(r){var l,d,m=a.getUint16(r,n);for(d=0;dt.width?3===a?s=t.height*o:h=t.width/o:3===a?h=t.width/o:s=t.height*o;var c={aspectRatio:o,naturalWidth:i,naturalHeight:r,width:s,height:h};c.left=(t.width-s)/2,c.top=(t.height-h)/2,c.oldLeft=c.left,c.oldTop=c.top,this.canvasData=c,this.limited=1===a||2===a,this.limitCanvas(!0,!0),this.initialImageData=P({},e),this.initialCanvasData=P({},c)},limitCanvas:function(t,e){var a=this.options,n=this.containerData,i=this.canvasData,r=this.cropBoxData,o=a.viewMode,s=i.aspectRatio,h=this.cropped&&r;if(t){var c=Number(a.minCanvasWidth)||0,u=Number(a.minCanvasHeight)||0;o>1?(c=Math.max(c,n.width),u=Math.max(u,n.height),3===o&&(u*s>c?c=u*s:u=c/s)):o>0&&(c?c=Math.max(c,h?r.width:0):u?u=Math.max(u,h?r.height:0):h&&(c=r.width,(u=r.height)*s>c?c=u*s:u=c/s));var l=rt({aspectRatio:s,width:c,height:u});c=l.width,u=l.height,i.minWidth=c,i.minHeight=u,i.maxWidth=1/0,i.maxHeight=1/0}if(e)if(o>(h?0:1)){var d=n.width-i.width,m=n.height-i.height;i.minLeft=Math.min(0,d),i.minTop=Math.min(0,m),i.maxLeft=Math.max(0,d),i.maxTop=Math.max(0,m),h&&this.limited&&(i.minLeft=Math.min(r.left,r.left+(r.width-i.width)),i.minTop=Math.min(r.top,r.top+(r.height-i.height)),i.maxLeft=r.left,i.maxTop=r.top,2===o&&(i.width>=n.width&&(i.minLeft=Math.min(0,d),i.maxLeft=Math.max(0,d)),i.height>=n.height&&(i.minTop=Math.min(0,m),i.maxTop=Math.max(0,m))))}else i.minLeft=-i.width,i.minTop=-i.height,i.maxLeft=n.width,i.maxTop=n.height},renderCanvas:function(t,e){var a=this.canvasData,n=this.imageData;if(e){var i=function(t){var e=t.width,a=t.height,n=t.degree;if(90===(n=Math.abs(n)%180))return{width:a,height:e};var i=n%90*Math.PI/180,r=Math.sin(i),o=Math.cos(i),s=e*o+a*r,h=e*r+a*o;return n>90?{width:h,height:s}:{width:s,height:h}}({width:n.naturalWidth*Math.abs(n.scaleX||1),height:n.naturalHeight*Math.abs(n.scaleY||1),degree:n.rotate||0}),r=i.width,o=i.height,s=a.width*(r/a.naturalWidth),h=a.height*(o/a.naturalHeight);a.left-=(s-a.width)/2,a.top-=(h-a.height)/2,a.width=s,a.height=h,a.aspectRatio=r/o,a.naturalWidth=r,a.naturalHeight=o,this.limitCanvas(!0,!1)}(a.width>a.maxWidth||a.widtha.maxHeight||a.heighte.width?i.height=i.width/a:i.width=i.height*a),this.cropBoxData=i,this.limitCropBox(!0,!0),i.width=Math.min(Math.max(i.width,i.minWidth),i.maxWidth),i.height=Math.min(Math.max(i.height,i.minHeight),i.maxHeight),i.width=Math.max(i.minWidth,i.width*n),i.height=Math.max(i.minHeight,i.height*n),i.left=e.left+(e.width-i.width)/2,i.top=e.top+(e.height-i.height)/2,i.oldLeft=i.left,i.oldTop=i.top,this.initialCropBoxData=P({},i)},limitCropBox:function(t,e){var a=this.options,n=this.containerData,i=this.canvasData,r=this.cropBoxData,o=this.limited,s=a.aspectRatio;if(t){var h=Number(a.minCropBoxWidth)||0,c=Number(a.minCropBoxHeight)||0,u=o?Math.min(n.width,i.width,i.width+i.left,n.width-i.left):n.width,l=o?Math.min(n.height,i.height,i.height+i.top,n.height-i.top):n.height;h=Math.min(h,n.width),c=Math.min(c,n.height),s&&(h&&c?c*s>h?c=h/s:h=c*s:h?c=h/s:c&&(h=c*s),l*s>u?l=u/s:u=l*s),r.minWidth=Math.min(h,u),r.minHeight=Math.min(c,l),r.maxWidth=u,r.maxHeight=l}e&&(o?(r.minLeft=Math.max(0,i.left),r.minTop=Math.max(0,i.top),r.maxLeft=Math.min(n.width,i.left+i.width)-r.width,r.maxTop=Math.min(n.height,i.top+i.height)-r.height):(r.minLeft=0,r.minTop=0,r.maxLeft=n.width-r.width,r.maxTop=n.height-r.height))},renderCropBox:function(){var t=this.options,e=this.containerData,a=this.cropBoxData;(a.width>a.maxWidth||a.widtha.maxHeight||a.height=e.width&&a.height>=e.height?"move":"all"),Y(this.cropBox,P({width:a.width,height:a.height},at({translateX:a.left,translateY:a.top}))),this.cropped&&this.limited&&this.limitCanvas(!0,!0),this.disabled||this.output()},output:function(){this.preview(),$(this.element,"crop",this.getData())}},lt={initPreview:function(){var t=this.crossOrigin,e=this.options.preview,a=t?this.crossOriginUrl:this.url,n=document.createElement("img");if(t&&(n.crossOrigin=t),n.src=a,this.viewBox.appendChild(n),this.viewBoxImage=n,e){var i=e;"string"==typeof e?i=this.element.ownerDocument.querySelectorAll(e):e.querySelector&&(i=[e]),this.previews=i,L(i,(function(e){var n=document.createElement("img");K(e,v,{width:e.offsetWidth,height:e.offsetHeight,html:e.innerHTML}),t&&(n.crossOrigin=t),n.src=a,n.style.cssText='display:block;width:100%;height:auto;min-width:0!important;min-height:0!important;max-width:none!important;max-height:none!important;image-orientation:0deg!important;"',e.innerHTML="",e.appendChild(n)}))}},resetPreview:function(){L(this.previews,(function(t){var e=X(t,v);Y(t,{width:e.width,height:e.height}),t.innerHTML=e.html,function(t,e){if(A(t[e]))try{delete t[e]}catch(a){t[e]=void 0}else if(t.dataset)try{delete t.dataset[e]}catch(a){t.dataset[e]=void 0}else t.removeAttribute("data-".concat(W(e)))}(t,v)}))},preview:function(){var t=this.imageData,e=this.canvasData,a=this.cropBoxData,n=a.width,i=a.height,r=t.width,o=t.height,s=a.left-e.left-t.left,h=a.top-e.top-t.top;this.cropped&&!this.disabled&&(Y(this.viewBoxImage,P({width:r,height:o},at(P({translateX:-s,translateY:-h},t)))),L(this.previews,(function(e){var a=X(e,v),c=a.width,u=a.height,l=c,d=u,m=1;n&&(d=i*(m=c/n)),i&&d>u&&(l=n*(m=u/i),d=u),Y(e,{width:l,height:d}),Y(e.getElementsByTagName("img")[0],P({width:r*m,height:o*m},at(P({translateX:-s*m,translateY:-h*m},t))))})))}},dt={bind:function(){var t=this.element,e=this.options,a=this.cropper;S(e.cropstart)&&V(t,"cropstart",e.cropstart),S(e.cropmove)&&V(t,"cropmove",e.cropmove),S(e.cropend)&&V(t,"cropend",e.cropend),S(e.crop)&&V(t,"crop",e.crop),S(e.zoom)&&V(t,"zoom",e.zoom),V(a,w,this.onCropStart=this.cropStart.bind(this)),e.zoomable&&e.zoomOnWheel&&V(a,"wheel mousewheel DOMMouseScroll",this.onWheel=this.wheel.bind(this)),e.toggleDragModeOnDblclick&&V(a,"dblclick",this.onDblclick=this.dblclick.bind(this)),V(t.ownerDocument,y,this.onCropMove=this.cropMove.bind(this)),V(t.ownerDocument,b,this.onCropEnd=this.cropEnd.bind(this)),e.responsive&&V(window,"resize",this.onResize=this.resize.bind(this))},unbind:function(){var t=this.element,e=this.options,a=this.cropper;S(e.cropstart)&&J(t,"cropstart",e.cropstart),S(e.cropmove)&&J(t,"cropmove",e.cropmove),S(e.cropend)&&J(t,"cropend",e.cropend),S(e.crop)&&J(t,"crop",e.crop),S(e.zoom)&&J(t,"zoom",e.zoom),J(a,w,this.onCropStart),e.zoomable&&e.zoomOnWheel&&J(a,"wheel mousewheel DOMMouseScroll",this.onWheel),e.toggleDragModeOnDblclick&&J(a,"dblclick",this.onDblclick),J(t.ownerDocument,y,this.onCropMove),J(t.ownerDocument,b,this.onCropEnd),e.responsive&&J(window,"resize",this.onResize)}},mt={resize:function(){var t=this.options,e=this.container,a=this.containerData,n=Number(t.minContainerWidth)||200,i=Number(t.minContainerHeight)||100;if(!(this.disabled||a.width<=n||a.height<=i)){var r,o,s=e.offsetWidth/a.width;if(1!==s||e.offsetHeight!==a.height)t.restore&&(r=this.getCanvasData(),o=this.getCropBoxData()),this.render(),t.restore&&(this.setCanvasData(L(r,(function(t,e){r[e]=t*s}))),this.setCropBoxData(L(o,(function(t,e){o[e]=t*s}))))}},dblclick:function(){var t,e;this.disabled||"none"===this.options.dragMode||this.setDragMode((t=this.dragBox,e=c,(t.classList?t.classList.contains(e):t.className.indexOf(e)>-1)?"move":"crop"))},wheel:function(t){var e=this,a=Number(this.options.wheelZoomRatio)||.1,n=1;this.disabled||(t.preventDefault(),this.wheeling||(this.wheeling=!0,setTimeout((function(){e.wheeling=!1}),50),t.deltaY?n=t.deltaY>0?1:-1:t.wheelDelta?n=-t.wheelDelta/120:t.detail&&(n=t.detail>0?1:-1),this.zoom(-n*a,t)))},cropStart:function(t){if(!this.disabled){var e,a=this.options,n=this.pointers;t.changedTouches?L(t.changedTouches,(function(t){n[t.identifier]=nt(t)})):n[t.pointerId||0]=nt(t),e=Object.keys(n).length>1&&a.zoomable&&a.zoomOnTouch?"zoom":X(t.target,g),N.test(e)&&!1!==$(this.element,"cropstart",{originalEvent:t,action:e})&&(t.preventDefault(),this.action=e,this.cropping=!1,"crop"===e&&(this.cropping=!0,H(this.dragBox,f)))}},cropMove:function(t){var e=this.action;if(!this.disabled&&e){var a=this.pointers;t.preventDefault(),!1!==$(this.element,"cropmove",{originalEvent:t,action:e})&&(t.changedTouches?L(t.changedTouches,(function(t){P(a[t.identifier]||{},nt(t,!0))})):P(a[t.pointerId||0]||{},nt(t,!0)),this.change(t))}},cropEnd:function(t){if(!this.disabled){var e=this.action,a=this.pointers;t.changedTouches?L(t.changedTouches,(function(t){delete a[t.identifier]})):delete a[t.pointerId||0],e&&(t.preventDefault(),Object.keys(a).length||(this.action=""),this.cropping&&(this.cropping=!1,j(this.dragBox,f,this.cropped&&this.options.modal)),$(this.element,"cropend",{originalEvent:t,action:e}))}}},ft={change:function(t){var e,a=this.options,n=this.canvasData,i=this.containerData,r=this.cropBoxData,o=this.pointers,s=this.action,h=a.aspectRatio,c=r.left,u=r.top,d=r.width,m=r.height,f=c+d,p=u+m,g=0,v=0,w=i.width,y=i.height,b=!0;!h&&t.shiftKey&&(h=d&&m?d/m:1),this.limited&&(g=r.minLeft,v=r.minTop,w=g+Math.min(i.width,n.width,n.left+n.width),y=v+Math.min(i.height,n.height,n.top+n.height));var N=o[Object.keys(o)[0]],x={x:N.endX-N.startX,y:N.endY-N.startY},C=function(t){switch(t){case"e":f+x.x>w&&(x.x=w-f);break;case"w":c+x.xy&&(x.y=y-p)}};switch(s){case"all":c+=x.x,u+=x.y;break;case"e":if(x.x>=0&&(f>=w||h&&(u<=v||p>=y))){b=!1;break}C("e"),(d+=x.x)<0&&(s="w",c-=d=-d),h&&(m=d/h,u+=(r.height-m)/2);break;case"n":if(x.y<=0&&(u<=v||h&&(c<=g||f>=w))){b=!1;break}C("n"),m-=x.y,u+=x.y,m<0&&(s="s",u-=m=-m),h&&(d=m*h,c+=(r.width-d)/2);break;case"w":if(x.x<=0&&(c<=g||h&&(u<=v||p>=y))){b=!1;break}C("w"),d-=x.x,c+=x.x,d<0&&(s="e",c-=d=-d),h&&(m=d/h,u+=(r.height-m)/2);break;case"s":if(x.y>=0&&(p>=y||h&&(c<=g||f>=w))){b=!1;break}C("s"),(m+=x.y)<0&&(s="n",u-=m=-m),h&&(d=m*h,c+=(r.width-d)/2);break;case"ne":if(h){if(x.y<=0&&(u<=v||f>=w)){b=!1;break}C("n"),m-=x.y,u+=x.y,d=m*h}else C("n"),C("e"),x.x>=0?fv&&(m-=x.y,u+=x.y):(m-=x.y,u+=x.y);d<0&&m<0?(s="sw",u-=m=-m,c-=d=-d):d<0?(s="nw",c-=d=-d):m<0&&(s="se",u-=m=-m);break;case"nw":if(h){if(x.y<=0&&(u<=v||c<=g)){b=!1;break}C("n"),m-=x.y,u+=x.y,d=m*h,c+=r.width-d}else C("n"),C("w"),x.x<=0?c>g?(d-=x.x,c+=x.x):x.y<=0&&u<=v&&(b=!1):(d-=x.x,c+=x.x),x.y<=0?u>v&&(m-=x.y,u+=x.y):(m-=x.y,u+=x.y);d<0&&m<0?(s="se",u-=m=-m,c-=d=-d):d<0?(s="ne",c-=d=-d):m<0&&(s="sw",u-=m=-m);break;case"sw":if(h){if(x.x<=0&&(c<=g||p>=y)){b=!1;break}C("w"),d-=x.x,c+=x.x,m=d/h}else C("s"),C("w"),x.x<=0?c>g?(d-=x.x,c+=x.x):x.y>=0&&p>=y&&(b=!1):(d-=x.x,c+=x.x),x.y>=0?p=0&&(f>=w||p>=y)){b=!1;break}C("e"),m=(d+=x.x)/h}else C("s"),C("e"),x.x>=0?f=0&&p>=y&&(b=!1):d+=x.x,x.y>=0?p0?s=x.y>0?"se":"ne":x.x<0&&(c-=d,s=x.y>0?"sw":"nw"),x.y<0&&(u-=m),this.cropped||(U(this.cropBox,l),this.cropped=!0,this.limited&&this.limitCropBox(!0,!0))}b&&(r.width=d,r.height=m,r.left=c,r.top=u,this.action=s,this.renderCropBox()),L(o,(function(t){t.startX=t.endX,t.startY=t.endY}))}},pt={crop:function(){return!this.ready||this.cropped||this.disabled||(this.cropped=!0,this.limitCropBox(!0,!0),this.options.modal&&H(this.dragBox,f),U(this.cropBox,l),this.setCropBoxData(this.initialCropBoxData)),this},reset:function(){return this.ready&&!this.disabled&&(this.imageData=P({},this.initialImageData),this.canvasData=P({},this.initialCanvasData),this.cropBoxData=P({},this.initialCropBoxData),this.renderCanvas(),this.cropped&&this.renderCropBox()),this},clear:function(){return this.cropped&&!this.disabled&&(P(this.cropBoxData,{left:0,top:0,width:0,height:0}),this.cropped=!1,this.renderCropBox(),this.limitCanvas(!0,!0),this.renderCanvas(),U(this.dragBox,f),H(this.cropBox,l)),this},replace:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return!this.disabled&&t&&(this.isImg&&(this.element.src=t),e?(this.url=t,this.image.src=t,this.ready&&(this.viewBoxImage.src=t,L(this.previews,(function(e){e.getElementsByTagName("img")[0].src=t})))):(this.isImg&&(this.replaced=!0),this.options.data=null,this.uncreate(),this.load(t))),this},enable:function(){return this.ready&&this.disabled&&(this.disabled=!1,U(this.cropper,u)),this},disable:function(){return this.ready&&!this.disabled&&(this.disabled=!0,H(this.cropper,u)),this},destroy:function(){var t=this.element;return t.cropper?(t.cropper=void 0,this.isImg&&this.replaced&&(t.src=this.originalUrl),this.uncreate(),this):this},move:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t,a=this.canvasData,n=a.left,i=a.top;return this.moveTo(T(t)?t:n+Number(t),T(e)?e:i+Number(e))},moveTo:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t,a=this.canvasData,n=!1;return t=Number(t),e=Number(e),this.ready&&!this.disabled&&this.options.movable&&(B(t)&&(a.left=t,n=!0),B(e)&&(a.top=e,n=!0),n&&this.renderCanvas(!0)),this},zoom:function(t,e){var a=this.canvasData;return t=(t=Number(t))<0?1/(1-t):1+t,this.zoomTo(a.width*t/a.naturalWidth,null,e)},zoomTo:function(t,e,a){var n=this.options,i=this.canvasData,r=i.width,o=i.height,s=i.naturalWidth,h=i.naturalHeight;if((t=Number(t))>=0&&this.ready&&!this.disabled&&n.zoomable){var c=s*t,u=h*t;if(!1===$(this.element,"zoom",{ratio:t,oldRatio:r/s,originalEvent:a}))return this;if(a){var l=this.pointers,d=Q(this.cropper),m=l&&Object.keys(l).length?function(t){var e=0,a=0,n=0;return L(t,(function(t){var i=t.startX,r=t.startY;e+=i,a+=r,n+=1})),{pageX:e/=n,pageY:a/=n}}(l):{pageX:a.pageX,pageY:a.pageY};i.left-=(c-r)*((m.pageX-d.left-i.left)/r),i.top-=(u-o)*((m.pageY-d.top-i.top)/o)}else R(e)&&B(e.x)&&B(e.y)?(i.left-=(c-r)*((e.x-i.left)/r),i.top-=(u-o)*((e.y-i.top)/o)):(i.left-=(c-r)/2,i.top-=(u-o)/2);i.width=c,i.height=u,this.renderCanvas(!0)}return this},rotate:function(t){return this.rotateTo((this.imageData.rotate||0)+Number(t))},rotateTo:function(t){return B(t=Number(t))&&this.ready&&!this.disabled&&this.options.rotatable&&(this.imageData.rotate=t%360,this.renderCanvas(!0,!0)),this},scaleX:function(t){var e=this.imageData.scaleY;return this.scale(t,B(e)?e:1)},scaleY:function(t){var e=this.imageData.scaleX;return this.scale(B(e)?e:1,t)},scale:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t,a=this.imageData,n=!1;return t=Number(t),e=Number(e),this.ready&&!this.disabled&&this.options.scalable&&(B(t)&&(a.scaleX=t,n=!0),B(e)&&(a.scaleY=e,n=!0),n&&this.renderCanvas(!0,!0)),this},getData:function(){var t,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],a=this.options,n=this.imageData,i=this.canvasData,r=this.cropBoxData;if(this.ready&&this.cropped){t={x:r.left-i.left,y:r.top-i.top,width:r.width,height:r.height};var o=n.width/n.naturalWidth;if(L(t,(function(e,a){t[a]=e/o})),e){var s=Math.round(t.y+t.height),h=Math.round(t.x+t.width);t.x=Math.round(t.x),t.y=Math.round(t.y),t.width=h-t.x,t.height=s-t.y}}else t={x:0,y:0,width:0,height:0};return a.rotatable&&(t.rotate=n.rotate||0),a.scalable&&(t.scaleX=n.scaleX||1,t.scaleY=n.scaleY||1),t},setData:function(t){var e=this.options,a=this.imageData,n=this.canvasData,i={};if(this.ready&&!this.disabled&&R(t)){var r=!1;e.rotatable&&B(t.rotate)&&t.rotate!==a.rotate&&(a.rotate=t.rotate,r=!0),e.scalable&&(B(t.scaleX)&&t.scaleX!==a.scaleX&&(a.scaleX=t.scaleX,r=!0),B(t.scaleY)&&t.scaleY!==a.scaleY&&(a.scaleY=t.scaleY,r=!0)),r&&this.renderCanvas(!0,!0);var o=a.width/a.naturalWidth;B(t.x)&&(i.left=t.x*o+n.left),B(t.y)&&(i.top=t.y*o+n.top),B(t.width)&&(i.width=t.width*o),B(t.height)&&(i.height=t.height*o),this.setCropBoxData(i)}return this},getContainerData:function(){return this.ready?P({},this.containerData):{}},getImageData:function(){return this.sized?P({},this.imageData):{}},getCanvasData:function(){var t=this.canvasData,e={};return this.ready&&L(["left","top","width","height","naturalWidth","naturalHeight"],(function(a){e[a]=t[a]})),e},setCanvasData:function(t){var e=this.canvasData,a=e.aspectRatio;return this.ready&&!this.disabled&&R(t)&&(B(t.left)&&(e.left=t.left),B(t.top)&&(e.top=t.top),B(t.width)?(e.width=t.width,e.height=t.width/a):B(t.height)&&(e.height=t.height,e.width=t.height*a),this.renderCanvas(!0)),this},getCropBoxData:function(){var t,e=this.cropBoxData;return this.ready&&this.cropped&&(t={left:e.left,top:e.top,width:e.width,height:e.height}),t||{}},setCropBoxData:function(t){var e,a,n=this.cropBoxData,i=this.options.aspectRatio;return this.ready&&this.cropped&&!this.disabled&&R(t)&&(B(t.left)&&(n.left=t.left),B(t.top)&&(n.top=t.top),B(t.width)&&t.width!==n.width&&(e=!0,n.width=t.width),B(t.height)&&t.height!==n.height&&(a=!0,n.height=t.height),i&&(e?n.height=n.width/i:a&&(n.width=n.height*i)),this.renderCropBox()),this},getCroppedCanvas:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!this.ready||!window.HTMLCanvasElement)return null;var e=this.canvasData,a=ot(this.image,this.imageData,e,t);if(!this.cropped)return a;var n=this.getData(),i=n.x,r=n.y,s=n.width,h=n.height,c=a.width/Math.floor(e.naturalWidth);1!==c&&(i*=c,r*=c,s*=c,h*=c);var u=s/h,l=rt({aspectRatio:u,width:t.maxWidth||1/0,height:t.maxHeight||1/0}),d=rt({aspectRatio:u,width:t.minWidth||0,height:t.minHeight||0},"cover"),m=rt({aspectRatio:u,width:t.width||(1!==c?a.width:s),height:t.height||(1!==c?a.height:h)}),f=m.width,p=m.height;f=Math.min(l.width,Math.max(d.width,f)),p=Math.min(l.height,Math.max(d.height,p));var g=document.createElement("canvas"),v=g.getContext("2d");g.width=z(f),g.height=z(p),v.fillStyle=t.fillColor||"transparent",v.fillRect(0,0,f,p);var w=t.imageSmoothingEnabled,y=void 0===w||w,b=t.imageSmoothingQuality;v.imageSmoothingEnabled=y,b&&(v.imageSmoothingQuality=b);var N,x,C,M,E,k,B=a.width,T=a.height,A=i,D=r;A<=-s||A>B?(A=0,N=0,C=0,E=0):A<=0?(C=-A,A=0,E=N=Math.min(B,s+A)):A<=B&&(C=0,E=N=Math.min(s,B-A)),N<=0||D<=-h||D>T?(D=0,x=0,M=0,k=0):D<=0?(M=-D,D=0,k=x=Math.min(T,h+D)):D<=T&&(M=0,k=x=Math.min(h,T-D));var R=[A,D,N,x];if(E>0&&k>0){var S=f/s;R.push(C*S,M*S,E*S,k*S)}return v.drawImage.apply(v,[a].concat(o(R.map((function(t){return Math.floor(z(t))}))))),g},setAspectRatio:function(t){var e=this.options;return this.disabled||T(t)||(e.aspectRatio=Math.max(0,t)||NaN,this.ready&&(this.initCropBox(),this.cropped&&this.renderCropBox())),this},setDragMode:function(t){var e=this.options,a=this.dragBox,n=this.face;if(this.ready&&!this.disabled){var i="crop"===t,r=e.movable&&"move"===t;t=i||r?t:"none",e.dragMode=t,K(a,g,t),j(a,c,i),j(a,p,r),e.cropBoxMovable||(K(n,g,t),j(n,c,i),j(n,p,r))}return this}},gt=h.Cropper,vt=function(){function t(e){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(i(this,t),!e||!M.test(e.tagName))throw new Error("The first argument is required and must be an or element.");this.element=e,this.options=P({},E,R(a)&&a),this.cropped=!1,this.disabled=!1,this.pointers={},this.ready=!1,this.reloading=!1,this.replaced=!1,this.sized=!1,this.sizing=!1,this.init()}var e,a,n;return e=t,n=[{key:"noConflict",value:function(){return window.Cropper=gt,t}},{key:"setDefaults",value:function(t){P(E,R(t)&&t)}}],(a=[{key:"init",value:function(){var t,e=this.element,a=e.tagName.toLowerCase();if(!e.cropper){if(e.cropper=this,"img"===a){if(this.isImg=!0,t=e.getAttribute("src")||"",this.originalUrl=t,!t)return;t=e.src}else"canvas"===a&&window.HTMLCanvasElement&&(t=e.toDataURL());this.load(t)}}},{key:"load",value:function(t){var e=this;if(t){this.url=t,this.imageData={};var a=this.element,n=this.options;if(n.rotatable||n.scalable||(n.checkOrientation=!1),n.checkOrientation&&window.ArrayBuffer)if(x.test(t))C.test(t)?this.read((i=t.replace(ht,""),r=atob(i),o=new ArrayBuffer(r.length),L(s=new Uint8Array(o),(function(t,e){s[e]=r.charCodeAt(e)})),o)):this.clone();else{var i,r,o,s,h=new XMLHttpRequest,c=this.clone.bind(this);this.reloading=!0,this.xhr=h,h.ontimeout=c,h.onabort=c,h.onerror=c,h.onprogress=function(){"image/jpeg"!==h.getResponseHeader("content-type")&&h.abort()},h.onload=function(){e.read(h.response)},h.onloadend=function(){e.reloading=!1,e.xhr=null},n.checkCrossOrigin&&tt(t)&&a.crossOrigin&&(t=et(t)),h.open("GET",t),h.responseType="arraybuffer",h.withCredentials="use-credentials"===a.crossOrigin,h.send()}else this.clone()}}},{key:"read",value:function(t){var e=this.options,a=this.imageData,n=ct(t),i=0,r=1,s=1;if(n>1){this.url=function(t,e){for(var a=[],n=new Uint8Array(t);n.length>0;)a.push(st.apply(void 0,o(n.subarray(0,8192)))),n=n.subarray(8192);return"data:".concat(e,";base64,").concat(btoa(a.join("")))}(t,"image/jpeg");var h=function(t){var e=0,a=1,n=1;switch(t){case 2:a=-1;break;case 3:e=-180;break;case 4:n=-1;break;case 5:e=90,n=-1;break;case 6:e=90;break;case 7:e=90,a=-1;break;case 8:e=-90}return{rotate:e,scaleX:a,scaleY:n}}(n);i=h.rotate,r=h.scaleX,s=h.scaleY}e.rotatable&&(a.rotate=i),e.scalable&&(a.scaleX=r,a.scaleY=s),this.clone()}},{key:"clone",value:function(){var t,e,a=this.element,n=this.url;this.options.checkCrossOrigin&&tt(n)&&((t=a.crossOrigin)?e=n:(t="anonymous",e=et(n))),this.crossOrigin=t,this.crossOriginUrl=e;var i=document.createElement("img");t&&(i.crossOrigin=t),i.src=e||n,this.image=i,i.onload=this.start.bind(this),i.onerror=this.stop.bind(this),H(i,d),a.parentNode.insertBefore(i,a.nextSibling)}},{key:"start",value:function(){var t=this,e=this.isImg?this.element:this.image;e.onload=null,e.onerror=null,this.sizing=!0;var a=h.navigator&&/(Macintosh|iPhone|iPod|iPad).*AppleWebKit/i.test(h.navigator.userAgent),n=function(e,a){P(t.imageData,{naturalWidth:e,naturalHeight:a,aspectRatio:e/a}),t.sizing=!1,t.sized=!0,t.build()};if(!e.naturalWidth||a){var i=document.createElement("img"),r=document.body||document.documentElement;this.sizingImage=i,i.onload=function(){n(i.width,i.height),a||r.removeChild(i)},i.src=e.src,a||(i.style.cssText="left:0;max-height:none!important;max-width:none!important;min-height:0!important;min-width:0!important;opacity:0;position:absolute;top:0;z-index:-1;",r.appendChild(i))}else n(e.naturalWidth,e.naturalHeight)}},{key:"stop",value:function(){var t=this.image;t.onload=null,t.onerror=null,t.parentNode.removeChild(t),this.image=null}},{key:"build",value:function(){if(this.sized&&!this.ready){var t=this.element,e=this.options,a=this.image,n=t.parentNode,i=document.createElement("div");i.innerHTML='
';var r=i.querySelector(".".concat("cropper","-container")),o=r.querySelector(".".concat("cropper","-canvas")),s=r.querySelector(".".concat("cropper","-drag-box")),h=r.querySelector(".".concat("cropper","-crop-box")),c=h.querySelector(".".concat("cropper","-face"));this.container=n,this.cropper=r,this.canvas=o,this.dragBox=s,this.cropBox=h,this.viewBox=r.querySelector(".".concat("cropper","-view-box")),this.face=c,o.appendChild(a),H(t,l),n.insertBefore(r,t.nextSibling),this.isImg||U(a,d),this.initPreview(),this.bind(),e.initialAspectRatio=Math.max(0,e.initialAspectRatio)||NaN,e.aspectRatio=Math.max(0,e.aspectRatio)||NaN,e.viewMode=Math.max(0,Math.min(3,Math.round(e.viewMode)))||0,H(h,l),e.guides||H(h.getElementsByClassName("".concat("cropper","-dashed")),l),e.center||H(h.getElementsByClassName("".concat("cropper","-center")),l),e.background&&H(r,"".concat("cropper","-bg")),e.highlight||H(c,m),e.cropBoxMovable&&(H(c,p),K(c,g,"all")),e.cropBoxResizable||(H(h.getElementsByClassName("".concat("cropper","-line")),l),H(h.getElementsByClassName("".concat("cropper","-point")),l)),this.render(),this.ready=!0,this.setDragMode(e.dragMode),e.autoCrop&&this.crop(),this.setData(e.data),S(e.ready)&&V(t,"ready",e.ready,{once:!0}),$(t,"ready")}}},{key:"unbuild",value:function(){this.ready&&(this.ready=!1,this.unbind(),this.resetPreview(),this.cropper.parentNode.removeChild(this.cropper),U(this.element,l))}},{key:"uncreate",value:function(){this.ready?(this.unbuild(),this.ready=!1,this.cropped=!1):this.sizing?(this.sizingImage.onload=null,this.sizing=!1,this.sized=!1):this.reloading?(this.xhr.onabort=null,this.xhr.abort()):this.image&&this.stop()}}])&&r(e.prototype,a),n&&r(e,n),t}();P(vt.prototype,ut,lt,dt,mt,ft,pt),e.a=vt},652:function(t,e,a){},667:function(t,e,a){"use strict";a.d(e,"a",(function(){return i}));var n={aa:{name:"Afar",nativeName:"Afaraf"},ab:{name:"Abkhaz",nativeName:"аҧсуа бызшәа"},ae:{name:"Avestan",nativeName:"avesta"},af:{name:"Afrikaans",nativeName:"Afrikaans"},ak:{name:"Akan",nativeName:"Akan"},am:{name:"Amharic",nativeName:"አማርኛ"},an:{name:"Aragonese",nativeName:"aragonés"},ar:{name:"Arabic",nativeName:"اللغة العربية"},as:{name:"Assamese",nativeName:"অসমীয়া"},av:{name:"Avaric",nativeName:"авар мацӀ"},ay:{name:"Aymara",nativeName:"aymar aru"},az:{name:"Azerbaijani",nativeName:"azərbaycan dili"},ba:{name:"Bashkir",nativeName:"башҡорт теле"},be:{name:"Belarusian",nativeName:"беларуская мова"},bg:{name:"Bulgarian",nativeName:"български език"},bh:{name:"Bihari",nativeName:"भोजपुरी"},bi:{name:"Bislama",nativeName:"Bislama"},bm:{name:"Bambara",nativeName:"bamanankan"},bn:{name:"Bengali",nativeName:"বাংলা"},bo:{name:"Tibetan Standard",nativeName:"བོད་ཡིག"},br:{name:"Breton",nativeName:"brezhoneg"},bs:{name:"Bosnian",nativeName:"bosanski jezik"},ca:{name:"Catalan",nativeName:"català"},ce:{name:"Chechen",nativeName:"нохчийн мотт"},ch:{name:"Chamorro",nativeName:"Chamoru"},co:{name:"Corsican",nativeName:"corsu"},cr:{name:"Cree",nativeName:"ᓀᐦᐃᔭᐍᐏᐣ"},cs:{name:"Czech",nativeName:"čeština"},cu:{name:"Old Church Slavonic",nativeName:"ѩзыкъ словѣньскъ"},cv:{name:"Chuvash",nativeName:"чӑваш чӗлхи"},cy:{name:"Welsh",nativeName:"Cymraeg"},da:{name:"Danish",nativeName:"dansk"},de:{name:"German",nativeName:"Deutsch"},dv:{name:"Divehi",nativeName:"Dhivehi"},dz:{name:"Dzongkha",nativeName:"རྫོང་ཁ"},ee:{name:"Ewe",nativeName:"Eʋegbe"},el:{name:"Greek",nativeName:"ελληνικά"},en:{name:"English",nativeName:"English"},eo:{name:"Esperanto",nativeName:"Esperanto"},es:{name:"Spanish",nativeName:"Español"},et:{name:"Estonian",nativeName:"eesti"},eu:{name:"Basque",nativeName:"euskara"},fa:{name:"Persian",nativeName:"فارسی"},ff:{name:"Fula",nativeName:"Fulfulde"},fi:{name:"Finnish",nativeName:"suomi"},fj:{name:"Fijian",nativeName:"Vakaviti"},fo:{name:"Faroese",nativeName:"føroyskt"},fr:{name:"French",nativeName:"Français"},fy:{name:"Western Frisian",nativeName:"Frysk"},ga:{name:"Irish",nativeName:"Gaeilge"},gd:{name:"Scottish Gaelic",nativeName:"Gàidhlig"},gl:{name:"Galician",nativeName:"galego"},gn:{name:"Guaraní",nativeName:"Avañe'ẽ"},gu:{name:"Gujarati",nativeName:"ગુજરાતી"},gv:{name:"Manx",nativeName:"Gaelg"},ha:{name:"Hausa",nativeName:"هَوُسَ"},he:{name:"Hebrew",nativeName:"עברית"},hi:{name:"Hindi",nativeName:"हिन्दी"},ho:{name:"Hiri Motu",nativeName:"Hiri Motu"},hr:{name:"Croatian",nativeName:"hrvatski jezik"},ht:{name:"Haitian",nativeName:"Kreyòl ayisyen"},hu:{name:"Hungarian",nativeName:"magyar"},hy:{name:"Armenian",nativeName:"Հայերեն"},hz:{name:"Herero",nativeName:"Otjiherero"},ia:{name:"Interlingua",nativeName:"Interlingua"},id:{name:"Indonesian",nativeName:"Indonesian"},ie:{name:"Interlingue",nativeName:"Interlingue"},ig:{name:"Igbo",nativeName:"Asụsụ Igbo"},ii:{name:"Nuosu",nativeName:"ꆈꌠ꒿ Nuosuhxop"},ik:{name:"Inupiaq",nativeName:"Iñupiaq"},io:{name:"Ido",nativeName:"Ido"},is:{name:"Icelandic",nativeName:"Íslenska"},it:{name:"Italian",nativeName:"Italiano"},iu:{name:"Inuktitut",nativeName:"ᐃᓄᒃᑎᑐᑦ"},ja:{name:"Japanese",nativeName:"日本語"},jv:{name:"Javanese",nativeName:"basa Jawa"},ka:{name:"Georgian",nativeName:"ქართული"},kg:{name:"Kongo",nativeName:"Kikongo"},ki:{name:"Kikuyu",nativeName:"Gĩkũyũ"},kj:{name:"Kwanyama",nativeName:"Kuanyama"},kk:{name:"Kazakh",nativeName:"қазақ тілі"},kl:{name:"Kalaallisut",nativeName:"kalaallisut"},km:{name:"Khmer",nativeName:"ខេមរភាសា"},kn:{name:"Kannada",nativeName:"ಕನ್ನಡ"},ko:{name:"Korean",nativeName:"한국어"},kr:{name:"Kanuri",nativeName:"Kanuri"},ks:{name:"Kashmiri",nativeName:"कश्मीरी"},ku:{name:"Kurdish",nativeName:"Kurdî"},kv:{name:"Komi",nativeName:"коми кыв"},kw:{name:"Cornish",nativeName:"Kernewek"},ky:{name:"Kyrgyz",nativeName:"Кыргызча"},la:{name:"Latin",nativeName:"latine"},lb:{name:"Luxembourgish",nativeName:"Lëtzebuergesch"},lg:{name:"Ganda",nativeName:"Luganda"},li:{name:"Limburgish",nativeName:"Limburgs"},ln:{name:"Lingala",nativeName:"Lingála"},lo:{name:"Lao",nativeName:"ພາສາ"},lt:{name:"Lithuanian",nativeName:"lietuvių kalba"},lu:{name:"Luba-Katanga",nativeName:"Tshiluba"},lv:{name:"Latvian",nativeName:"latviešu valoda"},mg:{name:"Malagasy",nativeName:"fiteny malagasy"},mh:{name:"Marshallese",nativeName:"Kajin M̧ajeļ"},mi:{name:"Māori",nativeName:"te reo Māori"},mk:{name:"Macedonian",nativeName:"македонски јазик"},ml:{name:"Malayalam",nativeName:"മലയാളം"},mn:{name:"Mongolian",nativeName:"Монгол хэл"},mr:{name:"Marathi",nativeName:"मराठी"},ms:{name:"Malay",nativeName:"هاس ملايو‎"},mt:{name:"Maltese",nativeName:"Malti"},my:{name:"Burmese",nativeName:"ဗမာစာ"},na:{name:"Nauru",nativeName:"Ekakairũ Naoero"},nb:{name:"Norwegian Bokmål",nativeName:"Norsk bokmål"},nd:{name:"Northern Ndebele",nativeName:"isiNdebele"},ne:{name:"Nepali",nativeName:"नेपाली"},ng:{name:"Ndonga",nativeName:"Owambo"},nl:{name:"Dutch",nativeName:"Nederlands"},nn:{name:"Norwegian Nynorsk",nativeName:"Norsk nynorsk"},no:{name:"Norwegian",nativeName:"Norsk"},nr:{name:"Southern Ndebele",nativeName:"isiNdebele"},nv:{name:"Navajo",nativeName:"Diné bizaad"},ny:{name:"Chichewa",nativeName:"chiCheŵa"},oc:{name:"Occitan",nativeName:"occitan"},oj:{name:"Ojibwe",nativeName:"ᐊᓂᔑᓈᐯᒧᐎᓐ"},om:{name:"Oromo",nativeName:"Afaan Oromoo"},or:{name:"Oriya",nativeName:"ଓଡ଼ିଆ"},os:{name:"Ossetian",nativeName:"ирон æвзаг"},pa:{name:"Panjabi",nativeName:"ਪੰਜਾਬੀ"},pi:{name:"Pāli",nativeName:"पाऴि"},pl:{name:"Polish",nativeName:"język polski"},ps:{name:"Pashto",nativeName:"پښتو"},pt:{name:"Portuguese",nativeName:"Português"},qu:{name:"Quechua",nativeName:"Runa Simi"},rm:{name:"Romansh",nativeName:"rumantsch grischun"},rn:{name:"Kirundi",nativeName:"Ikirundi"},ro:{name:"Romanian",nativeName:"limba română"},ru:{name:"Russian",nativeName:"Русский"},rw:{name:"Kinyarwanda",nativeName:"Ikinyarwanda"},sa:{name:"Sanskrit",nativeName:"संस्कृतम्"},sc:{name:"Sardinian",nativeName:"sardu"},sd:{name:"Sindhi",nativeName:"सिन्धी"},se:{name:"Northern Sami",nativeName:"Davvisámegiella"},sg:{name:"Sango",nativeName:"yângâ tî sängö"},si:{name:"Sinhala",nativeName:"සිංහල"},sk:{name:"Slovak",nativeName:"slovenčina"},sl:{name:"Slovene",nativeName:"slovenski jezik"},sm:{name:"Samoan",nativeName:"gagana fa'a Samoa"},sn:{name:"Shona",nativeName:"chiShona"},so:{name:"Somali",nativeName:"Soomaaliga"},sq:{name:"Albanian",nativeName:"Shqip"},sr:{name:"Serbian",nativeName:"српски језик"},ss:{name:"Swati",nativeName:"SiSwati"},st:{name:"Southern Sotho",nativeName:"Sesotho"},su:{name:"Sundanese",nativeName:"Basa Sunda"},sv:{name:"Swedish",nativeName:"svenska"},sw:{name:"Swahili",nativeName:"Kiswahili"},ta:{name:"Tamil",nativeName:"தமிழ்"},te:{name:"Telugu",nativeName:"తెలుగు"},tg:{name:"Tajik",nativeName:"тоҷикӣ"},th:{name:"Thai",nativeName:"ไทย"},ti:{name:"Tigrinya",nativeName:"ትግርኛ"},tk:{name:"Turkmen",nativeName:"Türkmen"},tl:{name:"Tagalog",nativeName:"Wikang Tagalog"},tn:{name:"Tswana",nativeName:"Setswana"},to:{name:"Tonga",nativeName:"faka Tonga"},tr:{name:"Turkish",nativeName:"Türkçe"},ts:{name:"Tsonga",nativeName:"Xitsonga"},tt:{name:"Tatar",nativeName:"татар теле"},tw:{name:"Twi",nativeName:"Twi"},ty:{name:"Tahitian",nativeName:"Reo Tahiti"},ug:{name:"Uyghur",nativeName:"ئۇيغۇرچە‎"},uk:{name:"Ukrainian",nativeName:"Українська"},ur:{name:"Urdu",nativeName:"اردو"},uz:{name:"Uzbek",nativeName:"Ўзбек"},ve:{name:"Venda",nativeName:"Tshivenḓa"},vi:{name:"Vietnamese",nativeName:"Tiếng Việt"},vo:{name:"Volapük",nativeName:"Volapük"},wa:{name:"Walloon",nativeName:"walon"},wo:{name:"Wolof",nativeName:"Wollof"},xh:{name:"Xhosa",nativeName:"isiXhosa"},yi:{name:"Yiddish",nativeName:"ייִדיש"},yo:{name:"Yoruba",nativeName:"Yorùbá"},za:{name:"Zhuang",nativeName:"Saɯ cueŋƅ"},zh:{name:"Chinese",nativeName:"中文"},zu:{name:"Zulu",nativeName:"isiZulu"}};class i{static getLanguages(t=[]){return t.map(t=>({code:t,name:i.getName(t),nativeName:i.getNativeName(t)}))}static getName(t){return i.validate(t)?n[t].name:""}static getAllNames(){return Object.values(n).map(t=>t.name)}static getNativeName(t){return i.validate(t)?n[t].nativeName:""}static getAllNativeNames(){return Object.values(n).map(t=>t.nativeName)}static getCode(t){return Object.keys(n).find(e=>{const a=n[e];return a.name.toLowerCase()===t.toLowerCase()||a.nativeName.toLowerCase()===t.toLowerCase()})||""}static getAllCodes(){return Object.keys(n)}static validate(t){return void 0!==n[t]}}}}]); -//# sourceMappingURL=3.6c8e014d70907359ad5a.js.map \ No newline at end of file + */function n(t){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function r(t,e){for(var a=0;a1?e-1:0),n=1;n0&&a.forEach((function(e){A(e)&&Object.keys(e).forEach((function(a){t[a]=e[a]}))})),t},I=/\.\d*(?:0|9){12}\d*$/;function z(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1e11;return I.test(t)?Math.round(t*e)/e:t}var O=/^(?:width|height|left|top|marginLeft|marginTop)$/;function Y(t,e){var a=t.style;L(e,(function(t,e){O.test(e)&&B(t)&&(t+="px"),a[e]=t}))}function H(t,e){if(e)if(B(t.length))L(t,(function(t){H(t,e)}));else if(t.classList)t.classList.add(e);else{var a=t.className.trim();a?a.indexOf(e)<0&&(t.className="".concat(a," ").concat(e)):t.className=e}}function U(t,e){e&&(B(t.length)?L(t,(function(t){U(t,e)})):t.classList?t.classList.remove(e):t.className.indexOf(e)>=0&&(t.className=t.className.replace(e,"")))}function j(t,e,a){e&&(B(t.length)?L(t,(function(t){j(t,e,a)})):a?H(t,e):U(t,e))}var _=/([a-z\d])([A-Z])/g;function W(t){return t.replace(_,"$1-$2").toLowerCase()}function X(t,e){return A(t[e])?t[e]:t.dataset?t.dataset[e]:t.getAttribute("data-".concat(W(e)))}function K(t,e,a){A(a)?t[e]=a:t.dataset?t.dataset[e]=a:t.setAttribute("data-".concat(W(e)),a)}var F=/\s\s*/,q=function(){var t=!1;if(s){var e=!1,a=function(){},n=Object.defineProperty({},"once",{get:function(){return t=!0,e},set:function(t){e=t}});h.addEventListener("test",a,n),h.removeEventListener("test",a,n)}return t}();function J(t,e,a){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=a;e.trim().split(F).forEach((function(e){if(!q){var r=t.listeners;r&&r[e]&&r[e][a]&&(i=r[e][a],delete r[e][a],0===Object.keys(r[e]).length&&delete r[e],0===Object.keys(r).length&&delete t.listeners)}t.removeEventListener(e,i,n)}))}function V(t,e,a){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=a;e.trim().split(F).forEach((function(e){if(n.once&&!q){var r=t.listeners,o=void 0===r?{}:r;i=function(){delete o[e][a],t.removeEventListener(e,i,n);for(var r=arguments.length,s=new Array(r),h=0;h1&&void 0!==arguments[1]?arguments[1]:"contain",r=function(t){return it(t)&&t>0};if(r(n)&&r(a)){var o=a*e;"contain"===i&&o>n||"cover"===i&&o=8&&(r=h+u)}}}if(r){var l,d,m=a.getUint16(r,n);for(d=0;dt.width?3===a?s=t.height*o:h=t.width/o:3===a?h=t.width/o:s=t.height*o;var c={aspectRatio:o,naturalWidth:i,naturalHeight:r,width:s,height:h};c.left=(t.width-s)/2,c.top=(t.height-h)/2,c.oldLeft=c.left,c.oldTop=c.top,this.canvasData=c,this.limited=1===a||2===a,this.limitCanvas(!0,!0),this.initialImageData=P({},e),this.initialCanvasData=P({},c)},limitCanvas:function(t,e){var a=this.options,n=this.containerData,i=this.canvasData,r=this.cropBoxData,o=a.viewMode,s=i.aspectRatio,h=this.cropped&&r;if(t){var c=Number(a.minCanvasWidth)||0,u=Number(a.minCanvasHeight)||0;o>1?(c=Math.max(c,n.width),u=Math.max(u,n.height),3===o&&(u*s>c?c=u*s:u=c/s)):o>0&&(c?c=Math.max(c,h?r.width:0):u?u=Math.max(u,h?r.height:0):h&&(c=r.width,(u=r.height)*s>c?c=u*s:u=c/s));var l=rt({aspectRatio:s,width:c,height:u});c=l.width,u=l.height,i.minWidth=c,i.minHeight=u,i.maxWidth=1/0,i.maxHeight=1/0}if(e)if(o>(h?0:1)){var d=n.width-i.width,m=n.height-i.height;i.minLeft=Math.min(0,d),i.minTop=Math.min(0,m),i.maxLeft=Math.max(0,d),i.maxTop=Math.max(0,m),h&&this.limited&&(i.minLeft=Math.min(r.left,r.left+(r.width-i.width)),i.minTop=Math.min(r.top,r.top+(r.height-i.height)),i.maxLeft=r.left,i.maxTop=r.top,2===o&&(i.width>=n.width&&(i.minLeft=Math.min(0,d),i.maxLeft=Math.max(0,d)),i.height>=n.height&&(i.minTop=Math.min(0,m),i.maxTop=Math.max(0,m))))}else i.minLeft=-i.width,i.minTop=-i.height,i.maxLeft=n.width,i.maxTop=n.height},renderCanvas:function(t,e){var a=this.canvasData,n=this.imageData;if(e){var i=function(t){var e=t.width,a=t.height,n=t.degree;if(90===(n=Math.abs(n)%180))return{width:a,height:e};var i=n%90*Math.PI/180,r=Math.sin(i),o=Math.cos(i),s=e*o+a*r,h=e*r+a*o;return n>90?{width:h,height:s}:{width:s,height:h}}({width:n.naturalWidth*Math.abs(n.scaleX||1),height:n.naturalHeight*Math.abs(n.scaleY||1),degree:n.rotate||0}),r=i.width,o=i.height,s=a.width*(r/a.naturalWidth),h=a.height*(o/a.naturalHeight);a.left-=(s-a.width)/2,a.top-=(h-a.height)/2,a.width=s,a.height=h,a.aspectRatio=r/o,a.naturalWidth=r,a.naturalHeight=o,this.limitCanvas(!0,!1)}(a.width>a.maxWidth||a.widtha.maxHeight||a.heighte.width?i.height=i.width/a:i.width=i.height*a),this.cropBoxData=i,this.limitCropBox(!0,!0),i.width=Math.min(Math.max(i.width,i.minWidth),i.maxWidth),i.height=Math.min(Math.max(i.height,i.minHeight),i.maxHeight),i.width=Math.max(i.minWidth,i.width*n),i.height=Math.max(i.minHeight,i.height*n),i.left=e.left+(e.width-i.width)/2,i.top=e.top+(e.height-i.height)/2,i.oldLeft=i.left,i.oldTop=i.top,this.initialCropBoxData=P({},i)},limitCropBox:function(t,e){var a=this.options,n=this.containerData,i=this.canvasData,r=this.cropBoxData,o=this.limited,s=a.aspectRatio;if(t){var h=Number(a.minCropBoxWidth)||0,c=Number(a.minCropBoxHeight)||0,u=o?Math.min(n.width,i.width,i.width+i.left,n.width-i.left):n.width,l=o?Math.min(n.height,i.height,i.height+i.top,n.height-i.top):n.height;h=Math.min(h,n.width),c=Math.min(c,n.height),s&&(h&&c?c*s>h?c=h/s:h=c*s:h?c=h/s:c&&(h=c*s),l*s>u?l=u/s:u=l*s),r.minWidth=Math.min(h,u),r.minHeight=Math.min(c,l),r.maxWidth=u,r.maxHeight=l}e&&(o?(r.minLeft=Math.max(0,i.left),r.minTop=Math.max(0,i.top),r.maxLeft=Math.min(n.width,i.left+i.width)-r.width,r.maxTop=Math.min(n.height,i.top+i.height)-r.height):(r.minLeft=0,r.minTop=0,r.maxLeft=n.width-r.width,r.maxTop=n.height-r.height))},renderCropBox:function(){var t=this.options,e=this.containerData,a=this.cropBoxData;(a.width>a.maxWidth||a.widtha.maxHeight||a.height=e.width&&a.height>=e.height?"move":"all"),Y(this.cropBox,P({width:a.width,height:a.height},at({translateX:a.left,translateY:a.top}))),this.cropped&&this.limited&&this.limitCanvas(!0,!0),this.disabled||this.output()},output:function(){this.preview(),$(this.element,"crop",this.getData())}},lt={initPreview:function(){var t=this.crossOrigin,e=this.options.preview,a=t?this.crossOriginUrl:this.url,n=document.createElement("img");if(t&&(n.crossOrigin=t),n.src=a,this.viewBox.appendChild(n),this.viewBoxImage=n,e){var i=e;"string"==typeof e?i=this.element.ownerDocument.querySelectorAll(e):e.querySelector&&(i=[e]),this.previews=i,L(i,(function(e){var n=document.createElement("img");K(e,v,{width:e.offsetWidth,height:e.offsetHeight,html:e.innerHTML}),t&&(n.crossOrigin=t),n.src=a,n.style.cssText='display:block;width:100%;height:auto;min-width:0!important;min-height:0!important;max-width:none!important;max-height:none!important;image-orientation:0deg!important;"',e.innerHTML="",e.appendChild(n)}))}},resetPreview:function(){L(this.previews,(function(t){var e=X(t,v);Y(t,{width:e.width,height:e.height}),t.innerHTML=e.html,function(t,e){if(A(t[e]))try{delete t[e]}catch(a){t[e]=void 0}else if(t.dataset)try{delete t.dataset[e]}catch(a){t.dataset[e]=void 0}else t.removeAttribute("data-".concat(W(e)))}(t,v)}))},preview:function(){var t=this.imageData,e=this.canvasData,a=this.cropBoxData,n=a.width,i=a.height,r=t.width,o=t.height,s=a.left-e.left-t.left,h=a.top-e.top-t.top;this.cropped&&!this.disabled&&(Y(this.viewBoxImage,P({width:r,height:o},at(P({translateX:-s,translateY:-h},t)))),L(this.previews,(function(e){var a=X(e,v),c=a.width,u=a.height,l=c,d=u,m=1;n&&(d=i*(m=c/n)),i&&d>u&&(l=n*(m=u/i),d=u),Y(e,{width:l,height:d}),Y(e.getElementsByTagName("img")[0],P({width:r*m,height:o*m},at(P({translateX:-s*m,translateY:-h*m},t))))})))}},dt={bind:function(){var t=this.element,e=this.options,a=this.cropper;S(e.cropstart)&&V(t,"cropstart",e.cropstart),S(e.cropmove)&&V(t,"cropmove",e.cropmove),S(e.cropend)&&V(t,"cropend",e.cropend),S(e.crop)&&V(t,"crop",e.crop),S(e.zoom)&&V(t,"zoom",e.zoom),V(a,w,this.onCropStart=this.cropStart.bind(this)),e.zoomable&&e.zoomOnWheel&&V(a,"wheel mousewheel DOMMouseScroll",this.onWheel=this.wheel.bind(this)),e.toggleDragModeOnDblclick&&V(a,"dblclick",this.onDblclick=this.dblclick.bind(this)),V(t.ownerDocument,y,this.onCropMove=this.cropMove.bind(this)),V(t.ownerDocument,b,this.onCropEnd=this.cropEnd.bind(this)),e.responsive&&V(window,"resize",this.onResize=this.resize.bind(this))},unbind:function(){var t=this.element,e=this.options,a=this.cropper;S(e.cropstart)&&J(t,"cropstart",e.cropstart),S(e.cropmove)&&J(t,"cropmove",e.cropmove),S(e.cropend)&&J(t,"cropend",e.cropend),S(e.crop)&&J(t,"crop",e.crop),S(e.zoom)&&J(t,"zoom",e.zoom),J(a,w,this.onCropStart),e.zoomable&&e.zoomOnWheel&&J(a,"wheel mousewheel DOMMouseScroll",this.onWheel),e.toggleDragModeOnDblclick&&J(a,"dblclick",this.onDblclick),J(t.ownerDocument,y,this.onCropMove),J(t.ownerDocument,b,this.onCropEnd),e.responsive&&J(window,"resize",this.onResize)}},mt={resize:function(){var t=this.options,e=this.container,a=this.containerData,n=Number(t.minContainerWidth)||200,i=Number(t.minContainerHeight)||100;if(!(this.disabled||a.width<=n||a.height<=i)){var r,o,s=e.offsetWidth/a.width;if(1!==s||e.offsetHeight!==a.height)t.restore&&(r=this.getCanvasData(),o=this.getCropBoxData()),this.render(),t.restore&&(this.setCanvasData(L(r,(function(t,e){r[e]=t*s}))),this.setCropBoxData(L(o,(function(t,e){o[e]=t*s}))))}},dblclick:function(){var t,e;this.disabled||"none"===this.options.dragMode||this.setDragMode((t=this.dragBox,e=c,(t.classList?t.classList.contains(e):t.className.indexOf(e)>-1)?"move":"crop"))},wheel:function(t){var e=this,a=Number(this.options.wheelZoomRatio)||.1,n=1;this.disabled||(t.preventDefault(),this.wheeling||(this.wheeling=!0,setTimeout((function(){e.wheeling=!1}),50),t.deltaY?n=t.deltaY>0?1:-1:t.wheelDelta?n=-t.wheelDelta/120:t.detail&&(n=t.detail>0?1:-1),this.zoom(-n*a,t)))},cropStart:function(t){if(!this.disabled){var e,a=this.options,n=this.pointers;t.changedTouches?L(t.changedTouches,(function(t){n[t.identifier]=nt(t)})):n[t.pointerId||0]=nt(t),e=Object.keys(n).length>1&&a.zoomable&&a.zoomOnTouch?"zoom":X(t.target,g),N.test(e)&&!1!==$(this.element,"cropstart",{originalEvent:t,action:e})&&(t.preventDefault(),this.action=e,this.cropping=!1,"crop"===e&&(this.cropping=!0,H(this.dragBox,f)))}},cropMove:function(t){var e=this.action;if(!this.disabled&&e){var a=this.pointers;t.preventDefault(),!1!==$(this.element,"cropmove",{originalEvent:t,action:e})&&(t.changedTouches?L(t.changedTouches,(function(t){P(a[t.identifier]||{},nt(t,!0))})):P(a[t.pointerId||0]||{},nt(t,!0)),this.change(t))}},cropEnd:function(t){if(!this.disabled){var e=this.action,a=this.pointers;t.changedTouches?L(t.changedTouches,(function(t){delete a[t.identifier]})):delete a[t.pointerId||0],e&&(t.preventDefault(),Object.keys(a).length||(this.action=""),this.cropping&&(this.cropping=!1,j(this.dragBox,f,this.cropped&&this.options.modal)),$(this.element,"cropend",{originalEvent:t,action:e}))}}},ft={change:function(t){var e,a=this.options,n=this.canvasData,i=this.containerData,r=this.cropBoxData,o=this.pointers,s=this.action,h=a.aspectRatio,c=r.left,u=r.top,d=r.width,m=r.height,f=c+d,p=u+m,g=0,v=0,w=i.width,y=i.height,b=!0;!h&&t.shiftKey&&(h=d&&m?d/m:1),this.limited&&(g=r.minLeft,v=r.minTop,w=g+Math.min(i.width,n.width,n.left+n.width),y=v+Math.min(i.height,n.height,n.top+n.height));var N=o[Object.keys(o)[0]],x={x:N.endX-N.startX,y:N.endY-N.startY},C=function(t){switch(t){case"e":f+x.x>w&&(x.x=w-f);break;case"w":c+x.xy&&(x.y=y-p)}};switch(s){case"all":c+=x.x,u+=x.y;break;case"e":if(x.x>=0&&(f>=w||h&&(u<=v||p>=y))){b=!1;break}C("e"),(d+=x.x)<0&&(s="w",c-=d=-d),h&&(m=d/h,u+=(r.height-m)/2);break;case"n":if(x.y<=0&&(u<=v||h&&(c<=g||f>=w))){b=!1;break}C("n"),m-=x.y,u+=x.y,m<0&&(s="s",u-=m=-m),h&&(d=m*h,c+=(r.width-d)/2);break;case"w":if(x.x<=0&&(c<=g||h&&(u<=v||p>=y))){b=!1;break}C("w"),d-=x.x,c+=x.x,d<0&&(s="e",c-=d=-d),h&&(m=d/h,u+=(r.height-m)/2);break;case"s":if(x.y>=0&&(p>=y||h&&(c<=g||f>=w))){b=!1;break}C("s"),(m+=x.y)<0&&(s="n",u-=m=-m),h&&(d=m*h,c+=(r.width-d)/2);break;case"ne":if(h){if(x.y<=0&&(u<=v||f>=w)){b=!1;break}C("n"),m-=x.y,u+=x.y,d=m*h}else C("n"),C("e"),x.x>=0?fv&&(m-=x.y,u+=x.y):(m-=x.y,u+=x.y);d<0&&m<0?(s="sw",u-=m=-m,c-=d=-d):d<0?(s="nw",c-=d=-d):m<0&&(s="se",u-=m=-m);break;case"nw":if(h){if(x.y<=0&&(u<=v||c<=g)){b=!1;break}C("n"),m-=x.y,u+=x.y,d=m*h,c+=r.width-d}else C("n"),C("w"),x.x<=0?c>g?(d-=x.x,c+=x.x):x.y<=0&&u<=v&&(b=!1):(d-=x.x,c+=x.x),x.y<=0?u>v&&(m-=x.y,u+=x.y):(m-=x.y,u+=x.y);d<0&&m<0?(s="se",u-=m=-m,c-=d=-d):d<0?(s="ne",c-=d=-d):m<0&&(s="sw",u-=m=-m);break;case"sw":if(h){if(x.x<=0&&(c<=g||p>=y)){b=!1;break}C("w"),d-=x.x,c+=x.x,m=d/h}else C("s"),C("w"),x.x<=0?c>g?(d-=x.x,c+=x.x):x.y>=0&&p>=y&&(b=!1):(d-=x.x,c+=x.x),x.y>=0?p=0&&(f>=w||p>=y)){b=!1;break}C("e"),m=(d+=x.x)/h}else C("s"),C("e"),x.x>=0?f=0&&p>=y&&(b=!1):d+=x.x,x.y>=0?p0?s=x.y>0?"se":"ne":x.x<0&&(c-=d,s=x.y>0?"sw":"nw"),x.y<0&&(u-=m),this.cropped||(U(this.cropBox,l),this.cropped=!0,this.limited&&this.limitCropBox(!0,!0))}b&&(r.width=d,r.height=m,r.left=c,r.top=u,this.action=s,this.renderCropBox()),L(o,(function(t){t.startX=t.endX,t.startY=t.endY}))}},pt={crop:function(){return!this.ready||this.cropped||this.disabled||(this.cropped=!0,this.limitCropBox(!0,!0),this.options.modal&&H(this.dragBox,f),U(this.cropBox,l),this.setCropBoxData(this.initialCropBoxData)),this},reset:function(){return this.ready&&!this.disabled&&(this.imageData=P({},this.initialImageData),this.canvasData=P({},this.initialCanvasData),this.cropBoxData=P({},this.initialCropBoxData),this.renderCanvas(),this.cropped&&this.renderCropBox()),this},clear:function(){return this.cropped&&!this.disabled&&(P(this.cropBoxData,{left:0,top:0,width:0,height:0}),this.cropped=!1,this.renderCropBox(),this.limitCanvas(!0,!0),this.renderCanvas(),U(this.dragBox,f),H(this.cropBox,l)),this},replace:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return!this.disabled&&t&&(this.isImg&&(this.element.src=t),e?(this.url=t,this.image.src=t,this.ready&&(this.viewBoxImage.src=t,L(this.previews,(function(e){e.getElementsByTagName("img")[0].src=t})))):(this.isImg&&(this.replaced=!0),this.options.data=null,this.uncreate(),this.load(t))),this},enable:function(){return this.ready&&this.disabled&&(this.disabled=!1,U(this.cropper,u)),this},disable:function(){return this.ready&&!this.disabled&&(this.disabled=!0,H(this.cropper,u)),this},destroy:function(){var t=this.element;return t.cropper?(t.cropper=void 0,this.isImg&&this.replaced&&(t.src=this.originalUrl),this.uncreate(),this):this},move:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t,a=this.canvasData,n=a.left,i=a.top;return this.moveTo(T(t)?t:n+Number(t),T(e)?e:i+Number(e))},moveTo:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t,a=this.canvasData,n=!1;return t=Number(t),e=Number(e),this.ready&&!this.disabled&&this.options.movable&&(B(t)&&(a.left=t,n=!0),B(e)&&(a.top=e,n=!0),n&&this.renderCanvas(!0)),this},zoom:function(t,e){var a=this.canvasData;return t=(t=Number(t))<0?1/(1-t):1+t,this.zoomTo(a.width*t/a.naturalWidth,null,e)},zoomTo:function(t,e,a){var n=this.options,i=this.canvasData,r=i.width,o=i.height,s=i.naturalWidth,h=i.naturalHeight;if((t=Number(t))>=0&&this.ready&&!this.disabled&&n.zoomable){var c=s*t,u=h*t;if(!1===$(this.element,"zoom",{ratio:t,oldRatio:r/s,originalEvent:a}))return this;if(a){var l=this.pointers,d=Q(this.cropper),m=l&&Object.keys(l).length?function(t){var e=0,a=0,n=0;return L(t,(function(t){var i=t.startX,r=t.startY;e+=i,a+=r,n+=1})),{pageX:e/=n,pageY:a/=n}}(l):{pageX:a.pageX,pageY:a.pageY};i.left-=(c-r)*((m.pageX-d.left-i.left)/r),i.top-=(u-o)*((m.pageY-d.top-i.top)/o)}else R(e)&&B(e.x)&&B(e.y)?(i.left-=(c-r)*((e.x-i.left)/r),i.top-=(u-o)*((e.y-i.top)/o)):(i.left-=(c-r)/2,i.top-=(u-o)/2);i.width=c,i.height=u,this.renderCanvas(!0)}return this},rotate:function(t){return this.rotateTo((this.imageData.rotate||0)+Number(t))},rotateTo:function(t){return B(t=Number(t))&&this.ready&&!this.disabled&&this.options.rotatable&&(this.imageData.rotate=t%360,this.renderCanvas(!0,!0)),this},scaleX:function(t){var e=this.imageData.scaleY;return this.scale(t,B(e)?e:1)},scaleY:function(t){var e=this.imageData.scaleX;return this.scale(B(e)?e:1,t)},scale:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t,a=this.imageData,n=!1;return t=Number(t),e=Number(e),this.ready&&!this.disabled&&this.options.scalable&&(B(t)&&(a.scaleX=t,n=!0),B(e)&&(a.scaleY=e,n=!0),n&&this.renderCanvas(!0,!0)),this},getData:function(){var t,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],a=this.options,n=this.imageData,i=this.canvasData,r=this.cropBoxData;if(this.ready&&this.cropped){t={x:r.left-i.left,y:r.top-i.top,width:r.width,height:r.height};var o=n.width/n.naturalWidth;if(L(t,(function(e,a){t[a]=e/o})),e){var s=Math.round(t.y+t.height),h=Math.round(t.x+t.width);t.x=Math.round(t.x),t.y=Math.round(t.y),t.width=h-t.x,t.height=s-t.y}}else t={x:0,y:0,width:0,height:0};return a.rotatable&&(t.rotate=n.rotate||0),a.scalable&&(t.scaleX=n.scaleX||1,t.scaleY=n.scaleY||1),t},setData:function(t){var e=this.options,a=this.imageData,n=this.canvasData,i={};if(this.ready&&!this.disabled&&R(t)){var r=!1;e.rotatable&&B(t.rotate)&&t.rotate!==a.rotate&&(a.rotate=t.rotate,r=!0),e.scalable&&(B(t.scaleX)&&t.scaleX!==a.scaleX&&(a.scaleX=t.scaleX,r=!0),B(t.scaleY)&&t.scaleY!==a.scaleY&&(a.scaleY=t.scaleY,r=!0)),r&&this.renderCanvas(!0,!0);var o=a.width/a.naturalWidth;B(t.x)&&(i.left=t.x*o+n.left),B(t.y)&&(i.top=t.y*o+n.top),B(t.width)&&(i.width=t.width*o),B(t.height)&&(i.height=t.height*o),this.setCropBoxData(i)}return this},getContainerData:function(){return this.ready?P({},this.containerData):{}},getImageData:function(){return this.sized?P({},this.imageData):{}},getCanvasData:function(){var t=this.canvasData,e={};return this.ready&&L(["left","top","width","height","naturalWidth","naturalHeight"],(function(a){e[a]=t[a]})),e},setCanvasData:function(t){var e=this.canvasData,a=e.aspectRatio;return this.ready&&!this.disabled&&R(t)&&(B(t.left)&&(e.left=t.left),B(t.top)&&(e.top=t.top),B(t.width)?(e.width=t.width,e.height=t.width/a):B(t.height)&&(e.height=t.height,e.width=t.height*a),this.renderCanvas(!0)),this},getCropBoxData:function(){var t,e=this.cropBoxData;return this.ready&&this.cropped&&(t={left:e.left,top:e.top,width:e.width,height:e.height}),t||{}},setCropBoxData:function(t){var e,a,n=this.cropBoxData,i=this.options.aspectRatio;return this.ready&&this.cropped&&!this.disabled&&R(t)&&(B(t.left)&&(n.left=t.left),B(t.top)&&(n.top=t.top),B(t.width)&&t.width!==n.width&&(e=!0,n.width=t.width),B(t.height)&&t.height!==n.height&&(a=!0,n.height=t.height),i&&(e?n.height=n.width/i:a&&(n.width=n.height*i)),this.renderCropBox()),this},getCroppedCanvas:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!this.ready||!window.HTMLCanvasElement)return null;var e=this.canvasData,a=ot(this.image,this.imageData,e,t);if(!this.cropped)return a;var n=this.getData(),i=n.x,r=n.y,s=n.width,h=n.height,c=a.width/Math.floor(e.naturalWidth);1!==c&&(i*=c,r*=c,s*=c,h*=c);var u=s/h,l=rt({aspectRatio:u,width:t.maxWidth||1/0,height:t.maxHeight||1/0}),d=rt({aspectRatio:u,width:t.minWidth||0,height:t.minHeight||0},"cover"),m=rt({aspectRatio:u,width:t.width||(1!==c?a.width:s),height:t.height||(1!==c?a.height:h)}),f=m.width,p=m.height;f=Math.min(l.width,Math.max(d.width,f)),p=Math.min(l.height,Math.max(d.height,p));var g=document.createElement("canvas"),v=g.getContext("2d");g.width=z(f),g.height=z(p),v.fillStyle=t.fillColor||"transparent",v.fillRect(0,0,f,p);var w=t.imageSmoothingEnabled,y=void 0===w||w,b=t.imageSmoothingQuality;v.imageSmoothingEnabled=y,b&&(v.imageSmoothingQuality=b);var N,x,C,M,E,k,B=a.width,T=a.height,A=i,D=r;A<=-s||A>B?(A=0,N=0,C=0,E=0):A<=0?(C=-A,A=0,E=N=Math.min(B,s+A)):A<=B&&(C=0,E=N=Math.min(s,B-A)),N<=0||D<=-h||D>T?(D=0,x=0,M=0,k=0):D<=0?(M=-D,D=0,k=x=Math.min(T,h+D)):D<=T&&(M=0,k=x=Math.min(h,T-D));var R=[A,D,N,x];if(E>0&&k>0){var S=f/s;R.push(C*S,M*S,E*S,k*S)}return v.drawImage.apply(v,[a].concat(o(R.map((function(t){return Math.floor(z(t))}))))),g},setAspectRatio:function(t){var e=this.options;return this.disabled||T(t)||(e.aspectRatio=Math.max(0,t)||NaN,this.ready&&(this.initCropBox(),this.cropped&&this.renderCropBox())),this},setDragMode:function(t){var e=this.options,a=this.dragBox,n=this.face;if(this.ready&&!this.disabled){var i="crop"===t,r=e.movable&&"move"===t;t=i||r?t:"none",e.dragMode=t,K(a,g,t),j(a,c,i),j(a,p,r),e.cropBoxMovable||(K(n,g,t),j(n,c,i),j(n,p,r))}return this}},gt=h.Cropper,vt=function(){function t(e){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(i(this,t),!e||!M.test(e.tagName))throw new Error("The first argument is required and must be an or element.");this.element=e,this.options=P({},E,R(a)&&a),this.cropped=!1,this.disabled=!1,this.pointers={},this.ready=!1,this.reloading=!1,this.replaced=!1,this.sized=!1,this.sizing=!1,this.init()}var e,a,n;return e=t,n=[{key:"noConflict",value:function(){return window.Cropper=gt,t}},{key:"setDefaults",value:function(t){P(E,R(t)&&t)}}],(a=[{key:"init",value:function(){var t,e=this.element,a=e.tagName.toLowerCase();if(!e.cropper){if(e.cropper=this,"img"===a){if(this.isImg=!0,t=e.getAttribute("src")||"",this.originalUrl=t,!t)return;t=e.src}else"canvas"===a&&window.HTMLCanvasElement&&(t=e.toDataURL());this.load(t)}}},{key:"load",value:function(t){var e=this;if(t){this.url=t,this.imageData={};var a=this.element,n=this.options;if(n.rotatable||n.scalable||(n.checkOrientation=!1),n.checkOrientation&&window.ArrayBuffer)if(x.test(t))C.test(t)?this.read((i=t.replace(ht,""),r=atob(i),o=new ArrayBuffer(r.length),L(s=new Uint8Array(o),(function(t,e){s[e]=r.charCodeAt(e)})),o)):this.clone();else{var i,r,o,s,h=new XMLHttpRequest,c=this.clone.bind(this);this.reloading=!0,this.xhr=h,h.ontimeout=c,h.onabort=c,h.onerror=c,h.onprogress=function(){"image/jpeg"!==h.getResponseHeader("content-type")&&h.abort()},h.onload=function(){e.read(h.response)},h.onloadend=function(){e.reloading=!1,e.xhr=null},n.checkCrossOrigin&&tt(t)&&a.crossOrigin&&(t=et(t)),h.open("GET",t),h.responseType="arraybuffer",h.withCredentials="use-credentials"===a.crossOrigin,h.send()}else this.clone()}}},{key:"read",value:function(t){var e=this.options,a=this.imageData,n=ct(t),i=0,r=1,s=1;if(n>1){this.url=function(t,e){for(var a=[],n=new Uint8Array(t);n.length>0;)a.push(st.apply(void 0,o(n.subarray(0,8192)))),n=n.subarray(8192);return"data:".concat(e,";base64,").concat(btoa(a.join("")))}(t,"image/jpeg");var h=function(t){var e=0,a=1,n=1;switch(t){case 2:a=-1;break;case 3:e=-180;break;case 4:n=-1;break;case 5:e=90,n=-1;break;case 6:e=90;break;case 7:e=90,a=-1;break;case 8:e=-90}return{rotate:e,scaleX:a,scaleY:n}}(n);i=h.rotate,r=h.scaleX,s=h.scaleY}e.rotatable&&(a.rotate=i),e.scalable&&(a.scaleX=r,a.scaleY=s),this.clone()}},{key:"clone",value:function(){var t,e,a=this.element,n=this.url;this.options.checkCrossOrigin&&tt(n)&&((t=a.crossOrigin)?e=n:(t="anonymous",e=et(n))),this.crossOrigin=t,this.crossOriginUrl=e;var i=document.createElement("img");t&&(i.crossOrigin=t),i.src=e||n,this.image=i,i.onload=this.start.bind(this),i.onerror=this.stop.bind(this),H(i,d),a.parentNode.insertBefore(i,a.nextSibling)}},{key:"start",value:function(){var t=this,e=this.isImg?this.element:this.image;e.onload=null,e.onerror=null,this.sizing=!0;var a=h.navigator&&/(Macintosh|iPhone|iPod|iPad).*AppleWebKit/i.test(h.navigator.userAgent),n=function(e,a){P(t.imageData,{naturalWidth:e,naturalHeight:a,aspectRatio:e/a}),t.sizing=!1,t.sized=!0,t.build()};if(!e.naturalWidth||a){var i=document.createElement("img"),r=document.body||document.documentElement;this.sizingImage=i,i.onload=function(){n(i.width,i.height),a||r.removeChild(i)},i.src=e.src,a||(i.style.cssText="left:0;max-height:none!important;max-width:none!important;min-height:0!important;min-width:0!important;opacity:0;position:absolute;top:0;z-index:-1;",r.appendChild(i))}else n(e.naturalWidth,e.naturalHeight)}},{key:"stop",value:function(){var t=this.image;t.onload=null,t.onerror=null,t.parentNode.removeChild(t),this.image=null}},{key:"build",value:function(){if(this.sized&&!this.ready){var t=this.element,e=this.options,a=this.image,n=t.parentNode,i=document.createElement("div");i.innerHTML='
';var r=i.querySelector(".".concat("cropper","-container")),o=r.querySelector(".".concat("cropper","-canvas")),s=r.querySelector(".".concat("cropper","-drag-box")),h=r.querySelector(".".concat("cropper","-crop-box")),c=h.querySelector(".".concat("cropper","-face"));this.container=n,this.cropper=r,this.canvas=o,this.dragBox=s,this.cropBox=h,this.viewBox=r.querySelector(".".concat("cropper","-view-box")),this.face=c,o.appendChild(a),H(t,l),n.insertBefore(r,t.nextSibling),this.isImg||U(a,d),this.initPreview(),this.bind(),e.initialAspectRatio=Math.max(0,e.initialAspectRatio)||NaN,e.aspectRatio=Math.max(0,e.aspectRatio)||NaN,e.viewMode=Math.max(0,Math.min(3,Math.round(e.viewMode)))||0,H(h,l),e.guides||H(h.getElementsByClassName("".concat("cropper","-dashed")),l),e.center||H(h.getElementsByClassName("".concat("cropper","-center")),l),e.background&&H(r,"".concat("cropper","-bg")),e.highlight||H(c,m),e.cropBoxMovable&&(H(c,p),K(c,g,"all")),e.cropBoxResizable||(H(h.getElementsByClassName("".concat("cropper","-line")),l),H(h.getElementsByClassName("".concat("cropper","-point")),l)),this.render(),this.ready=!0,this.setDragMode(e.dragMode),e.autoCrop&&this.crop(),this.setData(e.data),S(e.ready)&&V(t,"ready",e.ready,{once:!0}),$(t,"ready")}}},{key:"unbuild",value:function(){this.ready&&(this.ready=!1,this.unbind(),this.resetPreview(),this.cropper.parentNode.removeChild(this.cropper),U(this.element,l))}},{key:"uncreate",value:function(){this.ready?(this.unbuild(),this.ready=!1,this.cropped=!1):this.sizing?(this.sizingImage.onload=null,this.sizing=!1,this.sized=!1):this.reloading?(this.xhr.onabort=null,this.xhr.abort()):this.image&&this.stop()}}])&&r(e.prototype,a),n&&r(e,n),t}();P(vt.prototype,ut,lt,dt,mt,ft,pt),e.a=vt},665:function(t,e,a){},680:function(t,e,a){"use strict";a.d(e,"a",(function(){return i}));var n={aa:{name:"Afar",nativeName:"Afaraf"},ab:{name:"Abkhaz",nativeName:"аҧсуа бызшәа"},ae:{name:"Avestan",nativeName:"avesta"},af:{name:"Afrikaans",nativeName:"Afrikaans"},ak:{name:"Akan",nativeName:"Akan"},am:{name:"Amharic",nativeName:"አማርኛ"},an:{name:"Aragonese",nativeName:"aragonés"},ar:{name:"Arabic",nativeName:"اللغة العربية"},as:{name:"Assamese",nativeName:"অসমীয়া"},av:{name:"Avaric",nativeName:"авар мацӀ"},ay:{name:"Aymara",nativeName:"aymar aru"},az:{name:"Azerbaijani",nativeName:"azərbaycan dili"},ba:{name:"Bashkir",nativeName:"башҡорт теле"},be:{name:"Belarusian",nativeName:"беларуская мова"},bg:{name:"Bulgarian",nativeName:"български език"},bh:{name:"Bihari",nativeName:"भोजपुरी"},bi:{name:"Bislama",nativeName:"Bislama"},bm:{name:"Bambara",nativeName:"bamanankan"},bn:{name:"Bengali",nativeName:"বাংলা"},bo:{name:"Tibetan Standard",nativeName:"བོད་ཡིག"},br:{name:"Breton",nativeName:"brezhoneg"},bs:{name:"Bosnian",nativeName:"bosanski jezik"},ca:{name:"Catalan",nativeName:"català"},ce:{name:"Chechen",nativeName:"нохчийн мотт"},ch:{name:"Chamorro",nativeName:"Chamoru"},co:{name:"Corsican",nativeName:"corsu"},cr:{name:"Cree",nativeName:"ᓀᐦᐃᔭᐍᐏᐣ"},cs:{name:"Czech",nativeName:"čeština"},cu:{name:"Old Church Slavonic",nativeName:"ѩзыкъ словѣньскъ"},cv:{name:"Chuvash",nativeName:"чӑваш чӗлхи"},cy:{name:"Welsh",nativeName:"Cymraeg"},da:{name:"Danish",nativeName:"dansk"},de:{name:"German",nativeName:"Deutsch"},dv:{name:"Divehi",nativeName:"Dhivehi"},dz:{name:"Dzongkha",nativeName:"རྫོང་ཁ"},ee:{name:"Ewe",nativeName:"Eʋegbe"},el:{name:"Greek",nativeName:"ελληνικά"},en:{name:"English",nativeName:"English"},eo:{name:"Esperanto",nativeName:"Esperanto"},es:{name:"Spanish",nativeName:"Español"},et:{name:"Estonian",nativeName:"eesti"},eu:{name:"Basque",nativeName:"euskara"},fa:{name:"Persian",nativeName:"فارسی"},ff:{name:"Fula",nativeName:"Fulfulde"},fi:{name:"Finnish",nativeName:"suomi"},fj:{name:"Fijian",nativeName:"Vakaviti"},fo:{name:"Faroese",nativeName:"føroyskt"},fr:{name:"French",nativeName:"Français"},fy:{name:"Western Frisian",nativeName:"Frysk"},ga:{name:"Irish",nativeName:"Gaeilge"},gd:{name:"Scottish Gaelic",nativeName:"Gàidhlig"},gl:{name:"Galician",nativeName:"galego"},gn:{name:"Guaraní",nativeName:"Avañe'ẽ"},gu:{name:"Gujarati",nativeName:"ગુજરાતી"},gv:{name:"Manx",nativeName:"Gaelg"},ha:{name:"Hausa",nativeName:"هَوُسَ"},he:{name:"Hebrew",nativeName:"עברית"},hi:{name:"Hindi",nativeName:"हिन्दी"},ho:{name:"Hiri Motu",nativeName:"Hiri Motu"},hr:{name:"Croatian",nativeName:"hrvatski jezik"},ht:{name:"Haitian",nativeName:"Kreyòl ayisyen"},hu:{name:"Hungarian",nativeName:"magyar"},hy:{name:"Armenian",nativeName:"Հայերեն"},hz:{name:"Herero",nativeName:"Otjiherero"},ia:{name:"Interlingua",nativeName:"Interlingua"},id:{name:"Indonesian",nativeName:"Indonesian"},ie:{name:"Interlingue",nativeName:"Interlingue"},ig:{name:"Igbo",nativeName:"Asụsụ Igbo"},ii:{name:"Nuosu",nativeName:"ꆈꌠ꒿ Nuosuhxop"},ik:{name:"Inupiaq",nativeName:"Iñupiaq"},io:{name:"Ido",nativeName:"Ido"},is:{name:"Icelandic",nativeName:"Íslenska"},it:{name:"Italian",nativeName:"Italiano"},iu:{name:"Inuktitut",nativeName:"ᐃᓄᒃᑎᑐᑦ"},ja:{name:"Japanese",nativeName:"日本語"},jv:{name:"Javanese",nativeName:"basa Jawa"},ka:{name:"Georgian",nativeName:"ქართული"},kg:{name:"Kongo",nativeName:"Kikongo"},ki:{name:"Kikuyu",nativeName:"Gĩkũyũ"},kj:{name:"Kwanyama",nativeName:"Kuanyama"},kk:{name:"Kazakh",nativeName:"қазақ тілі"},kl:{name:"Kalaallisut",nativeName:"kalaallisut"},km:{name:"Khmer",nativeName:"ខេមរភាសា"},kn:{name:"Kannada",nativeName:"ಕನ್ನಡ"},ko:{name:"Korean",nativeName:"한국어"},kr:{name:"Kanuri",nativeName:"Kanuri"},ks:{name:"Kashmiri",nativeName:"कश्मीरी"},ku:{name:"Kurdish",nativeName:"Kurdî"},kv:{name:"Komi",nativeName:"коми кыв"},kw:{name:"Cornish",nativeName:"Kernewek"},ky:{name:"Kyrgyz",nativeName:"Кыргызча"},la:{name:"Latin",nativeName:"latine"},lb:{name:"Luxembourgish",nativeName:"Lëtzebuergesch"},lg:{name:"Ganda",nativeName:"Luganda"},li:{name:"Limburgish",nativeName:"Limburgs"},ln:{name:"Lingala",nativeName:"Lingála"},lo:{name:"Lao",nativeName:"ພາສາ"},lt:{name:"Lithuanian",nativeName:"lietuvių kalba"},lu:{name:"Luba-Katanga",nativeName:"Tshiluba"},lv:{name:"Latvian",nativeName:"latviešu valoda"},mg:{name:"Malagasy",nativeName:"fiteny malagasy"},mh:{name:"Marshallese",nativeName:"Kajin M̧ajeļ"},mi:{name:"Māori",nativeName:"te reo Māori"},mk:{name:"Macedonian",nativeName:"македонски јазик"},ml:{name:"Malayalam",nativeName:"മലയാളം"},mn:{name:"Mongolian",nativeName:"Монгол хэл"},mr:{name:"Marathi",nativeName:"मराठी"},ms:{name:"Malay",nativeName:"هاس ملايو‎"},mt:{name:"Maltese",nativeName:"Malti"},my:{name:"Burmese",nativeName:"ဗမာစာ"},na:{name:"Nauru",nativeName:"Ekakairũ Naoero"},nb:{name:"Norwegian Bokmål",nativeName:"Norsk bokmål"},nd:{name:"Northern Ndebele",nativeName:"isiNdebele"},ne:{name:"Nepali",nativeName:"नेपाली"},ng:{name:"Ndonga",nativeName:"Owambo"},nl:{name:"Dutch",nativeName:"Nederlands"},nn:{name:"Norwegian Nynorsk",nativeName:"Norsk nynorsk"},no:{name:"Norwegian",nativeName:"Norsk"},nr:{name:"Southern Ndebele",nativeName:"isiNdebele"},nv:{name:"Navajo",nativeName:"Diné bizaad"},ny:{name:"Chichewa",nativeName:"chiCheŵa"},oc:{name:"Occitan",nativeName:"occitan"},oj:{name:"Ojibwe",nativeName:"ᐊᓂᔑᓈᐯᒧᐎᓐ"},om:{name:"Oromo",nativeName:"Afaan Oromoo"},or:{name:"Oriya",nativeName:"ଓଡ଼ିଆ"},os:{name:"Ossetian",nativeName:"ирон æвзаг"},pa:{name:"Panjabi",nativeName:"ਪੰਜਾਬੀ"},pi:{name:"Pāli",nativeName:"पाऴि"},pl:{name:"Polish",nativeName:"język polski"},ps:{name:"Pashto",nativeName:"پښتو"},pt:{name:"Portuguese",nativeName:"Português"},qu:{name:"Quechua",nativeName:"Runa Simi"},rm:{name:"Romansh",nativeName:"rumantsch grischun"},rn:{name:"Kirundi",nativeName:"Ikirundi"},ro:{name:"Romanian",nativeName:"limba română"},ru:{name:"Russian",nativeName:"Русский"},rw:{name:"Kinyarwanda",nativeName:"Ikinyarwanda"},sa:{name:"Sanskrit",nativeName:"संस्कृतम्"},sc:{name:"Sardinian",nativeName:"sardu"},sd:{name:"Sindhi",nativeName:"सिन्धी"},se:{name:"Northern Sami",nativeName:"Davvisámegiella"},sg:{name:"Sango",nativeName:"yângâ tî sängö"},si:{name:"Sinhala",nativeName:"සිංහල"},sk:{name:"Slovak",nativeName:"slovenčina"},sl:{name:"Slovene",nativeName:"slovenski jezik"},sm:{name:"Samoan",nativeName:"gagana fa'a Samoa"},sn:{name:"Shona",nativeName:"chiShona"},so:{name:"Somali",nativeName:"Soomaaliga"},sq:{name:"Albanian",nativeName:"Shqip"},sr:{name:"Serbian",nativeName:"српски језик"},ss:{name:"Swati",nativeName:"SiSwati"},st:{name:"Southern Sotho",nativeName:"Sesotho"},su:{name:"Sundanese",nativeName:"Basa Sunda"},sv:{name:"Swedish",nativeName:"svenska"},sw:{name:"Swahili",nativeName:"Kiswahili"},ta:{name:"Tamil",nativeName:"தமிழ்"},te:{name:"Telugu",nativeName:"తెలుగు"},tg:{name:"Tajik",nativeName:"тоҷикӣ"},th:{name:"Thai",nativeName:"ไทย"},ti:{name:"Tigrinya",nativeName:"ትግርኛ"},tk:{name:"Turkmen",nativeName:"Türkmen"},tl:{name:"Tagalog",nativeName:"Wikang Tagalog"},tn:{name:"Tswana",nativeName:"Setswana"},to:{name:"Tonga",nativeName:"faka Tonga"},tr:{name:"Turkish",nativeName:"Türkçe"},ts:{name:"Tsonga",nativeName:"Xitsonga"},tt:{name:"Tatar",nativeName:"татар теле"},tw:{name:"Twi",nativeName:"Twi"},ty:{name:"Tahitian",nativeName:"Reo Tahiti"},ug:{name:"Uyghur",nativeName:"ئۇيغۇرچە‎"},uk:{name:"Ukrainian",nativeName:"Українська"},ur:{name:"Urdu",nativeName:"اردو"},uz:{name:"Uzbek",nativeName:"Ўзбек"},ve:{name:"Venda",nativeName:"Tshivenḓa"},vi:{name:"Vietnamese",nativeName:"Tiếng Việt"},vo:{name:"Volapük",nativeName:"Volapük"},wa:{name:"Walloon",nativeName:"walon"},wo:{name:"Wolof",nativeName:"Wollof"},xh:{name:"Xhosa",nativeName:"isiXhosa"},yi:{name:"Yiddish",nativeName:"ייִדיש"},yo:{name:"Yoruba",nativeName:"Yorùbá"},za:{name:"Zhuang",nativeName:"Saɯ cueŋƅ"},zh:{name:"Chinese",nativeName:"中文"},zu:{name:"Zulu",nativeName:"isiZulu"}};class i{static getLanguages(t=[]){return t.map(t=>({code:t,name:i.getName(t),nativeName:i.getNativeName(t)}))}static getName(t){return i.validate(t)?n[t].name:""}static getAllNames(){return Object.values(n).map(t=>t.name)}static getNativeName(t){return i.validate(t)?n[t].nativeName:""}static getAllNativeNames(){return Object.values(n).map(t=>t.nativeName)}static getCode(t){return Object.keys(n).find(e=>{const a=n[e];return a.name.toLowerCase()===t.toLowerCase()||a.nativeName.toLowerCase()===t.toLowerCase()})||""}static getAllCodes(){return Object.keys(n)}static validate(t){return void 0!==n[t]}}}}]); +//# sourceMappingURL=3.bde677e65143f0cd1105.js.map \ No newline at end of file diff --git a/priv/static/static/js/3.6c8e014d70907359ad5a.js.map b/priv/static/static/js/3.bde677e65143f0cd1105.js.map similarity index 99% rename from priv/static/static/js/3.6c8e014d70907359ad5a.js.map rename to priv/static/static/js/3.bde677e65143f0cd1105.js.map index 81ea16cd3..06d4fc3d0 100644 --- a/priv/static/static/js/3.6c8e014d70907359ad5a.js.map +++ b/priv/static/static/js/3.bde677e65143f0cd1105.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///./node_modules/@babel/runtime/helpers/toArray.js","webpack:///./node_modules/lodash/trim.js","webpack:///./node_modules/lodash/_charsEndIndex.js","webpack:///./node_modules/lodash/_charsStartIndex.js","webpack:///./node_modules/@chenfengyuan/vue-qrcode/dist/vue-qrcode.esm.js","webpack:///./node_modules/cropperjs/dist/cropper.esm.js","webpack:///./node_modules/iso-639-1/src/data.js","webpack:///./node_modules/iso-639-1/src/index.js"],"names":["arrayWithHoles","iterableToArray","nonIterableRest","module","exports","arr","baseToString","castSlice","charsEndIndex","charsStartIndex","stringToArray","toString","reTrim","string","chars","guard","undefined","replace","strSymbols","chrSymbols","start","end","join","baseIndexOf","index","length","commonjsGlobal","window","global","self","commonjsRequire","Error","qrcode","fn","createCommonjsModule","r","e","n","t","o","i","f","u","a","code","p","call","1","require","getSymbolSize","getRowColCoords","version","posCount","Math","floor","size","intervals","ceil","positions","push","reverse","getPositions","coords","pos","posLength","j","2","Mode","ALPHA_NUM_CHARS","AlphanumericData","data","this","mode","ALPHANUMERIC","getBitsLength","prototype","getLength","write","bitBuffer","value","indexOf","put","3","BitBuffer","buffer","get","bufIndex","num","putBit","getLengthInBits","bit","4","Buffer","BitMatrix","fill","reservedBit","set","row","col","reserved","xor","isReserved","5","ByteData","BYTE","l","6","ECLevel","EC_BLOCKS_TABLE","EC_CODEWORDS_TABLE","getBlocksCount","errorCorrectionLevel","L","M","Q","H","getTotalCodewordsCount","7","isValid","level","from","defaultValue","toLowerCase","fromString","8","9","Utils","G15_BCH","getBCHDigit","getEncodedBits","mask","d","10","EXP_TABLE","LOG_TABLE","x","log","exp","mul","y","11","KanjiData","KANJI","toSJIS","12","Patterns","PATTERN000","PATTERN001","PATTERN010","PATTERN011","PATTERN100","PATTERN101","PATTERN110","PATTERN111","PenaltyScores","getMaskAt","maskPattern","isNaN","parseInt","getPenaltyN1","points","sameCountCol","sameCountRow","lastCol","lastRow","getPenaltyN2","last","getPenaltyN3","bitsCol","bitsRow","getPenaltyN4","darkCount","modulesCount","abs","applyMask","pattern","getBestMask","setupFormatFunc","numPatterns","Object","keys","bestPattern","lowerPenalty","Infinity","penalty","13","VersionCheck","Regex","NUMERIC","id","ccBits","MIXED","getCharCountIndicator","getBestModeForData","dataStr","testNumeric","testAlphanumeric","testKanji","14","NumericData","group","substr","remainingNum","15","GF","p1","p2","coeff","mod","divident","divisor","result","offset","slice","generateECPolynomial","degree","poly","16","AlignmentPattern","FinderPattern","MaskPattern","ECCode","ReedSolomonEncoder","Version","FormatInfo","Segments","isArray","setupFormatInfo","matrix","bits","createData","segments","forEach","dataTotalCodewordsBits","getSymbolTotalCodewords","remainingByte","totalCodewords","ecTotalCodewords","dataTotalCodewords","ecTotalBlocks","blocksInGroup1","totalCodewordsInGroup1","dataCodewordsInGroup1","dataCodewordsInGroup2","ecCount","rs","dcData","Array","ecData","maxDataSize","b","dataSize","encode","max","createCodewords","createSymbol","fromArray","estimatedVersion","rawSegments","rawSplit","getBestVersionForData","bestVersion","dataBits","moduleCount","modules","c","setupFinderPattern","setupTimingPattern","setupAlignmentPattern","setupVersionInfo","inc","bitIndex","byteIndex","dark","setupData","bind","create","options","toSJISFunc","setToSJISFunction","17","Polynomial","genPoly","initialize","pad","paddedData","concat","remainder","buff","copy","18","kanji","byte","RegExp","BYTE_KANJI","TEST_KANJI","TEST_NUMERIC","TEST_ALPHANUMERIC","str","test","19","dijkstra","getStringByteLength","unescape","encodeURIComponent","getSegments","regex","exec","getSegmentsFromString","byteSegs","kanjiSegs","numSegs","alphaNumSegs","isKanjiModeEnabled","sort","s1","s2","map","obj","getSegmentBitsLength","buildSingleSegment","modesHint","bestMode","array","reduce","acc","seg","graph","nodes","table","prevNodeIds","nodeGroup","currentNodeIds","node","key","lastCount","prevNodeId","buildGraph","segs","buildNodes","path","find_path","optimizedSegs","curr","prevSeg","mergeSegments","20","toSJISFunction","CODEWORDS_COUNT","digit","21","22","G18_BCH","getReservedBitsCount","getTotalBitsFromDataArray","totalBits","reservedBits","getCapacity","usableBits","ecl","currentVersion","getBestVersionForMixedData","getBestVersionForDataLength","23","canPromise","QRCode","CanvasRenderer","SvgRenderer","renderCanvas","renderFunc","canvas","text","opts","cb","args","arguments","argsNum","isLastArgCb","getContext","Promise","resolve","reject","toCanvas","render","toDataURL","renderToDataURL","_","24","qrData","canvasEl","document","createElement","getCanvasElement","getOptions","getImageWidth","ctx","image","createImageData","qrToImageData","clearRect","width","height","style","clearCanvas","putImageData","type","rendererOpts","quality","25","getColorAttrib","color","attrib","alpha","hex","toFixed","svgCmd","cmd","qrcodesize","margin","bg","light","moveBy","newRow","lineLength","qrToPath","viewBox","svgTag","26","hex2rgba","hexCode","split","apply","hexValue","g","scale","getScale","qrSize","imgData","qr","symbolSize","scaledMargin","palette","posDst","pxColor","27","TYPED_ARRAY_SUPPORT","Uint8Array","__proto__","foo","typedArraySupport","K_MAX_LENGTH","arg","allocUnsafe","that","TypeError","ArrayBuffer","byteOffset","byteLength","RangeError","buf","fromArrayLike","fromArrayBuffer","createBuffer","actual","isBuffer","len","checked","val","fromObject","utf8ToBytes","units","codePoint","leadSurrogate","bytes","charCodeAt","isView","Symbol","species","defineProperty","configurable","enumerable","writable","isFinite","remaining","src","dst","blitBuffer","utf8Write","newBuf","subarray","sliceLen","target","targetStart","list","_isBuffer","28","G","then","29","single_source_shortest_paths","s","predecessors","costs","closest","v","cost_of_s_to_u","adjacent_nodes","cost_of_s_to_u_plus_cost_of_e","cost_of_s_to_v","open","PriorityQueue","make","empty","pop","cost","hasOwnProperty","msg","extract_shortest_path_from_predecessor_list","T","queue","sorter","default_sorter","item","shift","30","31","name","props","tag","String","default","$slots","watch","$props","deep","immediate","handler","$el","generate","methods","_this","error","url","innerHTML","mounted","_typeof","iterator","constructor","_classCallCheck","instance","Constructor","_defineProperties","descriptor","_toConsumableArray","arr2","_arrayWithoutHoles","iter","_iterableToArray","_nonIterableSpread","IN_BROWSER","WINDOW","CLASS_CROP","CLASS_DISABLED","CLASS_HIDDEN","CLASS_HIDE","CLASS_INVISIBLE","CLASS_MODAL","CLASS_MOVE","DATA_ACTION","DATA_PREVIEW","EVENT_POINTER_DOWN","PointerEvent","EVENT_POINTER_MOVE","EVENT_POINTER_UP","REGEXP_ACTIONS","REGEXP_DATA_URL","REGEXP_DATA_URL_JPEG","REGEXP_TAG_NAME","DEFAULTS","viewMode","dragMode","initialAspectRatio","NaN","aspectRatio","preview","responsive","restore","checkCrossOrigin","checkOrientation","modal","guides","center","highlight","background","autoCrop","autoCropArea","movable","rotatable","scalable","zoomable","zoomOnTouch","zoomOnWheel","wheelZoomRatio","cropBoxMovable","cropBoxResizable","toggleDragModeOnDblclick","minCanvasWidth","minCanvasHeight","minCropBoxWidth","minCropBoxHeight","minContainerWidth","minContainerHeight","ready","cropstart","cropmove","cropend","crop","zoom","Number","isNumber","isUndefined","isObject","isPlainObject","_constructor","isFunction","callback","assign","_len","_key","REGEXP_DECIMALS","normalizeDecimalNumber","times","round","REGEXP_SUFFIX","setStyle","element","styles","property","addClass","elem","classList","add","className","trim","removeClass","remove","toggleClass","added","REGEXP_HYPHENATE","hyphenate","getData","dataset","getAttribute","setData","setAttribute","REGEXP_SPACES","onceSupported","supported","once","listener","addEventListener","removeEventListener","removeListener","event","listeners","addListener","_handler","_element$listeners","_len2","_key2","dispatchEvent","Event","CustomEvent","detail","bubbles","cancelable","createEvent","initCustomEvent","getOffset","box","getBoundingClientRect","left","pageXOffset","documentElement","clientLeft","top","pageYOffset","clientTop","location","REGEXP_ORIGINS","isCrossOriginURL","parts","match","protocol","hostname","port","addTimestamp","timestamp","Date","getTime","getTransforms","_ref","rotate","scaleX","scaleY","translateX","translateY","values","transform","WebkitTransform","msTransform","getPointer","_ref2","endOnly","pageX","pageY","endX","endY","startX","startY","getAdjustedSizes","_ref4","isValidNumber","adjustedWidth","getSourceCanvas","_ref6","_ref7","_ref8","imageAspectRatio","imageNaturalWidth","naturalWidth","imageNaturalHeight","naturalHeight","_ref6$rotate","_ref6$scaleX","_ref6$scaleY","_ref8$fillColor","fillColor","_ref8$imageSmoothingE","imageSmoothingEnabled","_ref8$imageSmoothingQ","imageSmoothingQuality","_ref8$maxWidth","maxWidth","_ref8$maxHeight","maxHeight","_ref8$minWidth","minWidth","_ref8$minHeight","minHeight","context","maxSizes","minSizes","min","destMaxSizes","destMinSizes","destWidth","destHeight","params","fillStyle","fillRect","save","translate","PI","drawImage","param","fromCharCode","REGEXP_DATA_URL_HEAD","resetAndGetOrientation","arrayBuffer","orientation","dataView","DataView","littleEndian","app1Start","ifdStart","getUint8","tiffOffset","getStringFromCharCode","endianness","getUint16","firstIFDOffset","getUint32","_offset","_length","setUint16","initContainer","initCanvas","initCropBox","cropped","renderCropBox","container","cropper","containerData","offsetWidth","offsetHeight","imageData","rotated","canvasWidth","canvasHeight","canvasData","oldLeft","oldTop","limited","limitCanvas","initialImageData","initialCanvasData","sizeLimited","positionLimited","cropBoxData","_getAdjustedSizes","newCanvasLeft","newCanvasTop","minLeft","minTop","maxLeft","maxTop","changed","transformed","_getRotatedSizes","_ref5","arc","sinArc","sin","cosArc","cos","newWidth","newHeight","getRotatedSizes","renderImage","limitCropBox","output","initialCropBoxData","maxCropBoxWidth","maxCropBoxHeight","face","cropBox","disabled","initPreview","crossOrigin","crossOriginUrl","appendChild","viewBoxImage","previews","ownerDocument","querySelectorAll","querySelector","el","img","html","cssText","resetPreview","removeAttribute","removeData","cropBoxWidth","cropBoxHeight","originalWidth","originalHeight","ratio","getElementsByTagName","events","onCropStart","cropStart","onWheel","wheel","onDblclick","dblclick","onCropMove","cropMove","onCropEnd","cropEnd","onResize","resize","unbind","handlers","getCanvasData","getCropBoxData","setCanvasData","setCropBoxData","setDragMode","dragBox","contains","delta","preventDefault","wheeling","setTimeout","deltaY","wheelDelta","action","pointers","changedTouches","touch","identifier","pointerId","originalEvent","cropping","change","right","bottom","renderable","shiftKey","pointer","range","check","side","move","pointers2","ratios","pointer2","x1","y1","x2","y2","z1","sqrt","getMaxZoomRatio","reset","clear","hasSameSize","isImg","replaced","uncreate","load","enable","disable","destroy","originalUrl","offsetX","offsetY","_this$canvasData","moveTo","_originalEvent","zoomTo","pivot","oldRatio","count","_ref3","getPointersCenter","rotateTo","_scaleX","_scaleY","rounded","getContainerData","getImageData","sized","widthChanged","heightChanged","getCroppedCanvas","HTMLCanvasElement","source","_this$getData","initialX","initialY","initialWidth","initialHeight","_options$imageSmoothi","srcWidth","srcHeight","dstX","dstY","dstWidth","dstHeight","sourceWidth","sourceHeight","srcX","srcY","setAspectRatio","croppable","AnotherCropper","Cropper","tagName","reloading","sizing","init","protoProps","staticProps","read","base64","binary","atob","uint8","clone","xhr","XMLHttpRequest","ontimeout","onabort","onerror","onprogress","getResponseHeader","abort","onload","response","onloadend","responseType","withCredentials","send","mimeType","chunks","btoa","arrayBufferToDataURL","_parseOrientation","parseOrientation","stop","parentNode","insertBefore","nextSibling","_this2","IS_SAFARI","navigator","userAgent","done","build","sizingImage","body","removeChild","template","getElementsByClassName","unbuild","aa","nativeName","ab","ae","af","ak","am","an","ar","as","av","ay","az","ba","be","bh","bi","bm","bn","bo","br","bs","ca","ce","ch","co","cr","cs","cu","cv","cy","da","de","dv","dz","ee","en","eo","es","et","eu","fa","ff","fi","fj","fo","fr","fy","ga","gd","gl","gn","gu","gv","ha","he","hi","ho","hr","ht","hu","hy","hz","ia","ie","ig","ii","ik","io","is","it","iu","ja","jv","ka","kg","ki","kj","kk","kl","km","kn","ko","kr","ks","ku","kv","kw","ky","la","lb","lg","li","ln","lo","lt","lu","lv","mg","mh","mi","mk","ml","mn","mr","ms","mt","my","na","nb","nd","ne","ng","nl","nn","no","nr","nv","ny","oc","oj","om","or","os","pa","pi","pl","ps","pt","qu","rm","rn","ro","ru","rw","sa","sc","sd","se","sg","si","sk","sl","sm","sn","so","sq","sr","ss","st","su","sv","sw","ta","te","tg","th","ti","tk","tl","tn","to","tr","ts","tt","tw","ty","ug","uk","ur","uz","ve","vi","vo","wa","wo","xh","yi","yo","za","zh","zu","codes","getName","getNativeName","validate","find","language"],"mappings":"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","file":"static/js/3.6c8e014d70907359ad5a.js","sourcesContent":["var arrayWithHoles = require(\"./arrayWithHoles\");\n\nvar iterableToArray = require(\"./iterableToArray\");\n\nvar nonIterableRest = require(\"./nonIterableRest\");\n\nfunction _toArray(arr) {\n return arrayWithHoles(arr) || iterableToArray(arr) || nonIterableRest();\n}\n\nmodule.exports = _toArray;","var baseToString = require('./_baseToString'),\n castSlice = require('./_castSlice'),\n charsEndIndex = require('./_charsEndIndex'),\n charsStartIndex = require('./_charsStartIndex'),\n stringToArray = require('./_stringToArray'),\n toString = require('./toString');\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/**\n * Removes leading and trailing whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trim(' abc ');\n * // => 'abc'\n *\n * _.trim('-_-abc-_-', '_-');\n * // => 'abc'\n *\n * _.map([' foo ', ' bar '], _.trim);\n * // => ['foo', 'bar']\n */\nfunction trim(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.replace(reTrim, '');\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n chrSymbols = stringToArray(chars),\n start = charsStartIndex(strSymbols, chrSymbols),\n end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n return castSlice(strSymbols, start, end).join('');\n}\n\nmodule.exports = trim;\n","var baseIndexOf = require('./_baseIndexOf');\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the last unmatched string symbol.\n */\nfunction charsEndIndex(strSymbols, chrSymbols) {\n var index = strSymbols.length;\n\n while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n}\n\nmodule.exports = charsEndIndex;\n","var baseIndexOf = require('./_baseIndexOf');\n\n/**\n * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the first unmatched string symbol.\n */\nfunction charsStartIndex(strSymbols, chrSymbols) {\n var index = -1,\n length = strSymbols.length;\n\n while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n}\n\nmodule.exports = charsStartIndex;\n","/*!\n * vue-qrcode v1.0.0\n * https://fengyuanchen.github.io/vue-qrcode\n *\n * Copyright 2018-present Chen Fengyuan\n * Released under the MIT license\n *\n * Date: 2018-10-21T13:04:02.951Z\n */\n\nvar commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction commonjsRequire () {\n\tthrow new Error('Dynamic requires are not currently supported by rollup-plugin-commonjs');\n}\n\nfunction createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nvar qrcode = createCommonjsModule(function (module, exports) {\n(function(f){{module.exports=f();}})(function(){return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof commonjsRequire&&commonjsRequire;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t);}return n[i].exports}for(var u=\"function\"==typeof commonjsRequire&&commonjsRequire,i=0;i>> (7 - index % 8)) & 1) === 1\n },\n\n put: function (num, length) {\n for (var i = 0; i < length; i++) {\n this.putBit(((num >>> (length - i - 1)) & 1) === 1);\n }\n },\n\n getLengthInBits: function () {\n return this.length\n },\n\n putBit: function (bit) {\n var bufIndex = Math.floor(this.length / 8);\n if (this.buffer.length <= bufIndex) {\n this.buffer.push(0);\n }\n\n if (bit) {\n this.buffer[bufIndex] |= (0x80 >>> (this.length % 8));\n }\n\n this.length++;\n }\n};\n\nmodule.exports = BitBuffer;\n\n},{}],4:[function(require,module,exports){\nvar Buffer = require('../utils/buffer');\n\n/**\n * Helper class to handle QR Code symbol modules\n *\n * @param {Number} size Symbol size\n */\nfunction BitMatrix (size) {\n if (!size || size < 1) {\n throw new Error('BitMatrix size must be defined and greater than 0')\n }\n\n this.size = size;\n this.data = new Buffer(size * size);\n this.data.fill(0);\n this.reservedBit = new Buffer(size * size);\n this.reservedBit.fill(0);\n}\n\n/**\n * Set bit value at specified location\n * If reserved flag is set, this bit will be ignored during masking process\n *\n * @param {Number} row\n * @param {Number} col\n * @param {Boolean} value\n * @param {Boolean} reserved\n */\nBitMatrix.prototype.set = function (row, col, value, reserved) {\n var index = row * this.size + col;\n this.data[index] = value;\n if (reserved) this.reservedBit[index] = true;\n};\n\n/**\n * Returns bit value at specified location\n *\n * @param {Number} row\n * @param {Number} col\n * @return {Boolean}\n */\nBitMatrix.prototype.get = function (row, col) {\n return this.data[row * this.size + col]\n};\n\n/**\n * Applies xor operator at specified location\n * (used during masking process)\n *\n * @param {Number} row\n * @param {Number} col\n * @param {Boolean} value\n */\nBitMatrix.prototype.xor = function (row, col, value) {\n this.data[row * this.size + col] ^= value;\n};\n\n/**\n * Check if bit at specified location is reserved\n *\n * @param {Number} row\n * @param {Number} col\n * @return {Boolean}\n */\nBitMatrix.prototype.isReserved = function (row, col) {\n return this.reservedBit[row * this.size + col]\n};\n\nmodule.exports = BitMatrix;\n\n},{\"../utils/buffer\":27}],5:[function(require,module,exports){\nvar Buffer = require('../utils/buffer');\nvar Mode = require('./mode');\n\nfunction ByteData (data) {\n this.mode = Mode.BYTE;\n this.data = new Buffer(data);\n}\n\nByteData.getBitsLength = function getBitsLength (length) {\n return length * 8\n};\n\nByteData.prototype.getLength = function getLength () {\n return this.data.length\n};\n\nByteData.prototype.getBitsLength = function getBitsLength () {\n return ByteData.getBitsLength(this.data.length)\n};\n\nByteData.prototype.write = function (bitBuffer) {\n for (var i = 0, l = this.data.length; i < l; i++) {\n bitBuffer.put(this.data[i], 8);\n }\n};\n\nmodule.exports = ByteData;\n\n},{\"../utils/buffer\":27,\"./mode\":13}],6:[function(require,module,exports){\nvar ECLevel = require('./error-correction-level');\r\n\r\nvar EC_BLOCKS_TABLE = [\r\n// L M Q H\r\n 1, 1, 1, 1,\r\n 1, 1, 1, 1,\r\n 1, 1, 2, 2,\r\n 1, 2, 2, 4,\r\n 1, 2, 4, 4,\r\n 2, 4, 4, 4,\r\n 2, 4, 6, 5,\r\n 2, 4, 6, 6,\r\n 2, 5, 8, 8,\r\n 4, 5, 8, 8,\r\n 4, 5, 8, 11,\r\n 4, 8, 10, 11,\r\n 4, 9, 12, 16,\r\n 4, 9, 16, 16,\r\n 6, 10, 12, 18,\r\n 6, 10, 17, 16,\r\n 6, 11, 16, 19,\r\n 6, 13, 18, 21,\r\n 7, 14, 21, 25,\r\n 8, 16, 20, 25,\r\n 8, 17, 23, 25,\r\n 9, 17, 23, 34,\r\n 9, 18, 25, 30,\r\n 10, 20, 27, 32,\r\n 12, 21, 29, 35,\r\n 12, 23, 34, 37,\r\n 12, 25, 34, 40,\r\n 13, 26, 35, 42,\r\n 14, 28, 38, 45,\r\n 15, 29, 40, 48,\r\n 16, 31, 43, 51,\r\n 17, 33, 45, 54,\r\n 18, 35, 48, 57,\r\n 19, 37, 51, 60,\r\n 19, 38, 53, 63,\r\n 20, 40, 56, 66,\r\n 21, 43, 59, 70,\r\n 22, 45, 62, 74,\r\n 24, 47, 65, 77,\r\n 25, 49, 68, 81\r\n];\r\n\r\nvar EC_CODEWORDS_TABLE = [\r\n// L M Q H\r\n 7, 10, 13, 17,\r\n 10, 16, 22, 28,\r\n 15, 26, 36, 44,\r\n 20, 36, 52, 64,\r\n 26, 48, 72, 88,\r\n 36, 64, 96, 112,\r\n 40, 72, 108, 130,\r\n 48, 88, 132, 156,\r\n 60, 110, 160, 192,\r\n 72, 130, 192, 224,\r\n 80, 150, 224, 264,\r\n 96, 176, 260, 308,\r\n 104, 198, 288, 352,\r\n 120, 216, 320, 384,\r\n 132, 240, 360, 432,\r\n 144, 280, 408, 480,\r\n 168, 308, 448, 532,\r\n 180, 338, 504, 588,\r\n 196, 364, 546, 650,\r\n 224, 416, 600, 700,\r\n 224, 442, 644, 750,\r\n 252, 476, 690, 816,\r\n 270, 504, 750, 900,\r\n 300, 560, 810, 960,\r\n 312, 588, 870, 1050,\r\n 336, 644, 952, 1110,\r\n 360, 700, 1020, 1200,\r\n 390, 728, 1050, 1260,\r\n 420, 784, 1140, 1350,\r\n 450, 812, 1200, 1440,\r\n 480, 868, 1290, 1530,\r\n 510, 924, 1350, 1620,\r\n 540, 980, 1440, 1710,\r\n 570, 1036, 1530, 1800,\r\n 570, 1064, 1590, 1890,\r\n 600, 1120, 1680, 1980,\r\n 630, 1204, 1770, 2100,\r\n 660, 1260, 1860, 2220,\r\n 720, 1316, 1950, 2310,\r\n 750, 1372, 2040, 2430\r\n];\r\n\r\n/**\r\n * Returns the number of error correction block that the QR Code should contain\r\n * for the specified version and error correction level.\r\n *\r\n * @param {Number} version QR Code version\r\n * @param {Number} errorCorrectionLevel Error correction level\r\n * @return {Number} Number of error correction blocks\r\n */\r\nexports.getBlocksCount = function getBlocksCount (version, errorCorrectionLevel) {\r\n switch (errorCorrectionLevel) {\r\n case ECLevel.L:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 0]\r\n case ECLevel.M:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 1]\r\n case ECLevel.Q:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 2]\r\n case ECLevel.H:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 3]\r\n default:\r\n return undefined\r\n }\r\n};\r\n\r\n/**\r\n * Returns the number of error correction codewords to use for the specified\r\n * version and error correction level.\r\n *\r\n * @param {Number} version QR Code version\r\n * @param {Number} errorCorrectionLevel Error correction level\r\n * @return {Number} Number of error correction codewords\r\n */\r\nexports.getTotalCodewordsCount = function getTotalCodewordsCount (version, errorCorrectionLevel) {\r\n switch (errorCorrectionLevel) {\r\n case ECLevel.L:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 0]\r\n case ECLevel.M:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 1]\r\n case ECLevel.Q:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 2]\r\n case ECLevel.H:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 3]\r\n default:\r\n return undefined\r\n }\r\n};\r\n\n},{\"./error-correction-level\":7}],7:[function(require,module,exports){\nexports.L = { bit: 1 };\nexports.M = { bit: 0 };\nexports.Q = { bit: 3 };\nexports.H = { bit: 2 };\n\nfunction fromString (string) {\n if (typeof string !== 'string') {\n throw new Error('Param is not a string')\n }\n\n var lcStr = string.toLowerCase();\n\n switch (lcStr) {\n case 'l':\n case 'low':\n return exports.L\n\n case 'm':\n case 'medium':\n return exports.M\n\n case 'q':\n case 'quartile':\n return exports.Q\n\n case 'h':\n case 'high':\n return exports.H\n\n default:\n throw new Error('Unknown EC Level: ' + string)\n }\n}\n\nexports.isValid = function isValid (level) {\n return level && typeof level.bit !== 'undefined' &&\n level.bit >= 0 && level.bit < 4\n};\n\nexports.from = function from (value, defaultValue) {\n if (exports.isValid(value)) {\n return value\n }\n\n try {\n return fromString(value)\n } catch (e) {\n return defaultValue\n }\n};\n\n},{}],8:[function(require,module,exports){\nvar getSymbolSize = require('./utils').getSymbolSize;\nvar FINDER_PATTERN_SIZE = 7;\n\n/**\n * Returns an array containing the positions of each finder pattern.\n * Each array's element represent the top-left point of the pattern as (x, y) coordinates\n *\n * @param {Number} version QR Code version\n * @return {Array} Array of coordinates\n */\nexports.getPositions = function getPositions (version) {\n var size = getSymbolSize(version);\n\n return [\n // top-left\n [0, 0],\n // top-right\n [size - FINDER_PATTERN_SIZE, 0],\n // bottom-left\n [0, size - FINDER_PATTERN_SIZE]\n ]\n};\n\n},{\"./utils\":20}],9:[function(require,module,exports){\nvar Utils = require('./utils');\n\nvar G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0);\nvar G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1);\nvar G15_BCH = Utils.getBCHDigit(G15);\n\n/**\n * Returns format information with relative error correction bits\n *\n * The format information is a 15-bit sequence containing 5 data bits,\n * with 10 error correction bits calculated using the (15, 5) BCH code.\n *\n * @param {Number} errorCorrectionLevel Error correction level\n * @param {Number} mask Mask pattern\n * @return {Number} Encoded format information bits\n */\nexports.getEncodedBits = function getEncodedBits (errorCorrectionLevel, mask) {\n var data = ((errorCorrectionLevel.bit << 3) | mask);\n var d = data << 10;\n\n while (Utils.getBCHDigit(d) - G15_BCH >= 0) {\n d ^= (G15 << (Utils.getBCHDigit(d) - G15_BCH));\n }\n\n // xor final data with mask pattern in order to ensure that\n // no combination of Error Correction Level and data mask pattern\n // will result in an all-zero data string\n return ((data << 10) | d) ^ G15_MASK\n};\n\n},{\"./utils\":20}],10:[function(require,module,exports){\nvar Buffer = require('../utils/buffer');\n\nvar EXP_TABLE = new Buffer(512);\nvar LOG_TABLE = new Buffer(256)\n\n/**\n * Precompute the log and anti-log tables for faster computation later\n *\n * For each possible value in the galois field 2^8, we will pre-compute\n * the logarithm and anti-logarithm (exponential) of this value\n *\n * ref {@link https://en.wikiversity.org/wiki/Reed%E2%80%93Solomon_codes_for_coders#Introduction_to_mathematical_fields}\n */\n;(function initTables () {\n var x = 1;\n for (var i = 0; i < 255; i++) {\n EXP_TABLE[i] = x;\n LOG_TABLE[x] = i;\n\n x <<= 1; // multiply by 2\n\n // The QR code specification says to use byte-wise modulo 100011101 arithmetic.\n // This means that when a number is 256 or larger, it should be XORed with 0x11D.\n if (x & 0x100) { // similar to x >= 256, but a lot faster (because 0x100 == 256)\n x ^= 0x11D;\n }\n }\n\n // Optimization: double the size of the anti-log table so that we don't need to mod 255 to\n // stay inside the bounds (because we will mainly use this table for the multiplication of\n // two GF numbers, no more).\n // @see {@link mul}\n for (i = 255; i < 512; i++) {\n EXP_TABLE[i] = EXP_TABLE[i - 255];\n }\n}());\n\n/**\n * Returns log value of n inside Galois Field\n *\n * @param {Number} n\n * @return {Number}\n */\nexports.log = function log (n) {\n if (n < 1) throw new Error('log(' + n + ')')\n return LOG_TABLE[n]\n};\n\n/**\n * Returns anti-log value of n inside Galois Field\n *\n * @param {Number} n\n * @return {Number}\n */\nexports.exp = function exp (n) {\n return EXP_TABLE[n]\n};\n\n/**\n * Multiplies two number inside Galois Field\n *\n * @param {Number} x\n * @param {Number} y\n * @return {Number}\n */\nexports.mul = function mul (x, y) {\n if (x === 0 || y === 0) return 0\n\n // should be EXP_TABLE[(LOG_TABLE[x] + LOG_TABLE[y]) % 255] if EXP_TABLE wasn't oversized\n // @see {@link initTables}\n return EXP_TABLE[LOG_TABLE[x] + LOG_TABLE[y]]\n};\n\n},{\"../utils/buffer\":27}],11:[function(require,module,exports){\nvar Mode = require('./mode');\nvar Utils = require('./utils');\n\nfunction KanjiData (data) {\n this.mode = Mode.KANJI;\n this.data = data;\n}\n\nKanjiData.getBitsLength = function getBitsLength (length) {\n return length * 13\n};\n\nKanjiData.prototype.getLength = function getLength () {\n return this.data.length\n};\n\nKanjiData.prototype.getBitsLength = function getBitsLength () {\n return KanjiData.getBitsLength(this.data.length)\n};\n\nKanjiData.prototype.write = function (bitBuffer) {\n var i;\n\n // In the Shift JIS system, Kanji characters are represented by a two byte combination.\n // These byte values are shifted from the JIS X 0208 values.\n // JIS X 0208 gives details of the shift coded representation.\n for (i = 0; i < this.data.length; i++) {\n var value = Utils.toSJIS(this.data[i]);\n\n // For characters with Shift JIS values from 0x8140 to 0x9FFC:\n if (value >= 0x8140 && value <= 0x9FFC) {\n // Subtract 0x8140 from Shift JIS value\n value -= 0x8140;\n\n // For characters with Shift JIS values from 0xE040 to 0xEBBF\n } else if (value >= 0xE040 && value <= 0xEBBF) {\n // Subtract 0xC140 from Shift JIS value\n value -= 0xC140;\n } else {\n throw new Error(\n 'Invalid SJIS character: ' + this.data[i] + '\\n' +\n 'Make sure your charset is UTF-8')\n }\n\n // Multiply most significant byte of result by 0xC0\n // and add least significant byte to product\n value = (((value >>> 8) & 0xff) * 0xC0) + (value & 0xff);\n\n // Convert result to a 13-bit binary string\n bitBuffer.put(value, 13);\n }\n};\n\nmodule.exports = KanjiData;\n\n},{\"./mode\":13,\"./utils\":20}],12:[function(require,module,exports){\n/**\n * Data mask pattern reference\n * @type {Object}\n */\nexports.Patterns = {\n PATTERN000: 0,\n PATTERN001: 1,\n PATTERN010: 2,\n PATTERN011: 3,\n PATTERN100: 4,\n PATTERN101: 5,\n PATTERN110: 6,\n PATTERN111: 7\n};\n\n/**\n * Weighted penalty scores for the undesirable features\n * @type {Object}\n */\nvar PenaltyScores = {\n N1: 3,\n N2: 3,\n N3: 40,\n N4: 10\n};\n\n/**\n * Check if mask pattern value is valid\n *\n * @param {Number} mask Mask pattern\n * @return {Boolean} true if valid, false otherwise\n */\nexports.isValid = function isValid (mask) {\n return mask != null && mask !== '' && !isNaN(mask) && mask >= 0 && mask <= 7\n};\n\n/**\n * Returns mask pattern from a value.\n * If value is not valid, returns undefined\n *\n * @param {Number|String} value Mask pattern value\n * @return {Number} Valid mask pattern or undefined\n */\nexports.from = function from (value) {\n return exports.isValid(value) ? parseInt(value, 10) : undefined\n};\n\n/**\n* Find adjacent modules in row/column with the same color\n* and assign a penalty value.\n*\n* Points: N1 + i\n* i is the amount by which the number of adjacent modules of the same color exceeds 5\n*/\nexports.getPenaltyN1 = function getPenaltyN1 (data) {\n var size = data.size;\n var points = 0;\n var sameCountCol = 0;\n var sameCountRow = 0;\n var lastCol = null;\n var lastRow = null;\n\n for (var row = 0; row < size; row++) {\n sameCountCol = sameCountRow = 0;\n lastCol = lastRow = null;\n\n for (var col = 0; col < size; col++) {\n var module = data.get(row, col);\n if (module === lastCol) {\n sameCountCol++;\n } else {\n if (sameCountCol >= 5) points += PenaltyScores.N1 + (sameCountCol - 5);\n lastCol = module;\n sameCountCol = 1;\n }\n\n module = data.get(col, row);\n if (module === lastRow) {\n sameCountRow++;\n } else {\n if (sameCountRow >= 5) points += PenaltyScores.N1 + (sameCountRow - 5);\n lastRow = module;\n sameCountRow = 1;\n }\n }\n\n if (sameCountCol >= 5) points += PenaltyScores.N1 + (sameCountCol - 5);\n if (sameCountRow >= 5) points += PenaltyScores.N1 + (sameCountRow - 5);\n }\n\n return points\n};\n\n/**\n * Find 2x2 blocks with the same color and assign a penalty value\n *\n * Points: N2 * (m - 1) * (n - 1)\n */\nexports.getPenaltyN2 = function getPenaltyN2 (data) {\n var size = data.size;\n var points = 0;\n\n for (var row = 0; row < size - 1; row++) {\n for (var col = 0; col < size - 1; col++) {\n var last = data.get(row, col) +\n data.get(row, col + 1) +\n data.get(row + 1, col) +\n data.get(row + 1, col + 1);\n\n if (last === 4 || last === 0) points++;\n }\n }\n\n return points * PenaltyScores.N2\n};\n\n/**\n * Find 1:1:3:1:1 ratio (dark:light:dark:light:dark) pattern in row/column,\n * preceded or followed by light area 4 modules wide\n *\n * Points: N3 * number of pattern found\n */\nexports.getPenaltyN3 = function getPenaltyN3 (data) {\n var size = data.size;\n var points = 0;\n var bitsCol = 0;\n var bitsRow = 0;\n\n for (var row = 0; row < size; row++) {\n bitsCol = bitsRow = 0;\n for (var col = 0; col < size; col++) {\n bitsCol = ((bitsCol << 1) & 0x7FF) | data.get(row, col);\n if (col >= 10 && (bitsCol === 0x5D0 || bitsCol === 0x05D)) points++;\n\n bitsRow = ((bitsRow << 1) & 0x7FF) | data.get(col, row);\n if (col >= 10 && (bitsRow === 0x5D0 || bitsRow === 0x05D)) points++;\n }\n }\n\n return points * PenaltyScores.N3\n};\n\n/**\n * Calculate proportion of dark modules in entire symbol\n *\n * Points: N4 * k\n *\n * k is the rating of the deviation of the proportion of dark modules\n * in the symbol from 50% in steps of 5%\n */\nexports.getPenaltyN4 = function getPenaltyN4 (data) {\n var darkCount = 0;\n var modulesCount = data.data.length;\n\n for (var i = 0; i < modulesCount; i++) darkCount += data.data[i];\n\n var k = Math.abs(Math.ceil((darkCount * 100 / modulesCount) / 5) - 10);\n\n return k * PenaltyScores.N4\n};\n\n/**\n * Return mask value at given position\n *\n * @param {Number} maskPattern Pattern reference value\n * @param {Number} i Row\n * @param {Number} j Column\n * @return {Boolean} Mask value\n */\nfunction getMaskAt (maskPattern, i, j) {\n switch (maskPattern) {\n case exports.Patterns.PATTERN000: return (i + j) % 2 === 0\n case exports.Patterns.PATTERN001: return i % 2 === 0\n case exports.Patterns.PATTERN010: return j % 3 === 0\n case exports.Patterns.PATTERN011: return (i + j) % 3 === 0\n case exports.Patterns.PATTERN100: return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 === 0\n case exports.Patterns.PATTERN101: return (i * j) % 2 + (i * j) % 3 === 0\n case exports.Patterns.PATTERN110: return ((i * j) % 2 + (i * j) % 3) % 2 === 0\n case exports.Patterns.PATTERN111: return ((i * j) % 3 + (i + j) % 2) % 2 === 0\n\n default: throw new Error('bad maskPattern:' + maskPattern)\n }\n}\n\n/**\n * Apply a mask pattern to a BitMatrix\n *\n * @param {Number} pattern Pattern reference number\n * @param {BitMatrix} data BitMatrix data\n */\nexports.applyMask = function applyMask (pattern, data) {\n var size = data.size;\n\n for (var col = 0; col < size; col++) {\n for (var row = 0; row < size; row++) {\n if (data.isReserved(row, col)) continue\n data.xor(row, col, getMaskAt(pattern, row, col));\n }\n }\n};\n\n/**\n * Returns the best mask pattern for data\n *\n * @param {BitMatrix} data\n * @return {Number} Mask pattern reference number\n */\nexports.getBestMask = function getBestMask (data, setupFormatFunc) {\n var numPatterns = Object.keys(exports.Patterns).length;\n var bestPattern = 0;\n var lowerPenalty = Infinity;\n\n for (var p = 0; p < numPatterns; p++) {\n setupFormatFunc(p);\n exports.applyMask(p, data);\n\n // Calculate penalty\n var penalty =\n exports.getPenaltyN1(data) +\n exports.getPenaltyN2(data) +\n exports.getPenaltyN3(data) +\n exports.getPenaltyN4(data);\n\n // Undo previously applied mask\n exports.applyMask(p, data);\n\n if (penalty < lowerPenalty) {\n lowerPenalty = penalty;\n bestPattern = p;\n }\n }\n\n return bestPattern\n};\n\n},{}],13:[function(require,module,exports){\nvar VersionCheck = require('./version-check');\nvar Regex = require('./regex');\n\n/**\n * Numeric mode encodes data from the decimal digit set (0 - 9)\n * (byte values 30HEX to 39HEX).\n * Normally, 3 data characters are represented by 10 bits.\n *\n * @type {Object}\n */\nexports.NUMERIC = {\n id: 'Numeric',\n bit: 1 << 0,\n ccBits: [10, 12, 14]\n};\n\n/**\n * Alphanumeric mode encodes data from a set of 45 characters,\n * i.e. 10 numeric digits (0 - 9),\n * 26 alphabetic characters (A - Z),\n * and 9 symbols (SP, $, %, *, +, -, ., /, :).\n * Normally, two input characters are represented by 11 bits.\n *\n * @type {Object}\n */\nexports.ALPHANUMERIC = {\n id: 'Alphanumeric',\n bit: 1 << 1,\n ccBits: [9, 11, 13]\n};\n\n/**\n * In byte mode, data is encoded at 8 bits per character.\n *\n * @type {Object}\n */\nexports.BYTE = {\n id: 'Byte',\n bit: 1 << 2,\n ccBits: [8, 16, 16]\n};\n\n/**\n * The Kanji mode efficiently encodes Kanji characters in accordance with\n * the Shift JIS system based on JIS X 0208.\n * The Shift JIS values are shifted from the JIS X 0208 values.\n * JIS X 0208 gives details of the shift coded representation.\n * Each two-byte character value is compacted to a 13-bit binary codeword.\n *\n * @type {Object}\n */\nexports.KANJI = {\n id: 'Kanji',\n bit: 1 << 3,\n ccBits: [8, 10, 12]\n};\n\n/**\n * Mixed mode will contain a sequences of data in a combination of any of\n * the modes described above\n *\n * @type {Object}\n */\nexports.MIXED = {\n bit: -1\n};\n\n/**\n * Returns the number of bits needed to store the data length\n * according to QR Code specifications.\n *\n * @param {Mode} mode Data mode\n * @param {Number} version QR Code version\n * @return {Number} Number of bits\n */\nexports.getCharCountIndicator = function getCharCountIndicator (mode, version) {\n if (!mode.ccBits) throw new Error('Invalid mode: ' + mode)\n\n if (!VersionCheck.isValid(version)) {\n throw new Error('Invalid version: ' + version)\n }\n\n if (version >= 1 && version < 10) return mode.ccBits[0]\n else if (version < 27) return mode.ccBits[1]\n return mode.ccBits[2]\n};\n\n/**\n * Returns the most efficient mode to store the specified data\n *\n * @param {String} dataStr Input data string\n * @return {Mode} Best mode\n */\nexports.getBestModeForData = function getBestModeForData (dataStr) {\n if (Regex.testNumeric(dataStr)) return exports.NUMERIC\n else if (Regex.testAlphanumeric(dataStr)) return exports.ALPHANUMERIC\n else if (Regex.testKanji(dataStr)) return exports.KANJI\n else return exports.BYTE\n};\n\n/**\n * Return mode name as string\n *\n * @param {Mode} mode Mode object\n * @returns {String} Mode name\n */\nexports.toString = function toString (mode) {\n if (mode && mode.id) return mode.id\n throw new Error('Invalid mode')\n};\n\n/**\n * Check if input param is a valid mode object\n *\n * @param {Mode} mode Mode object\n * @returns {Boolean} True if valid mode, false otherwise\n */\nexports.isValid = function isValid (mode) {\n return mode && mode.bit && mode.ccBits\n};\n\n/**\n * Get mode object from its name\n *\n * @param {String} string Mode name\n * @returns {Mode} Mode object\n */\nfunction fromString (string) {\n if (typeof string !== 'string') {\n throw new Error('Param is not a string')\n }\n\n var lcStr = string.toLowerCase();\n\n switch (lcStr) {\n case 'numeric':\n return exports.NUMERIC\n case 'alphanumeric':\n return exports.ALPHANUMERIC\n case 'kanji':\n return exports.KANJI\n case 'byte':\n return exports.BYTE\n default:\n throw new Error('Unknown mode: ' + string)\n }\n}\n\n/**\n * Returns mode from a value.\n * If value is not a valid mode, returns defaultValue\n *\n * @param {Mode|String} value Encoding mode\n * @param {Mode} defaultValue Fallback value\n * @return {Mode} Encoding mode\n */\nexports.from = function from (value, defaultValue) {\n if (exports.isValid(value)) {\n return value\n }\n\n try {\n return fromString(value)\n } catch (e) {\n return defaultValue\n }\n};\n\n},{\"./regex\":18,\"./version-check\":21}],14:[function(require,module,exports){\nvar Mode = require('./mode');\n\nfunction NumericData (data) {\n this.mode = Mode.NUMERIC;\n this.data = data.toString();\n}\n\nNumericData.getBitsLength = function getBitsLength (length) {\n return 10 * Math.floor(length / 3) + ((length % 3) ? ((length % 3) * 3 + 1) : 0)\n};\n\nNumericData.prototype.getLength = function getLength () {\n return this.data.length\n};\n\nNumericData.prototype.getBitsLength = function getBitsLength () {\n return NumericData.getBitsLength(this.data.length)\n};\n\nNumericData.prototype.write = function write (bitBuffer) {\n var i, group, value;\n\n // The input data string is divided into groups of three digits,\n // and each group is converted to its 10-bit binary equivalent.\n for (i = 0; i + 3 <= this.data.length; i += 3) {\n group = this.data.substr(i, 3);\n value = parseInt(group, 10);\n\n bitBuffer.put(value, 10);\n }\n\n // If the number of input digits is not an exact multiple of three,\n // the final one or two digits are converted to 4 or 7 bits respectively.\n var remainingNum = this.data.length - i;\n if (remainingNum > 0) {\n group = this.data.substr(i);\n value = parseInt(group, 10);\n\n bitBuffer.put(value, remainingNum * 3 + 1);\n }\n};\n\nmodule.exports = NumericData;\n\n},{\"./mode\":13}],15:[function(require,module,exports){\nvar Buffer = require('../utils/buffer');\nvar GF = require('./galois-field');\n\n/**\n * Multiplies two polynomials inside Galois Field\n *\n * @param {Buffer} p1 Polynomial\n * @param {Buffer} p2 Polynomial\n * @return {Buffer} Product of p1 and p2\n */\nexports.mul = function mul (p1, p2) {\n var coeff = new Buffer(p1.length + p2.length - 1);\n coeff.fill(0);\n\n for (var i = 0; i < p1.length; i++) {\n for (var j = 0; j < p2.length; j++) {\n coeff[i + j] ^= GF.mul(p1[i], p2[j]);\n }\n }\n\n return coeff\n};\n\n/**\n * Calculate the remainder of polynomials division\n *\n * @param {Buffer} divident Polynomial\n * @param {Buffer} divisor Polynomial\n * @return {Buffer} Remainder\n */\nexports.mod = function mod (divident, divisor) {\n var result = new Buffer(divident);\n\n while ((result.length - divisor.length) >= 0) {\n var coeff = result[0];\n\n for (var i = 0; i < divisor.length; i++) {\n result[i] ^= GF.mul(divisor[i], coeff);\n }\n\n // remove all zeros from buffer head\n var offset = 0;\n while (offset < result.length && result[offset] === 0) offset++;\n result = result.slice(offset);\n }\n\n return result\n};\n\n/**\n * Generate an irreducible generator polynomial of specified degree\n * (used by Reed-Solomon encoder)\n *\n * @param {Number} degree Degree of the generator polynomial\n * @return {Buffer} Buffer containing polynomial coefficients\n */\nexports.generateECPolynomial = function generateECPolynomial (degree) {\n var poly = new Buffer([1]);\n for (var i = 0; i < degree; i++) {\n poly = exports.mul(poly, [1, GF.exp(i)]);\n }\n\n return poly\n};\n\n},{\"../utils/buffer\":27,\"./galois-field\":10}],16:[function(require,module,exports){\nvar Buffer = require('../utils/buffer');\nvar Utils = require('./utils');\nvar ECLevel = require('./error-correction-level');\nvar BitBuffer = require('./bit-buffer');\nvar BitMatrix = require('./bit-matrix');\nvar AlignmentPattern = require('./alignment-pattern');\nvar FinderPattern = require('./finder-pattern');\nvar MaskPattern = require('./mask-pattern');\nvar ECCode = require('./error-correction-code');\nvar ReedSolomonEncoder = require('./reed-solomon-encoder');\nvar Version = require('./version');\nvar FormatInfo = require('./format-info');\nvar Mode = require('./mode');\nvar Segments = require('./segments');\nvar isArray = require('isarray');\n\n/**\n * QRCode for JavaScript\n *\n * modified by Ryan Day for nodejs support\n * Copyright (c) 2011 Ryan Day\n *\n * Licensed under the MIT license:\n * http://www.opensource.org/licenses/mit-license.php\n *\n//---------------------------------------------------------------------\n// QRCode for JavaScript\n//\n// Copyright (c) 2009 Kazuhiko Arase\n//\n// URL: http://www.d-project.com/\n//\n// Licensed under the MIT license:\n// http://www.opensource.org/licenses/mit-license.php\n//\n// The word \"QR Code\" is registered trademark of\n// DENSO WAVE INCORPORATED\n// http://www.denso-wave.com/qrcode/faqpatent-e.html\n//\n//---------------------------------------------------------------------\n*/\n\n/**\n * Add finder patterns bits to matrix\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {Number} version QR Code version\n */\nfunction setupFinderPattern (matrix, version) {\n var size = matrix.size;\n var pos = FinderPattern.getPositions(version);\n\n for (var i = 0; i < pos.length; i++) {\n var row = pos[i][0];\n var col = pos[i][1];\n\n for (var r = -1; r <= 7; r++) {\n if (row + r <= -1 || size <= row + r) continue\n\n for (var c = -1; c <= 7; c++) {\n if (col + c <= -1 || size <= col + c) continue\n\n if ((r >= 0 && r <= 6 && (c === 0 || c === 6)) ||\n (c >= 0 && c <= 6 && (r === 0 || r === 6)) ||\n (r >= 2 && r <= 4 && c >= 2 && c <= 4)) {\n matrix.set(row + r, col + c, true, true);\n } else {\n matrix.set(row + r, col + c, false, true);\n }\n }\n }\n }\n}\n\n/**\n * Add timing pattern bits to matrix\n *\n * Note: this function must be called before {@link setupAlignmentPattern}\n *\n * @param {BitMatrix} matrix Modules matrix\n */\nfunction setupTimingPattern (matrix) {\n var size = matrix.size;\n\n for (var r = 8; r < size - 8; r++) {\n var value = r % 2 === 0;\n matrix.set(r, 6, value, true);\n matrix.set(6, r, value, true);\n }\n}\n\n/**\n * Add alignment patterns bits to matrix\n *\n * Note: this function must be called after {@link setupTimingPattern}\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {Number} version QR Code version\n */\nfunction setupAlignmentPattern (matrix, version) {\n var pos = AlignmentPattern.getPositions(version);\n\n for (var i = 0; i < pos.length; i++) {\n var row = pos[i][0];\n var col = pos[i][1];\n\n for (var r = -2; r <= 2; r++) {\n for (var c = -2; c <= 2; c++) {\n if (r === -2 || r === 2 || c === -2 || c === 2 ||\n (r === 0 && c === 0)) {\n matrix.set(row + r, col + c, true, true);\n } else {\n matrix.set(row + r, col + c, false, true);\n }\n }\n }\n }\n}\n\n/**\n * Add version info bits to matrix\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {Number} version QR Code version\n */\nfunction setupVersionInfo (matrix, version) {\n var size = matrix.size;\n var bits = Version.getEncodedBits(version);\n var row, col, mod;\n\n for (var i = 0; i < 18; i++) {\n row = Math.floor(i / 3);\n col = i % 3 + size - 8 - 3;\n mod = ((bits >> i) & 1) === 1;\n\n matrix.set(row, col, mod, true);\n matrix.set(col, row, mod, true);\n }\n}\n\n/**\n * Add format info bits to matrix\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {ErrorCorrectionLevel} errorCorrectionLevel Error correction level\n * @param {Number} maskPattern Mask pattern reference value\n */\nfunction setupFormatInfo (matrix, errorCorrectionLevel, maskPattern) {\n var size = matrix.size;\n var bits = FormatInfo.getEncodedBits(errorCorrectionLevel, maskPattern);\n var i, mod;\n\n for (i = 0; i < 15; i++) {\n mod = ((bits >> i) & 1) === 1;\n\n // vertical\n if (i < 6) {\n matrix.set(i, 8, mod, true);\n } else if (i < 8) {\n matrix.set(i + 1, 8, mod, true);\n } else {\n matrix.set(size - 15 + i, 8, mod, true);\n }\n\n // horizontal\n if (i < 8) {\n matrix.set(8, size - i - 1, mod, true);\n } else if (i < 9) {\n matrix.set(8, 15 - i - 1 + 1, mod, true);\n } else {\n matrix.set(8, 15 - i - 1, mod, true);\n }\n }\n\n // fixed module\n matrix.set(size - 8, 8, 1, true);\n}\n\n/**\n * Add encoded data bits to matrix\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {Buffer} data Data codewords\n */\nfunction setupData (matrix, data) {\n var size = matrix.size;\n var inc = -1;\n var row = size - 1;\n var bitIndex = 7;\n var byteIndex = 0;\n\n for (var col = size - 1; col > 0; col -= 2) {\n if (col === 6) col--;\n\n while (true) {\n for (var c = 0; c < 2; c++) {\n if (!matrix.isReserved(row, col - c)) {\n var dark = false;\n\n if (byteIndex < data.length) {\n dark = (((data[byteIndex] >>> bitIndex) & 1) === 1);\n }\n\n matrix.set(row, col - c, dark);\n bitIndex--;\n\n if (bitIndex === -1) {\n byteIndex++;\n bitIndex = 7;\n }\n }\n }\n\n row += inc;\n\n if (row < 0 || size <= row) {\n row -= inc;\n inc = -inc;\n break\n }\n }\n }\n}\n\n/**\n * Create encoded codewords from data input\n *\n * @param {Number} version QR Code version\n * @param {ErrorCorrectionLevel} errorCorrectionLevel Error correction level\n * @param {ByteData} data Data input\n * @return {Buffer} Buffer containing encoded codewords\n */\nfunction createData (version, errorCorrectionLevel, segments) {\n // Prepare data buffer\n var buffer = new BitBuffer();\n\n segments.forEach(function (data) {\n // prefix data with mode indicator (4 bits)\n buffer.put(data.mode.bit, 4);\n\n // Prefix data with character count indicator.\n // The character count indicator is a string of bits that represents the\n // number of characters that are being encoded.\n // The character count indicator must be placed after the mode indicator\n // and must be a certain number of bits long, depending on the QR version\n // and data mode\n // @see {@link Mode.getCharCountIndicator}.\n buffer.put(data.getLength(), Mode.getCharCountIndicator(data.mode, version));\n\n // add binary data sequence to buffer\n data.write(buffer);\n });\n\n // Calculate required number of bits\n var totalCodewords = Utils.getSymbolTotalCodewords(version);\n var ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel);\n var dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8;\n\n // Add a terminator.\n // If the bit string is shorter than the total number of required bits,\n // a terminator of up to four 0s must be added to the right side of the string.\n // If the bit string is more than four bits shorter than the required number of bits,\n // add four 0s to the end.\n if (buffer.getLengthInBits() + 4 <= dataTotalCodewordsBits) {\n buffer.put(0, 4);\n }\n\n // If the bit string is fewer than four bits shorter, add only the number of 0s that\n // are needed to reach the required number of bits.\n\n // After adding the terminator, if the number of bits in the string is not a multiple of 8,\n // pad the string on the right with 0s to make the string's length a multiple of 8.\n while (buffer.getLengthInBits() % 8 !== 0) {\n buffer.putBit(0);\n }\n\n // Add pad bytes if the string is still shorter than the total number of required bits.\n // Extend the buffer to fill the data capacity of the symbol corresponding to\n // the Version and Error Correction Level by adding the Pad Codewords 11101100 (0xEC)\n // and 00010001 (0x11) alternately.\n var remainingByte = (dataTotalCodewordsBits - buffer.getLengthInBits()) / 8;\n for (var i = 0; i < remainingByte; i++) {\n buffer.put(i % 2 ? 0x11 : 0xEC, 8);\n }\n\n return createCodewords(buffer, version, errorCorrectionLevel)\n}\n\n/**\n * Encode input data with Reed-Solomon and return codewords with\n * relative error correction bits\n *\n * @param {BitBuffer} bitBuffer Data to encode\n * @param {Number} version QR Code version\n * @param {ErrorCorrectionLevel} errorCorrectionLevel Error correction level\n * @return {Buffer} Buffer containing encoded codewords\n */\nfunction createCodewords (bitBuffer, version, errorCorrectionLevel) {\n // Total codewords for this QR code version (Data + Error correction)\n var totalCodewords = Utils.getSymbolTotalCodewords(version);\n\n // Total number of error correction codewords\n var ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel);\n\n // Total number of data codewords\n var dataTotalCodewords = totalCodewords - ecTotalCodewords;\n\n // Total number of blocks\n var ecTotalBlocks = ECCode.getBlocksCount(version, errorCorrectionLevel);\n\n // Calculate how many blocks each group should contain\n var blocksInGroup2 = totalCodewords % ecTotalBlocks;\n var blocksInGroup1 = ecTotalBlocks - blocksInGroup2;\n\n var totalCodewordsInGroup1 = Math.floor(totalCodewords / ecTotalBlocks);\n\n var dataCodewordsInGroup1 = Math.floor(dataTotalCodewords / ecTotalBlocks);\n var dataCodewordsInGroup2 = dataCodewordsInGroup1 + 1;\n\n // Number of EC codewords is the same for both groups\n var ecCount = totalCodewordsInGroup1 - dataCodewordsInGroup1;\n\n // Initialize a Reed-Solomon encoder with a generator polynomial of degree ecCount\n var rs = new ReedSolomonEncoder(ecCount);\n\n var offset = 0;\n var dcData = new Array(ecTotalBlocks);\n var ecData = new Array(ecTotalBlocks);\n var maxDataSize = 0;\n var buffer = new Buffer(bitBuffer.buffer);\n\n // Divide the buffer into the required number of blocks\n for (var b = 0; b < ecTotalBlocks; b++) {\n var dataSize = b < blocksInGroup1 ? dataCodewordsInGroup1 : dataCodewordsInGroup2;\n\n // extract a block of data from buffer\n dcData[b] = buffer.slice(offset, offset + dataSize);\n\n // Calculate EC codewords for this data block\n ecData[b] = rs.encode(dcData[b]);\n\n offset += dataSize;\n maxDataSize = Math.max(maxDataSize, dataSize);\n }\n\n // Create final data\n // Interleave the data and error correction codewords from each block\n var data = new Buffer(totalCodewords);\n var index = 0;\n var i, r;\n\n // Add data codewords\n for (i = 0; i < maxDataSize; i++) {\n for (r = 0; r < ecTotalBlocks; r++) {\n if (i < dcData[r].length) {\n data[index++] = dcData[r][i];\n }\n }\n }\n\n // Apped EC codewords\n for (i = 0; i < ecCount; i++) {\n for (r = 0; r < ecTotalBlocks; r++) {\n data[index++] = ecData[r][i];\n }\n }\n\n return data\n}\n\n/**\n * Build QR Code symbol\n *\n * @param {String} data Input string\n * @param {Number} version QR Code version\n * @param {ErrorCorretionLevel} errorCorrectionLevel Error level\n * @param {MaskPattern} maskPattern Mask pattern\n * @return {Object} Object containing symbol data\n */\nfunction createSymbol (data, version, errorCorrectionLevel, maskPattern) {\n var segments;\n\n if (isArray(data)) {\n segments = Segments.fromArray(data);\n } else if (typeof data === 'string') {\n var estimatedVersion = version;\n\n if (!estimatedVersion) {\n var rawSegments = Segments.rawSplit(data);\n\n // Estimate best version that can contain raw splitted segments\n estimatedVersion = Version.getBestVersionForData(rawSegments,\n errorCorrectionLevel);\n }\n\n // Build optimized segments\n // If estimated version is undefined, try with the highest version\n segments = Segments.fromString(data, estimatedVersion || 40);\n } else {\n throw new Error('Invalid data')\n }\n\n // Get the min version that can contain data\n var bestVersion = Version.getBestVersionForData(segments,\n errorCorrectionLevel);\n\n // If no version is found, data cannot be stored\n if (!bestVersion) {\n throw new Error('The amount of data is too big to be stored in a QR Code')\n }\n\n // If not specified, use min version as default\n if (!version) {\n version = bestVersion;\n\n // Check if the specified version can contain the data\n } else if (version < bestVersion) {\n throw new Error('\\n' +\n 'The chosen QR Code version cannot contain this amount of data.\\n' +\n 'Minimum version required to store current data is: ' + bestVersion + '.\\n'\n )\n }\n\n var dataBits = createData(version, errorCorrectionLevel, segments);\n\n // Allocate matrix buffer\n var moduleCount = Utils.getSymbolSize(version);\n var modules = new BitMatrix(moduleCount);\n\n // Add function modules\n setupFinderPattern(modules, version);\n setupTimingPattern(modules);\n setupAlignmentPattern(modules, version);\n\n // Add temporary dummy bits for format info just to set them as reserved.\n // This is needed to prevent these bits from being masked by {@link MaskPattern.applyMask}\n // since the masking operation must be performed only on the encoding region.\n // These blocks will be replaced with correct values later in code.\n setupFormatInfo(modules, errorCorrectionLevel, 0);\n\n if (version >= 7) {\n setupVersionInfo(modules, version);\n }\n\n // Add data codewords\n setupData(modules, dataBits);\n\n if (isNaN(maskPattern)) {\n // Find best mask pattern\n maskPattern = MaskPattern.getBestMask(modules,\n setupFormatInfo.bind(null, modules, errorCorrectionLevel));\n }\n\n // Apply mask pattern\n MaskPattern.applyMask(maskPattern, modules);\n\n // Replace format info bits with correct values\n setupFormatInfo(modules, errorCorrectionLevel, maskPattern);\n\n return {\n modules: modules,\n version: version,\n errorCorrectionLevel: errorCorrectionLevel,\n maskPattern: maskPattern,\n segments: segments\n }\n}\n\n/**\n * QR Code\n *\n * @param {String | Array} data Input data\n * @param {Object} options Optional configurations\n * @param {Number} options.version QR Code version\n * @param {String} options.errorCorrectionLevel Error correction level\n * @param {Function} options.toSJISFunc Helper func to convert utf8 to sjis\n */\nexports.create = function create (data, options) {\n if (typeof data === 'undefined' || data === '') {\n throw new Error('No input text')\n }\n\n var errorCorrectionLevel = ECLevel.M;\n var version;\n var mask;\n\n if (typeof options !== 'undefined') {\n // Use higher error correction level as default\n errorCorrectionLevel = ECLevel.from(options.errorCorrectionLevel, ECLevel.M);\n version = Version.from(options.version);\n mask = MaskPattern.from(options.maskPattern);\n\n if (options.toSJISFunc) {\n Utils.setToSJISFunction(options.toSJISFunc);\n }\n }\n\n return createSymbol(data, version, errorCorrectionLevel, mask)\n};\n\n},{\"../utils/buffer\":27,\"./alignment-pattern\":1,\"./bit-buffer\":3,\"./bit-matrix\":4,\"./error-correction-code\":6,\"./error-correction-level\":7,\"./finder-pattern\":8,\"./format-info\":9,\"./mask-pattern\":12,\"./mode\":13,\"./reed-solomon-encoder\":17,\"./segments\":19,\"./utils\":20,\"./version\":22,\"isarray\":30}],17:[function(require,module,exports){\nvar Buffer = require('../utils/buffer');\nvar Polynomial = require('./polynomial');\n\nfunction ReedSolomonEncoder (degree) {\n this.genPoly = undefined;\n this.degree = degree;\n\n if (this.degree) this.initialize(this.degree);\n}\n\n/**\n * Initialize the encoder.\n * The input param should correspond to the number of error correction codewords.\n *\n * @param {Number} degree\n */\nReedSolomonEncoder.prototype.initialize = function initialize (degree) {\n // create an irreducible generator polynomial\n this.degree = degree;\n this.genPoly = Polynomial.generateECPolynomial(this.degree);\n};\n\n/**\n * Encodes a chunk of data\n *\n * @param {Buffer} data Buffer containing input data\n * @return {Buffer} Buffer containing encoded data\n */\nReedSolomonEncoder.prototype.encode = function encode (data) {\n if (!this.genPoly) {\n throw new Error('Encoder not initialized')\n }\n\n // Calculate EC for this data block\n // extends data size to data+genPoly size\n var pad = new Buffer(this.degree);\n pad.fill(0);\n var paddedData = Buffer.concat([data, pad], data.length + this.degree);\n\n // The error correction codewords are the remainder after dividing the data codewords\n // by a generator polynomial\n var remainder = Polynomial.mod(paddedData, this.genPoly);\n\n // return EC data blocks (last n byte, where n is the degree of genPoly)\n // If coefficients number in remainder are less than genPoly degree,\n // pad with 0s to the left to reach the needed number of coefficients\n var start = this.degree - remainder.length;\n if (start > 0) {\n var buff = new Buffer(this.degree);\n buff.fill(0);\n remainder.copy(buff, start);\n\n return buff\n }\n\n return remainder\n};\n\nmodule.exports = ReedSolomonEncoder;\n\n},{\"../utils/buffer\":27,\"./polynomial\":15}],18:[function(require,module,exports){\nvar numeric = '[0-9]+';\nvar alphanumeric = '[A-Z $%*+\\\\-./:]+';\nvar kanji = '(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|' +\n '[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|' +\n '[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|' +\n '[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+';\nkanji = kanji.replace(/u/g, '\\\\u');\n\nvar byte = '(?:(?![A-Z0-9 $%*+\\\\-./:]|' + kanji + ')(?:.|[\\r\\n]))+';\n\nexports.KANJI = new RegExp(kanji, 'g');\nexports.BYTE_KANJI = new RegExp('[^A-Z0-9 $%*+\\\\-./:]+', 'g');\nexports.BYTE = new RegExp(byte, 'g');\nexports.NUMERIC = new RegExp(numeric, 'g');\nexports.ALPHANUMERIC = new RegExp(alphanumeric, 'g');\n\nvar TEST_KANJI = new RegExp('^' + kanji + '$');\nvar TEST_NUMERIC = new RegExp('^' + numeric + '$');\nvar TEST_ALPHANUMERIC = new RegExp('^[A-Z0-9 $%*+\\\\-./:]+$');\n\nexports.testKanji = function testKanji (str) {\n return TEST_KANJI.test(str)\n};\n\nexports.testNumeric = function testNumeric (str) {\n return TEST_NUMERIC.test(str)\n};\n\nexports.testAlphanumeric = function testAlphanumeric (str) {\n return TEST_ALPHANUMERIC.test(str)\n};\n\n},{}],19:[function(require,module,exports){\nvar Mode = require('./mode');\nvar NumericData = require('./numeric-data');\nvar AlphanumericData = require('./alphanumeric-data');\nvar ByteData = require('./byte-data');\nvar KanjiData = require('./kanji-data');\nvar Regex = require('./regex');\nvar Utils = require('./utils');\nvar dijkstra = require('dijkstrajs');\n\n/**\n * Returns UTF8 byte length\n *\n * @param {String} str Input string\n * @return {Number} Number of byte\n */\nfunction getStringByteLength (str) {\n return unescape(encodeURIComponent(str)).length\n}\n\n/**\n * Get a list of segments of the specified mode\n * from a string\n *\n * @param {Mode} mode Segment mode\n * @param {String} str String to process\n * @return {Array} Array of object with segments data\n */\nfunction getSegments (regex, mode, str) {\n var segments = [];\n var result;\n\n while ((result = regex.exec(str)) !== null) {\n segments.push({\n data: result[0],\n index: result.index,\n mode: mode,\n length: result[0].length\n });\n }\n\n return segments\n}\n\n/**\n * Extracts a series of segments with the appropriate\n * modes from a string\n *\n * @param {String} dataStr Input string\n * @return {Array} Array of object with segments data\n */\nfunction getSegmentsFromString (dataStr) {\n var numSegs = getSegments(Regex.NUMERIC, Mode.NUMERIC, dataStr);\n var alphaNumSegs = getSegments(Regex.ALPHANUMERIC, Mode.ALPHANUMERIC, dataStr);\n var byteSegs;\n var kanjiSegs;\n\n if (Utils.isKanjiModeEnabled()) {\n byteSegs = getSegments(Regex.BYTE, Mode.BYTE, dataStr);\n kanjiSegs = getSegments(Regex.KANJI, Mode.KANJI, dataStr);\n } else {\n byteSegs = getSegments(Regex.BYTE_KANJI, Mode.BYTE, dataStr);\n kanjiSegs = [];\n }\n\n var segs = numSegs.concat(alphaNumSegs, byteSegs, kanjiSegs);\n\n return segs\n .sort(function (s1, s2) {\n return s1.index - s2.index\n })\n .map(function (obj) {\n return {\n data: obj.data,\n mode: obj.mode,\n length: obj.length\n }\n })\n}\n\n/**\n * Returns how many bits are needed to encode a string of\n * specified length with the specified mode\n *\n * @param {Number} length String length\n * @param {Mode} mode Segment mode\n * @return {Number} Bit length\n */\nfunction getSegmentBitsLength (length, mode) {\n switch (mode) {\n case Mode.NUMERIC:\n return NumericData.getBitsLength(length)\n case Mode.ALPHANUMERIC:\n return AlphanumericData.getBitsLength(length)\n case Mode.KANJI:\n return KanjiData.getBitsLength(length)\n case Mode.BYTE:\n return ByteData.getBitsLength(length)\n }\n}\n\n/**\n * Merges adjacent segments which have the same mode\n *\n * @param {Array} segs Array of object with segments data\n * @return {Array} Array of object with segments data\n */\nfunction mergeSegments (segs) {\n return segs.reduce(function (acc, curr) {\n var prevSeg = acc.length - 1 >= 0 ? acc[acc.length - 1] : null;\n if (prevSeg && prevSeg.mode === curr.mode) {\n acc[acc.length - 1].data += curr.data;\n return acc\n }\n\n acc.push(curr);\n return acc\n }, [])\n}\n\n/**\n * Generates a list of all possible nodes combination which\n * will be used to build a segments graph.\n *\n * Nodes are divided by groups. Each group will contain a list of all the modes\n * in which is possible to encode the given text.\n *\n * For example the text '12345' can be encoded as Numeric, Alphanumeric or Byte.\n * The group for '12345' will contain then 3 objects, one for each\n * possible encoding mode.\n *\n * Each node represents a possible segment.\n *\n * @param {Array} segs Array of object with segments data\n * @return {Array} Array of object with segments data\n */\nfunction buildNodes (segs) {\n var nodes = [];\n for (var i = 0; i < segs.length; i++) {\n var seg = segs[i];\n\n switch (seg.mode) {\n case Mode.NUMERIC:\n nodes.push([seg,\n { data: seg.data, mode: Mode.ALPHANUMERIC, length: seg.length },\n { data: seg.data, mode: Mode.BYTE, length: seg.length }\n ]);\n break\n case Mode.ALPHANUMERIC:\n nodes.push([seg,\n { data: seg.data, mode: Mode.BYTE, length: seg.length }\n ]);\n break\n case Mode.KANJI:\n nodes.push([seg,\n { data: seg.data, mode: Mode.BYTE, length: getStringByteLength(seg.data) }\n ]);\n break\n case Mode.BYTE:\n nodes.push([\n { data: seg.data, mode: Mode.BYTE, length: getStringByteLength(seg.data) }\n ]);\n }\n }\n\n return nodes\n}\n\n/**\n * Builds a graph from a list of nodes.\n * All segments in each node group will be connected with all the segments of\n * the next group and so on.\n *\n * At each connection will be assigned a weight depending on the\n * segment's byte length.\n *\n * @param {Array} nodes Array of object with segments data\n * @param {Number} version QR Code version\n * @return {Object} Graph of all possible segments\n */\nfunction buildGraph (nodes, version) {\n var table = {};\n var graph = {'start': {}};\n var prevNodeIds = ['start'];\n\n for (var i = 0; i < nodes.length; i++) {\n var nodeGroup = nodes[i];\n var currentNodeIds = [];\n\n for (var j = 0; j < nodeGroup.length; j++) {\n var node = nodeGroup[j];\n var key = '' + i + j;\n\n currentNodeIds.push(key);\n table[key] = { node: node, lastCount: 0 };\n graph[key] = {};\n\n for (var n = 0; n < prevNodeIds.length; n++) {\n var prevNodeId = prevNodeIds[n];\n\n if (table[prevNodeId] && table[prevNodeId].node.mode === node.mode) {\n graph[prevNodeId][key] =\n getSegmentBitsLength(table[prevNodeId].lastCount + node.length, node.mode) -\n getSegmentBitsLength(table[prevNodeId].lastCount, node.mode);\n\n table[prevNodeId].lastCount += node.length;\n } else {\n if (table[prevNodeId]) table[prevNodeId].lastCount = node.length;\n\n graph[prevNodeId][key] = getSegmentBitsLength(node.length, node.mode) +\n 4 + Mode.getCharCountIndicator(node.mode, version); // switch cost\n }\n }\n }\n\n prevNodeIds = currentNodeIds;\n }\n\n for (n = 0; n < prevNodeIds.length; n++) {\n graph[prevNodeIds[n]]['end'] = 0;\n }\n\n return { map: graph, table: table }\n}\n\n/**\n * Builds a segment from a specified data and mode.\n * If a mode is not specified, the more suitable will be used.\n *\n * @param {String} data Input data\n * @param {Mode | String} modesHint Data mode\n * @return {Segment} Segment\n */\nfunction buildSingleSegment (data, modesHint) {\n var mode;\n var bestMode = Mode.getBestModeForData(data);\n\n mode = Mode.from(modesHint, bestMode);\n\n // Make sure data can be encoded\n if (mode !== Mode.BYTE && mode.bit < bestMode.bit) {\n throw new Error('\"' + data + '\"' +\n ' cannot be encoded with mode ' + Mode.toString(mode) +\n '.\\n Suggested mode is: ' + Mode.toString(bestMode))\n }\n\n // Use Mode.BYTE if Kanji support is disabled\n if (mode === Mode.KANJI && !Utils.isKanjiModeEnabled()) {\n mode = Mode.BYTE;\n }\n\n switch (mode) {\n case Mode.NUMERIC:\n return new NumericData(data)\n\n case Mode.ALPHANUMERIC:\n return new AlphanumericData(data)\n\n case Mode.KANJI:\n return new KanjiData(data)\n\n case Mode.BYTE:\n return new ByteData(data)\n }\n}\n\n/**\n * Builds a list of segments from an array.\n * Array can contain Strings or Objects with segment's info.\n *\n * For each item which is a string, will be generated a segment with the given\n * string and the more appropriate encoding mode.\n *\n * For each item which is an object, will be generated a segment with the given\n * data and mode.\n * Objects must contain at least the property \"data\".\n * If property \"mode\" is not present, the more suitable mode will be used.\n *\n * @param {Array} array Array of objects with segments data\n * @return {Array} Array of Segments\n */\nexports.fromArray = function fromArray (array) {\n return array.reduce(function (acc, seg) {\n if (typeof seg === 'string') {\n acc.push(buildSingleSegment(seg, null));\n } else if (seg.data) {\n acc.push(buildSingleSegment(seg.data, seg.mode));\n }\n\n return acc\n }, [])\n};\n\n/**\n * Builds an optimized sequence of segments from a string,\n * which will produce the shortest possible bitstream.\n *\n * @param {String} data Input string\n * @param {Number} version QR Code version\n * @return {Array} Array of segments\n */\nexports.fromString = function fromString (data, version) {\n var segs = getSegmentsFromString(data, Utils.isKanjiModeEnabled());\n\n var nodes = buildNodes(segs);\n var graph = buildGraph(nodes, version);\n var path = dijkstra.find_path(graph.map, 'start', 'end');\n\n var optimizedSegs = [];\n for (var i = 1; i < path.length - 1; i++) {\n optimizedSegs.push(graph.table[path[i]].node);\n }\n\n return exports.fromArray(mergeSegments(optimizedSegs))\n};\n\n/**\n * Splits a string in various segments with the modes which\n * best represent their content.\n * The produced segments are far from being optimized.\n * The output of this function is only used to estimate a QR Code version\n * which may contain the data.\n *\n * @param {string} data Input string\n * @return {Array} Array of segments\n */\nexports.rawSplit = function rawSplit (data) {\n return exports.fromArray(\n getSegmentsFromString(data, Utils.isKanjiModeEnabled())\n )\n};\n\n},{\"./alphanumeric-data\":2,\"./byte-data\":5,\"./kanji-data\":11,\"./mode\":13,\"./numeric-data\":14,\"./regex\":18,\"./utils\":20,\"dijkstrajs\":29}],20:[function(require,module,exports){\nvar toSJISFunction;\nvar CODEWORDS_COUNT = [\n 0, // Not used\n 26, 44, 70, 100, 134, 172, 196, 242, 292, 346,\n 404, 466, 532, 581, 655, 733, 815, 901, 991, 1085,\n 1156, 1258, 1364, 1474, 1588, 1706, 1828, 1921, 2051, 2185,\n 2323, 2465, 2611, 2761, 2876, 3034, 3196, 3362, 3532, 3706\n];\n\n/**\n * Returns the QR Code size for the specified version\n *\n * @param {Number} version QR Code version\n * @return {Number} size of QR code\n */\nexports.getSymbolSize = function getSymbolSize (version) {\n if (!version) throw new Error('\"version\" cannot be null or undefined')\n if (version < 1 || version > 40) throw new Error('\"version\" should be in range from 1 to 40')\n return version * 4 + 17\n};\n\n/**\n * Returns the total number of codewords used to store data and EC information.\n *\n * @param {Number} version QR Code version\n * @return {Number} Data length in bits\n */\nexports.getSymbolTotalCodewords = function getSymbolTotalCodewords (version) {\n return CODEWORDS_COUNT[version]\n};\n\n/**\n * Encode data with Bose-Chaudhuri-Hocquenghem\n *\n * @param {Number} data Value to encode\n * @return {Number} Encoded value\n */\nexports.getBCHDigit = function (data) {\n var digit = 0;\n\n while (data !== 0) {\n digit++;\n data >>>= 1;\n }\n\n return digit\n};\n\nexports.setToSJISFunction = function setToSJISFunction (f) {\n if (typeof f !== 'function') {\n throw new Error('\"toSJISFunc\" is not a valid function.')\n }\n\n toSJISFunction = f;\n};\n\nexports.isKanjiModeEnabled = function () {\n return typeof toSJISFunction !== 'undefined'\n};\n\nexports.toSJIS = function toSJIS (kanji) {\n return toSJISFunction(kanji)\n};\n\n},{}],21:[function(require,module,exports){\n/**\n * Check if QR Code version is valid\n *\n * @param {Number} version QR Code version\n * @return {Boolean} true if valid version, false otherwise\n */\nexports.isValid = function isValid (version) {\n return !isNaN(version) && version >= 1 && version <= 40\n};\n\n},{}],22:[function(require,module,exports){\nvar Utils = require('./utils');\nvar ECCode = require('./error-correction-code');\nvar ECLevel = require('./error-correction-level');\nvar Mode = require('./mode');\nvar VersionCheck = require('./version-check');\nvar isArray = require('isarray');\n\n// Generator polynomial used to encode version information\nvar G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0);\nvar G18_BCH = Utils.getBCHDigit(G18);\n\nfunction getBestVersionForDataLength (mode, length, errorCorrectionLevel) {\n for (var currentVersion = 1; currentVersion <= 40; currentVersion++) {\n if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, mode)) {\n return currentVersion\n }\n }\n\n return undefined\n}\n\nfunction getReservedBitsCount (mode, version) {\n // Character count indicator + mode indicator bits\n return Mode.getCharCountIndicator(mode, version) + 4\n}\n\nfunction getTotalBitsFromDataArray (segments, version) {\n var totalBits = 0;\n\n segments.forEach(function (data) {\n var reservedBits = getReservedBitsCount(data.mode, version);\n totalBits += reservedBits + data.getBitsLength();\n });\n\n return totalBits\n}\n\nfunction getBestVersionForMixedData (segments, errorCorrectionLevel) {\n for (var currentVersion = 1; currentVersion <= 40; currentVersion++) {\n var length = getTotalBitsFromDataArray(segments, currentVersion);\n if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, Mode.MIXED)) {\n return currentVersion\n }\n }\n\n return undefined\n}\n\n/**\n * Returns version number from a value.\n * If value is not a valid version, returns defaultValue\n *\n * @param {Number|String} value QR Code version\n * @param {Number} defaultValue Fallback value\n * @return {Number} QR Code version number\n */\nexports.from = function from (value, defaultValue) {\n if (VersionCheck.isValid(value)) {\n return parseInt(value, 10)\n }\n\n return defaultValue\n};\n\n/**\n * Returns how much data can be stored with the specified QR code version\n * and error correction level\n *\n * @param {Number} version QR Code version (1-40)\n * @param {Number} errorCorrectionLevel Error correction level\n * @param {Mode} mode Data mode\n * @return {Number} Quantity of storable data\n */\nexports.getCapacity = function getCapacity (version, errorCorrectionLevel, mode) {\n if (!VersionCheck.isValid(version)) {\n throw new Error('Invalid QR Code version')\n }\n\n // Use Byte mode as default\n if (typeof mode === 'undefined') mode = Mode.BYTE;\n\n // Total codewords for this QR code version (Data + Error correction)\n var totalCodewords = Utils.getSymbolTotalCodewords(version);\n\n // Total number of error correction codewords\n var ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel);\n\n // Total number of data codewords\n var dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8;\n\n if (mode === Mode.MIXED) return dataTotalCodewordsBits\n\n var usableBits = dataTotalCodewordsBits - getReservedBitsCount(mode, version);\n\n // Return max number of storable codewords\n switch (mode) {\n case Mode.NUMERIC:\n return Math.floor((usableBits / 10) * 3)\n\n case Mode.ALPHANUMERIC:\n return Math.floor((usableBits / 11) * 2)\n\n case Mode.KANJI:\n return Math.floor(usableBits / 13)\n\n case Mode.BYTE:\n default:\n return Math.floor(usableBits / 8)\n }\n};\n\n/**\n * Returns the minimum version needed to contain the amount of data\n *\n * @param {Segment} data Segment of data\n * @param {Number} [errorCorrectionLevel=H] Error correction level\n * @param {Mode} mode Data mode\n * @return {Number} QR Code version\n */\nexports.getBestVersionForData = function getBestVersionForData (data, errorCorrectionLevel) {\n var seg;\n\n var ecl = ECLevel.from(errorCorrectionLevel, ECLevel.M);\n\n if (isArray(data)) {\n if (data.length > 1) {\n return getBestVersionForMixedData(data, ecl)\n }\n\n if (data.length === 0) {\n return 1\n }\n\n seg = data[0];\n } else {\n seg = data;\n }\n\n return getBestVersionForDataLength(seg.mode, seg.getLength(), ecl)\n};\n\n/**\n * Returns version information with relative error correction bits\n *\n * The version information is included in QR Code symbols of version 7 or larger.\n * It consists of an 18-bit sequence containing 6 data bits,\n * with 12 error correction bits calculated using the (18, 6) Golay code.\n *\n * @param {Number} version QR Code version\n * @return {Number} Encoded version info bits\n */\nexports.getEncodedBits = function getEncodedBits (version) {\n if (!VersionCheck.isValid(version) || version < 7) {\n throw new Error('Invalid QR Code version')\n }\n\n var d = version << 12;\n\n while (Utils.getBCHDigit(d) - G18_BCH >= 0) {\n d ^= (G18 << (Utils.getBCHDigit(d) - G18_BCH));\n }\n\n return (version << 12) | d\n};\n\n},{\"./error-correction-code\":6,\"./error-correction-level\":7,\"./mode\":13,\"./utils\":20,\"./version-check\":21,\"isarray\":30}],23:[function(require,module,exports){\nvar canPromise = require('can-promise');\nvar QRCode = require('./core/qrcode');\nvar CanvasRenderer = require('./renderer/canvas');\nvar SvgRenderer = require('./renderer/svg-tag.js');\n\nfunction renderCanvas (renderFunc, canvas, text, opts, cb) {\n var args = [].slice.call(arguments, 1);\n var argsNum = args.length;\n var isLastArgCb = typeof args[argsNum - 1] === 'function';\n\n if (!isLastArgCb && !canPromise()) {\n throw new Error('Callback required as last argument')\n }\n\n if (isLastArgCb) {\n if (argsNum < 2) {\n throw new Error('Too few arguments provided')\n }\n\n if (argsNum === 2) {\n cb = text;\n text = canvas;\n canvas = opts = undefined;\n } else if (argsNum === 3) {\n if (canvas.getContext && typeof cb === 'undefined') {\n cb = opts;\n opts = undefined;\n } else {\n cb = opts;\n opts = text;\n text = canvas;\n canvas = undefined;\n }\n }\n } else {\n if (argsNum < 1) {\n throw new Error('Too few arguments provided')\n }\n\n if (argsNum === 1) {\n text = canvas;\n canvas = opts = undefined;\n } else if (argsNum === 2 && !canvas.getContext) {\n opts = text;\n text = canvas;\n canvas = undefined;\n }\n\n return new Promise(function (resolve, reject) {\n try {\n var data = QRCode.create(text, opts);\n resolve(renderFunc(data, canvas, opts));\n } catch (e) {\n reject(e);\n }\n })\n }\n\n try {\n var data = QRCode.create(text, opts);\n cb(null, renderFunc(data, canvas, opts));\n } catch (e) {\n cb(e);\n }\n}\n\nexports.create = QRCode.create;\nexports.toCanvas = renderCanvas.bind(null, CanvasRenderer.render);\nexports.toDataURL = renderCanvas.bind(null, CanvasRenderer.renderToDataURL);\n\n// only svg for now.\nexports.toString = renderCanvas.bind(null, function (data, _, opts) {\n return SvgRenderer.render(data, opts)\n});\n\n},{\"./core/qrcode\":16,\"./renderer/canvas\":24,\"./renderer/svg-tag.js\":25,\"can-promise\":28}],24:[function(require,module,exports){\nvar Utils = require('./utils');\n\nfunction clearCanvas (ctx, canvas, size) {\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n if (!canvas.style) canvas.style = {};\n canvas.height = size;\n canvas.width = size;\n canvas.style.height = size + 'px';\n canvas.style.width = size + 'px';\n}\n\nfunction getCanvasElement () {\n try {\n return document.createElement('canvas')\n } catch (e) {\n throw new Error('You need to specify a canvas element')\n }\n}\n\nexports.render = function render (qrData, canvas, options) {\n var opts = options;\n var canvasEl = canvas;\n\n if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {\n opts = canvas;\n canvas = undefined;\n }\n\n if (!canvas) {\n canvasEl = getCanvasElement();\n }\n\n opts = Utils.getOptions(opts);\n var size = Utils.getImageWidth(qrData.modules.size, opts);\n\n var ctx = canvasEl.getContext('2d');\n var image = ctx.createImageData(size, size);\n Utils.qrToImageData(image.data, qrData, opts);\n\n clearCanvas(ctx, canvasEl, size);\n ctx.putImageData(image, 0, 0);\n\n return canvasEl\n};\n\nexports.renderToDataURL = function renderToDataURL (qrData, canvas, options) {\n var opts = options;\n\n if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {\n opts = canvas;\n canvas = undefined;\n }\n\n if (!opts) opts = {};\n\n var canvasEl = exports.render(qrData, canvas, opts);\n\n var type = opts.type || 'image/png';\n var rendererOpts = opts.rendererOpts || {};\n\n return canvasEl.toDataURL(type, rendererOpts.quality)\n};\n\n},{\"./utils\":26}],25:[function(require,module,exports){\nvar Utils = require('./utils');\n\nfunction getColorAttrib (color, attrib) {\n var alpha = color.a / 255;\n var str = attrib + '=\"' + color.hex + '\"';\n\n return alpha < 1\n ? str + ' ' + attrib + '-opacity=\"' + alpha.toFixed(2).slice(1) + '\"'\n : str\n}\n\nfunction svgCmd (cmd, x, y) {\n var str = cmd + x;\n if (typeof y !== 'undefined') str += ' ' + y;\n\n return str\n}\n\nfunction qrToPath (data, size, margin) {\n var path = '';\n var moveBy = 0;\n var newRow = false;\n var lineLength = 0;\n\n for (var i = 0; i < data.length; i++) {\n var col = Math.floor(i % size);\n var row = Math.floor(i / size);\n\n if (!col && !newRow) newRow = true;\n\n if (data[i]) {\n lineLength++;\n\n if (!(i > 0 && col > 0 && data[i - 1])) {\n path += newRow\n ? svgCmd('M', col + margin, 0.5 + row + margin)\n : svgCmd('m', moveBy, 0);\n\n moveBy = 0;\n newRow = false;\n }\n\n if (!(col + 1 < size && data[i + 1])) {\n path += svgCmd('h', lineLength);\n lineLength = 0;\n }\n } else {\n moveBy++;\n }\n }\n\n return path\n}\n\nexports.render = function render (qrData, options, cb) {\n var opts = Utils.getOptions(options);\n var size = qrData.modules.size;\n var data = qrData.modules.data;\n var qrcodesize = size + opts.margin * 2;\n\n var bg = !opts.color.light.a\n ? ''\n : '';\n\n var path =\n '';\n\n var viewBox = 'viewBox=\"' + '0 0 ' + qrcodesize + ' ' + qrcodesize + '\"';\n\n var width = !opts.width ? '' : 'width=\"' + opts.width + '\" height=\"' + opts.width + '\" ';\n\n var svgTag = '' + bg + path + '\\n';\n\n if (typeof cb === 'function') {\n cb(null, svgTag);\n }\n\n return svgTag\n};\n\n},{\"./utils\":26}],26:[function(require,module,exports){\nfunction hex2rgba (hex) {\n if (typeof hex !== 'string') {\n throw new Error('Color should be defined as hex string')\n }\n\n var hexCode = hex.slice().replace('#', '').split('');\n if (hexCode.length < 3 || hexCode.length === 5 || hexCode.length > 8) {\n throw new Error('Invalid hex color: ' + hex)\n }\n\n // Convert from short to long form (fff -> ffffff)\n if (hexCode.length === 3 || hexCode.length === 4) {\n hexCode = Array.prototype.concat.apply([], hexCode.map(function (c) {\n return [c, c]\n }));\n }\n\n // Add default alpha value\n if (hexCode.length === 6) hexCode.push('F', 'F');\n\n var hexValue = parseInt(hexCode.join(''), 16);\n\n return {\n r: (hexValue >> 24) & 255,\n g: (hexValue >> 16) & 255,\n b: (hexValue >> 8) & 255,\n a: hexValue & 255,\n hex: '#' + hexCode.slice(0, 6).join('')\n }\n}\n\nexports.getOptions = function getOptions (options) {\n if (!options) options = {};\n if (!options.color) options.color = {};\n\n var margin = typeof options.margin === 'undefined' ||\n options.margin === null ||\n options.margin < 0 ? 4 : options.margin;\n\n var width = options.width && options.width >= 21 ? options.width : undefined;\n var scale = options.scale || 4;\n\n return {\n width: width,\n scale: width ? 4 : scale,\n margin: margin,\n color: {\n dark: hex2rgba(options.color.dark || '#000000ff'),\n light: hex2rgba(options.color.light || '#ffffffff')\n },\n type: options.type,\n rendererOpts: options.rendererOpts || {}\n }\n};\n\nexports.getScale = function getScale (qrSize, opts) {\n return opts.width && opts.width >= qrSize + opts.margin * 2\n ? opts.width / (qrSize + opts.margin * 2)\n : opts.scale\n};\n\nexports.getImageWidth = function getImageWidth (qrSize, opts) {\n var scale = exports.getScale(qrSize, opts);\n return Math.floor((qrSize + opts.margin * 2) * scale)\n};\n\nexports.qrToImageData = function qrToImageData (imgData, qr, opts) {\n var size = qr.modules.size;\n var data = qr.modules.data;\n var scale = exports.getScale(size, opts);\n var symbolSize = Math.floor((size + opts.margin * 2) * scale);\n var scaledMargin = opts.margin * scale;\n var palette = [opts.color.light, opts.color.dark];\n\n for (var i = 0; i < symbolSize; i++) {\n for (var j = 0; j < symbolSize; j++) {\n var posDst = (i * symbolSize + j) * 4;\n var pxColor = opts.color.light;\n\n if (i >= scaledMargin && j >= scaledMargin &&\n i < symbolSize - scaledMargin && j < symbolSize - scaledMargin) {\n var iSrc = Math.floor((i - scaledMargin) / scale);\n var jSrc = Math.floor((j - scaledMargin) / scale);\n pxColor = palette[data[iSrc * size + jSrc] ? 1 : 0];\n }\n\n imgData[posDst++] = pxColor.r;\n imgData[posDst++] = pxColor.g;\n imgData[posDst++] = pxColor.b;\n imgData[posDst] = pxColor.a;\n }\n }\n};\n\n},{}],27:[function(require,module,exports){\n\nvar isArray = require('isarray');\n\nfunction typedArraySupport () {\n // Can typed array instances be augmented?\n try {\n var arr = new Uint8Array(1);\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }};\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport();\n\nvar K_MAX_LENGTH = Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff;\n\nfunction Buffer (arg, offset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, offset, length)\n }\n\n if (typeof arg === 'number') {\n return allocUnsafe(this, arg)\n }\n\n return from(this, arg, offset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype;\n Buffer.__proto__ = Uint8Array;\n\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true,\n enumerable: false,\n writable: false\n });\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n\nfunction createBuffer (that, length) {\n var buf;\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n buf = new Uint8Array(length);\n buf.__proto__ = Buffer.prototype;\n } else {\n // Fallback: Return an object instance of the Buffer class\n buf = that;\n if (buf === null) {\n buf = new Buffer(length);\n }\n buf.length = length;\n }\n\n return buf\n}\n\nfunction allocUnsafe (that, size) {\n var buf = createBuffer(that, size < 0 ? 0 : checked(size) | 0);\n\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n buf[i] = 0;\n }\n }\n\n return buf\n}\n\nfunction fromString (that, string) {\n var length = byteLength(string) | 0;\n var buf = createBuffer(that, length);\n\n var actual = buf.write(string);\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual);\n }\n\n return buf\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0;\n var buf = createBuffer(that, length);\n for (var i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255;\n }\n return buf\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n var buf;\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array);\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset);\n } else {\n buf = new Uint8Array(array, byteOffset, length);\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n buf.__proto__ = Buffer.prototype;\n } else {\n // Fallback: Return an object instance of the Buffer class\n buf = fromArrayLike(that, buf);\n }\n\n return buf\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0;\n var buf = createBuffer(that, len);\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len);\n return buf\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity;\n var codePoint;\n var length = string.length;\n var leadSurrogate = null;\n var bytes = [];\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i);\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint;\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n leadSurrogate = codePoint;\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000;\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n }\n\n leadSurrogate = null;\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint);\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n );\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n );\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n );\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction byteLength (string) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string;\n }\n\n var len = string.length;\n if (len === 0) return 0\n\n return utf8ToBytes(string).length\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i];\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction from (that, value, offset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, offset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, offset)\n }\n\n return fromObject(that, value)\n}\n\nBuffer.prototype.write = function write (string, offset, length) {\n // Buffer#write(string)\n if (offset === undefined) {\n length = this.length;\n offset = 0;\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n length = this.length;\n offset = 0;\n // Buffer#write(string, offset[, length])\n } else if (isFinite(offset)) {\n offset = offset | 0;\n if (isFinite(length)) {\n length = length | 0;\n } else {\n length = undefined;\n }\n }\n\n var remaining = this.length - offset;\n if (length === undefined || length > remaining) length = remaining;\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n return utf8Write(this, string, offset, length)\n};\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length;\n start = ~~start;\n end = end === undefined ? len : ~~end;\n\n if (start < 0) {\n start += len;\n if (start < 0) start = 0;\n } else if (start > len) {\n start = len;\n }\n\n if (end < 0) {\n end += len;\n if (end < 0) end = 0;\n } else if (end > len) {\n end = len;\n }\n\n if (end < start) end = start;\n\n var newBuf;\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end);\n // Return an augmented `Uint8Array` instance\n newBuf.__proto__ = Buffer.prototype;\n } else {\n var sliceLen = end - start;\n newBuf = new Buffer(sliceLen, undefined);\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start];\n }\n }\n\n return newBuf\n};\n\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0;\n if (!end && end !== 0) end = this.length;\n if (targetStart >= target.length) targetStart = target.length;\n if (!targetStart) targetStart = 0;\n if (end > 0 && end < start) end = start;\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length;\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start;\n }\n\n var len = end - start;\n var i;\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start];\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start];\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n );\n }\n\n return len\n};\n\nBuffer.prototype.fill = function fill (val, start, end) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n start = 0;\n end = this.length;\n } else if (typeof end === 'string') {\n end = this.length;\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0);\n if (code < 256) {\n val = code;\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255;\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0;\n end = end === undefined ? this.length : end >>> 0;\n\n if (!val) val = 0;\n\n var i;\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val;\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : new Buffer(val);\n var len = bytes.length;\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len];\n }\n }\n\n return this\n};\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return createBuffer(null, 0)\n }\n\n var i;\n if (length === undefined) {\n length = 0;\n for (i = 0; i < list.length; ++i) {\n length += list[i].length;\n }\n }\n\n var buffer = allocUnsafe(null, length);\n var pos = 0;\n for (i = 0; i < list.length; ++i) {\n var buf = list[i];\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos);\n pos += buf.length;\n }\n return buffer\n};\n\nBuffer.byteLength = byteLength;\n\nBuffer.prototype._isBuffer = true;\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n};\n\nmodule.exports = Buffer;\n\n},{\"isarray\":30}],28:[function(require,module,exports){\n\nvar G = require('window-or-global');\n\nmodule.exports = function() {\n return (\n typeof G.Promise === 'function' &&\n typeof G.Promise.prototype.then === 'function'\n )\n};\n\n},{\"window-or-global\":31}],29:[function(require,module,exports){\n\n/******************************************************************************\n * Created 2008-08-19.\n *\n * Dijkstra path-finding functions. Adapted from the Dijkstar Python project.\n *\n * Copyright (C) 2008\n * Wyatt Baldwin \n * All rights reserved\n *\n * Licensed under the MIT license.\n *\n * http://www.opensource.org/licenses/mit-license.php\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n *****************************************************************************/\nvar dijkstra = {\n single_source_shortest_paths: function(graph, s, d) {\n // Predecessor map for each node that has been encountered.\n // node ID => predecessor node ID\n var predecessors = {};\n\n // Costs of shortest paths from s to all nodes encountered.\n // node ID => cost\n var costs = {};\n costs[s] = 0;\n\n // Costs of shortest paths from s to all nodes encountered; differs from\n // `costs` in that it provides easy access to the node that currently has\n // the known shortest path from s.\n // XXX: Do we actually need both `costs` and `open`?\n var open = dijkstra.PriorityQueue.make();\n open.push(s, 0);\n\n var closest,\n u, v,\n cost_of_s_to_u,\n adjacent_nodes,\n cost_of_e,\n cost_of_s_to_u_plus_cost_of_e,\n cost_of_s_to_v,\n first_visit;\n while (!open.empty()) {\n // In the nodes remaining in graph that have a known cost from s,\n // find the node, u, that currently has the shortest path from s.\n closest = open.pop();\n u = closest.value;\n cost_of_s_to_u = closest.cost;\n\n // Get nodes adjacent to u...\n adjacent_nodes = graph[u] || {};\n\n // ...and explore the edges that connect u to those nodes, updating\n // the cost of the shortest paths to any or all of those nodes as\n // necessary. v is the node across the current edge from u.\n for (v in adjacent_nodes) {\n if (adjacent_nodes.hasOwnProperty(v)) {\n // Get the cost of the edge running from u to v.\n cost_of_e = adjacent_nodes[v];\n\n // Cost of s to u plus the cost of u to v across e--this is *a*\n // cost from s to v that may or may not be less than the current\n // known cost to v.\n cost_of_s_to_u_plus_cost_of_e = cost_of_s_to_u + cost_of_e;\n\n // If we haven't visited v yet OR if the current known cost from s to\n // v is greater than the new cost we just found (cost of s to u plus\n // cost of u to v across e), update v's cost in the cost list and\n // update v's predecessor in the predecessor list (it's now u).\n cost_of_s_to_v = costs[v];\n first_visit = (typeof costs[v] === 'undefined');\n if (first_visit || cost_of_s_to_v > cost_of_s_to_u_plus_cost_of_e) {\n costs[v] = cost_of_s_to_u_plus_cost_of_e;\n open.push(v, cost_of_s_to_u_plus_cost_of_e);\n predecessors[v] = u;\n }\n }\n }\n }\n\n if (typeof d !== 'undefined' && typeof costs[d] === 'undefined') {\n var msg = ['Could not find a path from ', s, ' to ', d, '.'].join('');\n throw new Error(msg);\n }\n\n return predecessors;\n },\n\n extract_shortest_path_from_predecessor_list: function(predecessors, d) {\n var nodes = [];\n var u = d;\n var predecessor;\n while (u) {\n nodes.push(u);\n predecessor = predecessors[u];\n u = predecessors[u];\n }\n nodes.reverse();\n return nodes;\n },\n\n find_path: function(graph, s, d) {\n var predecessors = dijkstra.single_source_shortest_paths(graph, s, d);\n return dijkstra.extract_shortest_path_from_predecessor_list(\n predecessors, d);\n },\n\n /**\n * A very naive priority queue implementation.\n */\n PriorityQueue: {\n make: function (opts) {\n var T = dijkstra.PriorityQueue,\n t = {},\n key;\n opts = opts || {};\n for (key in T) {\n if (T.hasOwnProperty(key)) {\n t[key] = T[key];\n }\n }\n t.queue = [];\n t.sorter = opts.sorter || T.default_sorter;\n return t;\n },\n\n default_sorter: function (a, b) {\n return a.cost - b.cost;\n },\n\n /**\n * Add a new item to the queue and ensure the highest priority element\n * is at the front of the queue.\n */\n push: function (value, cost) {\n var item = {value: value, cost: cost};\n this.queue.push(item);\n this.queue.sort(this.sorter);\n },\n\n /**\n * Return the highest priority element in the queue.\n */\n pop: function () {\n return this.queue.shift();\n },\n\n empty: function () {\n return this.queue.length === 0;\n }\n }\n};\n\n\n// node.js module exports\nif (typeof module !== 'undefined') {\n module.exports = dijkstra;\n}\n\n},{}],30:[function(require,module,exports){\nvar toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n\n},{}],31:[function(require,module,exports){\n(function (global){\nmodule.exports = (typeof self === 'object' && self.self === self && self) ||\n (typeof global === 'object' && global.global === global && global) ||\n this;\n\n}).call(this,typeof commonjsGlobal !== \"undefined\" ? commonjsGlobal : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {});\n\n},{}]},{},[23])(23)\n});\n\n\n});\n\nvar index = {\n name: 'qrcode',\n props: {\n /**\n * The options for the QR code generator.\n * {@link https://github.com/soldair/node-qrcode#qr-code-options}\n */\n options: Object,\n\n /**\n * The tag name of the component's root element.\n */\n tag: {\n type: String,\n default: 'canvas'\n },\n\n /**\n * The value of the QR code.\n */\n value: null\n },\n render: function render(createElement) {\n return createElement(this.tag, this.$slots.default);\n },\n watch: {\n $props: {\n deep: true,\n immediate: true,\n handler: function handler() {\n if (this.$el) {\n this.generate();\n }\n }\n }\n },\n methods: {\n /**\n * Generate QR code.\n */\n generate: function generate() {\n var _this = this;\n\n var options = this.options,\n tag = this.tag;\n var value = String(this.value);\n\n if (tag === 'canvas') {\n qrcode.toCanvas(this.$el, value, options, function (error) {\n if (error) {\n throw error;\n }\n });\n } else if (tag === 'img') {\n qrcode.toDataURL(value, options, function (error, url) {\n if (error) {\n throw error;\n }\n\n _this.$el.src = url;\n });\n } else {\n qrcode.toString(value, options, function (error, string) {\n if (error) {\n throw error;\n }\n\n _this.$el.innerHTML = string;\n });\n }\n }\n },\n mounted: function mounted() {\n this.generate();\n }\n};\n\nexport default index;\n","/*!\n * Cropper.js v1.4.3\n * https://fengyuanchen.github.io/cropperjs\n *\n * Copyright 2015-present Chen Fengyuan\n * Released under the MIT license\n *\n * Date: 2018-10-24T13:07:15.032Z\n */\n\nfunction _typeof(obj) {\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n}\n\nfunction _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nvar IN_BROWSER = typeof window !== 'undefined';\nvar WINDOW = IN_BROWSER ? window : {};\nvar NAMESPACE = 'cropper'; // Actions\n\nvar ACTION_ALL = 'all';\nvar ACTION_CROP = 'crop';\nvar ACTION_MOVE = 'move';\nvar ACTION_ZOOM = 'zoom';\nvar ACTION_EAST = 'e';\nvar ACTION_WEST = 'w';\nvar ACTION_SOUTH = 's';\nvar ACTION_NORTH = 'n';\nvar ACTION_NORTH_EAST = 'ne';\nvar ACTION_NORTH_WEST = 'nw';\nvar ACTION_SOUTH_EAST = 'se';\nvar ACTION_SOUTH_WEST = 'sw'; // Classes\n\nvar CLASS_CROP = \"\".concat(NAMESPACE, \"-crop\");\nvar CLASS_DISABLED = \"\".concat(NAMESPACE, \"-disabled\");\nvar CLASS_HIDDEN = \"\".concat(NAMESPACE, \"-hidden\");\nvar CLASS_HIDE = \"\".concat(NAMESPACE, \"-hide\");\nvar CLASS_INVISIBLE = \"\".concat(NAMESPACE, \"-invisible\");\nvar CLASS_MODAL = \"\".concat(NAMESPACE, \"-modal\");\nvar CLASS_MOVE = \"\".concat(NAMESPACE, \"-move\"); // Data keys\n\nvar DATA_ACTION = \"\".concat(NAMESPACE, \"Action\");\nvar DATA_PREVIEW = \"\".concat(NAMESPACE, \"Preview\"); // Drag modes\n\nvar DRAG_MODE_CROP = 'crop';\nvar DRAG_MODE_MOVE = 'move';\nvar DRAG_MODE_NONE = 'none'; // Events\n\nvar EVENT_CROP = 'crop';\nvar EVENT_CROP_END = 'cropend';\nvar EVENT_CROP_MOVE = 'cropmove';\nvar EVENT_CROP_START = 'cropstart';\nvar EVENT_DBLCLICK = 'dblclick';\nvar EVENT_POINTER_DOWN = WINDOW.PointerEvent ? 'pointerdown' : 'touchstart mousedown';\nvar EVENT_POINTER_MOVE = WINDOW.PointerEvent ? 'pointermove' : 'touchmove mousemove';\nvar EVENT_POINTER_UP = WINDOW.PointerEvent ? 'pointerup pointercancel' : 'touchend touchcancel mouseup';\nvar EVENT_READY = 'ready';\nvar EVENT_RESIZE = 'resize';\nvar EVENT_WHEEL = 'wheel mousewheel DOMMouseScroll';\nvar EVENT_ZOOM = 'zoom'; // Mime types\n\nvar MIME_TYPE_JPEG = 'image/jpeg'; // RegExps\n\nvar REGEXP_ACTIONS = /^(?:e|w|s|n|se|sw|ne|nw|all|crop|move|zoom)$/;\nvar REGEXP_DATA_URL = /^data:/;\nvar REGEXP_DATA_URL_JPEG = /^data:image\\/jpeg;base64,/;\nvar REGEXP_TAG_NAME = /^(?:img|canvas)$/i;\n\nvar DEFAULTS = {\n // Define the view mode of the cropper\n viewMode: 0,\n // 0, 1, 2, 3\n // Define the dragging mode of the cropper\n dragMode: DRAG_MODE_CROP,\n // 'crop', 'move' or 'none'\n // Define the initial aspect ratio of the crop box\n initialAspectRatio: NaN,\n // Define the aspect ratio of the crop box\n aspectRatio: NaN,\n // An object with the previous cropping result data\n data: null,\n // A selector for adding extra containers to preview\n preview: '',\n // Re-render the cropper when resize the window\n responsive: true,\n // Restore the cropped area after resize the window\n restore: true,\n // Check if the current image is a cross-origin image\n checkCrossOrigin: true,\n // Check the current image's Exif Orientation information\n checkOrientation: true,\n // Show the black modal\n modal: true,\n // Show the dashed lines for guiding\n guides: true,\n // Show the center indicator for guiding\n center: true,\n // Show the white modal to highlight the crop box\n highlight: true,\n // Show the grid background\n background: true,\n // Enable to crop the image automatically when initialize\n autoCrop: true,\n // Define the percentage of automatic cropping area when initializes\n autoCropArea: 0.8,\n // Enable to move the image\n movable: true,\n // Enable to rotate the image\n rotatable: true,\n // Enable to scale the image\n scalable: true,\n // Enable to zoom the image\n zoomable: true,\n // Enable to zoom the image by dragging touch\n zoomOnTouch: true,\n // Enable to zoom the image by wheeling mouse\n zoomOnWheel: true,\n // Define zoom ratio when zoom the image by wheeling mouse\n wheelZoomRatio: 0.1,\n // Enable to move the crop box\n cropBoxMovable: true,\n // Enable to resize the crop box\n cropBoxResizable: true,\n // Toggle drag mode between \"crop\" and \"move\" when click twice on the cropper\n toggleDragModeOnDblclick: true,\n // Size limitation\n minCanvasWidth: 0,\n minCanvasHeight: 0,\n minCropBoxWidth: 0,\n minCropBoxHeight: 0,\n minContainerWidth: 200,\n minContainerHeight: 100,\n // Shortcuts of events\n ready: null,\n cropstart: null,\n cropmove: null,\n cropend: null,\n crop: null,\n zoom: null\n};\n\nvar TEMPLATE = '
' + '
' + '
' + '
' + '
' + '
' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '
' + '
';\n\n/**\n * Check if the given value is not a number.\n */\n\nvar isNaN = Number.isNaN || WINDOW.isNaN;\n/**\n * Check if the given value is a number.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a number, else `false`.\n */\n\nfunction isNumber(value) {\n return typeof value === 'number' && !isNaN(value);\n}\n/**\n * Check if the given value is undefined.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is undefined, else `false`.\n */\n\nfunction isUndefined(value) {\n return typeof value === 'undefined';\n}\n/**\n * Check if the given value is an object.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is an object, else `false`.\n */\n\nfunction isObject(value) {\n return _typeof(value) === 'object' && value !== null;\n}\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n/**\n * Check if the given value is a plain object.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a plain object, else `false`.\n */\n\nfunction isPlainObject(value) {\n if (!isObject(value)) {\n return false;\n }\n\n try {\n var _constructor = value.constructor;\n var prototype = _constructor.prototype;\n return _constructor && prototype && hasOwnProperty.call(prototype, 'isPrototypeOf');\n } catch (e) {\n return false;\n }\n}\n/**\n * Check if the given value is a function.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a function, else `false`.\n */\n\nfunction isFunction(value) {\n return typeof value === 'function';\n}\n/**\n * Iterate the given data.\n * @param {*} data - The data to iterate.\n * @param {Function} callback - The process function for each element.\n * @returns {*} The original data.\n */\n\nfunction forEach(data, callback) {\n if (data && isFunction(callback)) {\n if (Array.isArray(data) || isNumber(data.length)\n /* array-like */\n ) {\n var length = data.length;\n var i;\n\n for (i = 0; i < length; i += 1) {\n if (callback.call(data, data[i], i, data) === false) {\n break;\n }\n }\n } else if (isObject(data)) {\n Object.keys(data).forEach(function (key) {\n callback.call(data, data[key], key, data);\n });\n }\n }\n\n return data;\n}\n/**\n * Extend the given object.\n * @param {*} obj - The object to be extended.\n * @param {*} args - The rest objects which will be merged to the first object.\n * @returns {Object} The extended object.\n */\n\nvar assign = Object.assign || function assign(obj) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n if (isObject(obj) && args.length > 0) {\n args.forEach(function (arg) {\n if (isObject(arg)) {\n Object.keys(arg).forEach(function (key) {\n obj[key] = arg[key];\n });\n }\n });\n }\n\n return obj;\n};\nvar REGEXP_DECIMALS = /\\.\\d*(?:0|9){12}\\d*$/;\n/**\n * Normalize decimal number.\n * Check out {@link http://0.30000000000000004.com/}\n * @param {number} value - The value to normalize.\n * @param {number} [times=100000000000] - The times for normalizing.\n * @returns {number} Returns the normalized number.\n */\n\nfunction normalizeDecimalNumber(value) {\n var times = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 100000000000;\n return REGEXP_DECIMALS.test(value) ? Math.round(value * times) / times : value;\n}\nvar REGEXP_SUFFIX = /^(?:width|height|left|top|marginLeft|marginTop)$/;\n/**\n * Apply styles to the given element.\n * @param {Element} element - The target element.\n * @param {Object} styles - The styles for applying.\n */\n\nfunction setStyle(element, styles) {\n var style = element.style;\n forEach(styles, function (value, property) {\n if (REGEXP_SUFFIX.test(property) && isNumber(value)) {\n value += 'px';\n }\n\n style[property] = value;\n });\n}\n/**\n * Check if the given element has a special class.\n * @param {Element} element - The element to check.\n * @param {string} value - The class to search.\n * @returns {boolean} Returns `true` if the special class was found.\n */\n\nfunction hasClass(element, value) {\n return element.classList ? element.classList.contains(value) : element.className.indexOf(value) > -1;\n}\n/**\n * Add classes to the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be added.\n */\n\nfunction addClass(element, value) {\n if (!value) {\n return;\n }\n\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n addClass(elem, value);\n });\n return;\n }\n\n if (element.classList) {\n element.classList.add(value);\n return;\n }\n\n var className = element.className.trim();\n\n if (!className) {\n element.className = value;\n } else if (className.indexOf(value) < 0) {\n element.className = \"\".concat(className, \" \").concat(value);\n }\n}\n/**\n * Remove classes from the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be removed.\n */\n\nfunction removeClass(element, value) {\n if (!value) {\n return;\n }\n\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n removeClass(elem, value);\n });\n return;\n }\n\n if (element.classList) {\n element.classList.remove(value);\n return;\n }\n\n if (element.className.indexOf(value) >= 0) {\n element.className = element.className.replace(value, '');\n }\n}\n/**\n * Add or remove classes from the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be toggled.\n * @param {boolean} added - Add only.\n */\n\nfunction toggleClass(element, value, added) {\n if (!value) {\n return;\n }\n\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n toggleClass(elem, value, added);\n });\n return;\n } // IE10-11 doesn't support the second parameter of `classList.toggle`\n\n\n if (added) {\n addClass(element, value);\n } else {\n removeClass(element, value);\n }\n}\nvar REGEXP_HYPHENATE = /([a-z\\d])([A-Z])/g;\n/**\n * Transform the given string from camelCase to kebab-case\n * @param {string} value - The value to transform.\n * @returns {string} The transformed value.\n */\n\nfunction hyphenate(value) {\n return value.replace(REGEXP_HYPHENATE, '$1-$2').toLowerCase();\n}\n/**\n * Get data from the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to get.\n * @returns {string} The data value.\n */\n\nfunction getData(element, name) {\n if (isObject(element[name])) {\n return element[name];\n }\n\n if (element.dataset) {\n return element.dataset[name];\n }\n\n return element.getAttribute(\"data-\".concat(hyphenate(name)));\n}\n/**\n * Set data to the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to set.\n * @param {string} data - The data value.\n */\n\nfunction setData(element, name, data) {\n if (isObject(data)) {\n element[name] = data;\n } else if (element.dataset) {\n element.dataset[name] = data;\n } else {\n element.setAttribute(\"data-\".concat(hyphenate(name)), data);\n }\n}\n/**\n * Remove data from the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to remove.\n */\n\nfunction removeData(element, name) {\n if (isObject(element[name])) {\n try {\n delete element[name];\n } catch (e) {\n element[name] = undefined;\n }\n } else if (element.dataset) {\n // #128 Safari not allows to delete dataset property\n try {\n delete element.dataset[name];\n } catch (e) {\n element.dataset[name] = undefined;\n }\n } else {\n element.removeAttribute(\"data-\".concat(hyphenate(name)));\n }\n}\nvar REGEXP_SPACES = /\\s\\s*/;\n\nvar onceSupported = function () {\n var supported = false;\n\n if (IN_BROWSER) {\n var once = false;\n\n var listener = function listener() {};\n\n var options = Object.defineProperty({}, 'once', {\n get: function get() {\n supported = true;\n return once;\n },\n\n /**\n * This setter can fix a `TypeError` in strict mode\n * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Getter_only}\n * @param {boolean} value - The value to set\n */\n set: function set(value) {\n once = value;\n }\n });\n WINDOW.addEventListener('test', listener, options);\n WINDOW.removeEventListener('test', listener, options);\n }\n\n return supported;\n}();\n/**\n * Remove event listener from the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Function} listener - The event listener.\n * @param {Object} options - The event options.\n */\n\n\nfunction removeListener(element, type, listener) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var handler = listener;\n type.trim().split(REGEXP_SPACES).forEach(function (event) {\n if (!onceSupported) {\n var listeners = element.listeners;\n\n if (listeners && listeners[event] && listeners[event][listener]) {\n handler = listeners[event][listener];\n delete listeners[event][listener];\n\n if (Object.keys(listeners[event]).length === 0) {\n delete listeners[event];\n }\n\n if (Object.keys(listeners).length === 0) {\n delete element.listeners;\n }\n }\n }\n\n element.removeEventListener(event, handler, options);\n });\n}\n/**\n * Add event listener to the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Function} listener - The event listener.\n * @param {Object} options - The event options.\n */\n\nfunction addListener(element, type, listener) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var _handler = listener;\n type.trim().split(REGEXP_SPACES).forEach(function (event) {\n if (options.once && !onceSupported) {\n var _element$listeners = element.listeners,\n listeners = _element$listeners === void 0 ? {} : _element$listeners;\n\n _handler = function handler() {\n delete listeners[event][listener];\n element.removeEventListener(event, _handler, options);\n\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n listener.apply(element, args);\n };\n\n if (!listeners[event]) {\n listeners[event] = {};\n }\n\n if (listeners[event][listener]) {\n element.removeEventListener(event, listeners[event][listener], options);\n }\n\n listeners[event][listener] = _handler;\n element.listeners = listeners;\n }\n\n element.addEventListener(event, _handler, options);\n });\n}\n/**\n * Dispatch event on the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Object} data - The additional event data.\n * @returns {boolean} Indicate if the event is default prevented or not.\n */\n\nfunction dispatchEvent(element, type, data) {\n var event; // Event and CustomEvent on IE9-11 are global objects, not constructors\n\n if (isFunction(Event) && isFunction(CustomEvent)) {\n event = new CustomEvent(type, {\n detail: data,\n bubbles: true,\n cancelable: true\n });\n } else {\n event = document.createEvent('CustomEvent');\n event.initCustomEvent(type, true, true, data);\n }\n\n return element.dispatchEvent(event);\n}\n/**\n * Get the offset base on the document.\n * @param {Element} element - The target element.\n * @returns {Object} The offset data.\n */\n\nfunction getOffset(element) {\n var box = element.getBoundingClientRect();\n return {\n left: box.left + (window.pageXOffset - document.documentElement.clientLeft),\n top: box.top + (window.pageYOffset - document.documentElement.clientTop)\n };\n}\nvar location = WINDOW.location;\nvar REGEXP_ORIGINS = /^(https?:)\\/\\/([^:/?#]+):?(\\d*)/i;\n/**\n * Check if the given URL is a cross origin URL.\n * @param {string} url - The target URL.\n * @returns {boolean} Returns `true` if the given URL is a cross origin URL, else `false`.\n */\n\nfunction isCrossOriginURL(url) {\n var parts = url.match(REGEXP_ORIGINS);\n return parts && (parts[1] !== location.protocol || parts[2] !== location.hostname || parts[3] !== location.port);\n}\n/**\n * Add timestamp to the given URL.\n * @param {string} url - The target URL.\n * @returns {string} The result URL.\n */\n\nfunction addTimestamp(url) {\n var timestamp = \"timestamp=\".concat(new Date().getTime());\n return url + (url.indexOf('?') === -1 ? '?' : '&') + timestamp;\n}\n/**\n * Get transforms base on the given object.\n * @param {Object} obj - The target object.\n * @returns {string} A string contains transform values.\n */\n\nfunction getTransforms(_ref) {\n var rotate = _ref.rotate,\n scaleX = _ref.scaleX,\n scaleY = _ref.scaleY,\n translateX = _ref.translateX,\n translateY = _ref.translateY;\n var values = [];\n\n if (isNumber(translateX) && translateX !== 0) {\n values.push(\"translateX(\".concat(translateX, \"px)\"));\n }\n\n if (isNumber(translateY) && translateY !== 0) {\n values.push(\"translateY(\".concat(translateY, \"px)\"));\n } // Rotate should come first before scale to match orientation transform\n\n\n if (isNumber(rotate) && rotate !== 0) {\n values.push(\"rotate(\".concat(rotate, \"deg)\"));\n }\n\n if (isNumber(scaleX) && scaleX !== 1) {\n values.push(\"scaleX(\".concat(scaleX, \")\"));\n }\n\n if (isNumber(scaleY) && scaleY !== 1) {\n values.push(\"scaleY(\".concat(scaleY, \")\"));\n }\n\n var transform = values.length ? values.join(' ') : 'none';\n return {\n WebkitTransform: transform,\n msTransform: transform,\n transform: transform\n };\n}\n/**\n * Get the max ratio of a group of pointers.\n * @param {string} pointers - The target pointers.\n * @returns {number} The result ratio.\n */\n\nfunction getMaxZoomRatio(pointers) {\n var pointers2 = assign({}, pointers);\n var ratios = [];\n forEach(pointers, function (pointer, pointerId) {\n delete pointers2[pointerId];\n forEach(pointers2, function (pointer2) {\n var x1 = Math.abs(pointer.startX - pointer2.startX);\n var y1 = Math.abs(pointer.startY - pointer2.startY);\n var x2 = Math.abs(pointer.endX - pointer2.endX);\n var y2 = Math.abs(pointer.endY - pointer2.endY);\n var z1 = Math.sqrt(x1 * x1 + y1 * y1);\n var z2 = Math.sqrt(x2 * x2 + y2 * y2);\n var ratio = (z2 - z1) / z1;\n ratios.push(ratio);\n });\n });\n ratios.sort(function (a, b) {\n return Math.abs(a) < Math.abs(b);\n });\n return ratios[0];\n}\n/**\n * Get a pointer from an event object.\n * @param {Object} event - The target event object.\n * @param {boolean} endOnly - Indicates if only returns the end point coordinate or not.\n * @returns {Object} The result pointer contains start and/or end point coordinates.\n */\n\nfunction getPointer(_ref2, endOnly) {\n var pageX = _ref2.pageX,\n pageY = _ref2.pageY;\n var end = {\n endX: pageX,\n endY: pageY\n };\n return endOnly ? end : assign({\n startX: pageX,\n startY: pageY\n }, end);\n}\n/**\n * Get the center point coordinate of a group of pointers.\n * @param {Object} pointers - The target pointers.\n * @returns {Object} The center point coordinate.\n */\n\nfunction getPointersCenter(pointers) {\n var pageX = 0;\n var pageY = 0;\n var count = 0;\n forEach(pointers, function (_ref3) {\n var startX = _ref3.startX,\n startY = _ref3.startY;\n pageX += startX;\n pageY += startY;\n count += 1;\n });\n pageX /= count;\n pageY /= count;\n return {\n pageX: pageX,\n pageY: pageY\n };\n}\n/**\n * Check if the given value is a finite number.\n */\n\nvar isFinite = Number.isFinite || WINDOW.isFinite;\n/**\n * Get the max sizes in a rectangle under the given aspect ratio.\n * @param {Object} data - The original sizes.\n * @param {string} [type='contain'] - The adjust type.\n * @returns {Object} The result sizes.\n */\n\nfunction getAdjustedSizes(_ref4) // or 'cover'\n{\n var aspectRatio = _ref4.aspectRatio,\n height = _ref4.height,\n width = _ref4.width;\n var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'contain';\n\n var isValidNumber = function isValidNumber(value) {\n return isFinite(value) && value > 0;\n };\n\n if (isValidNumber(width) && isValidNumber(height)) {\n var adjustedWidth = height * aspectRatio;\n\n if (type === 'contain' && adjustedWidth > width || type === 'cover' && adjustedWidth < width) {\n height = width / aspectRatio;\n } else {\n width = height * aspectRatio;\n }\n } else if (isValidNumber(width)) {\n height = width / aspectRatio;\n } else if (isValidNumber(height)) {\n width = height * aspectRatio;\n }\n\n return {\n width: width,\n height: height\n };\n}\n/**\n * Get the new sizes of a rectangle after rotated.\n * @param {Object} data - The original sizes.\n * @returns {Object} The result sizes.\n */\n\nfunction getRotatedSizes(_ref5) {\n var width = _ref5.width,\n height = _ref5.height,\n degree = _ref5.degree;\n degree = Math.abs(degree) % 180;\n\n if (degree === 90) {\n return {\n width: height,\n height: width\n };\n }\n\n var arc = degree % 90 * Math.PI / 180;\n var sinArc = Math.sin(arc);\n var cosArc = Math.cos(arc);\n var newWidth = width * cosArc + height * sinArc;\n var newHeight = width * sinArc + height * cosArc;\n return degree > 90 ? {\n width: newHeight,\n height: newWidth\n } : {\n width: newWidth,\n height: newHeight\n };\n}\n/**\n * Get a canvas which drew the given image.\n * @param {HTMLImageElement} image - The image for drawing.\n * @param {Object} imageData - The image data.\n * @param {Object} canvasData - The canvas data.\n * @param {Object} options - The options.\n * @returns {HTMLCanvasElement} The result canvas.\n */\n\nfunction getSourceCanvas(image, _ref6, _ref7, _ref8) {\n var imageAspectRatio = _ref6.aspectRatio,\n imageNaturalWidth = _ref6.naturalWidth,\n imageNaturalHeight = _ref6.naturalHeight,\n _ref6$rotate = _ref6.rotate,\n rotate = _ref6$rotate === void 0 ? 0 : _ref6$rotate,\n _ref6$scaleX = _ref6.scaleX,\n scaleX = _ref6$scaleX === void 0 ? 1 : _ref6$scaleX,\n _ref6$scaleY = _ref6.scaleY,\n scaleY = _ref6$scaleY === void 0 ? 1 : _ref6$scaleY;\n var aspectRatio = _ref7.aspectRatio,\n naturalWidth = _ref7.naturalWidth,\n naturalHeight = _ref7.naturalHeight;\n var _ref8$fillColor = _ref8.fillColor,\n fillColor = _ref8$fillColor === void 0 ? 'transparent' : _ref8$fillColor,\n _ref8$imageSmoothingE = _ref8.imageSmoothingEnabled,\n imageSmoothingEnabled = _ref8$imageSmoothingE === void 0 ? true : _ref8$imageSmoothingE,\n _ref8$imageSmoothingQ = _ref8.imageSmoothingQuality,\n imageSmoothingQuality = _ref8$imageSmoothingQ === void 0 ? 'low' : _ref8$imageSmoothingQ,\n _ref8$maxWidth = _ref8.maxWidth,\n maxWidth = _ref8$maxWidth === void 0 ? Infinity : _ref8$maxWidth,\n _ref8$maxHeight = _ref8.maxHeight,\n maxHeight = _ref8$maxHeight === void 0 ? Infinity : _ref8$maxHeight,\n _ref8$minWidth = _ref8.minWidth,\n minWidth = _ref8$minWidth === void 0 ? 0 : _ref8$minWidth,\n _ref8$minHeight = _ref8.minHeight,\n minHeight = _ref8$minHeight === void 0 ? 0 : _ref8$minHeight;\n var canvas = document.createElement('canvas');\n var context = canvas.getContext('2d');\n var maxSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: maxWidth,\n height: maxHeight\n });\n var minSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: minWidth,\n height: minHeight\n }, 'cover');\n var width = Math.min(maxSizes.width, Math.max(minSizes.width, naturalWidth));\n var height = Math.min(maxSizes.height, Math.max(minSizes.height, naturalHeight)); // Note: should always use image's natural sizes for drawing as\n // imageData.naturalWidth === canvasData.naturalHeight when rotate % 180 === 90\n\n var destMaxSizes = getAdjustedSizes({\n aspectRatio: imageAspectRatio,\n width: maxWidth,\n height: maxHeight\n });\n var destMinSizes = getAdjustedSizes({\n aspectRatio: imageAspectRatio,\n width: minWidth,\n height: minHeight\n }, 'cover');\n var destWidth = Math.min(destMaxSizes.width, Math.max(destMinSizes.width, imageNaturalWidth));\n var destHeight = Math.min(destMaxSizes.height, Math.max(destMinSizes.height, imageNaturalHeight));\n var params = [-destWidth / 2, -destHeight / 2, destWidth, destHeight];\n canvas.width = normalizeDecimalNumber(width);\n canvas.height = normalizeDecimalNumber(height);\n context.fillStyle = fillColor;\n context.fillRect(0, 0, width, height);\n context.save();\n context.translate(width / 2, height / 2);\n context.rotate(rotate * Math.PI / 180);\n context.scale(scaleX, scaleY);\n context.imageSmoothingEnabled = imageSmoothingEnabled;\n context.imageSmoothingQuality = imageSmoothingQuality;\n context.drawImage.apply(context, [image].concat(_toConsumableArray(params.map(function (param) {\n return Math.floor(normalizeDecimalNumber(param));\n }))));\n context.restore();\n return canvas;\n}\nvar fromCharCode = String.fromCharCode;\n/**\n * Get string from char code in data view.\n * @param {DataView} dataView - The data view for read.\n * @param {number} start - The start index.\n * @param {number} length - The read length.\n * @returns {string} The read result.\n */\n\nfunction getStringFromCharCode(dataView, start, length) {\n var str = '';\n var i;\n length += start;\n\n for (i = start; i < length; i += 1) {\n str += fromCharCode(dataView.getUint8(i));\n }\n\n return str;\n}\nvar REGEXP_DATA_URL_HEAD = /^data:.*,/;\n/**\n * Transform Data URL to array buffer.\n * @param {string} dataURL - The Data URL to transform.\n * @returns {ArrayBuffer} The result array buffer.\n */\n\nfunction dataURLToArrayBuffer(dataURL) {\n var base64 = dataURL.replace(REGEXP_DATA_URL_HEAD, '');\n var binary = atob(base64);\n var arrayBuffer = new ArrayBuffer(binary.length);\n var uint8 = new Uint8Array(arrayBuffer);\n forEach(uint8, function (value, i) {\n uint8[i] = binary.charCodeAt(i);\n });\n return arrayBuffer;\n}\n/**\n * Transform array buffer to Data URL.\n * @param {ArrayBuffer} arrayBuffer - The array buffer to transform.\n * @param {string} mimeType - The mime type of the Data URL.\n * @returns {string} The result Data URL.\n */\n\nfunction arrayBufferToDataURL(arrayBuffer, mimeType) {\n var chunks = [];\n var chunkSize = 8192;\n var uint8 = new Uint8Array(arrayBuffer);\n\n while (uint8.length > 0) {\n chunks.push(fromCharCode.apply(void 0, _toConsumableArray(uint8.subarray(0, chunkSize))));\n uint8 = uint8.subarray(chunkSize);\n }\n\n return \"data:\".concat(mimeType, \";base64,\").concat(btoa(chunks.join('')));\n}\n/**\n * Get orientation value from given array buffer.\n * @param {ArrayBuffer} arrayBuffer - The array buffer to read.\n * @returns {number} The read orientation value.\n */\n\nfunction resetAndGetOrientation(arrayBuffer) {\n var dataView = new DataView(arrayBuffer);\n var orientation; // Ignores range error when the image does not have correct Exif information\n\n try {\n var littleEndian;\n var app1Start;\n var ifdStart; // Only handle JPEG image (start by 0xFFD8)\n\n if (dataView.getUint8(0) === 0xFF && dataView.getUint8(1) === 0xD8) {\n var length = dataView.byteLength;\n var offset = 2;\n\n while (offset + 1 < length) {\n if (dataView.getUint8(offset) === 0xFF && dataView.getUint8(offset + 1) === 0xE1) {\n app1Start = offset;\n break;\n }\n\n offset += 1;\n }\n }\n\n if (app1Start) {\n var exifIDCode = app1Start + 4;\n var tiffOffset = app1Start + 10;\n\n if (getStringFromCharCode(dataView, exifIDCode, 4) === 'Exif') {\n var endianness = dataView.getUint16(tiffOffset);\n littleEndian = endianness === 0x4949;\n\n if (littleEndian || endianness === 0x4D4D\n /* bigEndian */\n ) {\n if (dataView.getUint16(tiffOffset + 2, littleEndian) === 0x002A) {\n var firstIFDOffset = dataView.getUint32(tiffOffset + 4, littleEndian);\n\n if (firstIFDOffset >= 0x00000008) {\n ifdStart = tiffOffset + firstIFDOffset;\n }\n }\n }\n }\n }\n\n if (ifdStart) {\n var _length = dataView.getUint16(ifdStart, littleEndian);\n\n var _offset;\n\n var i;\n\n for (i = 0; i < _length; i += 1) {\n _offset = ifdStart + i * 12 + 2;\n\n if (dataView.getUint16(_offset, littleEndian) === 0x0112\n /* Orientation */\n ) {\n // 8 is the offset of the current tag's value\n _offset += 8; // Get the original orientation value\n\n orientation = dataView.getUint16(_offset, littleEndian); // Override the orientation with its default value\n\n dataView.setUint16(_offset, 1, littleEndian);\n break;\n }\n }\n }\n } catch (e) {\n orientation = 1;\n }\n\n return orientation;\n}\n/**\n * Parse Exif Orientation value.\n * @param {number} orientation - The orientation to parse.\n * @returns {Object} The parsed result.\n */\n\nfunction parseOrientation(orientation) {\n var rotate = 0;\n var scaleX = 1;\n var scaleY = 1;\n\n switch (orientation) {\n // Flip horizontal\n case 2:\n scaleX = -1;\n break;\n // Rotate left 180°\n\n case 3:\n rotate = -180;\n break;\n // Flip vertical\n\n case 4:\n scaleY = -1;\n break;\n // Flip vertical and rotate right 90°\n\n case 5:\n rotate = 90;\n scaleY = -1;\n break;\n // Rotate right 90°\n\n case 6:\n rotate = 90;\n break;\n // Flip horizontal and rotate right 90°\n\n case 7:\n rotate = 90;\n scaleX = -1;\n break;\n // Rotate left 90°\n\n case 8:\n rotate = -90;\n break;\n\n default:\n }\n\n return {\n rotate: rotate,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n\nvar render = {\n render: function render() {\n this.initContainer();\n this.initCanvas();\n this.initCropBox();\n this.renderCanvas();\n\n if (this.cropped) {\n this.renderCropBox();\n }\n },\n initContainer: function initContainer() {\n var element = this.element,\n options = this.options,\n container = this.container,\n cropper = this.cropper;\n addClass(cropper, CLASS_HIDDEN);\n removeClass(element, CLASS_HIDDEN);\n var containerData = {\n width: Math.max(container.offsetWidth, Number(options.minContainerWidth) || 200),\n height: Math.max(container.offsetHeight, Number(options.minContainerHeight) || 100)\n };\n this.containerData = containerData;\n setStyle(cropper, {\n width: containerData.width,\n height: containerData.height\n });\n addClass(element, CLASS_HIDDEN);\n removeClass(cropper, CLASS_HIDDEN);\n },\n // Canvas (image wrapper)\n initCanvas: function initCanvas() {\n var containerData = this.containerData,\n imageData = this.imageData;\n var viewMode = this.options.viewMode;\n var rotated = Math.abs(imageData.rotate) % 180 === 90;\n var naturalWidth = rotated ? imageData.naturalHeight : imageData.naturalWidth;\n var naturalHeight = rotated ? imageData.naturalWidth : imageData.naturalHeight;\n var aspectRatio = naturalWidth / naturalHeight;\n var canvasWidth = containerData.width;\n var canvasHeight = containerData.height;\n\n if (containerData.height * aspectRatio > containerData.width) {\n if (viewMode === 3) {\n canvasWidth = containerData.height * aspectRatio;\n } else {\n canvasHeight = containerData.width / aspectRatio;\n }\n } else if (viewMode === 3) {\n canvasHeight = containerData.width / aspectRatio;\n } else {\n canvasWidth = containerData.height * aspectRatio;\n }\n\n var canvasData = {\n aspectRatio: aspectRatio,\n naturalWidth: naturalWidth,\n naturalHeight: naturalHeight,\n width: canvasWidth,\n height: canvasHeight\n };\n canvasData.left = (containerData.width - canvasWidth) / 2;\n canvasData.top = (containerData.height - canvasHeight) / 2;\n canvasData.oldLeft = canvasData.left;\n canvasData.oldTop = canvasData.top;\n this.canvasData = canvasData;\n this.limited = viewMode === 1 || viewMode === 2;\n this.limitCanvas(true, true);\n this.initialImageData = assign({}, imageData);\n this.initialCanvasData = assign({}, canvasData);\n },\n limitCanvas: function limitCanvas(sizeLimited, positionLimited) {\n var options = this.options,\n containerData = this.containerData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var viewMode = options.viewMode;\n var aspectRatio = canvasData.aspectRatio;\n var cropped = this.cropped && cropBoxData;\n\n if (sizeLimited) {\n var minCanvasWidth = Number(options.minCanvasWidth) || 0;\n var minCanvasHeight = Number(options.minCanvasHeight) || 0;\n\n if (viewMode > 1) {\n minCanvasWidth = Math.max(minCanvasWidth, containerData.width);\n minCanvasHeight = Math.max(minCanvasHeight, containerData.height);\n\n if (viewMode === 3) {\n if (minCanvasHeight * aspectRatio > minCanvasWidth) {\n minCanvasWidth = minCanvasHeight * aspectRatio;\n } else {\n minCanvasHeight = minCanvasWidth / aspectRatio;\n }\n }\n } else if (viewMode > 0) {\n if (minCanvasWidth) {\n minCanvasWidth = Math.max(minCanvasWidth, cropped ? cropBoxData.width : 0);\n } else if (minCanvasHeight) {\n minCanvasHeight = Math.max(minCanvasHeight, cropped ? cropBoxData.height : 0);\n } else if (cropped) {\n minCanvasWidth = cropBoxData.width;\n minCanvasHeight = cropBoxData.height;\n\n if (minCanvasHeight * aspectRatio > minCanvasWidth) {\n minCanvasWidth = minCanvasHeight * aspectRatio;\n } else {\n minCanvasHeight = minCanvasWidth / aspectRatio;\n }\n }\n }\n\n var _getAdjustedSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: minCanvasWidth,\n height: minCanvasHeight\n });\n\n minCanvasWidth = _getAdjustedSizes.width;\n minCanvasHeight = _getAdjustedSizes.height;\n canvasData.minWidth = minCanvasWidth;\n canvasData.minHeight = minCanvasHeight;\n canvasData.maxWidth = Infinity;\n canvasData.maxHeight = Infinity;\n }\n\n if (positionLimited) {\n if (viewMode > (cropped ? 0 : 1)) {\n var newCanvasLeft = containerData.width - canvasData.width;\n var newCanvasTop = containerData.height - canvasData.height;\n canvasData.minLeft = Math.min(0, newCanvasLeft);\n canvasData.minTop = Math.min(0, newCanvasTop);\n canvasData.maxLeft = Math.max(0, newCanvasLeft);\n canvasData.maxTop = Math.max(0, newCanvasTop);\n\n if (cropped && this.limited) {\n canvasData.minLeft = Math.min(cropBoxData.left, cropBoxData.left + (cropBoxData.width - canvasData.width));\n canvasData.minTop = Math.min(cropBoxData.top, cropBoxData.top + (cropBoxData.height - canvasData.height));\n canvasData.maxLeft = cropBoxData.left;\n canvasData.maxTop = cropBoxData.top;\n\n if (viewMode === 2) {\n if (canvasData.width >= containerData.width) {\n canvasData.minLeft = Math.min(0, newCanvasLeft);\n canvasData.maxLeft = Math.max(0, newCanvasLeft);\n }\n\n if (canvasData.height >= containerData.height) {\n canvasData.minTop = Math.min(0, newCanvasTop);\n canvasData.maxTop = Math.max(0, newCanvasTop);\n }\n }\n }\n } else {\n canvasData.minLeft = -canvasData.width;\n canvasData.minTop = -canvasData.height;\n canvasData.maxLeft = containerData.width;\n canvasData.maxTop = containerData.height;\n }\n }\n },\n renderCanvas: function renderCanvas(changed, transformed) {\n var canvasData = this.canvasData,\n imageData = this.imageData;\n\n if (transformed) {\n var _getRotatedSizes = getRotatedSizes({\n width: imageData.naturalWidth * Math.abs(imageData.scaleX || 1),\n height: imageData.naturalHeight * Math.abs(imageData.scaleY || 1),\n degree: imageData.rotate || 0\n }),\n naturalWidth = _getRotatedSizes.width,\n naturalHeight = _getRotatedSizes.height;\n\n var width = canvasData.width * (naturalWidth / canvasData.naturalWidth);\n var height = canvasData.height * (naturalHeight / canvasData.naturalHeight);\n canvasData.left -= (width - canvasData.width) / 2;\n canvasData.top -= (height - canvasData.height) / 2;\n canvasData.width = width;\n canvasData.height = height;\n canvasData.aspectRatio = naturalWidth / naturalHeight;\n canvasData.naturalWidth = naturalWidth;\n canvasData.naturalHeight = naturalHeight;\n this.limitCanvas(true, false);\n }\n\n if (canvasData.width > canvasData.maxWidth || canvasData.width < canvasData.minWidth) {\n canvasData.left = canvasData.oldLeft;\n }\n\n if (canvasData.height > canvasData.maxHeight || canvasData.height < canvasData.minHeight) {\n canvasData.top = canvasData.oldTop;\n }\n\n canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth);\n canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight);\n this.limitCanvas(false, true);\n canvasData.left = Math.min(Math.max(canvasData.left, canvasData.minLeft), canvasData.maxLeft);\n canvasData.top = Math.min(Math.max(canvasData.top, canvasData.minTop), canvasData.maxTop);\n canvasData.oldLeft = canvasData.left;\n canvasData.oldTop = canvasData.top;\n setStyle(this.canvas, assign({\n width: canvasData.width,\n height: canvasData.height\n }, getTransforms({\n translateX: canvasData.left,\n translateY: canvasData.top\n })));\n this.renderImage(changed);\n\n if (this.cropped && this.limited) {\n this.limitCropBox(true, true);\n }\n },\n renderImage: function renderImage(changed) {\n var canvasData = this.canvasData,\n imageData = this.imageData;\n var width = imageData.naturalWidth * (canvasData.width / canvasData.naturalWidth);\n var height = imageData.naturalHeight * (canvasData.height / canvasData.naturalHeight);\n assign(imageData, {\n width: width,\n height: height,\n left: (canvasData.width - width) / 2,\n top: (canvasData.height - height) / 2\n });\n setStyle(this.image, assign({\n width: imageData.width,\n height: imageData.height\n }, getTransforms(assign({\n translateX: imageData.left,\n translateY: imageData.top\n }, imageData))));\n\n if (changed) {\n this.output();\n }\n },\n initCropBox: function initCropBox() {\n var options = this.options,\n canvasData = this.canvasData;\n var aspectRatio = options.aspectRatio || options.initialAspectRatio;\n var autoCropArea = Number(options.autoCropArea) || 0.8;\n var cropBoxData = {\n width: canvasData.width,\n height: canvasData.height\n };\n\n if (aspectRatio) {\n if (canvasData.height * aspectRatio > canvasData.width) {\n cropBoxData.height = cropBoxData.width / aspectRatio;\n } else {\n cropBoxData.width = cropBoxData.height * aspectRatio;\n }\n }\n\n this.cropBoxData = cropBoxData;\n this.limitCropBox(true, true); // Initialize auto crop area\n\n cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth);\n cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight); // The width/height of auto crop area must large than \"minWidth/Height\"\n\n cropBoxData.width = Math.max(cropBoxData.minWidth, cropBoxData.width * autoCropArea);\n cropBoxData.height = Math.max(cropBoxData.minHeight, cropBoxData.height * autoCropArea);\n cropBoxData.left = canvasData.left + (canvasData.width - cropBoxData.width) / 2;\n cropBoxData.top = canvasData.top + (canvasData.height - cropBoxData.height) / 2;\n cropBoxData.oldLeft = cropBoxData.left;\n cropBoxData.oldTop = cropBoxData.top;\n this.initialCropBoxData = assign({}, cropBoxData);\n },\n limitCropBox: function limitCropBox(sizeLimited, positionLimited) {\n var options = this.options,\n containerData = this.containerData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData,\n limited = this.limited;\n var aspectRatio = options.aspectRatio;\n\n if (sizeLimited) {\n var minCropBoxWidth = Number(options.minCropBoxWidth) || 0;\n var minCropBoxHeight = Number(options.minCropBoxHeight) || 0;\n var maxCropBoxWidth = limited ? Math.min(containerData.width, canvasData.width, canvasData.width + canvasData.left, containerData.width - canvasData.left) : containerData.width;\n var maxCropBoxHeight = limited ? Math.min(containerData.height, canvasData.height, canvasData.height + canvasData.top, containerData.height - canvasData.top) : containerData.height; // The min/maxCropBoxWidth/Height must be less than container's width/height\n\n minCropBoxWidth = Math.min(minCropBoxWidth, containerData.width);\n minCropBoxHeight = Math.min(minCropBoxHeight, containerData.height);\n\n if (aspectRatio) {\n if (minCropBoxWidth && minCropBoxHeight) {\n if (minCropBoxHeight * aspectRatio > minCropBoxWidth) {\n minCropBoxHeight = minCropBoxWidth / aspectRatio;\n } else {\n minCropBoxWidth = minCropBoxHeight * aspectRatio;\n }\n } else if (minCropBoxWidth) {\n minCropBoxHeight = minCropBoxWidth / aspectRatio;\n } else if (minCropBoxHeight) {\n minCropBoxWidth = minCropBoxHeight * aspectRatio;\n }\n\n if (maxCropBoxHeight * aspectRatio > maxCropBoxWidth) {\n maxCropBoxHeight = maxCropBoxWidth / aspectRatio;\n } else {\n maxCropBoxWidth = maxCropBoxHeight * aspectRatio;\n }\n } // The minWidth/Height must be less than maxWidth/Height\n\n\n cropBoxData.minWidth = Math.min(minCropBoxWidth, maxCropBoxWidth);\n cropBoxData.minHeight = Math.min(minCropBoxHeight, maxCropBoxHeight);\n cropBoxData.maxWidth = maxCropBoxWidth;\n cropBoxData.maxHeight = maxCropBoxHeight;\n }\n\n if (positionLimited) {\n if (limited) {\n cropBoxData.minLeft = Math.max(0, canvasData.left);\n cropBoxData.minTop = Math.max(0, canvasData.top);\n cropBoxData.maxLeft = Math.min(containerData.width, canvasData.left + canvasData.width) - cropBoxData.width;\n cropBoxData.maxTop = Math.min(containerData.height, canvasData.top + canvasData.height) - cropBoxData.height;\n } else {\n cropBoxData.minLeft = 0;\n cropBoxData.minTop = 0;\n cropBoxData.maxLeft = containerData.width - cropBoxData.width;\n cropBoxData.maxTop = containerData.height - cropBoxData.height;\n }\n }\n },\n renderCropBox: function renderCropBox() {\n var options = this.options,\n containerData = this.containerData,\n cropBoxData = this.cropBoxData;\n\n if (cropBoxData.width > cropBoxData.maxWidth || cropBoxData.width < cropBoxData.minWidth) {\n cropBoxData.left = cropBoxData.oldLeft;\n }\n\n if (cropBoxData.height > cropBoxData.maxHeight || cropBoxData.height < cropBoxData.minHeight) {\n cropBoxData.top = cropBoxData.oldTop;\n }\n\n cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth);\n cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight);\n this.limitCropBox(false, true);\n cropBoxData.left = Math.min(Math.max(cropBoxData.left, cropBoxData.minLeft), cropBoxData.maxLeft);\n cropBoxData.top = Math.min(Math.max(cropBoxData.top, cropBoxData.minTop), cropBoxData.maxTop);\n cropBoxData.oldLeft = cropBoxData.left;\n cropBoxData.oldTop = cropBoxData.top;\n\n if (options.movable && options.cropBoxMovable) {\n // Turn to move the canvas when the crop box is equal to the container\n setData(this.face, DATA_ACTION, cropBoxData.width >= containerData.width && cropBoxData.height >= containerData.height ? ACTION_MOVE : ACTION_ALL);\n }\n\n setStyle(this.cropBox, assign({\n width: cropBoxData.width,\n height: cropBoxData.height\n }, getTransforms({\n translateX: cropBoxData.left,\n translateY: cropBoxData.top\n })));\n\n if (this.cropped && this.limited) {\n this.limitCanvas(true, true);\n }\n\n if (!this.disabled) {\n this.output();\n }\n },\n output: function output() {\n this.preview();\n dispatchEvent(this.element, EVENT_CROP, this.getData());\n }\n};\n\nvar preview = {\n initPreview: function initPreview() {\n var crossOrigin = this.crossOrigin;\n var preview = this.options.preview;\n var url = crossOrigin ? this.crossOriginUrl : this.url;\n var image = document.createElement('img');\n\n if (crossOrigin) {\n image.crossOrigin = crossOrigin;\n }\n\n image.src = url;\n this.viewBox.appendChild(image);\n this.viewBoxImage = image;\n\n if (!preview) {\n return;\n }\n\n var previews = preview;\n\n if (typeof preview === 'string') {\n previews = this.element.ownerDocument.querySelectorAll(preview);\n } else if (preview.querySelector) {\n previews = [preview];\n }\n\n this.previews = previews;\n forEach(previews, function (el) {\n var img = document.createElement('img'); // Save the original size for recover\n\n setData(el, DATA_PREVIEW, {\n width: el.offsetWidth,\n height: el.offsetHeight,\n html: el.innerHTML\n });\n\n if (crossOrigin) {\n img.crossOrigin = crossOrigin;\n }\n\n img.src = url;\n /**\n * Override img element styles\n * Add `display:block` to avoid margin top issue\n * Add `height:auto` to override `height` attribute on IE8\n * (Occur only when margin-top <= -height)\n */\n\n img.style.cssText = 'display:block;' + 'width:100%;' + 'height:auto;' + 'min-width:0!important;' + 'min-height:0!important;' + 'max-width:none!important;' + 'max-height:none!important;' + 'image-orientation:0deg!important;\"';\n el.innerHTML = '';\n el.appendChild(img);\n });\n },\n resetPreview: function resetPreview() {\n forEach(this.previews, function (element) {\n var data = getData(element, DATA_PREVIEW);\n setStyle(element, {\n width: data.width,\n height: data.height\n });\n element.innerHTML = data.html;\n removeData(element, DATA_PREVIEW);\n });\n },\n preview: function preview() {\n var imageData = this.imageData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var cropBoxWidth = cropBoxData.width,\n cropBoxHeight = cropBoxData.height;\n var width = imageData.width,\n height = imageData.height;\n var left = cropBoxData.left - canvasData.left - imageData.left;\n var top = cropBoxData.top - canvasData.top - imageData.top;\n\n if (!this.cropped || this.disabled) {\n return;\n }\n\n setStyle(this.viewBoxImage, assign({\n width: width,\n height: height\n }, getTransforms(assign({\n translateX: -left,\n translateY: -top\n }, imageData))));\n forEach(this.previews, function (element) {\n var data = getData(element, DATA_PREVIEW);\n var originalWidth = data.width;\n var originalHeight = data.height;\n var newWidth = originalWidth;\n var newHeight = originalHeight;\n var ratio = 1;\n\n if (cropBoxWidth) {\n ratio = originalWidth / cropBoxWidth;\n newHeight = cropBoxHeight * ratio;\n }\n\n if (cropBoxHeight && newHeight > originalHeight) {\n ratio = originalHeight / cropBoxHeight;\n newWidth = cropBoxWidth * ratio;\n newHeight = originalHeight;\n }\n\n setStyle(element, {\n width: newWidth,\n height: newHeight\n });\n setStyle(element.getElementsByTagName('img')[0], assign({\n width: width * ratio,\n height: height * ratio\n }, getTransforms(assign({\n translateX: -left * ratio,\n translateY: -top * ratio\n }, imageData))));\n });\n }\n};\n\nvar events = {\n bind: function bind() {\n var element = this.element,\n options = this.options,\n cropper = this.cropper;\n\n if (isFunction(options.cropstart)) {\n addListener(element, EVENT_CROP_START, options.cropstart);\n }\n\n if (isFunction(options.cropmove)) {\n addListener(element, EVENT_CROP_MOVE, options.cropmove);\n }\n\n if (isFunction(options.cropend)) {\n addListener(element, EVENT_CROP_END, options.cropend);\n }\n\n if (isFunction(options.crop)) {\n addListener(element, EVENT_CROP, options.crop);\n }\n\n if (isFunction(options.zoom)) {\n addListener(element, EVENT_ZOOM, options.zoom);\n }\n\n addListener(cropper, EVENT_POINTER_DOWN, this.onCropStart = this.cropStart.bind(this));\n\n if (options.zoomable && options.zoomOnWheel) {\n addListener(cropper, EVENT_WHEEL, this.onWheel = this.wheel.bind(this));\n }\n\n if (options.toggleDragModeOnDblclick) {\n addListener(cropper, EVENT_DBLCLICK, this.onDblclick = this.dblclick.bind(this));\n }\n\n addListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove = this.cropMove.bind(this));\n addListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd = this.cropEnd.bind(this));\n\n if (options.responsive) {\n addListener(window, EVENT_RESIZE, this.onResize = this.resize.bind(this));\n }\n },\n unbind: function unbind() {\n var element = this.element,\n options = this.options,\n cropper = this.cropper;\n\n if (isFunction(options.cropstart)) {\n removeListener(element, EVENT_CROP_START, options.cropstart);\n }\n\n if (isFunction(options.cropmove)) {\n removeListener(element, EVENT_CROP_MOVE, options.cropmove);\n }\n\n if (isFunction(options.cropend)) {\n removeListener(element, EVENT_CROP_END, options.cropend);\n }\n\n if (isFunction(options.crop)) {\n removeListener(element, EVENT_CROP, options.crop);\n }\n\n if (isFunction(options.zoom)) {\n removeListener(element, EVENT_ZOOM, options.zoom);\n }\n\n removeListener(cropper, EVENT_POINTER_DOWN, this.onCropStart);\n\n if (options.zoomable && options.zoomOnWheel) {\n removeListener(cropper, EVENT_WHEEL, this.onWheel);\n }\n\n if (options.toggleDragModeOnDblclick) {\n removeListener(cropper, EVENT_DBLCLICK, this.onDblclick);\n }\n\n removeListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove);\n removeListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd);\n\n if (options.responsive) {\n removeListener(window, EVENT_RESIZE, this.onResize);\n }\n }\n};\n\nvar handlers = {\n resize: function resize() {\n var options = this.options,\n container = this.container,\n containerData = this.containerData;\n var minContainerWidth = Number(options.minContainerWidth) || 200;\n var minContainerHeight = Number(options.minContainerHeight) || 100;\n\n if (this.disabled || containerData.width <= minContainerWidth || containerData.height <= minContainerHeight) {\n return;\n }\n\n var ratio = container.offsetWidth / containerData.width; // Resize when width changed or height changed\n\n if (ratio !== 1 || container.offsetHeight !== containerData.height) {\n var canvasData;\n var cropBoxData;\n\n if (options.restore) {\n canvasData = this.getCanvasData();\n cropBoxData = this.getCropBoxData();\n }\n\n this.render();\n\n if (options.restore) {\n this.setCanvasData(forEach(canvasData, function (n, i) {\n canvasData[i] = n * ratio;\n }));\n this.setCropBoxData(forEach(cropBoxData, function (n, i) {\n cropBoxData[i] = n * ratio;\n }));\n }\n }\n },\n dblclick: function dblclick() {\n if (this.disabled || this.options.dragMode === DRAG_MODE_NONE) {\n return;\n }\n\n this.setDragMode(hasClass(this.dragBox, CLASS_CROP) ? DRAG_MODE_MOVE : DRAG_MODE_CROP);\n },\n wheel: function wheel(e) {\n var _this = this;\n\n var ratio = Number(this.options.wheelZoomRatio) || 0.1;\n var delta = 1;\n\n if (this.disabled) {\n return;\n }\n\n e.preventDefault(); // Limit wheel speed to prevent zoom too fast (#21)\n\n if (this.wheeling) {\n return;\n }\n\n this.wheeling = true;\n setTimeout(function () {\n _this.wheeling = false;\n }, 50);\n\n if (e.deltaY) {\n delta = e.deltaY > 0 ? 1 : -1;\n } else if (e.wheelDelta) {\n delta = -e.wheelDelta / 120;\n } else if (e.detail) {\n delta = e.detail > 0 ? 1 : -1;\n }\n\n this.zoom(-delta * ratio, e);\n },\n cropStart: function cropStart(e) {\n if (this.disabled) {\n return;\n }\n\n var options = this.options,\n pointers = this.pointers;\n var action;\n\n if (e.changedTouches) {\n // Handle touch event\n forEach(e.changedTouches, function (touch) {\n pointers[touch.identifier] = getPointer(touch);\n });\n } else {\n // Handle mouse event and pointer event\n pointers[e.pointerId || 0] = getPointer(e);\n }\n\n if (Object.keys(pointers).length > 1 && options.zoomable && options.zoomOnTouch) {\n action = ACTION_ZOOM;\n } else {\n action = getData(e.target, DATA_ACTION);\n }\n\n if (!REGEXP_ACTIONS.test(action)) {\n return;\n }\n\n if (dispatchEvent(this.element, EVENT_CROP_START, {\n originalEvent: e,\n action: action\n }) === false) {\n return;\n } // This line is required for preventing page zooming in iOS browsers\n\n\n e.preventDefault();\n this.action = action;\n this.cropping = false;\n\n if (action === ACTION_CROP) {\n this.cropping = true;\n addClass(this.dragBox, CLASS_MODAL);\n }\n },\n cropMove: function cropMove(e) {\n var action = this.action;\n\n if (this.disabled || !action) {\n return;\n }\n\n var pointers = this.pointers;\n e.preventDefault();\n\n if (dispatchEvent(this.element, EVENT_CROP_MOVE, {\n originalEvent: e,\n action: action\n }) === false) {\n return;\n }\n\n if (e.changedTouches) {\n forEach(e.changedTouches, function (touch) {\n // The first parameter should not be undefined (#432)\n assign(pointers[touch.identifier] || {}, getPointer(touch, true));\n });\n } else {\n assign(pointers[e.pointerId || 0] || {}, getPointer(e, true));\n }\n\n this.change(e);\n },\n cropEnd: function cropEnd(e) {\n if (this.disabled) {\n return;\n }\n\n var action = this.action,\n pointers = this.pointers;\n\n if (e.changedTouches) {\n forEach(e.changedTouches, function (touch) {\n delete pointers[touch.identifier];\n });\n } else {\n delete pointers[e.pointerId || 0];\n }\n\n if (!action) {\n return;\n }\n\n e.preventDefault();\n\n if (!Object.keys(pointers).length) {\n this.action = '';\n }\n\n if (this.cropping) {\n this.cropping = false;\n toggleClass(this.dragBox, CLASS_MODAL, this.cropped && this.options.modal);\n }\n\n dispatchEvent(this.element, EVENT_CROP_END, {\n originalEvent: e,\n action: action\n });\n }\n};\n\nvar change = {\n change: function change(e) {\n var options = this.options,\n canvasData = this.canvasData,\n containerData = this.containerData,\n cropBoxData = this.cropBoxData,\n pointers = this.pointers;\n var action = this.action;\n var aspectRatio = options.aspectRatio;\n var left = cropBoxData.left,\n top = cropBoxData.top,\n width = cropBoxData.width,\n height = cropBoxData.height;\n var right = left + width;\n var bottom = top + height;\n var minLeft = 0;\n var minTop = 0;\n var maxWidth = containerData.width;\n var maxHeight = containerData.height;\n var renderable = true;\n var offset; // Locking aspect ratio in \"free mode\" by holding shift key\n\n if (!aspectRatio && e.shiftKey) {\n aspectRatio = width && height ? width / height : 1;\n }\n\n if (this.limited) {\n minLeft = cropBoxData.minLeft;\n minTop = cropBoxData.minTop;\n maxWidth = minLeft + Math.min(containerData.width, canvasData.width, canvasData.left + canvasData.width);\n maxHeight = minTop + Math.min(containerData.height, canvasData.height, canvasData.top + canvasData.height);\n }\n\n var pointer = pointers[Object.keys(pointers)[0]];\n var range = {\n x: pointer.endX - pointer.startX,\n y: pointer.endY - pointer.startY\n };\n\n var check = function check(side) {\n switch (side) {\n case ACTION_EAST:\n if (right + range.x > maxWidth) {\n range.x = maxWidth - right;\n }\n\n break;\n\n case ACTION_WEST:\n if (left + range.x < minLeft) {\n range.x = minLeft - left;\n }\n\n break;\n\n case ACTION_NORTH:\n if (top + range.y < minTop) {\n range.y = minTop - top;\n }\n\n break;\n\n case ACTION_SOUTH:\n if (bottom + range.y > maxHeight) {\n range.y = maxHeight - bottom;\n }\n\n break;\n\n default:\n }\n };\n\n switch (action) {\n // Move crop box\n case ACTION_ALL:\n left += range.x;\n top += range.y;\n break;\n // Resize crop box\n\n case ACTION_EAST:\n if (range.x >= 0 && (right >= maxWidth || aspectRatio && (top <= minTop || bottom >= maxHeight))) {\n renderable = false;\n break;\n }\n\n check(ACTION_EAST);\n width += range.x;\n\n if (width < 0) {\n action = ACTION_WEST;\n width = -width;\n left -= width;\n }\n\n if (aspectRatio) {\n height = width / aspectRatio;\n top += (cropBoxData.height - height) / 2;\n }\n\n break;\n\n case ACTION_NORTH:\n if (range.y <= 0 && (top <= minTop || aspectRatio && (left <= minLeft || right >= maxWidth))) {\n renderable = false;\n break;\n }\n\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n\n if (height < 0) {\n action = ACTION_SOUTH;\n height = -height;\n top -= height;\n }\n\n if (aspectRatio) {\n width = height * aspectRatio;\n left += (cropBoxData.width - width) / 2;\n }\n\n break;\n\n case ACTION_WEST:\n if (range.x <= 0 && (left <= minLeft || aspectRatio && (top <= minTop || bottom >= maxHeight))) {\n renderable = false;\n break;\n }\n\n check(ACTION_WEST);\n width -= range.x;\n left += range.x;\n\n if (width < 0) {\n action = ACTION_EAST;\n width = -width;\n left -= width;\n }\n\n if (aspectRatio) {\n height = width / aspectRatio;\n top += (cropBoxData.height - height) / 2;\n }\n\n break;\n\n case ACTION_SOUTH:\n if (range.y >= 0 && (bottom >= maxHeight || aspectRatio && (left <= minLeft || right >= maxWidth))) {\n renderable = false;\n break;\n }\n\n check(ACTION_SOUTH);\n height += range.y;\n\n if (height < 0) {\n action = ACTION_NORTH;\n height = -height;\n top -= height;\n }\n\n if (aspectRatio) {\n width = height * aspectRatio;\n left += (cropBoxData.width - width) / 2;\n }\n\n break;\n\n case ACTION_NORTH_EAST:\n if (aspectRatio) {\n if (range.y <= 0 && (top <= minTop || right >= maxWidth)) {\n renderable = false;\n break;\n }\n\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n width = height * aspectRatio;\n } else {\n check(ACTION_NORTH);\n check(ACTION_EAST);\n\n if (range.x >= 0) {\n if (right < maxWidth) {\n width += range.x;\n } else if (range.y <= 0 && top <= minTop) {\n renderable = false;\n }\n } else {\n width += range.x;\n }\n\n if (range.y <= 0) {\n if (top > minTop) {\n height -= range.y;\n top += range.y;\n }\n } else {\n height -= range.y;\n top += range.y;\n }\n }\n\n if (width < 0 && height < 0) {\n action = ACTION_SOUTH_WEST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_NORTH_WEST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_SOUTH_EAST;\n height = -height;\n top -= height;\n }\n\n break;\n\n case ACTION_NORTH_WEST:\n if (aspectRatio) {\n if (range.y <= 0 && (top <= minTop || left <= minLeft)) {\n renderable = false;\n break;\n }\n\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n width = height * aspectRatio;\n left += cropBoxData.width - width;\n } else {\n check(ACTION_NORTH);\n check(ACTION_WEST);\n\n if (range.x <= 0) {\n if (left > minLeft) {\n width -= range.x;\n left += range.x;\n } else if (range.y <= 0 && top <= minTop) {\n renderable = false;\n }\n } else {\n width -= range.x;\n left += range.x;\n }\n\n if (range.y <= 0) {\n if (top > minTop) {\n height -= range.y;\n top += range.y;\n }\n } else {\n height -= range.y;\n top += range.y;\n }\n }\n\n if (width < 0 && height < 0) {\n action = ACTION_SOUTH_EAST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_NORTH_EAST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_SOUTH_WEST;\n height = -height;\n top -= height;\n }\n\n break;\n\n case ACTION_SOUTH_WEST:\n if (aspectRatio) {\n if (range.x <= 0 && (left <= minLeft || bottom >= maxHeight)) {\n renderable = false;\n break;\n }\n\n check(ACTION_WEST);\n width -= range.x;\n left += range.x;\n height = width / aspectRatio;\n } else {\n check(ACTION_SOUTH);\n check(ACTION_WEST);\n\n if (range.x <= 0) {\n if (left > minLeft) {\n width -= range.x;\n left += range.x;\n } else if (range.y >= 0 && bottom >= maxHeight) {\n renderable = false;\n }\n } else {\n width -= range.x;\n left += range.x;\n }\n\n if (range.y >= 0) {\n if (bottom < maxHeight) {\n height += range.y;\n }\n } else {\n height += range.y;\n }\n }\n\n if (width < 0 && height < 0) {\n action = ACTION_NORTH_EAST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_SOUTH_EAST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_NORTH_WEST;\n height = -height;\n top -= height;\n }\n\n break;\n\n case ACTION_SOUTH_EAST:\n if (aspectRatio) {\n if (range.x >= 0 && (right >= maxWidth || bottom >= maxHeight)) {\n renderable = false;\n break;\n }\n\n check(ACTION_EAST);\n width += range.x;\n height = width / aspectRatio;\n } else {\n check(ACTION_SOUTH);\n check(ACTION_EAST);\n\n if (range.x >= 0) {\n if (right < maxWidth) {\n width += range.x;\n } else if (range.y >= 0 && bottom >= maxHeight) {\n renderable = false;\n }\n } else {\n width += range.x;\n }\n\n if (range.y >= 0) {\n if (bottom < maxHeight) {\n height += range.y;\n }\n } else {\n height += range.y;\n }\n }\n\n if (width < 0 && height < 0) {\n action = ACTION_NORTH_WEST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_SOUTH_WEST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_NORTH_EAST;\n height = -height;\n top -= height;\n }\n\n break;\n // Move canvas\n\n case ACTION_MOVE:\n this.move(range.x, range.y);\n renderable = false;\n break;\n // Zoom canvas\n\n case ACTION_ZOOM:\n this.zoom(getMaxZoomRatio(pointers), e);\n renderable = false;\n break;\n // Create crop box\n\n case ACTION_CROP:\n if (!range.x || !range.y) {\n renderable = false;\n break;\n }\n\n offset = getOffset(this.cropper);\n left = pointer.startX - offset.left;\n top = pointer.startY - offset.top;\n width = cropBoxData.minWidth;\n height = cropBoxData.minHeight;\n\n if (range.x > 0) {\n action = range.y > 0 ? ACTION_SOUTH_EAST : ACTION_NORTH_EAST;\n } else if (range.x < 0) {\n left -= width;\n action = range.y > 0 ? ACTION_SOUTH_WEST : ACTION_NORTH_WEST;\n }\n\n if (range.y < 0) {\n top -= height;\n } // Show the crop box if is hidden\n\n\n if (!this.cropped) {\n removeClass(this.cropBox, CLASS_HIDDEN);\n this.cropped = true;\n\n if (this.limited) {\n this.limitCropBox(true, true);\n }\n }\n\n break;\n\n default:\n }\n\n if (renderable) {\n cropBoxData.width = width;\n cropBoxData.height = height;\n cropBoxData.left = left;\n cropBoxData.top = top;\n this.action = action;\n this.renderCropBox();\n } // Override\n\n\n forEach(pointers, function (p) {\n p.startX = p.endX;\n p.startY = p.endY;\n });\n }\n};\n\nvar methods = {\n // Show the crop box manually\n crop: function crop() {\n if (this.ready && !this.cropped && !this.disabled) {\n this.cropped = true;\n this.limitCropBox(true, true);\n\n if (this.options.modal) {\n addClass(this.dragBox, CLASS_MODAL);\n }\n\n removeClass(this.cropBox, CLASS_HIDDEN);\n this.setCropBoxData(this.initialCropBoxData);\n }\n\n return this;\n },\n // Reset the image and crop box to their initial states\n reset: function reset() {\n if (this.ready && !this.disabled) {\n this.imageData = assign({}, this.initialImageData);\n this.canvasData = assign({}, this.initialCanvasData);\n this.cropBoxData = assign({}, this.initialCropBoxData);\n this.renderCanvas();\n\n if (this.cropped) {\n this.renderCropBox();\n }\n }\n\n return this;\n },\n // Clear the crop box\n clear: function clear() {\n if (this.cropped && !this.disabled) {\n assign(this.cropBoxData, {\n left: 0,\n top: 0,\n width: 0,\n height: 0\n });\n this.cropped = false;\n this.renderCropBox();\n this.limitCanvas(true, true); // Render canvas after crop box rendered\n\n this.renderCanvas();\n removeClass(this.dragBox, CLASS_MODAL);\n addClass(this.cropBox, CLASS_HIDDEN);\n }\n\n return this;\n },\n\n /**\n * Replace the image's src and rebuild the cropper\n * @param {string} url - The new URL.\n * @param {boolean} [hasSameSize] - Indicate if the new image has the same size as the old one.\n * @returns {Cropper} this\n */\n replace: function replace(url) {\n var hasSameSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n if (!this.disabled && url) {\n if (this.isImg) {\n this.element.src = url;\n }\n\n if (hasSameSize) {\n this.url = url;\n this.image.src = url;\n\n if (this.ready) {\n this.viewBoxImage.src = url;\n forEach(this.previews, function (element) {\n element.getElementsByTagName('img')[0].src = url;\n });\n }\n } else {\n if (this.isImg) {\n this.replaced = true;\n }\n\n this.options.data = null;\n this.uncreate();\n this.load(url);\n }\n }\n\n return this;\n },\n // Enable (unfreeze) the cropper\n enable: function enable() {\n if (this.ready && this.disabled) {\n this.disabled = false;\n removeClass(this.cropper, CLASS_DISABLED);\n }\n\n return this;\n },\n // Disable (freeze) the cropper\n disable: function disable() {\n if (this.ready && !this.disabled) {\n this.disabled = true;\n addClass(this.cropper, CLASS_DISABLED);\n }\n\n return this;\n },\n\n /**\n * Destroy the cropper and remove the instance from the image\n * @returns {Cropper} this\n */\n destroy: function destroy() {\n var element = this.element;\n\n if (!element[NAMESPACE]) {\n return this;\n }\n\n element[NAMESPACE] = undefined;\n\n if (this.isImg && this.replaced) {\n element.src = this.originalUrl;\n }\n\n this.uncreate();\n return this;\n },\n\n /**\n * Move the canvas with relative offsets\n * @param {number} offsetX - The relative offset distance on the x-axis.\n * @param {number} [offsetY=offsetX] - The relative offset distance on the y-axis.\n * @returns {Cropper} this\n */\n move: function move(offsetX) {\n var offsetY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : offsetX;\n var _this$canvasData = this.canvasData,\n left = _this$canvasData.left,\n top = _this$canvasData.top;\n return this.moveTo(isUndefined(offsetX) ? offsetX : left + Number(offsetX), isUndefined(offsetY) ? offsetY : top + Number(offsetY));\n },\n\n /**\n * Move the canvas to an absolute point\n * @param {number} x - The x-axis coordinate.\n * @param {number} [y=x] - The y-axis coordinate.\n * @returns {Cropper} this\n */\n moveTo: function moveTo(x) {\n var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : x;\n var canvasData = this.canvasData;\n var changed = false;\n x = Number(x);\n y = Number(y);\n\n if (this.ready && !this.disabled && this.options.movable) {\n if (isNumber(x)) {\n canvasData.left = x;\n changed = true;\n }\n\n if (isNumber(y)) {\n canvasData.top = y;\n changed = true;\n }\n\n if (changed) {\n this.renderCanvas(true);\n }\n }\n\n return this;\n },\n\n /**\n * Zoom the canvas with a relative ratio\n * @param {number} ratio - The target ratio.\n * @param {Event} _originalEvent - The original event if any.\n * @returns {Cropper} this\n */\n zoom: function zoom(ratio, _originalEvent) {\n var canvasData = this.canvasData;\n ratio = Number(ratio);\n\n if (ratio < 0) {\n ratio = 1 / (1 - ratio);\n } else {\n ratio = 1 + ratio;\n }\n\n return this.zoomTo(canvasData.width * ratio / canvasData.naturalWidth, null, _originalEvent);\n },\n\n /**\n * Zoom the canvas to an absolute ratio\n * @param {number} ratio - The target ratio.\n * @param {Object} pivot - The zoom pivot point coordinate.\n * @param {Event} _originalEvent - The original event if any.\n * @returns {Cropper} this\n */\n zoomTo: function zoomTo(ratio, pivot, _originalEvent) {\n var options = this.options,\n canvasData = this.canvasData;\n var width = canvasData.width,\n height = canvasData.height,\n naturalWidth = canvasData.naturalWidth,\n naturalHeight = canvasData.naturalHeight;\n ratio = Number(ratio);\n\n if (ratio >= 0 && this.ready && !this.disabled && options.zoomable) {\n var newWidth = naturalWidth * ratio;\n var newHeight = naturalHeight * ratio;\n\n if (dispatchEvent(this.element, EVENT_ZOOM, {\n ratio: ratio,\n oldRatio: width / naturalWidth,\n originalEvent: _originalEvent\n }) === false) {\n return this;\n }\n\n if (_originalEvent) {\n var pointers = this.pointers;\n var offset = getOffset(this.cropper);\n var center = pointers && Object.keys(pointers).length ? getPointersCenter(pointers) : {\n pageX: _originalEvent.pageX,\n pageY: _originalEvent.pageY\n }; // Zoom from the triggering point of the event\n\n canvasData.left -= (newWidth - width) * ((center.pageX - offset.left - canvasData.left) / width);\n canvasData.top -= (newHeight - height) * ((center.pageY - offset.top - canvasData.top) / height);\n } else if (isPlainObject(pivot) && isNumber(pivot.x) && isNumber(pivot.y)) {\n canvasData.left -= (newWidth - width) * ((pivot.x - canvasData.left) / width);\n canvasData.top -= (newHeight - height) * ((pivot.y - canvasData.top) / height);\n } else {\n // Zoom from the center of the canvas\n canvasData.left -= (newWidth - width) / 2;\n canvasData.top -= (newHeight - height) / 2;\n }\n\n canvasData.width = newWidth;\n canvasData.height = newHeight;\n this.renderCanvas(true);\n }\n\n return this;\n },\n\n /**\n * Rotate the canvas with a relative degree\n * @param {number} degree - The rotate degree.\n * @returns {Cropper} this\n */\n rotate: function rotate(degree) {\n return this.rotateTo((this.imageData.rotate || 0) + Number(degree));\n },\n\n /**\n * Rotate the canvas to an absolute degree\n * @param {number} degree - The rotate degree.\n * @returns {Cropper} this\n */\n rotateTo: function rotateTo(degree) {\n degree = Number(degree);\n\n if (isNumber(degree) && this.ready && !this.disabled && this.options.rotatable) {\n this.imageData.rotate = degree % 360;\n this.renderCanvas(true, true);\n }\n\n return this;\n },\n\n /**\n * Scale the image on the x-axis.\n * @param {number} scaleX - The scale ratio on the x-axis.\n * @returns {Cropper} this\n */\n scaleX: function scaleX(_scaleX) {\n var scaleY = this.imageData.scaleY;\n return this.scale(_scaleX, isNumber(scaleY) ? scaleY : 1);\n },\n\n /**\n * Scale the image on the y-axis.\n * @param {number} scaleY - The scale ratio on the y-axis.\n * @returns {Cropper} this\n */\n scaleY: function scaleY(_scaleY) {\n var scaleX = this.imageData.scaleX;\n return this.scale(isNumber(scaleX) ? scaleX : 1, _scaleY);\n },\n\n /**\n * Scale the image\n * @param {number} scaleX - The scale ratio on the x-axis.\n * @param {number} [scaleY=scaleX] - The scale ratio on the y-axis.\n * @returns {Cropper} this\n */\n scale: function scale(scaleX) {\n var scaleY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : scaleX;\n var imageData = this.imageData;\n var transformed = false;\n scaleX = Number(scaleX);\n scaleY = Number(scaleY);\n\n if (this.ready && !this.disabled && this.options.scalable) {\n if (isNumber(scaleX)) {\n imageData.scaleX = scaleX;\n transformed = true;\n }\n\n if (isNumber(scaleY)) {\n imageData.scaleY = scaleY;\n transformed = true;\n }\n\n if (transformed) {\n this.renderCanvas(true, true);\n }\n }\n\n return this;\n },\n\n /**\n * Get the cropped area position and size data (base on the original image)\n * @param {boolean} [rounded=false] - Indicate if round the data values or not.\n * @returns {Object} The result cropped data.\n */\n getData: function getData$$1() {\n var rounded = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var options = this.options,\n imageData = this.imageData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var data;\n\n if (this.ready && this.cropped) {\n data = {\n x: cropBoxData.left - canvasData.left,\n y: cropBoxData.top - canvasData.top,\n width: cropBoxData.width,\n height: cropBoxData.height\n };\n var ratio = imageData.width / imageData.naturalWidth;\n forEach(data, function (n, i) {\n data[i] = n / ratio;\n });\n\n if (rounded) {\n // In case rounding off leads to extra 1px in right or bottom border\n // we should round the top-left corner and the dimension (#343).\n var bottom = Math.round(data.y + data.height);\n var right = Math.round(data.x + data.width);\n data.x = Math.round(data.x);\n data.y = Math.round(data.y);\n data.width = right - data.x;\n data.height = bottom - data.y;\n }\n } else {\n data = {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n }\n\n if (options.rotatable) {\n data.rotate = imageData.rotate || 0;\n }\n\n if (options.scalable) {\n data.scaleX = imageData.scaleX || 1;\n data.scaleY = imageData.scaleY || 1;\n }\n\n return data;\n },\n\n /**\n * Set the cropped area position and size with new data\n * @param {Object} data - The new data.\n * @returns {Cropper} this\n */\n setData: function setData$$1(data) {\n var options = this.options,\n imageData = this.imageData,\n canvasData = this.canvasData;\n var cropBoxData = {};\n\n if (this.ready && !this.disabled && isPlainObject(data)) {\n var transformed = false;\n\n if (options.rotatable) {\n if (isNumber(data.rotate) && data.rotate !== imageData.rotate) {\n imageData.rotate = data.rotate;\n transformed = true;\n }\n }\n\n if (options.scalable) {\n if (isNumber(data.scaleX) && data.scaleX !== imageData.scaleX) {\n imageData.scaleX = data.scaleX;\n transformed = true;\n }\n\n if (isNumber(data.scaleY) && data.scaleY !== imageData.scaleY) {\n imageData.scaleY = data.scaleY;\n transformed = true;\n }\n }\n\n if (transformed) {\n this.renderCanvas(true, true);\n }\n\n var ratio = imageData.width / imageData.naturalWidth;\n\n if (isNumber(data.x)) {\n cropBoxData.left = data.x * ratio + canvasData.left;\n }\n\n if (isNumber(data.y)) {\n cropBoxData.top = data.y * ratio + canvasData.top;\n }\n\n if (isNumber(data.width)) {\n cropBoxData.width = data.width * ratio;\n }\n\n if (isNumber(data.height)) {\n cropBoxData.height = data.height * ratio;\n }\n\n this.setCropBoxData(cropBoxData);\n }\n\n return this;\n },\n\n /**\n * Get the container size data.\n * @returns {Object} The result container data.\n */\n getContainerData: function getContainerData() {\n return this.ready ? assign({}, this.containerData) : {};\n },\n\n /**\n * Get the image position and size data.\n * @returns {Object} The result image data.\n */\n getImageData: function getImageData() {\n return this.sized ? assign({}, this.imageData) : {};\n },\n\n /**\n * Get the canvas position and size data.\n * @returns {Object} The result canvas data.\n */\n getCanvasData: function getCanvasData() {\n var canvasData = this.canvasData;\n var data = {};\n\n if (this.ready) {\n forEach(['left', 'top', 'width', 'height', 'naturalWidth', 'naturalHeight'], function (n) {\n data[n] = canvasData[n];\n });\n }\n\n return data;\n },\n\n /**\n * Set the canvas position and size with new data.\n * @param {Object} data - The new canvas data.\n * @returns {Cropper} this\n */\n setCanvasData: function setCanvasData(data) {\n var canvasData = this.canvasData;\n var aspectRatio = canvasData.aspectRatio;\n\n if (this.ready && !this.disabled && isPlainObject(data)) {\n if (isNumber(data.left)) {\n canvasData.left = data.left;\n }\n\n if (isNumber(data.top)) {\n canvasData.top = data.top;\n }\n\n if (isNumber(data.width)) {\n canvasData.width = data.width;\n canvasData.height = data.width / aspectRatio;\n } else if (isNumber(data.height)) {\n canvasData.height = data.height;\n canvasData.width = data.height * aspectRatio;\n }\n\n this.renderCanvas(true);\n }\n\n return this;\n },\n\n /**\n * Get the crop box position and size data.\n * @returns {Object} The result crop box data.\n */\n getCropBoxData: function getCropBoxData() {\n var cropBoxData = this.cropBoxData;\n var data;\n\n if (this.ready && this.cropped) {\n data = {\n left: cropBoxData.left,\n top: cropBoxData.top,\n width: cropBoxData.width,\n height: cropBoxData.height\n };\n }\n\n return data || {};\n },\n\n /**\n * Set the crop box position and size with new data.\n * @param {Object} data - The new crop box data.\n * @returns {Cropper} this\n */\n setCropBoxData: function setCropBoxData(data) {\n var cropBoxData = this.cropBoxData;\n var aspectRatio = this.options.aspectRatio;\n var widthChanged;\n var heightChanged;\n\n if (this.ready && this.cropped && !this.disabled && isPlainObject(data)) {\n if (isNumber(data.left)) {\n cropBoxData.left = data.left;\n }\n\n if (isNumber(data.top)) {\n cropBoxData.top = data.top;\n }\n\n if (isNumber(data.width) && data.width !== cropBoxData.width) {\n widthChanged = true;\n cropBoxData.width = data.width;\n }\n\n if (isNumber(data.height) && data.height !== cropBoxData.height) {\n heightChanged = true;\n cropBoxData.height = data.height;\n }\n\n if (aspectRatio) {\n if (widthChanged) {\n cropBoxData.height = cropBoxData.width / aspectRatio;\n } else if (heightChanged) {\n cropBoxData.width = cropBoxData.height * aspectRatio;\n }\n }\n\n this.renderCropBox();\n }\n\n return this;\n },\n\n /**\n * Get a canvas drawn the cropped image.\n * @param {Object} [options={}] - The config options.\n * @returns {HTMLCanvasElement} - The result canvas.\n */\n getCroppedCanvas: function getCroppedCanvas() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (!this.ready || !window.HTMLCanvasElement) {\n return null;\n }\n\n var canvasData = this.canvasData;\n var source = getSourceCanvas(this.image, this.imageData, canvasData, options); // Returns the source canvas if it is not cropped.\n\n if (!this.cropped) {\n return source;\n }\n\n var _this$getData = this.getData(),\n initialX = _this$getData.x,\n initialY = _this$getData.y,\n initialWidth = _this$getData.width,\n initialHeight = _this$getData.height;\n\n var ratio = source.width / Math.floor(canvasData.naturalWidth);\n\n if (ratio !== 1) {\n initialX *= ratio;\n initialY *= ratio;\n initialWidth *= ratio;\n initialHeight *= ratio;\n }\n\n var aspectRatio = initialWidth / initialHeight;\n var maxSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.maxWidth || Infinity,\n height: options.maxHeight || Infinity\n });\n var minSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.minWidth || 0,\n height: options.minHeight || 0\n }, 'cover');\n\n var _getAdjustedSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.width || (ratio !== 1 ? source.width : initialWidth),\n height: options.height || (ratio !== 1 ? source.height : initialHeight)\n }),\n width = _getAdjustedSizes.width,\n height = _getAdjustedSizes.height;\n\n width = Math.min(maxSizes.width, Math.max(minSizes.width, width));\n height = Math.min(maxSizes.height, Math.max(minSizes.height, height));\n var canvas = document.createElement('canvas');\n var context = canvas.getContext('2d');\n canvas.width = normalizeDecimalNumber(width);\n canvas.height = normalizeDecimalNumber(height);\n context.fillStyle = options.fillColor || 'transparent';\n context.fillRect(0, 0, width, height);\n var _options$imageSmoothi = options.imageSmoothingEnabled,\n imageSmoothingEnabled = _options$imageSmoothi === void 0 ? true : _options$imageSmoothi,\n imageSmoothingQuality = options.imageSmoothingQuality;\n context.imageSmoothingEnabled = imageSmoothingEnabled;\n\n if (imageSmoothingQuality) {\n context.imageSmoothingQuality = imageSmoothingQuality;\n } // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.drawImage\n\n\n var sourceWidth = source.width;\n var sourceHeight = source.height; // Source canvas parameters\n\n var srcX = initialX;\n var srcY = initialY;\n var srcWidth;\n var srcHeight; // Destination canvas parameters\n\n var dstX;\n var dstY;\n var dstWidth;\n var dstHeight;\n\n if (srcX <= -initialWidth || srcX > sourceWidth) {\n srcX = 0;\n srcWidth = 0;\n dstX = 0;\n dstWidth = 0;\n } else if (srcX <= 0) {\n dstX = -srcX;\n srcX = 0;\n srcWidth = Math.min(sourceWidth, initialWidth + srcX);\n dstWidth = srcWidth;\n } else if (srcX <= sourceWidth) {\n dstX = 0;\n srcWidth = Math.min(initialWidth, sourceWidth - srcX);\n dstWidth = srcWidth;\n }\n\n if (srcWidth <= 0 || srcY <= -initialHeight || srcY > sourceHeight) {\n srcY = 0;\n srcHeight = 0;\n dstY = 0;\n dstHeight = 0;\n } else if (srcY <= 0) {\n dstY = -srcY;\n srcY = 0;\n srcHeight = Math.min(sourceHeight, initialHeight + srcY);\n dstHeight = srcHeight;\n } else if (srcY <= sourceHeight) {\n dstY = 0;\n srcHeight = Math.min(initialHeight, sourceHeight - srcY);\n dstHeight = srcHeight;\n }\n\n var params = [srcX, srcY, srcWidth, srcHeight]; // Avoid \"IndexSizeError\"\n\n if (dstWidth > 0 && dstHeight > 0) {\n var scale = width / initialWidth;\n params.push(dstX * scale, dstY * scale, dstWidth * scale, dstHeight * scale);\n } // All the numerical parameters should be integer for `drawImage`\n // https://github.com/fengyuanchen/cropper/issues/476\n\n\n context.drawImage.apply(context, [source].concat(_toConsumableArray(params.map(function (param) {\n return Math.floor(normalizeDecimalNumber(param));\n }))));\n return canvas;\n },\n\n /**\n * Change the aspect ratio of the crop box.\n * @param {number} aspectRatio - The new aspect ratio.\n * @returns {Cropper} this\n */\n setAspectRatio: function setAspectRatio(aspectRatio) {\n var options = this.options;\n\n if (!this.disabled && !isUndefined(aspectRatio)) {\n // 0 -> NaN\n options.aspectRatio = Math.max(0, aspectRatio) || NaN;\n\n if (this.ready) {\n this.initCropBox();\n\n if (this.cropped) {\n this.renderCropBox();\n }\n }\n }\n\n return this;\n },\n\n /**\n * Change the drag mode.\n * @param {string} mode - The new drag mode.\n * @returns {Cropper} this\n */\n setDragMode: function setDragMode(mode) {\n var options = this.options,\n dragBox = this.dragBox,\n face = this.face;\n\n if (this.ready && !this.disabled) {\n var croppable = mode === DRAG_MODE_CROP;\n var movable = options.movable && mode === DRAG_MODE_MOVE;\n mode = croppable || movable ? mode : DRAG_MODE_NONE;\n options.dragMode = mode;\n setData(dragBox, DATA_ACTION, mode);\n toggleClass(dragBox, CLASS_CROP, croppable);\n toggleClass(dragBox, CLASS_MOVE, movable);\n\n if (!options.cropBoxMovable) {\n // Sync drag mode to crop box when it is not movable\n setData(face, DATA_ACTION, mode);\n toggleClass(face, CLASS_CROP, croppable);\n toggleClass(face, CLASS_MOVE, movable);\n }\n }\n\n return this;\n }\n};\n\nvar AnotherCropper = WINDOW.Cropper;\n\nvar Cropper =\n/*#__PURE__*/\nfunction () {\n /**\n * Create a new Cropper.\n * @param {Element} element - The target element for cropping.\n * @param {Object} [options={}] - The configuration options.\n */\n function Cropper(element) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, Cropper);\n\n if (!element || !REGEXP_TAG_NAME.test(element.tagName)) {\n throw new Error('The first argument is required and must be an or element.');\n }\n\n this.element = element;\n this.options = assign({}, DEFAULTS, isPlainObject(options) && options);\n this.cropped = false;\n this.disabled = false;\n this.pointers = {};\n this.ready = false;\n this.reloading = false;\n this.replaced = false;\n this.sized = false;\n this.sizing = false;\n this.init();\n }\n\n _createClass(Cropper, [{\n key: \"init\",\n value: function init() {\n var element = this.element;\n var tagName = element.tagName.toLowerCase();\n var url;\n\n if (element[NAMESPACE]) {\n return;\n }\n\n element[NAMESPACE] = this;\n\n if (tagName === 'img') {\n this.isImg = true; // e.g.: \"img/picture.jpg\"\n\n url = element.getAttribute('src') || '';\n this.originalUrl = url; // Stop when it's a blank image\n\n if (!url) {\n return;\n } // e.g.: \"http://example.com/img/picture.jpg\"\n\n\n url = element.src;\n } else if (tagName === 'canvas' && window.HTMLCanvasElement) {\n url = element.toDataURL();\n }\n\n this.load(url);\n }\n }, {\n key: \"load\",\n value: function load(url) {\n var _this = this;\n\n if (!url) {\n return;\n }\n\n this.url = url;\n this.imageData = {};\n var element = this.element,\n options = this.options;\n\n if (!options.rotatable && !options.scalable) {\n options.checkOrientation = false;\n } // Only IE10+ supports Typed Arrays\n\n\n if (!options.checkOrientation || !window.ArrayBuffer) {\n this.clone();\n return;\n } // XMLHttpRequest disallows to open a Data URL in some browsers like IE11 and Safari\n\n\n if (REGEXP_DATA_URL.test(url)) {\n if (REGEXP_DATA_URL_JPEG.test(url)) {\n this.read(dataURLToArrayBuffer(url));\n } else {\n this.clone();\n }\n\n return;\n }\n\n var xhr = new XMLHttpRequest();\n var clone = this.clone.bind(this);\n this.reloading = true;\n this.xhr = xhr;\n xhr.ontimeout = clone;\n xhr.onabort = clone;\n xhr.onerror = clone;\n\n xhr.onprogress = function () {\n if (xhr.getResponseHeader('content-type') !== MIME_TYPE_JPEG) {\n xhr.abort();\n }\n };\n\n xhr.onload = function () {\n _this.read(xhr.response);\n };\n\n xhr.onloadend = function () {\n _this.reloading = false;\n _this.xhr = null;\n }; // Bust cache when there is a \"crossOrigin\" property to avoid browser cache error\n\n\n if (options.checkCrossOrigin && isCrossOriginURL(url) && element.crossOrigin) {\n url = addTimestamp(url);\n }\n\n xhr.open('GET', url);\n xhr.responseType = 'arraybuffer';\n xhr.withCredentials = element.crossOrigin === 'use-credentials';\n xhr.send();\n }\n }, {\n key: \"read\",\n value: function read(arrayBuffer) {\n var options = this.options,\n imageData = this.imageData;\n var orientation = resetAndGetOrientation(arrayBuffer);\n var rotate = 0;\n var scaleX = 1;\n var scaleY = 1;\n\n if (orientation > 1) {\n // Generate a new Data URL with the orientation value set to 1\n // as some iOS browsers will render image with its orientation\n this.url = arrayBufferToDataURL(arrayBuffer, MIME_TYPE_JPEG);\n\n var _parseOrientation = parseOrientation(orientation);\n\n rotate = _parseOrientation.rotate;\n scaleX = _parseOrientation.scaleX;\n scaleY = _parseOrientation.scaleY;\n }\n\n if (options.rotatable) {\n imageData.rotate = rotate;\n }\n\n if (options.scalable) {\n imageData.scaleX = scaleX;\n imageData.scaleY = scaleY;\n }\n\n this.clone();\n }\n }, {\n key: \"clone\",\n value: function clone() {\n var element = this.element,\n url = this.url;\n var crossOrigin;\n var crossOriginUrl;\n\n if (this.options.checkCrossOrigin && isCrossOriginURL(url)) {\n crossOrigin = element.crossOrigin;\n\n if (crossOrigin) {\n crossOriginUrl = url;\n } else {\n crossOrigin = 'anonymous'; // Bust cache when there is not a \"crossOrigin\" property\n\n crossOriginUrl = addTimestamp(url);\n }\n }\n\n this.crossOrigin = crossOrigin;\n this.crossOriginUrl = crossOriginUrl;\n var image = document.createElement('img');\n\n if (crossOrigin) {\n image.crossOrigin = crossOrigin;\n }\n\n image.src = crossOriginUrl || url;\n this.image = image;\n image.onload = this.start.bind(this);\n image.onerror = this.stop.bind(this);\n addClass(image, CLASS_HIDE);\n element.parentNode.insertBefore(image, element.nextSibling);\n }\n }, {\n key: \"start\",\n value: function start() {\n var _this2 = this;\n\n var image = this.isImg ? this.element : this.image;\n image.onload = null;\n image.onerror = null;\n this.sizing = true;\n var IS_SAFARI = WINDOW.navigator && /(Macintosh|iPhone|iPod|iPad).*AppleWebKit/i.test(WINDOW.navigator.userAgent);\n\n var done = function done(naturalWidth, naturalHeight) {\n assign(_this2.imageData, {\n naturalWidth: naturalWidth,\n naturalHeight: naturalHeight,\n aspectRatio: naturalWidth / naturalHeight\n });\n _this2.sizing = false;\n _this2.sized = true;\n\n _this2.build();\n }; // Modern browsers (except Safari)\n\n\n if (image.naturalWidth && !IS_SAFARI) {\n done(image.naturalWidth, image.naturalHeight);\n return;\n }\n\n var sizingImage = document.createElement('img');\n var body = document.body || document.documentElement;\n this.sizingImage = sizingImage;\n\n sizingImage.onload = function () {\n done(sizingImage.width, sizingImage.height);\n\n if (!IS_SAFARI) {\n body.removeChild(sizingImage);\n }\n };\n\n sizingImage.src = image.src; // iOS Safari will convert the image automatically\n // with its orientation once append it into DOM (#279)\n\n if (!IS_SAFARI) {\n sizingImage.style.cssText = 'left:0;' + 'max-height:none!important;' + 'max-width:none!important;' + 'min-height:0!important;' + 'min-width:0!important;' + 'opacity:0;' + 'position:absolute;' + 'top:0;' + 'z-index:-1;';\n body.appendChild(sizingImage);\n }\n }\n }, {\n key: \"stop\",\n value: function stop() {\n var image = this.image;\n image.onload = null;\n image.onerror = null;\n image.parentNode.removeChild(image);\n this.image = null;\n }\n }, {\n key: \"build\",\n value: function build() {\n if (!this.sized || this.ready) {\n return;\n }\n\n var element = this.element,\n options = this.options,\n image = this.image; // Create cropper elements\n\n var container = element.parentNode;\n var template = document.createElement('div');\n template.innerHTML = TEMPLATE;\n var cropper = template.querySelector(\".\".concat(NAMESPACE, \"-container\"));\n var canvas = cropper.querySelector(\".\".concat(NAMESPACE, \"-canvas\"));\n var dragBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-drag-box\"));\n var cropBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-crop-box\"));\n var face = cropBox.querySelector(\".\".concat(NAMESPACE, \"-face\"));\n this.container = container;\n this.cropper = cropper;\n this.canvas = canvas;\n this.dragBox = dragBox;\n this.cropBox = cropBox;\n this.viewBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-view-box\"));\n this.face = face;\n canvas.appendChild(image); // Hide the original image\n\n addClass(element, CLASS_HIDDEN); // Inserts the cropper after to the current image\n\n container.insertBefore(cropper, element.nextSibling); // Show the image if is hidden\n\n if (!this.isImg) {\n removeClass(image, CLASS_HIDE);\n }\n\n this.initPreview();\n this.bind();\n options.initialAspectRatio = Math.max(0, options.initialAspectRatio) || NaN;\n options.aspectRatio = Math.max(0, options.aspectRatio) || NaN;\n options.viewMode = Math.max(0, Math.min(3, Math.round(options.viewMode))) || 0;\n addClass(cropBox, CLASS_HIDDEN);\n\n if (!options.guides) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-dashed\")), CLASS_HIDDEN);\n }\n\n if (!options.center) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-center\")), CLASS_HIDDEN);\n }\n\n if (options.background) {\n addClass(cropper, \"\".concat(NAMESPACE, \"-bg\"));\n }\n\n if (!options.highlight) {\n addClass(face, CLASS_INVISIBLE);\n }\n\n if (options.cropBoxMovable) {\n addClass(face, CLASS_MOVE);\n setData(face, DATA_ACTION, ACTION_ALL);\n }\n\n if (!options.cropBoxResizable) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-line\")), CLASS_HIDDEN);\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-point\")), CLASS_HIDDEN);\n }\n\n this.render();\n this.ready = true;\n this.setDragMode(options.dragMode);\n\n if (options.autoCrop) {\n this.crop();\n }\n\n this.setData(options.data);\n\n if (isFunction(options.ready)) {\n addListener(element, EVENT_READY, options.ready, {\n once: true\n });\n }\n\n dispatchEvent(element, EVENT_READY);\n }\n }, {\n key: \"unbuild\",\n value: function unbuild() {\n if (!this.ready) {\n return;\n }\n\n this.ready = false;\n this.unbind();\n this.resetPreview();\n this.cropper.parentNode.removeChild(this.cropper);\n removeClass(this.element, CLASS_HIDDEN);\n }\n }, {\n key: \"uncreate\",\n value: function uncreate() {\n if (this.ready) {\n this.unbuild();\n this.ready = false;\n this.cropped = false;\n } else if (this.sizing) {\n this.sizingImage.onload = null;\n this.sizing = false;\n this.sized = false;\n } else if (this.reloading) {\n this.xhr.onabort = null;\n this.xhr.abort();\n } else if (this.image) {\n this.stop();\n }\n }\n /**\n * Get the no conflict cropper class.\n * @returns {Cropper} The cropper class.\n */\n\n }], [{\n key: \"noConflict\",\n value: function noConflict() {\n window.Cropper = AnotherCropper;\n return Cropper;\n }\n /**\n * Change the default options.\n * @param {Object} options - The new default options.\n */\n\n }, {\n key: \"setDefaults\",\n value: function setDefaults(options) {\n assign(DEFAULTS, isPlainObject(options) && options);\n }\n }]);\n\n return Cropper;\n}();\n\nassign(Cropper.prototype, render, preview, events, handlers, change, methods);\n\nexport default Cropper;\n","const LANGUAGES_LIST = {\n aa: {\n name: 'Afar',\n nativeName: 'Afaraf',\n },\n ab: {\n name: 'Abkhaz',\n nativeName: 'аҧсуа бызшәа',\n },\n ae: {\n name: 'Avestan',\n nativeName: 'avesta',\n },\n af: {\n name: 'Afrikaans',\n nativeName: 'Afrikaans',\n },\n ak: {\n name: 'Akan',\n nativeName: 'Akan',\n },\n am: {\n name: 'Amharic',\n nativeName: 'አማርኛ',\n },\n an: {\n name: 'Aragonese',\n nativeName: 'aragonés',\n },\n ar: {\n name: 'Arabic',\n nativeName: 'اللغة العربية',\n },\n as: {\n name: 'Assamese',\n nativeName: 'অসমীয়া',\n },\n av: {\n name: 'Avaric',\n nativeName: 'авар мацӀ',\n },\n ay: {\n name: 'Aymara',\n nativeName: 'aymar aru',\n },\n az: {\n name: 'Azerbaijani',\n nativeName: 'azərbaycan dili',\n },\n ba: {\n name: 'Bashkir',\n nativeName: 'башҡорт теле',\n },\n be: {\n name: 'Belarusian',\n nativeName: 'беларуская мова',\n },\n bg: {\n name: 'Bulgarian',\n nativeName: 'български език',\n },\n bh: {\n name: 'Bihari',\n nativeName: 'भोजपुरी',\n },\n bi: {\n name: 'Bislama',\n nativeName: 'Bislama',\n },\n bm: {\n name: 'Bambara',\n nativeName: 'bamanankan',\n },\n bn: {\n name: 'Bengali',\n nativeName: 'বাংলা',\n },\n bo: {\n name: 'Tibetan Standard',\n nativeName: 'བོད་ཡིག',\n },\n br: {\n name: 'Breton',\n nativeName: 'brezhoneg',\n },\n bs: {\n name: 'Bosnian',\n nativeName: 'bosanski jezik',\n },\n ca: {\n name: 'Catalan',\n nativeName: 'català',\n },\n ce: {\n name: 'Chechen',\n nativeName: 'нохчийн мотт',\n },\n ch: {\n name: 'Chamorro',\n nativeName: 'Chamoru',\n },\n co: {\n name: 'Corsican',\n nativeName: 'corsu',\n },\n cr: {\n name: 'Cree',\n nativeName: 'ᓀᐦᐃᔭᐍᐏᐣ',\n },\n cs: {\n name: 'Czech',\n nativeName: 'čeština',\n },\n cu: {\n name: 'Old Church Slavonic',\n nativeName: 'ѩзыкъ словѣньскъ',\n },\n cv: {\n name: 'Chuvash',\n nativeName: 'чӑваш чӗлхи',\n },\n cy: {\n name: 'Welsh',\n nativeName: 'Cymraeg',\n },\n da: {\n name: 'Danish',\n nativeName: 'dansk',\n },\n de: {\n name: 'German',\n nativeName: 'Deutsch',\n },\n dv: {\n name: 'Divehi',\n nativeName: 'Dhivehi',\n },\n dz: {\n name: 'Dzongkha',\n nativeName: 'རྫོང་ཁ',\n },\n ee: {\n name: 'Ewe',\n nativeName: 'Eʋegbe',\n },\n el: {\n name: 'Greek',\n nativeName: 'ελληνικά',\n },\n en: {\n name: 'English',\n nativeName: 'English',\n },\n eo: {\n name: 'Esperanto',\n nativeName: 'Esperanto',\n },\n es: {\n name: 'Spanish',\n nativeName: 'Español',\n },\n et: {\n name: 'Estonian',\n nativeName: 'eesti',\n },\n eu: {\n name: 'Basque',\n nativeName: 'euskara',\n },\n fa: {\n name: 'Persian',\n nativeName: 'فارسی',\n },\n ff: {\n name: 'Fula',\n nativeName: 'Fulfulde',\n },\n fi: {\n name: 'Finnish',\n nativeName: 'suomi',\n },\n fj: {\n name: 'Fijian',\n nativeName: 'Vakaviti',\n },\n fo: {\n name: 'Faroese',\n nativeName: 'føroyskt',\n },\n fr: {\n name: 'French',\n nativeName: 'Français',\n },\n fy: {\n name: 'Western Frisian',\n nativeName: 'Frysk',\n },\n ga: {\n name: 'Irish',\n nativeName: 'Gaeilge',\n },\n gd: {\n name: 'Scottish Gaelic',\n nativeName: 'Gàidhlig',\n },\n gl: {\n name: 'Galician',\n nativeName: 'galego',\n },\n gn: {\n name: 'Guaraní',\n nativeName: \"Avañe'ẽ\",\n },\n gu: {\n name: 'Gujarati',\n nativeName: 'ગુજરાતી',\n },\n gv: {\n name: 'Manx',\n nativeName: 'Gaelg',\n },\n ha: {\n name: 'Hausa',\n nativeName: 'هَوُسَ',\n },\n he: {\n name: 'Hebrew',\n nativeName: 'עברית',\n },\n hi: {\n name: 'Hindi',\n nativeName: 'हिन्दी',\n },\n ho: {\n name: 'Hiri Motu',\n nativeName: 'Hiri Motu',\n },\n hr: {\n name: 'Croatian',\n nativeName: 'hrvatski jezik',\n },\n ht: {\n name: 'Haitian',\n nativeName: 'Kreyòl ayisyen',\n },\n hu: {\n name: 'Hungarian',\n nativeName: 'magyar',\n },\n hy: {\n name: 'Armenian',\n nativeName: 'Հայերեն',\n },\n hz: {\n name: 'Herero',\n nativeName: 'Otjiherero',\n },\n ia: {\n name: 'Interlingua',\n nativeName: 'Interlingua',\n },\n id: {\n name: 'Indonesian',\n nativeName: 'Indonesian',\n },\n ie: {\n name: 'Interlingue',\n nativeName: 'Interlingue',\n },\n ig: {\n name: 'Igbo',\n nativeName: 'Asụsụ Igbo',\n },\n ii: {\n name: 'Nuosu',\n nativeName: 'ꆈꌠ꒿ Nuosuhxop',\n },\n ik: {\n name: 'Inupiaq',\n nativeName: 'Iñupiaq',\n },\n io: {\n name: 'Ido',\n nativeName: 'Ido',\n },\n is: {\n name: 'Icelandic',\n nativeName: 'Íslenska',\n },\n it: {\n name: 'Italian',\n nativeName: 'Italiano',\n },\n iu: {\n name: 'Inuktitut',\n nativeName: 'ᐃᓄᒃᑎᑐᑦ',\n },\n ja: {\n name: 'Japanese',\n nativeName: '日本語',\n },\n jv: {\n name: 'Javanese',\n nativeName: 'basa Jawa',\n },\n ka: {\n name: 'Georgian',\n nativeName: 'ქართული',\n },\n kg: {\n name: 'Kongo',\n nativeName: 'Kikongo',\n },\n ki: {\n name: 'Kikuyu',\n nativeName: 'Gĩkũyũ',\n },\n kj: {\n name: 'Kwanyama',\n nativeName: 'Kuanyama',\n },\n kk: {\n name: 'Kazakh',\n nativeName: 'қазақ тілі',\n },\n kl: {\n name: 'Kalaallisut',\n nativeName: 'kalaallisut',\n },\n km: {\n name: 'Khmer',\n nativeName: 'ខេមរភាសា',\n },\n kn: {\n name: 'Kannada',\n nativeName: 'ಕನ್ನಡ',\n },\n ko: {\n name: 'Korean',\n nativeName: '한국어',\n },\n kr: {\n name: 'Kanuri',\n nativeName: 'Kanuri',\n },\n ks: {\n name: 'Kashmiri',\n nativeName: 'कश्मीरी',\n },\n ku: {\n name: 'Kurdish',\n nativeName: 'Kurdî',\n },\n kv: {\n name: 'Komi',\n nativeName: 'коми кыв',\n },\n kw: {\n name: 'Cornish',\n nativeName: 'Kernewek',\n },\n ky: {\n name: 'Kyrgyz',\n nativeName: 'Кыргызча',\n },\n la: {\n name: 'Latin',\n nativeName: 'latine',\n },\n lb: {\n name: 'Luxembourgish',\n nativeName: 'Lëtzebuergesch',\n },\n lg: {\n name: 'Ganda',\n nativeName: 'Luganda',\n },\n li: {\n name: 'Limburgish',\n nativeName: 'Limburgs',\n },\n ln: {\n name: 'Lingala',\n nativeName: 'Lingála',\n },\n lo: {\n name: 'Lao',\n nativeName: 'ພາສາ',\n },\n lt: {\n name: 'Lithuanian',\n nativeName: 'lietuvių kalba',\n },\n lu: {\n name: 'Luba-Katanga',\n nativeName: 'Tshiluba',\n },\n lv: {\n name: 'Latvian',\n nativeName: 'latviešu valoda',\n },\n mg: {\n name: 'Malagasy',\n nativeName: 'fiteny malagasy',\n },\n mh: {\n name: 'Marshallese',\n nativeName: 'Kajin M̧ajeļ',\n },\n mi: {\n name: 'Māori',\n nativeName: 'te reo Māori',\n },\n mk: {\n name: 'Macedonian',\n nativeName: 'македонски јазик',\n },\n ml: {\n name: 'Malayalam',\n nativeName: 'മലയാളം',\n },\n mn: {\n name: 'Mongolian',\n nativeName: 'Монгол хэл',\n },\n mr: {\n name: 'Marathi',\n nativeName: 'मराठी',\n },\n ms: {\n name: 'Malay',\n nativeName: 'هاس ملايو‎',\n },\n mt: {\n name: 'Maltese',\n nativeName: 'Malti',\n },\n my: {\n name: 'Burmese',\n nativeName: 'ဗမာစာ',\n },\n na: {\n name: 'Nauru',\n nativeName: 'Ekakairũ Naoero',\n },\n nb: {\n name: 'Norwegian Bokmål',\n nativeName: 'Norsk bokmål',\n },\n nd: {\n name: 'Northern Ndebele',\n nativeName: 'isiNdebele',\n },\n ne: {\n name: 'Nepali',\n nativeName: 'नेपाली',\n },\n ng: {\n name: 'Ndonga',\n nativeName: 'Owambo',\n },\n nl: {\n name: 'Dutch',\n nativeName: 'Nederlands',\n },\n nn: {\n name: 'Norwegian Nynorsk',\n nativeName: 'Norsk nynorsk',\n },\n no: {\n name: 'Norwegian',\n nativeName: 'Norsk',\n },\n nr: {\n name: 'Southern Ndebele',\n nativeName: 'isiNdebele',\n },\n nv: {\n name: 'Navajo',\n nativeName: 'Diné bizaad',\n },\n ny: {\n name: 'Chichewa',\n nativeName: 'chiCheŵa',\n },\n oc: {\n name: 'Occitan',\n nativeName: 'occitan',\n },\n oj: {\n name: 'Ojibwe',\n nativeName: 'ᐊᓂᔑᓈᐯᒧᐎᓐ',\n },\n om: {\n name: 'Oromo',\n nativeName: 'Afaan Oromoo',\n },\n or: {\n name: 'Oriya',\n nativeName: 'ଓଡ଼ିଆ',\n },\n os: {\n name: 'Ossetian',\n nativeName: 'ирон æвзаг',\n },\n pa: {\n name: 'Panjabi',\n nativeName: 'ਪੰਜਾਬੀ',\n },\n pi: {\n name: 'Pāli',\n nativeName: 'पाऴि',\n },\n pl: {\n name: 'Polish',\n nativeName: 'język polski',\n },\n ps: {\n name: 'Pashto',\n nativeName: 'پښتو',\n },\n pt: {\n name: 'Portuguese',\n nativeName: 'Português',\n },\n qu: {\n name: 'Quechua',\n nativeName: 'Runa Simi',\n },\n rm: {\n name: 'Romansh',\n nativeName: 'rumantsch grischun',\n },\n rn: {\n name: 'Kirundi',\n nativeName: 'Ikirundi',\n },\n ro: {\n name: 'Romanian',\n nativeName: 'limba română',\n },\n ru: {\n name: 'Russian',\n nativeName: 'Русский',\n },\n rw: {\n name: 'Kinyarwanda',\n nativeName: 'Ikinyarwanda',\n },\n sa: {\n name: 'Sanskrit',\n nativeName: 'संस्कृतम्',\n },\n sc: {\n name: 'Sardinian',\n nativeName: 'sardu',\n },\n sd: {\n name: 'Sindhi',\n nativeName: 'सिन्धी',\n },\n se: {\n name: 'Northern Sami',\n nativeName: 'Davvisámegiella',\n },\n sg: {\n name: 'Sango',\n nativeName: 'yângâ tî sängö',\n },\n si: {\n name: 'Sinhala',\n nativeName: 'සිංහල',\n },\n sk: {\n name: 'Slovak',\n nativeName: 'slovenčina',\n },\n sl: {\n name: 'Slovene',\n nativeName: 'slovenski jezik',\n },\n sm: {\n name: 'Samoan',\n nativeName: \"gagana fa'a Samoa\",\n },\n sn: {\n name: 'Shona',\n nativeName: 'chiShona',\n },\n so: {\n name: 'Somali',\n nativeName: 'Soomaaliga',\n },\n sq: {\n name: 'Albanian',\n nativeName: 'Shqip',\n },\n sr: {\n name: 'Serbian',\n nativeName: 'српски језик',\n },\n ss: {\n name: 'Swati',\n nativeName: 'SiSwati',\n },\n st: {\n name: 'Southern Sotho',\n nativeName: 'Sesotho',\n },\n su: {\n name: 'Sundanese',\n nativeName: 'Basa Sunda',\n },\n sv: {\n name: 'Swedish',\n nativeName: 'svenska',\n },\n sw: {\n name: 'Swahili',\n nativeName: 'Kiswahili',\n },\n ta: {\n name: 'Tamil',\n nativeName: 'தமிழ்',\n },\n te: {\n name: 'Telugu',\n nativeName: 'తెలుగు',\n },\n tg: {\n name: 'Tajik',\n nativeName: 'тоҷикӣ',\n },\n th: {\n name: 'Thai',\n nativeName: 'ไทย',\n },\n ti: {\n name: 'Tigrinya',\n nativeName: 'ትግርኛ',\n },\n tk: {\n name: 'Turkmen',\n nativeName: 'Türkmen',\n },\n tl: {\n name: 'Tagalog',\n nativeName: 'Wikang Tagalog',\n },\n tn: {\n name: 'Tswana',\n nativeName: 'Setswana',\n },\n to: {\n name: 'Tonga',\n nativeName: 'faka Tonga',\n },\n tr: {\n name: 'Turkish',\n nativeName: 'Türkçe',\n },\n ts: {\n name: 'Tsonga',\n nativeName: 'Xitsonga',\n },\n tt: {\n name: 'Tatar',\n nativeName: 'татар теле',\n },\n tw: {\n name: 'Twi',\n nativeName: 'Twi',\n },\n ty: {\n name: 'Tahitian',\n nativeName: 'Reo Tahiti',\n },\n ug: {\n name: 'Uyghur',\n nativeName: 'ئۇيغۇرچە‎',\n },\n uk: {\n name: 'Ukrainian',\n nativeName: 'Українська',\n },\n ur: {\n name: 'Urdu',\n nativeName: 'اردو',\n },\n uz: {\n name: 'Uzbek',\n nativeName: 'Ўзбек',\n },\n ve: {\n name: 'Venda',\n nativeName: 'Tshivenḓa',\n },\n vi: {\n name: 'Vietnamese',\n nativeName: 'Tiếng Việt',\n },\n vo: {\n name: 'Volapük',\n nativeName: 'Volapük',\n },\n wa: {\n name: 'Walloon',\n nativeName: 'walon',\n },\n wo: {\n name: 'Wolof',\n nativeName: 'Wollof',\n },\n xh: {\n name: 'Xhosa',\n nativeName: 'isiXhosa',\n },\n yi: {\n name: 'Yiddish',\n nativeName: 'ייִדיש',\n },\n yo: {\n name: 'Yoruba',\n nativeName: 'Yorùbá',\n },\n za: {\n name: 'Zhuang',\n nativeName: 'Saɯ cueŋƅ',\n },\n zh: {\n name: 'Chinese',\n nativeName: '中文',\n },\n zu: {\n name: 'Zulu',\n nativeName: 'isiZulu',\n },\n};\n\nexport default LANGUAGES_LIST;\n","import LANGUAGES_LIST from './data';\n\nexport default class ISO6391 {\n static getLanguages(codes = []) {\n return codes.map(code => ({\n code,\n name: ISO6391.getName(code),\n nativeName: ISO6391.getNativeName(code),\n }));\n }\n\n static getName(code) {\n return ISO6391.validate(code) ? LANGUAGES_LIST[code].name : '';\n }\n\n static getAllNames() {\n return Object.values(LANGUAGES_LIST).map(l => l.name);\n }\n\n static getNativeName(code) {\n return ISO6391.validate(code) ? LANGUAGES_LIST[code].nativeName : '';\n }\n\n static getAllNativeNames() {\n return Object.values(LANGUAGES_LIST).map(l => l.nativeName);\n }\n\n static getCode(name) {\n const code = Object.keys(LANGUAGES_LIST).find(code => {\n const language = LANGUAGES_LIST[code];\n\n return (\n language.name.toLowerCase() === name.toLowerCase() ||\n language.nativeName.toLowerCase() === name.toLowerCase()\n );\n });\n return code || '';\n }\n\n static getAllCodes() {\n return Object.keys(LANGUAGES_LIST);\n }\n\n static validate(code) {\n return LANGUAGES_LIST[code] !== undefined;\n }\n}\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///./node_modules/@babel/runtime/helpers/toArray.js","webpack:///./node_modules/lodash/trim.js","webpack:///./node_modules/lodash/_charsEndIndex.js","webpack:///./node_modules/lodash/_charsStartIndex.js","webpack:///./node_modules/@chenfengyuan/vue-qrcode/dist/vue-qrcode.esm.js","webpack:///./node_modules/cropperjs/dist/cropper.esm.js","webpack:///./node_modules/iso-639-1/src/data.js","webpack:///./node_modules/iso-639-1/src/index.js"],"names":["arrayWithHoles","iterableToArray","nonIterableRest","module","exports","arr","baseToString","castSlice","charsEndIndex","charsStartIndex","stringToArray","toString","reTrim","string","chars","guard","undefined","replace","strSymbols","chrSymbols","start","end","join","baseIndexOf","index","length","commonjsGlobal","window","global","self","commonjsRequire","Error","qrcode","fn","createCommonjsModule","r","e","n","t","o","i","f","u","a","code","p","call","1","require","getSymbolSize","getRowColCoords","version","posCount","Math","floor","size","intervals","ceil","positions","push","reverse","getPositions","coords","pos","posLength","j","2","Mode","ALPHA_NUM_CHARS","AlphanumericData","data","this","mode","ALPHANUMERIC","getBitsLength","prototype","getLength","write","bitBuffer","value","indexOf","put","3","BitBuffer","buffer","get","bufIndex","num","putBit","getLengthInBits","bit","4","Buffer","BitMatrix","fill","reservedBit","set","row","col","reserved","xor","isReserved","5","ByteData","BYTE","l","6","ECLevel","EC_BLOCKS_TABLE","EC_CODEWORDS_TABLE","getBlocksCount","errorCorrectionLevel","L","M","Q","H","getTotalCodewordsCount","7","isValid","level","from","defaultValue","toLowerCase","fromString","8","9","Utils","G15_BCH","getBCHDigit","getEncodedBits","mask","d","10","EXP_TABLE","LOG_TABLE","x","log","exp","mul","y","11","KanjiData","KANJI","toSJIS","12","Patterns","PATTERN000","PATTERN001","PATTERN010","PATTERN011","PATTERN100","PATTERN101","PATTERN110","PATTERN111","PenaltyScores","getMaskAt","maskPattern","isNaN","parseInt","getPenaltyN1","points","sameCountCol","sameCountRow","lastCol","lastRow","getPenaltyN2","last","getPenaltyN3","bitsCol","bitsRow","getPenaltyN4","darkCount","modulesCount","abs","applyMask","pattern","getBestMask","setupFormatFunc","numPatterns","Object","keys","bestPattern","lowerPenalty","Infinity","penalty","13","VersionCheck","Regex","NUMERIC","id","ccBits","MIXED","getCharCountIndicator","getBestModeForData","dataStr","testNumeric","testAlphanumeric","testKanji","14","NumericData","group","substr","remainingNum","15","GF","p1","p2","coeff","mod","divident","divisor","result","offset","slice","generateECPolynomial","degree","poly","16","AlignmentPattern","FinderPattern","MaskPattern","ECCode","ReedSolomonEncoder","Version","FormatInfo","Segments","isArray","setupFormatInfo","matrix","bits","createData","segments","forEach","dataTotalCodewordsBits","getSymbolTotalCodewords","remainingByte","totalCodewords","ecTotalCodewords","dataTotalCodewords","ecTotalBlocks","blocksInGroup1","totalCodewordsInGroup1","dataCodewordsInGroup1","dataCodewordsInGroup2","ecCount","rs","dcData","Array","ecData","maxDataSize","b","dataSize","encode","max","createCodewords","createSymbol","fromArray","estimatedVersion","rawSegments","rawSplit","getBestVersionForData","bestVersion","dataBits","moduleCount","modules","c","setupFinderPattern","setupTimingPattern","setupAlignmentPattern","setupVersionInfo","inc","bitIndex","byteIndex","dark","setupData","bind","create","options","toSJISFunc","setToSJISFunction","17","Polynomial","genPoly","initialize","pad","paddedData","concat","remainder","buff","copy","18","kanji","byte","RegExp","BYTE_KANJI","TEST_KANJI","TEST_NUMERIC","TEST_ALPHANUMERIC","str","test","19","dijkstra","getStringByteLength","unescape","encodeURIComponent","getSegments","regex","exec","getSegmentsFromString","byteSegs","kanjiSegs","numSegs","alphaNumSegs","isKanjiModeEnabled","sort","s1","s2","map","obj","getSegmentBitsLength","buildSingleSegment","modesHint","bestMode","array","reduce","acc","seg","graph","nodes","table","prevNodeIds","nodeGroup","currentNodeIds","node","key","lastCount","prevNodeId","buildGraph","segs","buildNodes","path","find_path","optimizedSegs","curr","prevSeg","mergeSegments","20","toSJISFunction","CODEWORDS_COUNT","digit","21","22","G18_BCH","getReservedBitsCount","getTotalBitsFromDataArray","totalBits","reservedBits","getCapacity","usableBits","ecl","currentVersion","getBestVersionForMixedData","getBestVersionForDataLength","23","canPromise","QRCode","CanvasRenderer","SvgRenderer","renderCanvas","renderFunc","canvas","text","opts","cb","args","arguments","argsNum","isLastArgCb","getContext","Promise","resolve","reject","toCanvas","render","toDataURL","renderToDataURL","_","24","qrData","canvasEl","document","createElement","getCanvasElement","getOptions","getImageWidth","ctx","image","createImageData","qrToImageData","clearRect","width","height","style","clearCanvas","putImageData","type","rendererOpts","quality","25","getColorAttrib","color","attrib","alpha","hex","toFixed","svgCmd","cmd","qrcodesize","margin","bg","light","moveBy","newRow","lineLength","qrToPath","viewBox","svgTag","26","hex2rgba","hexCode","split","apply","hexValue","g","scale","getScale","qrSize","imgData","qr","symbolSize","scaledMargin","palette","posDst","pxColor","27","TYPED_ARRAY_SUPPORT","Uint8Array","__proto__","foo","typedArraySupport","K_MAX_LENGTH","arg","allocUnsafe","that","TypeError","ArrayBuffer","byteOffset","byteLength","RangeError","buf","fromArrayLike","fromArrayBuffer","createBuffer","actual","isBuffer","len","checked","val","fromObject","utf8ToBytes","units","codePoint","leadSurrogate","bytes","charCodeAt","isView","Symbol","species","defineProperty","configurable","enumerable","writable","isFinite","remaining","src","dst","blitBuffer","utf8Write","newBuf","subarray","sliceLen","target","targetStart","list","_isBuffer","28","G","then","29","single_source_shortest_paths","s","predecessors","costs","closest","v","cost_of_s_to_u","adjacent_nodes","cost_of_s_to_u_plus_cost_of_e","cost_of_s_to_v","open","PriorityQueue","make","empty","pop","cost","hasOwnProperty","msg","extract_shortest_path_from_predecessor_list","T","queue","sorter","default_sorter","item","shift","30","31","name","props","tag","String","default","$slots","watch","$props","deep","immediate","handler","$el","generate","methods","_this","error","url","innerHTML","mounted","_typeof","iterator","constructor","_classCallCheck","instance","Constructor","_defineProperties","descriptor","_toConsumableArray","arr2","_arrayWithoutHoles","iter","_iterableToArray","_nonIterableSpread","IN_BROWSER","WINDOW","CLASS_CROP","CLASS_DISABLED","CLASS_HIDDEN","CLASS_HIDE","CLASS_INVISIBLE","CLASS_MODAL","CLASS_MOVE","DATA_ACTION","DATA_PREVIEW","EVENT_POINTER_DOWN","PointerEvent","EVENT_POINTER_MOVE","EVENT_POINTER_UP","REGEXP_ACTIONS","REGEXP_DATA_URL","REGEXP_DATA_URL_JPEG","REGEXP_TAG_NAME","DEFAULTS","viewMode","dragMode","initialAspectRatio","NaN","aspectRatio","preview","responsive","restore","checkCrossOrigin","checkOrientation","modal","guides","center","highlight","background","autoCrop","autoCropArea","movable","rotatable","scalable","zoomable","zoomOnTouch","zoomOnWheel","wheelZoomRatio","cropBoxMovable","cropBoxResizable","toggleDragModeOnDblclick","minCanvasWidth","minCanvasHeight","minCropBoxWidth","minCropBoxHeight","minContainerWidth","minContainerHeight","ready","cropstart","cropmove","cropend","crop","zoom","Number","isNumber","isUndefined","isObject","isPlainObject","_constructor","isFunction","callback","assign","_len","_key","REGEXP_DECIMALS","normalizeDecimalNumber","times","round","REGEXP_SUFFIX","setStyle","element","styles","property","addClass","elem","classList","add","className","trim","removeClass","remove","toggleClass","added","REGEXP_HYPHENATE","hyphenate","getData","dataset","getAttribute","setData","setAttribute","REGEXP_SPACES","onceSupported","supported","once","listener","addEventListener","removeEventListener","removeListener","event","listeners","addListener","_handler","_element$listeners","_len2","_key2","dispatchEvent","Event","CustomEvent","detail","bubbles","cancelable","createEvent","initCustomEvent","getOffset","box","getBoundingClientRect","left","pageXOffset","documentElement","clientLeft","top","pageYOffset","clientTop","location","REGEXP_ORIGINS","isCrossOriginURL","parts","match","protocol","hostname","port","addTimestamp","timestamp","Date","getTime","getTransforms","_ref","rotate","scaleX","scaleY","translateX","translateY","values","transform","WebkitTransform","msTransform","getPointer","_ref2","endOnly","pageX","pageY","endX","endY","startX","startY","getAdjustedSizes","_ref4","isValidNumber","adjustedWidth","getSourceCanvas","_ref6","_ref7","_ref8","imageAspectRatio","imageNaturalWidth","naturalWidth","imageNaturalHeight","naturalHeight","_ref6$rotate","_ref6$scaleX","_ref6$scaleY","_ref8$fillColor","fillColor","_ref8$imageSmoothingE","imageSmoothingEnabled","_ref8$imageSmoothingQ","imageSmoothingQuality","_ref8$maxWidth","maxWidth","_ref8$maxHeight","maxHeight","_ref8$minWidth","minWidth","_ref8$minHeight","minHeight","context","maxSizes","minSizes","min","destMaxSizes","destMinSizes","destWidth","destHeight","params","fillStyle","fillRect","save","translate","PI","drawImage","param","fromCharCode","REGEXP_DATA_URL_HEAD","resetAndGetOrientation","arrayBuffer","orientation","dataView","DataView","littleEndian","app1Start","ifdStart","getUint8","tiffOffset","getStringFromCharCode","endianness","getUint16","firstIFDOffset","getUint32","_offset","_length","setUint16","initContainer","initCanvas","initCropBox","cropped","renderCropBox","container","cropper","containerData","offsetWidth","offsetHeight","imageData","rotated","canvasWidth","canvasHeight","canvasData","oldLeft","oldTop","limited","limitCanvas","initialImageData","initialCanvasData","sizeLimited","positionLimited","cropBoxData","_getAdjustedSizes","newCanvasLeft","newCanvasTop","minLeft","minTop","maxLeft","maxTop","changed","transformed","_getRotatedSizes","_ref5","arc","sinArc","sin","cosArc","cos","newWidth","newHeight","getRotatedSizes","renderImage","limitCropBox","output","initialCropBoxData","maxCropBoxWidth","maxCropBoxHeight","face","cropBox","disabled","initPreview","crossOrigin","crossOriginUrl","appendChild","viewBoxImage","previews","ownerDocument","querySelectorAll","querySelector","el","img","html","cssText","resetPreview","removeAttribute","removeData","cropBoxWidth","cropBoxHeight","originalWidth","originalHeight","ratio","getElementsByTagName","events","onCropStart","cropStart","onWheel","wheel","onDblclick","dblclick","onCropMove","cropMove","onCropEnd","cropEnd","onResize","resize","unbind","handlers","getCanvasData","getCropBoxData","setCanvasData","setCropBoxData","setDragMode","dragBox","contains","delta","preventDefault","wheeling","setTimeout","deltaY","wheelDelta","action","pointers","changedTouches","touch","identifier","pointerId","originalEvent","cropping","change","right","bottom","renderable","shiftKey","pointer","range","check","side","move","pointers2","ratios","pointer2","x1","y1","x2","y2","z1","sqrt","getMaxZoomRatio","reset","clear","hasSameSize","isImg","replaced","uncreate","load","enable","disable","destroy","originalUrl","offsetX","offsetY","_this$canvasData","moveTo","_originalEvent","zoomTo","pivot","oldRatio","count","_ref3","getPointersCenter","rotateTo","_scaleX","_scaleY","rounded","getContainerData","getImageData","sized","widthChanged","heightChanged","getCroppedCanvas","HTMLCanvasElement","source","_this$getData","initialX","initialY","initialWidth","initialHeight","_options$imageSmoothi","srcWidth","srcHeight","dstX","dstY","dstWidth","dstHeight","sourceWidth","sourceHeight","srcX","srcY","setAspectRatio","croppable","AnotherCropper","Cropper","tagName","reloading","sizing","init","protoProps","staticProps","read","base64","binary","atob","uint8","clone","xhr","XMLHttpRequest","ontimeout","onabort","onerror","onprogress","getResponseHeader","abort","onload","response","onloadend","responseType","withCredentials","send","mimeType","chunks","btoa","arrayBufferToDataURL","_parseOrientation","parseOrientation","stop","parentNode","insertBefore","nextSibling","_this2","IS_SAFARI","navigator","userAgent","done","build","sizingImage","body","removeChild","template","getElementsByClassName","unbuild","aa","nativeName","ab","ae","af","ak","am","an","ar","as","av","ay","az","ba","be","bh","bi","bm","bn","bo","br","bs","ca","ce","ch","co","cr","cs","cu","cv","cy","da","de","dv","dz","ee","en","eo","es","et","eu","fa","ff","fi","fj","fo","fr","fy","ga","gd","gl","gn","gu","gv","ha","he","hi","ho","hr","ht","hu","hy","hz","ia","ie","ig","ii","ik","io","is","it","iu","ja","jv","ka","kg","ki","kj","kk","kl","km","kn","ko","kr","ks","ku","kv","kw","ky","la","lb","lg","li","ln","lo","lt","lu","lv","mg","mh","mi","mk","ml","mn","mr","ms","mt","my","na","nb","nd","ne","ng","nl","nn","no","nr","nv","ny","oc","oj","om","or","os","pa","pi","pl","ps","pt","qu","rm","rn","ro","ru","rw","sa","sc","sd","se","sg","si","sk","sl","sm","sn","so","sq","sr","ss","st","su","sv","sw","ta","te","tg","th","ti","tk","tl","tn","to","tr","ts","tt","tw","ty","ug","uk","ur","uz","ve","vi","vo","wa","wo","xh","yi","yo","za","zh","zu","codes","getName","getNativeName","validate","find","language"],"mappings":"6EAAA,IAAIA,EAAiB,EAAQ,KAEzBC,EAAkB,EAAQ,KAE1BC,EAAkB,EAAQ,KAM9BC,EAAOC,QAJP,SAAkBC,GAChB,OAAOL,EAAeK,IAAQJ,EAAgBI,IAAQH,M,oBCPxD,IAAII,EAAe,EAAQ,KACvBC,EAAY,EAAQ,KACpBC,EAAgB,EAAQ,KACxBC,EAAkB,EAAQ,KAC1BC,EAAgB,EAAQ,KACxBC,EAAW,EAAQ,IAGnBC,EAAS,aAwCbT,EAAOC,QAhBP,SAAcS,EAAQC,EAAOC,GAE3B,IADAF,EAASF,EAASE,MACHE,QAAmBC,IAAVF,GACtB,OAAOD,EAAOI,QAAQL,EAAQ,IAEhC,IAAKC,KAAYC,EAAQR,EAAaQ,IACpC,OAAOD,EAET,IAAIK,EAAaR,EAAcG,GAC3BM,EAAaT,EAAcI,GAC3BM,EAAQX,EAAgBS,EAAYC,GACpCE,EAAMb,EAAcU,EAAYC,GAAc,EAElD,OAAOZ,EAAUW,EAAYE,EAAOC,GAAKC,KAAK,M,oBC7ChD,IAAIC,EAAc,EAAQ,KAkB1BpB,EAAOC,QAPP,SAAuBc,EAAYC,GAGjC,IAFA,IAAIK,EAAQN,EAAWO,OAEhBD,KAAWD,EAAYJ,EAAYD,EAAWM,GAAQ,IAAM,IACnE,OAAOA,I,oBCfT,IAAID,EAAc,EAAQ,KAmB1BpB,EAAOC,QARP,SAAyBc,EAAYC,GAInC,IAHA,IAAIK,GAAS,EACTC,EAASP,EAAWO,SAEfD,EAAQC,GAAUF,EAAYJ,EAAYD,EAAWM,GAAQ,IAAM,IAC5E,OAAOA,I,kCChBT;;;;;;;;;;AAUA,IAAIE,EAAmC,oBAAXC,OAAyBA,YAA2B,IAAXC,EAAyBA,EAAyB,oBAATC,KAAuBA,KAAO,GAE5I,SAASC,IACR,MAAM,IAAIC,MAAM,0EAOjB,IAAIC,EAJJ,SAA8BC,EAAI9B,GACjC,OAAiC8B,EAA1B9B,EAAS,CAAEC,QAAS,IAAiBD,EAAOC,SAAUD,EAAOC,QAGxD8B,EAAqB,SAAU/B,EAAQC,GACtCD,EAAOC,QAA8C,SAAS+B,EAAEC,EAAEC,EAAEC,GAAG,SAASC,EAAEC,EAAEC,GAAG,IAAIJ,EAAEG,GAAG,CAAC,IAAIJ,EAAEI,GAAG,CAA2D,IAAIC,GAApBX,EAAyB,OAAzBA,IAAwC,GAAGY,EAAE,OAAOA,EAAEF,GAAE,GAAI,IAAIG,EAAE,IAAIZ,MAAM,uBAAuBS,EAAE,KAAK,MAAMG,EAAEC,KAAK,mBAAmBD,EAAE,IAAIE,EAAER,EAAEG,GAAG,CAACpC,QAAQ,IAAIgC,EAAEI,GAAG,GAAGM,KAAKD,EAAEzC,SAAQ,SAAS+B,GAAoB,OAAOI,EAAlBH,EAAEI,GAAG,GAAGL,IAAeA,KAAIU,EAAEA,EAAEzC,QAAQ+B,EAAEC,EAAEC,EAAEC,GAAI,OAAOD,EAAEG,GAAGpC,QAAQ,IAAI,IAAIsC,EAAsCZ,EAAgBU,EAAE,EAAEA,EAAEF,EAAEb,OAAOe,IAAID,EAAED,EAAEE,IAAI,OAAOD,EAA9d,CAA6e,CAACQ,EAAE,CAAC,SAASC,EAAQ7C,EAAOC,GAWhkB,IAAI6C,EAAgBD,EAAQ,WAAWC,cAgBvC7C,EAAQ8C,gBAAkB,SAA0BC,GAClD,GAAgB,IAAZA,EAAe,MAAO,GAO1B,IALA,IAAIC,EAAWC,KAAKC,MAAMH,EAAU,GAAK,EACrCI,EAAON,EAAcE,GACrBK,EAAqB,MAATD,EAAe,GAAmD,EAA9CF,KAAKI,MAAMF,EAAO,KAAO,EAAIH,EAAW,IACxEM,EAAY,CAACH,EAAO,GAEff,EAAI,EAAGA,EAAIY,EAAW,EAAGZ,IAChCkB,EAAUlB,GAAKkB,EAAUlB,EAAI,GAAKgB,EAKpC,OAFAE,EAAUC,KAAK,GAERD,EAAUE,WAuBnBxD,EAAQyD,aAAe,SAAuBV,GAK5C,IAJA,IAAIW,EAAS,GACTC,EAAM3D,EAAQ8C,gBAAgBC,GAC9Ba,EAAYD,EAAItC,OAEXe,EAAI,EAAGA,EAAIwB,EAAWxB,IAC7B,IAAK,IAAIyB,EAAI,EAAGA,EAAID,EAAWC,IAElB,IAANzB,GAAiB,IAANyB,GACL,IAANzB,GAAWyB,IAAMD,EAAY,GAC7BxB,IAAMwB,EAAY,GAAW,IAANC,GAI5BH,EAAOH,KAAK,CAACI,EAAIvB,GAAIuB,EAAIE,KAI7B,OAAOH,IAGP,CAAC,UAAU,KAAKI,EAAE,CAAC,SAASlB,EAAQ7C,EAAOC,GAC7C,IAAI+D,EAAOnB,EAAQ,UAWfoB,EAAkB,CACpB,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC7C,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC5D,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC5D,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAG1C,SAASC,EAAkBC,GACzBC,KAAKC,KAAOL,EAAKM,aACjBF,KAAKD,KAAOA,EAGdD,EAAiBK,cAAgB,SAAwBjD,GACvD,OAAO,GAAK4B,KAAKC,MAAM7B,EAAS,GAAUA,EAAS,EAAd,GAGvC4C,EAAiBM,UAAUC,UAAY,WACrC,OAAOL,KAAKD,KAAK7C,QAGnB4C,EAAiBM,UAAUD,cAAgB,WACzC,OAAOL,EAAiBK,cAAcH,KAAKD,KAAK7C,SAGlD4C,EAAiBM,UAAUE,MAAQ,SAAgBC,GACjD,IAAItC,EAIJ,IAAKA,EAAI,EAAGA,EAAI,GAAK+B,KAAKD,KAAK7C,OAAQe,GAAK,EAAG,CAE7C,IAAIuC,EAAgD,GAAxCX,EAAgBY,QAAQT,KAAKD,KAAK9B,IAG9CuC,GAASX,EAAgBY,QAAQT,KAAKD,KAAK9B,EAAI,IAG/CsC,EAAUG,IAAIF,EAAO,IAKnBR,KAAKD,KAAK7C,OAAS,GACrBqD,EAAUG,IAAIb,EAAgBY,QAAQT,KAAKD,KAAK9B,IAAK,IAIzDrC,EAAOC,QAAUiE,GAEf,CAAC,SAAS,KAAKa,EAAE,CAAC,SAASlC,EAAQ7C,EAAOC,GAC5C,SAAS+E,IACPZ,KAAKa,OAAS,GACdb,KAAK9C,OAAS,EAGhB0D,EAAUR,UAAY,CAEpBU,IAAK,SAAU7D,GACb,IAAI8D,EAAWjC,KAAKC,MAAM9B,EAAQ,GAClC,OAA6D,IAApD+C,KAAKa,OAAOE,KAAe,EAAI9D,EAAQ,EAAM,IAGxDyD,IAAK,SAAUM,EAAK9D,GAClB,IAAK,IAAIe,EAAI,EAAGA,EAAIf,EAAQe,IAC1B+B,KAAKiB,OAA4C,IAAnCD,IAAS9D,EAASe,EAAI,EAAM,KAI9CiD,gBAAiB,WACf,OAAOlB,KAAK9C,QAGd+D,OAAQ,SAAUE,GAChB,IAAIJ,EAAWjC,KAAKC,MAAMiB,KAAK9C,OAAS,GACpC8C,KAAKa,OAAO3D,QAAU6D,GACxBf,KAAKa,OAAOzB,KAAK,GAGf+B,IACFnB,KAAKa,OAAOE,IAAc,MAAUf,KAAK9C,OAAS,GAGpD8C,KAAK9C,WAITtB,EAAOC,QAAU+E,GAEf,IAAIQ,EAAE,CAAC,SAAS3C,EAAQ7C,EAAOC,GACjC,IAAIwF,EAAS5C,EAAQ,mBAOrB,SAAS6C,EAAWtC,GAClB,IAAKA,GAAQA,EAAO,EAClB,MAAM,IAAIxB,MAAM,qDAGlBwC,KAAKhB,KAAOA,EACZgB,KAAKD,KAAO,IAAIsB,EAAOrC,EAAOA,GAC9BgB,KAAKD,KAAKwB,KAAK,GACfvB,KAAKwB,YAAc,IAAIH,EAAOrC,EAAOA,GACrCgB,KAAKwB,YAAYD,KAAK,GAYxBD,EAAUlB,UAAUqB,IAAM,SAAUC,EAAKC,EAAKnB,EAAOoB,GACnD,IAAI3E,EAAQyE,EAAM1B,KAAKhB,KAAO2C,EAC9B3B,KAAKD,KAAK9C,GAASuD,EACfoB,IAAU5B,KAAKwB,YAAYvE,IAAS,IAU1CqE,EAAUlB,UAAUU,IAAM,SAAUY,EAAKC,GACvC,OAAO3B,KAAKD,KAAK2B,EAAM1B,KAAKhB,KAAO2C,IAWrCL,EAAUlB,UAAUyB,IAAM,SAAUH,EAAKC,EAAKnB,GAC5CR,KAAKD,KAAK2B,EAAM1B,KAAKhB,KAAO2C,IAAQnB,GAUtCc,EAAUlB,UAAU0B,WAAa,SAAUJ,EAAKC,GAC9C,OAAO3B,KAAKwB,YAAYE,EAAM1B,KAAKhB,KAAO2C,IAG5C/F,EAAOC,QAAUyF,GAEf,CAAC,kBAAkB,KAAKS,EAAE,CAAC,SAAStD,EAAQ7C,EAAOC,GACrD,IAAIwF,EAAS5C,EAAQ,mBACjBmB,EAAOnB,EAAQ,UAEnB,SAASuD,EAAUjC,GACjBC,KAAKC,KAAOL,EAAKqC,KACjBjC,KAAKD,KAAO,IAAIsB,EAAOtB,GAGzBiC,EAAS7B,cAAgB,SAAwBjD,GAC/C,OAAgB,EAATA,GAGT8E,EAAS5B,UAAUC,UAAY,WAC7B,OAAOL,KAAKD,KAAK7C,QAGnB8E,EAAS5B,UAAUD,cAAgB,WACjC,OAAO6B,EAAS7B,cAAcH,KAAKD,KAAK7C,SAG1C8E,EAAS5B,UAAUE,MAAQ,SAAUC,GACnC,IAAK,IAAItC,EAAI,EAAGiE,EAAIlC,KAAKD,KAAK7C,OAAQe,EAAIiE,EAAGjE,IAC3CsC,EAAUG,IAAIV,KAAKD,KAAK9B,GAAI,IAIhCrC,EAAOC,QAAUmG,GAEf,CAAC,kBAAkB,GAAG,SAAS,KAAKG,EAAE,CAAC,SAAS1D,EAAQ7C,EAAOC,GACjE,IAAIuG,EAAU3D,EAAQ,4BAElB4D,EAAkB,CAEpB,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,GACT,EAAG,EAAG,GAAI,GACV,EAAG,EAAG,GAAI,GACV,EAAG,EAAG,GAAI,GACV,EAAG,GAAI,GAAI,GACX,EAAG,GAAI,GAAI,GACX,EAAG,GAAI,GAAI,GACX,EAAG,GAAI,GAAI,GACX,EAAG,GAAI,GAAI,GACX,EAAG,GAAI,GAAI,GACX,EAAG,GAAI,GAAI,GACX,EAAG,GAAI,GAAI,GACX,EAAG,GAAI,GAAI,GACX,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,IAGVC,EAAqB,CAEvB,EAAG,GAAI,GAAI,GACX,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,IACZ,GAAI,GAAI,IAAK,IACb,GAAI,GAAI,IAAK,IACb,GAAI,IAAK,IAAK,IACd,GAAI,IAAK,IAAK,IACd,GAAI,IAAK,IAAK,IACd,GAAI,IAAK,IAAK,IACd,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,KACf,IAAK,IAAK,IAAK,KACf,IAAK,IAAK,KAAM,KAChB,IAAK,IAAK,KAAM,KAChB,IAAK,IAAK,KAAM,KAChB,IAAK,IAAK,KAAM,KAChB,IAAK,IAAK,KAAM,KAChB,IAAK,IAAK,KAAM,KAChB,IAAK,IAAK,KAAM,KAChB,IAAK,KAAM,KAAM,KACjB,IAAK,KAAM,KAAM,KACjB,IAAK,KAAM,KAAM,KACjB,IAAK,KAAM,KAAM,KACjB,IAAK,KAAM,KAAM,KACjB,IAAK,KAAM,KAAM,KACjB,IAAK,KAAM,KAAM,MAWnBzG,EAAQ0G,eAAiB,SAAyB3D,EAAS4D,GACzD,OAAQA,GACN,KAAKJ,EAAQK,EACX,OAAOJ,EAAgC,GAAfzD,EAAU,GAAS,GAC7C,KAAKwD,EAAQM,EACX,OAAOL,EAAgC,GAAfzD,EAAU,GAAS,GAC7C,KAAKwD,EAAQO,EACX,OAAON,EAAgC,GAAfzD,EAAU,GAAS,GAC7C,KAAKwD,EAAQQ,EACX,OAAOP,EAAgC,GAAfzD,EAAU,GAAS,GAC7C,QACE,SAYN/C,EAAQgH,uBAAyB,SAAiCjE,EAAS4D,GACzE,OAAQA,GACN,KAAKJ,EAAQK,EACX,OAAOH,EAAmC,GAAf1D,EAAU,GAAS,GAChD,KAAKwD,EAAQM,EACX,OAAOJ,EAAmC,GAAf1D,EAAU,GAAS,GAChD,KAAKwD,EAAQO,EACX,OAAOL,EAAmC,GAAf1D,EAAU,GAAS,GAChD,KAAKwD,EAAQQ,EACX,OAAON,EAAmC,GAAf1D,EAAU,GAAS,GAChD,QACE,UAIJ,CAAC,2BAA2B,IAAIkE,EAAE,CAAC,SAASrE,EAAQ7C,EAAOC,GAC7DA,EAAQ4G,EAAI,CAAEtB,IAAK,GACnBtF,EAAQ6G,EAAI,CAAEvB,IAAK,GACnBtF,EAAQ8G,EAAI,CAAExB,IAAK,GACnBtF,EAAQ+G,EAAI,CAAEzB,IAAK,GA+BnBtF,EAAQkH,QAAU,SAAkBC,GAClC,OAAOA,QAA8B,IAAdA,EAAM7B,KAC3B6B,EAAM7B,KAAO,GAAK6B,EAAM7B,IAAM,GAGlCtF,EAAQoH,KAAO,SAAezC,EAAO0C,GACnC,GAAIrH,EAAQkH,QAAQvC,GAClB,OAAOA,EAGT,IACE,OAxCJ,SAAqBlE,GACnB,GAAsB,iBAAXA,EACT,MAAM,IAAIkB,MAAM,yBAKlB,OAFYlB,EAAO6G,eAGjB,IAAK,IACL,IAAK,MACH,OAAOtH,EAAQ4G,EAEjB,IAAK,IACL,IAAK,SACH,OAAO5G,EAAQ6G,EAEjB,IAAK,IACL,IAAK,WACH,OAAO7G,EAAQ8G,EAEjB,IAAK,IACL,IAAK,OACH,OAAO9G,EAAQ+G,EAEjB,QACE,MAAM,IAAIpF,MAAM,qBAAuBlB,IAelC8G,CAAW5C,GAClB,MAAO3C,GACP,OAAOqF,KAIT,IAAIG,EAAE,CAAC,SAAS5E,EAAQ7C,EAAOC,GACjC,IAAI6C,EAAgBD,EAAQ,WAAWC,cAUvC7C,EAAQyD,aAAe,SAAuBV,GAC5C,IAAII,EAAON,EAAcE,GAEzB,MAAO,CAEL,CAAC,EAAG,GAEJ,CAACI,EAhBqB,EAgBO,GAE7B,CAAC,EAAGA,EAlBkB,MAsBxB,CAAC,UAAU,KAAKsE,EAAE,CAAC,SAAS7E,EAAQ7C,EAAOC,GAC7C,IAAI0H,EAAQ9E,EAAQ,WAIhB+E,EAAUD,EAAME,YAFV,MAcV5H,EAAQ6H,eAAiB,SAAyBlB,EAAsBmB,GAItE,IAHA,IAAI5D,EAASyC,EAAqBrB,KAAO,EAAKwC,EAC1CC,EAAI7D,GAAQ,GAETwD,EAAME,YAAYG,GAAKJ,GAAW,GACvCI,GAnBM,MAmBQL,EAAME,YAAYG,GAAKJ,EAMvC,OAxBa,OAwBJzD,GAAQ,GAAM6D,KAGvB,CAAC,UAAU,KAAKC,GAAG,CAAC,SAASpF,EAAQ7C,EAAOC,GAC9C,IAAIwF,EAAS5C,EAAQ,mBAEjBqF,EAAY,IAAIzC,EAAO,KACvB0C,EAAY,IAAI1C,EAAO,MAUzB,WAEA,IADA,IAAI2C,EAAI,EACC/F,EAAI,EAAGA,EAAI,IAAKA,IACvB6F,EAAU7F,GAAK+F,EACfD,EAAUC,GAAK/F,EAMP,KAJR+F,IAAM,KAKJA,GAAK,KAQT,IAAK/F,EAAI,IAAKA,EAAI,IAAKA,IACrB6F,EAAU7F,GAAK6F,EAAU7F,EAAI,KApBhC,GA8BDpC,EAAQoI,IAAM,SAAcnG,GAC1B,GAAIA,EAAI,EAAG,MAAM,IAAIN,MAAM,OAASM,EAAI,KACxC,OAAOiG,EAAUjG,IASnBjC,EAAQqI,IAAM,SAAcpG,GAC1B,OAAOgG,EAAUhG,IAUnBjC,EAAQsI,IAAM,SAAcH,EAAGI,GAC7B,OAAU,IAANJ,GAAiB,IAANI,EAAgB,EAIxBN,EAAUC,EAAUC,GAAKD,EAAUK,MAG1C,CAAC,kBAAkB,KAAKC,GAAG,CAAC,SAAS5F,EAAQ7C,EAAOC,GACtD,IAAI+D,EAAOnB,EAAQ,UACf8E,EAAQ9E,EAAQ,WAEpB,SAAS6F,EAAWvE,GAClBC,KAAKC,KAAOL,EAAK2E,MACjBvE,KAAKD,KAAOA,EAGduE,EAAUnE,cAAgB,SAAwBjD,GAChD,OAAgB,GAATA,GAGToH,EAAUlE,UAAUC,UAAY,WAC9B,OAAOL,KAAKD,KAAK7C,QAGnBoH,EAAUlE,UAAUD,cAAgB,WAClC,OAAOmE,EAAUnE,cAAcH,KAAKD,KAAK7C,SAG3CoH,EAAUlE,UAAUE,MAAQ,SAAUC,GACpC,IAAItC,EAKJ,IAAKA,EAAI,EAAGA,EAAI+B,KAAKD,KAAK7C,OAAQe,IAAK,CACrC,IAAIuC,EAAQ+C,EAAMiB,OAAOxE,KAAKD,KAAK9B,IAGnC,GAAIuC,GAAS,OAAUA,GAAS,MAE9BA,GAAS,UAGJ,MAAIA,GAAS,OAAUA,GAAS,OAIrC,MAAM,IAAIhD,MACR,2BAA6BwC,KAAKD,KAAK9B,GAAvC,qCAHFuC,GAAS,MASXA,EAAkC,KAAvBA,IAAU,EAAK,MAAyB,IAARA,GAG3CD,EAAUG,IAAIF,EAAO,MAIzB5E,EAAOC,QAAUyI,GAEf,CAAC,SAAS,GAAG,UAAU,KAAKG,GAAG,CAAC,SAAShG,EAAQ7C,EAAOC,GAK1DA,EAAQ6I,SAAW,CACjBC,WAAY,EACZC,WAAY,EACZC,WAAY,EACZC,WAAY,EACZC,WAAY,EACZC,WAAY,EACZC,WAAY,EACZC,WAAY,GAOd,IAAIC,EACE,EADFA,EAEE,EAFFA,EAGE,GAHFA,EAIE,GAkJN,SAASC,EAAWC,EAAapH,EAAGyB,GAClC,OAAQ2F,GACN,KAAKxJ,EAAQ6I,SAASC,WAAY,OAAQ1G,EAAIyB,GAAK,GAAM,EACzD,KAAK7D,EAAQ6I,SAASE,WAAY,OAAO3G,EAAI,GAAM,EACnD,KAAKpC,EAAQ6I,SAASG,WAAY,OAAOnF,EAAI,GAAM,EACnD,KAAK7D,EAAQ6I,SAASI,WAAY,OAAQ7G,EAAIyB,GAAK,GAAM,EACzD,KAAK7D,EAAQ6I,SAASK,WAAY,OAAQjG,KAAKC,MAAMd,EAAI,GAAKa,KAAKC,MAAMW,EAAI,IAAM,GAAM,EACzF,KAAK7D,EAAQ6I,SAASM,WAAY,OAAQ/G,EAAIyB,EAAK,EAAKzB,EAAIyB,EAAK,GAAM,EACvE,KAAK7D,EAAQ6I,SAASO,WAAY,OAAShH,EAAIyB,EAAK,EAAKzB,EAAIyB,EAAK,GAAK,GAAM,EAC7E,KAAK7D,EAAQ6I,SAASQ,WAAY,OAASjH,EAAIyB,EAAK,GAAKzB,EAAIyB,GAAK,GAAK,GAAM,EAE7E,QAAS,MAAM,IAAIlC,MAAM,mBAAqB6H,IApJlDxJ,EAAQkH,QAAU,SAAkBY,GAClC,OAAe,MAARA,GAAyB,KAATA,IAAgB2B,MAAM3B,IAASA,GAAQ,GAAKA,GAAQ,GAU7E9H,EAAQoH,KAAO,SAAezC,GAC5B,OAAO3E,EAAQkH,QAAQvC,GAAS+E,SAAS/E,EAAO,SAAM/D,GAUxDZ,EAAQ2J,aAAe,SAAuBzF,GAQ5C,IAPA,IAAIf,EAAOe,EAAKf,KACZyG,EAAS,EACTC,EAAe,EACfC,EAAe,EACfC,EAAU,KACVC,EAAU,KAELnE,EAAM,EAAGA,EAAM1C,EAAM0C,IAAO,CACnCgE,EAAeC,EAAe,EAC9BC,EAAUC,EAAU,KAEpB,IAAK,IAAIlE,EAAM,EAAGA,EAAM3C,EAAM2C,IAAO,CACnC,IAAI/F,EAASmE,EAAKe,IAAIY,EAAKC,GACvB/F,IAAWgK,EACbF,KAEIA,GAAgB,IAAGD,GAAUN,GAAoBO,EAAe,IACpEE,EAAUhK,EACV8J,EAAe,IAGjB9J,EAASmE,EAAKe,IAAIa,EAAKD,MACRmE,EACbF,KAEIA,GAAgB,IAAGF,GAAUN,GAAoBQ,EAAe,IACpEE,EAAUjK,EACV+J,EAAe,GAIfD,GAAgB,IAAGD,GAAUN,GAAoBO,EAAe,IAChEC,GAAgB,IAAGF,GAAUN,GAAoBQ,EAAe,IAGtE,OAAOF,GAQT5J,EAAQiK,aAAe,SAAuB/F,GAI5C,IAHA,IAAIf,EAAOe,EAAKf,KACZyG,EAAS,EAEJ/D,EAAM,EAAGA,EAAM1C,EAAO,EAAG0C,IAChC,IAAK,IAAIC,EAAM,EAAGA,EAAM3C,EAAO,EAAG2C,IAAO,CACvC,IAAIoE,EAAOhG,EAAKe,IAAIY,EAAKC,GACvB5B,EAAKe,IAAIY,EAAKC,EAAM,GACpB5B,EAAKe,IAAIY,EAAM,EAAGC,GAClB5B,EAAKe,IAAIY,EAAM,EAAGC,EAAM,GAEb,IAAToE,GAAuB,IAATA,GAAYN,IAIlC,OAAOA,EAASN,GASlBtJ,EAAQmK,aAAe,SAAuBjG,GAM5C,IALA,IAAIf,EAAOe,EAAKf,KACZyG,EAAS,EACTQ,EAAU,EACVC,EAAU,EAELxE,EAAM,EAAGA,EAAM1C,EAAM0C,IAAO,CACnCuE,EAAUC,EAAU,EACpB,IAAK,IAAIvE,EAAM,EAAGA,EAAM3C,EAAM2C,IAC5BsE,EAAYA,GAAW,EAAK,KAASlG,EAAKe,IAAIY,EAAKC,GAC/CA,GAAO,KAAmB,OAAZsE,GAAiC,KAAZA,IAAoBR,IAE3DS,EAAYA,GAAW,EAAK,KAASnG,EAAKe,IAAIa,EAAKD,GAC/CC,GAAO,KAAmB,OAAZuE,GAAiC,KAAZA,IAAoBT,IAI/D,OAAOA,EAASN,GAWlBtJ,EAAQsK,aAAe,SAAuBpG,GAI5C,IAHA,IAAIqG,EAAY,EACZC,EAAetG,EAAKA,KAAK7C,OAEpBe,EAAI,EAAGA,EAAIoI,EAAcpI,IAAKmI,GAAarG,EAAKA,KAAK9B,GAI9D,OAFQa,KAAKwH,IAAIxH,KAAKI,KAAkB,IAAZkH,EAAkBC,EAAgB,GAAK,IAExDlB,GAgCbtJ,EAAQ0K,UAAY,SAAoBC,EAASzG,GAG/C,IAFA,IAAIf,EAAOe,EAAKf,KAEP2C,EAAM,EAAGA,EAAM3C,EAAM2C,IAC5B,IAAK,IAAID,EAAM,EAAGA,EAAM1C,EAAM0C,IACxB3B,EAAK+B,WAAWJ,EAAKC,IACzB5B,EAAK8B,IAAIH,EAAKC,EAAKyD,EAAUoB,EAAS9E,EAAKC,KAWjD9F,EAAQ4K,YAAc,SAAsB1G,EAAM2G,GAKhD,IAJA,IAAIC,EAAcC,OAAOC,KAAKhL,EAAQ6I,UAAUxH,OAC5C4J,EAAc,EACdC,EAAeC,IAEV1I,EAAI,EAAGA,EAAIqI,EAAarI,IAAK,CACpCoI,EAAgBpI,GAChBzC,EAAQ0K,UAAUjI,EAAGyB,GAGrB,IAAIkH,EACFpL,EAAQ2J,aAAazF,GACrBlE,EAAQiK,aAAa/F,GACrBlE,EAAQmK,aAAajG,GACrBlE,EAAQsK,aAAapG,GAGvBlE,EAAQ0K,UAAUjI,EAAGyB,GAEjBkH,EAAUF,IACZA,EAAeE,EACfH,EAAcxI,GAIlB,OAAOwI,IAGP,IAAII,GAAG,CAAC,SAASzI,EAAQ7C,EAAOC,GAClC,IAAIsL,EAAe1I,EAAQ,mBACvB2I,EAAQ3I,EAAQ,WASpB5C,EAAQwL,QAAU,CAChBC,GAAI,UACJnG,IAAK,EACLoG,OAAQ,CAAC,GAAI,GAAI,KAYnB1L,EAAQqE,aAAe,CACrBoH,GAAI,eACJnG,IAAK,EACLoG,OAAQ,CAAC,EAAG,GAAI,KAQlB1L,EAAQoG,KAAO,CACbqF,GAAI,OACJnG,IAAK,EACLoG,OAAQ,CAAC,EAAG,GAAI,KAYlB1L,EAAQ0I,MAAQ,CACd+C,GAAI,QACJnG,IAAK,EACLoG,OAAQ,CAAC,EAAG,GAAI,KASlB1L,EAAQ2L,MAAQ,CACdrG,KAAM,GAWRtF,EAAQ4L,sBAAwB,SAAgCxH,EAAMrB,GACpE,IAAKqB,EAAKsH,OAAQ,MAAM,IAAI/J,MAAM,iBAAmByC,GAErD,IAAKkH,EAAapE,QAAQnE,GACxB,MAAM,IAAIpB,MAAM,oBAAsBoB,GAGxC,OAAIA,GAAW,GAAKA,EAAU,GAAWqB,EAAKsH,OAAO,GAC5C3I,EAAU,GAAWqB,EAAKsH,OAAO,GACnCtH,EAAKsH,OAAO,IASrB1L,EAAQ6L,mBAAqB,SAA6BC,GACxD,OAAIP,EAAMQ,YAAYD,GAAiB9L,EAAQwL,QACtCD,EAAMS,iBAAiBF,GAAiB9L,EAAQqE,aAChDkH,EAAMU,UAAUH,GAAiB9L,EAAQ0I,MACtC1I,EAAQoG,MAStBpG,EAAQO,SAAW,SAAmB6D,GACpC,GAAIA,GAAQA,EAAKqH,GAAI,OAAOrH,EAAKqH,GACjC,MAAM,IAAI9J,MAAM,iBASlB3B,EAAQkH,QAAU,SAAkB9C,GAClC,OAAOA,GAAQA,EAAKkB,KAAOlB,EAAKsH,QAsClC1L,EAAQoH,KAAO,SAAezC,EAAO0C,GACnC,GAAIrH,EAAQkH,QAAQvC,GAClB,OAAOA,EAGT,IACE,OAnCJ,SAAqBlE,GACnB,GAAsB,iBAAXA,EACT,MAAM,IAAIkB,MAAM,yBAKlB,OAFYlB,EAAO6G,eAGjB,IAAK,UACH,OAAOtH,EAAQwL,QACjB,IAAK,eACH,OAAOxL,EAAQqE,aACjB,IAAK,QACH,OAAOrE,EAAQ0I,MACjB,IAAK,OACH,OAAO1I,EAAQoG,KACjB,QACE,MAAM,IAAIzE,MAAM,iBAAmBlB,IAkB9B8G,CAAW5C,GAClB,MAAO3C,GACP,OAAOqF,KAIT,CAAC,UAAU,GAAG,kBAAkB,KAAK6E,GAAG,CAAC,SAAStJ,EAAQ7C,EAAOC,GACnE,IAAI+D,EAAOnB,EAAQ,UAEnB,SAASuJ,EAAajI,GACpBC,KAAKC,KAAOL,EAAKyH,QACjBrH,KAAKD,KAAOA,EAAK3D,WAGnB4L,EAAY7H,cAAgB,SAAwBjD,GAClD,OAAO,GAAK4B,KAAKC,MAAM7B,EAAS,IAAOA,EAAS,EAAOA,EAAS,EAAK,EAAI,EAAK,IAGhF8K,EAAY5H,UAAUC,UAAY,WAChC,OAAOL,KAAKD,KAAK7C,QAGnB8K,EAAY5H,UAAUD,cAAgB,WACpC,OAAO6H,EAAY7H,cAAcH,KAAKD,KAAK7C,SAG7C8K,EAAY5H,UAAUE,MAAQ,SAAgBC,GAC5C,IAAItC,EAAGgK,EAAOzH,EAId,IAAKvC,EAAI,EAAGA,EAAI,GAAK+B,KAAKD,KAAK7C,OAAQe,GAAK,EAC1CgK,EAAQjI,KAAKD,KAAKmI,OAAOjK,EAAG,GAC5BuC,EAAQ+E,SAAS0C,EAAO,IAExB1H,EAAUG,IAAIF,EAAO,IAKvB,IAAI2H,EAAenI,KAAKD,KAAK7C,OAASe,EAClCkK,EAAe,IACjBF,EAAQjI,KAAKD,KAAKmI,OAAOjK,GACzBuC,EAAQ+E,SAAS0C,EAAO,IAExB1H,EAAUG,IAAIF,EAAsB,EAAf2H,EAAmB,KAI5CvM,EAAOC,QAAUmM,GAEf,CAAC,SAAS,KAAKI,GAAG,CAAC,SAAS3J,EAAQ7C,EAAOC,GAC7C,IAAIwF,EAAS5C,EAAQ,mBACjB4J,EAAK5J,EAAQ,kBASjB5C,EAAQsI,IAAM,SAAcmE,EAAIC,GAC9B,IAAIC,EAAQ,IAAInH,EAAOiH,EAAGpL,OAASqL,EAAGrL,OAAS,GAC/CsL,EAAMjH,KAAK,GAEX,IAAK,IAAItD,EAAI,EAAGA,EAAIqK,EAAGpL,OAAQe,IAC7B,IAAK,IAAIyB,EAAI,EAAGA,EAAI6I,EAAGrL,OAAQwC,IAC7B8I,EAAMvK,EAAIyB,IAAM2I,EAAGlE,IAAImE,EAAGrK,GAAIsK,EAAG7I,IAIrC,OAAO8I,GAUT3M,EAAQ4M,IAAM,SAAcC,EAAUC,GAGpC,IAFA,IAAIC,EAAS,IAAIvH,EAAOqH,GAEhBE,EAAO1L,OAASyL,EAAQzL,QAAW,GAAG,CAG5C,IAFA,IAAIsL,EAAQI,EAAO,GAEV3K,EAAI,EAAGA,EAAI0K,EAAQzL,OAAQe,IAClC2K,EAAO3K,IAAMoK,EAAGlE,IAAIwE,EAAQ1K,GAAIuK,GAKlC,IADA,IAAIK,EAAS,EACNA,EAASD,EAAO1L,QAA6B,IAAnB0L,EAAOC,IAAeA,IACvDD,EAASA,EAAOE,MAAMD,GAGxB,OAAOD,GAUT/M,EAAQkN,qBAAuB,SAA+BC,GAE5D,IADA,IAAIC,EAAO,IAAI5H,EAAO,CAAC,IACdpD,EAAI,EAAGA,EAAI+K,EAAQ/K,IAC1BgL,EAAOpN,EAAQsI,IAAI8E,EAAM,CAAC,EAAGZ,EAAGnE,IAAIjG,KAGtC,OAAOgL,IAGP,CAAC,kBAAkB,GAAG,iBAAiB,KAAKC,GAAG,CAAC,SAASzK,EAAQ7C,EAAOC,GAC1E,IAAIwF,EAAS5C,EAAQ,mBACjB8E,EAAQ9E,EAAQ,WAChB2D,EAAU3D,EAAQ,4BAClBmC,EAAYnC,EAAQ,gBACpB6C,EAAY7C,EAAQ,gBACpB0K,EAAmB1K,EAAQ,uBAC3B2K,EAAgB3K,EAAQ,oBACxB4K,EAAc5K,EAAQ,kBACtB6K,EAAS7K,EAAQ,2BACjB8K,EAAqB9K,EAAQ,0BAC7B+K,EAAU/K,EAAQ,aAClBgL,EAAahL,EAAQ,iBACrBmB,EAAOnB,EAAQ,UACfiL,EAAWjL,EAAQ,cACnBkL,EAAUlL,EAAQ,WAqItB,SAASmL,EAAiBC,EAAQrH,EAAsB6C,GACtD,IAEIpH,EAAGwK,EAFHzJ,EAAO6K,EAAO7K,KACd8K,EAAOL,EAAW/F,eAAelB,EAAsB6C,GAG3D,IAAKpH,EAAI,EAAGA,EAAI,GAAIA,IAClBwK,EAA4B,IAApBqB,GAAQ7L,EAAK,GAGjBA,EAAI,EACN4L,EAAOpI,IAAIxD,EAAG,EAAGwK,GAAK,GACbxK,EAAI,EACb4L,EAAOpI,IAAIxD,EAAI,EAAG,EAAGwK,GAAK,GAE1BoB,EAAOpI,IAAIzC,EAAO,GAAKf,EAAG,EAAGwK,GAAK,GAIhCxK,EAAI,EACN4L,EAAOpI,IAAI,EAAGzC,EAAOf,EAAI,EAAGwK,GAAK,GACxBxK,EAAI,EACb4L,EAAOpI,IAAI,EAAG,GAAKxD,EAAI,EAAI,EAAGwK,GAAK,GAEnCoB,EAAOpI,IAAI,EAAG,GAAKxD,EAAI,EAAGwK,GAAK,GAKnCoB,EAAOpI,IAAIzC,EAAO,EAAG,EAAG,GAAG,GAyD7B,SAAS+K,EAAYnL,EAAS4D,EAAsBwH,GAElD,IAAInJ,EAAS,IAAID,EAEjBoJ,EAASC,SAAQ,SAAUlK,GAEzBc,EAAOH,IAAIX,EAAKE,KAAKkB,IAAK,GAS1BN,EAAOH,IAAIX,EAAKM,YAAaT,EAAK6H,sBAAsB1H,EAAKE,KAAMrB,IAGnEmB,EAAKO,MAAMO,MAIb,IAEIqJ,EAA+D,GAF9C3G,EAAM4G,wBAAwBvL,GAC5B0K,EAAOzG,uBAAuBjE,EAAS4D,IAiB9D,IATI3B,EAAOK,kBAAoB,GAAKgJ,GAClCrJ,EAAOH,IAAI,EAAG,GAQTG,EAAOK,kBAAoB,GAAM,GACtCL,EAAOI,OAAO,GAQhB,IADA,IAAImJ,GAAiBF,EAAyBrJ,EAAOK,mBAAqB,EACjEjD,EAAI,EAAGA,EAAImM,EAAenM,IACjC4C,EAAOH,IAAIzC,EAAI,EAAI,GAAO,IAAM,GAGlC,OAYF,SAA0BsC,EAAW3B,EAAS4D,GAmC5C,IAjCA,IAAI6H,EAAiB9G,EAAM4G,wBAAwBvL,GAG/C0L,EAAmBhB,EAAOzG,uBAAuBjE,EAAS4D,GAG1D+H,EAAqBF,EAAiBC,EAGtCE,EAAgBlB,EAAO/G,eAAe3D,EAAS4D,GAI/CiI,EAAiBD,EADAH,EAAiBG,EAGlCE,EAAyB5L,KAAKC,MAAMsL,EAAiBG,GAErDG,EAAwB7L,KAAKC,MAAMwL,EAAqBC,GACxDI,EAAwBD,EAAwB,EAGhDE,EAAUH,EAAyBC,EAGnCG,EAAK,IAAIvB,EAAmBsB,GAE5BhC,EAAS,EACTkC,EAAS,IAAIC,MAAMR,GACnBS,EAAS,IAAID,MAAMR,GACnBU,EAAc,EACdrK,EAAS,IAAIQ,EAAOd,EAAUM,QAGzBsK,EAAI,EAAGA,EAAIX,EAAeW,IAAK,CACtC,IAAIC,EAAWD,EAAIV,EAAiBE,EAAwBC,EAG5DG,EAAOI,GAAKtK,EAAOiI,MAAMD,EAAQA,EAASuC,GAG1CH,EAAOE,GAAKL,EAAGO,OAAON,EAAOI,IAE7BtC,GAAUuC,EACVF,EAAcpM,KAAKwM,IAAIJ,EAAaE,GAKtC,IAEInN,EAAGL,EAFHmC,EAAO,IAAIsB,EAAOgJ,GAClBpN,EAAQ,EAIZ,IAAKgB,EAAI,EAAGA,EAAIiN,EAAajN,IAC3B,IAAKL,EAAI,EAAGA,EAAI4M,EAAe5M,IACzBK,EAAI8M,EAAOnN,GAAGV,SAChB6C,EAAK9C,KAAW8N,EAAOnN,GAAGK,IAMhC,IAAKA,EAAI,EAAGA,EAAI4M,EAAS5M,IACvB,IAAKL,EAAI,EAAGA,EAAI4M,EAAe5M,IAC7BmC,EAAK9C,KAAWgO,EAAOrN,GAAGK,GAI9B,OAAO8B,EAlFAwL,CAAgB1K,EAAQjC,EAAS4D,GA8F1C,SAASgJ,EAAczL,EAAMnB,EAAS4D,EAAsB6C,GAC1D,IAAI2E,EAEJ,GAAIL,EAAQ5J,GACViK,EAAWN,EAAS+B,UAAU1L,OACzB,IAAoB,iBAATA,EAehB,MAAM,IAAIvC,MAAM,gBAdhB,IAAIkO,EAAmB9M,EAEvB,IAAK8M,EAAkB,CACrB,IAAIC,EAAcjC,EAASkC,SAAS7L,GAGpC2L,EAAmBlC,EAAQqC,sBAAsBF,EAC/CnJ,GAKJwH,EAAWN,EAAStG,WAAWrD,EAAM2L,GAAoB,IAM3D,IAAII,EAActC,EAAQqC,sBAAsB7B,EAC5CxH,GAGJ,IAAKsJ,EACH,MAAM,IAAItO,MAAM,2DAIlB,GAAKoB,GAIE,GAAIA,EAAUkN,EACnB,MAAM,IAAItO,MAAM,wHAE0CsO,EAAc,YANxElN,EAAUkN,EAUZ,IAAIC,EAAWhC,EAAWnL,EAAS4D,EAAsBwH,GAGrDgC,EAAczI,EAAM7E,cAAcE,GAClCqN,EAAU,IAAI3K,EAAU0K,GAgC5B,OA3ZF,SAA6BnC,EAAQjL,GAInC,IAHA,IAAII,EAAO6K,EAAO7K,KACdQ,EAAM4J,EAAc9J,aAAaV,GAE5BX,EAAI,EAAGA,EAAIuB,EAAItC,OAAQe,IAI9B,IAHA,IAAIyD,EAAMlC,EAAIvB,GAAG,GACb0D,EAAMnC,EAAIvB,GAAG,GAERL,GAAK,EAAGA,GAAK,EAAGA,IACvB,KAAI8D,EAAM9D,IAAM,GAAKoB,GAAQ0C,EAAM9D,GAEnC,IAAK,IAAIsO,GAAK,EAAGA,GAAK,EAAGA,IACnBvK,EAAMuK,IAAM,GAAKlN,GAAQ2C,EAAMuK,IAE9BtO,GAAK,GAAKA,GAAK,IAAY,IAANsO,GAAiB,IAANA,IAClCA,GAAK,GAAKA,GAAK,IAAY,IAANtO,GAAiB,IAANA,IAChCA,GAAK,GAAKA,GAAK,GAAKsO,GAAK,GAAKA,GAAK,EACpCrC,EAAOpI,IAAIC,EAAM9D,EAAG+D,EAAMuK,GAAG,GAAM,GAEnCrC,EAAOpI,IAAIC,EAAM9D,EAAG+D,EAAMuK,GAAG,GAAO,IA2W5CC,CAAmBF,EAASrN,GA7V9B,SAA6BiL,GAG3B,IAFA,IAAI7K,EAAO6K,EAAO7K,KAETpB,EAAI,EAAGA,EAAIoB,EAAO,EAAGpB,IAAK,CACjC,IAAI4C,EAAQ5C,EAAI,GAAM,EACtBiM,EAAOpI,IAAI7D,EAAG,EAAG4C,GAAO,GACxBqJ,EAAOpI,IAAI,EAAG7D,EAAG4C,GAAO,IAwV1B4L,CAAmBH,GA5UrB,SAAgCpC,EAAQjL,GAGtC,IAFA,IAAIY,EAAM2J,EAAiB7J,aAAaV,GAE/BX,EAAI,EAAGA,EAAIuB,EAAItC,OAAQe,IAI9B,IAHA,IAAIyD,EAAMlC,EAAIvB,GAAG,GACb0D,EAAMnC,EAAIvB,GAAG,GAERL,GAAK,EAAGA,GAAK,EAAGA,IACvB,IAAK,IAAIsO,GAAK,EAAGA,GAAK,EAAGA,KACZ,IAAPtO,GAAkB,IAANA,IAAkB,IAAPsO,GAAkB,IAANA,GAC9B,IAANtO,GAAiB,IAANsO,EACZrC,EAAOpI,IAAIC,EAAM9D,EAAG+D,EAAMuK,GAAG,GAAM,GAEnCrC,EAAOpI,IAAIC,EAAM9D,EAAG+D,EAAMuK,GAAG,GAAO,GAgU5CG,CAAsBJ,EAASrN,GAM/BgL,EAAgBqC,EAASzJ,EAAsB,GAE3C5D,GAAW,GA3TjB,SAA2BiL,EAAQjL,GAKjC,IAJA,IAEI8C,EAAKC,EAAK8G,EAFVzJ,EAAO6K,EAAO7K,KACd8K,EAAON,EAAQ9F,eAAe9E,GAGzBX,EAAI,EAAGA,EAAI,GAAIA,IACtByD,EAAM5C,KAAKC,MAAMd,EAAI,GACrB0D,EAAM1D,EAAI,EAAIe,EAAO,EAAI,EACzByJ,EAA4B,IAApBqB,GAAQ7L,EAAK,GAErB4L,EAAOpI,IAAIC,EAAKC,EAAK8G,GAAK,GAC1BoB,EAAOpI,IAAIE,EAAKD,EAAK+G,GAAK,GAiT1B6D,CAAiBL,EAASrN,GAjQ9B,SAAoBiL,EAAQ9J,GAO1B,IANA,IAAIf,EAAO6K,EAAO7K,KACduN,GAAO,EACP7K,EAAM1C,EAAO,EACbwN,EAAW,EACXC,EAAY,EAEP9K,EAAM3C,EAAO,EAAG2C,EAAM,EAAGA,GAAO,EAGvC,IAFY,IAARA,GAAWA,MAEF,CACX,IAAK,IAAIuK,EAAI,EAAGA,EAAI,EAAGA,IACrB,IAAKrC,EAAO/H,WAAWJ,EAAKC,EAAMuK,GAAI,CACpC,IAAIQ,GAAO,EAEPD,EAAY1M,EAAK7C,SACnBwP,EAAiD,IAAvC3M,EAAK0M,KAAeD,EAAY,IAG5C3C,EAAOpI,IAAIC,EAAKC,EAAMuK,EAAGQ,IAGP,KAFlBF,IAGEC,IACAD,EAAW,GAOjB,IAFA9K,GAAO6K,GAEG,GAAKvN,GAAQ0C,EAAK,CAC1BA,GAAO6K,EACPA,GAAOA,EACP,QAmONI,CAAUV,EAASF,GAEfzG,MAAMD,KAERA,EAAcgE,EAAY5C,YAAYwF,EACpCrC,EAAgBgD,KAAK,KAAMX,EAASzJ,KAIxC6G,EAAY9C,UAAUlB,EAAa4G,GAGnCrC,EAAgBqC,EAASzJ,EAAsB6C,GAExC,CACL4G,QAASA,EACTrN,QAASA,EACT4D,qBAAsBA,EACtB6C,YAAaA,EACb2E,SAAUA,GAadnO,EAAQgR,OAAS,SAAiB9M,EAAM+M,GACtC,QAAoB,IAAT/M,GAAiC,KAATA,EACjC,MAAM,IAAIvC,MAAM,iBAGlB,IACIoB,EACA+E,EAFAnB,EAAuBJ,EAAQM,EAenC,YAXuB,IAAZoK,IAETtK,EAAuBJ,EAAQa,KAAK6J,EAAQtK,qBAAsBJ,EAAQM,GAC1E9D,EAAU4K,EAAQvG,KAAK6J,EAAQlO,SAC/B+E,EAAO0F,EAAYpG,KAAK6J,EAAQzH,aAE5ByH,EAAQC,YACVxJ,EAAMyJ,kBAAkBF,EAAQC,aAI7BvB,EAAazL,EAAMnB,EAAS4D,EAAsBmB,KAGzD,CAAC,kBAAkB,GAAG,sBAAsB,EAAE,eAAe,EAAE,eAAe,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,iBAAiB,GAAG,SAAS,GAAG,yBAAyB,GAAG,aAAa,GAAG,UAAU,GAAG,YAAY,GAAG,QAAU,KAAKsJ,GAAG,CAAC,SAASxO,EAAQ7C,EAAOC,GACrU,IAAIwF,EAAS5C,EAAQ,mBACjByO,EAAazO,EAAQ,gBAEzB,SAAS8K,EAAoBP,GAC3BhJ,KAAKmN,aAAU1Q,EACfuD,KAAKgJ,OAASA,EAEVhJ,KAAKgJ,QAAQhJ,KAAKoN,WAAWpN,KAAKgJ,QASxCO,EAAmBnJ,UAAUgN,WAAa,SAAqBpE,GAE7DhJ,KAAKgJ,OAASA,EACdhJ,KAAKmN,QAAUD,EAAWnE,qBAAqB/I,KAAKgJ,SAStDO,EAAmBnJ,UAAUiL,OAAS,SAAiBtL,GACrD,IAAKC,KAAKmN,QACR,MAAM,IAAI3P,MAAM,2BAKlB,IAAI6P,EAAM,IAAIhM,EAAOrB,KAAKgJ,QAC1BqE,EAAI9L,KAAK,GACT,IAAI+L,EAAajM,EAAOkM,OAAO,CAACxN,EAAMsN,GAAMtN,EAAK7C,OAAS8C,KAAKgJ,QAI3DwE,EAAYN,EAAWzE,IAAI6E,EAAYtN,KAAKmN,SAK5CtQ,EAAQmD,KAAKgJ,OAASwE,EAAUtQ,OACpC,GAAIL,EAAQ,EAAG,CACb,IAAI4Q,EAAO,IAAIpM,EAAOrB,KAAKgJ,QAI3B,OAHAyE,EAAKlM,KAAK,GACViM,EAAUE,KAAKD,EAAM5Q,GAEd4Q,EAGT,OAAOD,GAGT5R,EAAOC,QAAU0N,GAEf,CAAC,kBAAkB,GAAG,eAAe,KAAKoE,GAAG,CAAC,SAASlP,EAAQ7C,EAAOC,GACxE,IAEI+R,EAAQ,mNAMRC,EAAO,8BAFXD,EAAQA,EAAMlR,QAAQ,KAAM,QAEsB,kBAElDb,EAAQ0I,MAAQ,IAAIuJ,OAAOF,EAAO,KAClC/R,EAAQkS,WAAa,IAAID,OAAO,wBAAyB,KACzDjS,EAAQoG,KAAO,IAAI6L,OAAOD,EAAM,KAChChS,EAAQwL,QAAU,IAAIyG,OAbR,SAawB,KACtCjS,EAAQqE,aAAe,IAAI4N,OAbR,oBAa6B,KAEhD,IAAIE,EAAa,IAAIF,OAAO,IAAMF,EAAQ,KACtCK,EAAe,IAAIH,OAAO,YAC1BI,EAAoB,IAAIJ,OAAO,0BAEnCjS,EAAQiM,UAAY,SAAoBqG,GACtC,OAAOH,EAAWI,KAAKD,IAGzBtS,EAAQ+L,YAAc,SAAsBuG,GAC1C,OAAOF,EAAaG,KAAKD,IAG3BtS,EAAQgM,iBAAmB,SAA2BsG,GACpD,OAAOD,EAAkBE,KAAKD,KAG9B,IAAIE,GAAG,CAAC,SAAS5P,EAAQ7C,EAAOC,GAClC,IAAI+D,EAAOnB,EAAQ,UACfuJ,EAAcvJ,EAAQ,kBACtBqB,EAAmBrB,EAAQ,uBAC3BuD,EAAWvD,EAAQ,eACnB6F,EAAY7F,EAAQ,gBACpB2I,EAAQ3I,EAAQ,WAChB8E,EAAQ9E,EAAQ,WAChB6P,EAAW7P,EAAQ,cAQvB,SAAS8P,EAAqBJ,GAC5B,OAAOK,SAASC,mBAAmBN,IAAMjR,OAW3C,SAASwR,EAAaC,EAAO1O,EAAMkO,GAIjC,IAHA,IACIvF,EADAoB,EAAW,GAGuB,QAA9BpB,EAAS+F,EAAMC,KAAKT,KAC1BnE,EAAS5K,KAAK,CACZW,KAAM6I,EAAO,GACb3L,MAAO2L,EAAO3L,MACdgD,KAAMA,EACN/C,OAAQ0L,EAAO,GAAG1L,SAItB,OAAO8M,EAUT,SAAS6E,EAAuBlH,GAC9B,IAEImH,EACAC,EAHAC,EAAUN,EAAYtH,EAAMC,QAASzH,EAAKyH,QAASM,GACnDsH,EAAeP,EAAYtH,EAAMlH,aAAcN,EAAKM,aAAcyH,GActE,OAVIpE,EAAM2L,sBACRJ,EAAWJ,EAAYtH,EAAMnF,KAAMrC,EAAKqC,KAAM0F,GAC9CoH,EAAYL,EAAYtH,EAAM7C,MAAO3E,EAAK2E,MAAOoD,KAEjDmH,EAAWJ,EAAYtH,EAAM2G,WAAYnO,EAAKqC,KAAM0F,GACpDoH,EAAY,IAGHC,EAAQzB,OAAO0B,EAAcH,EAAUC,GAG/CI,MAAK,SAAUC,EAAIC,GAClB,OAAOD,EAAGnS,MAAQoS,EAAGpS,SAEtBqS,KAAI,SAAUC,GACb,MAAO,CACLxP,KAAMwP,EAAIxP,KACVE,KAAMsP,EAAItP,KACV/C,OAAQqS,EAAIrS,WAapB,SAASsS,EAAsBtS,EAAQ+C,GACrC,OAAQA,GACN,KAAKL,EAAKyH,QACR,OAAOW,EAAY7H,cAAcjD,GACnC,KAAK0C,EAAKM,aACR,OAAOJ,EAAiBK,cAAcjD,GACxC,KAAK0C,EAAK2E,MACR,OAAOD,EAAUnE,cAAcjD,GACjC,KAAK0C,EAAKqC,KACR,OAAOD,EAAS7B,cAAcjD,IAwIpC,SAASuS,EAAoB1P,EAAM2P,GACjC,IAAIzP,EACA0P,EAAW/P,EAAK8H,mBAAmB3H,GAKvC,IAHAE,EAAOL,EAAKqD,KAAKyM,EAAWC,MAGf/P,EAAKqC,MAAQhC,EAAKkB,IAAMwO,EAASxO,IAC5C,MAAM,IAAI3D,MAAM,IAAMuC,EAAN,iCACoBH,EAAKxD,SAAS6D,GAChD,0BAA4BL,EAAKxD,SAASuT,IAQ9C,OAJI1P,IAASL,EAAK2E,OAAUhB,EAAM2L,uBAChCjP,EAAOL,EAAKqC,MAGNhC,GACN,KAAKL,EAAKyH,QACR,OAAO,IAAIW,EAAYjI,GAEzB,KAAKH,EAAKM,aACR,OAAO,IAAIJ,EAAiBC,GAE9B,KAAKH,EAAK2E,MACR,OAAO,IAAID,EAAUvE,GAEvB,KAAKH,EAAKqC,KACR,OAAO,IAAID,EAASjC,IAmB1BlE,EAAQ4P,UAAY,SAAoBmE,GACtC,OAAOA,EAAMC,QAAO,SAAUC,EAAKC,GAOjC,MANmB,iBAARA,EACTD,EAAI1Q,KAAKqQ,EAAmBM,EAAK,OACxBA,EAAIhQ,MACb+P,EAAI1Q,KAAKqQ,EAAmBM,EAAIhQ,KAAMgQ,EAAI9P,OAGrC6P,IACN,KAWLjU,EAAQuH,WAAa,SAAqBrD,EAAMnB,GAQ9C,IAPA,IAGIoR,EA7HN,SAAqBC,EAAOrR,GAK1B,IAJA,IAAIsR,EAAQ,GACRF,EAAQ,CAAC,MAAS,IAClBG,EAAc,CAAC,SAEVlS,EAAI,EAAGA,EAAIgS,EAAM/S,OAAQe,IAAK,CAIrC,IAHA,IAAImS,EAAYH,EAAMhS,GAClBoS,EAAiB,GAEZ3Q,EAAI,EAAGA,EAAI0Q,EAAUlT,OAAQwC,IAAK,CACzC,IAAI4Q,EAAOF,EAAU1Q,GACjB6Q,EAAM,GAAKtS,EAAIyB,EAEnB2Q,EAAejR,KAAKmR,GACpBL,EAAMK,GAAO,CAAED,KAAMA,EAAME,UAAW,GACtCR,EAAMO,GAAO,GAEb,IAAK,IAAIzS,EAAI,EAAGA,EAAIqS,EAAYjT,OAAQY,IAAK,CAC3C,IAAI2S,EAAaN,EAAYrS,GAEzBoS,EAAMO,IAAeP,EAAMO,GAAYH,KAAKrQ,OAASqQ,EAAKrQ,MAC5D+P,EAAMS,GAAYF,GAChBf,EAAqBU,EAAMO,GAAYD,UAAYF,EAAKpT,OAAQoT,EAAKrQ,MACrEuP,EAAqBU,EAAMO,GAAYD,UAAWF,EAAKrQ,MAEzDiQ,EAAMO,GAAYD,WAAaF,EAAKpT,SAEhCgT,EAAMO,KAAaP,EAAMO,GAAYD,UAAYF,EAAKpT,QAE1D8S,EAAMS,GAAYF,GAAOf,EAAqBc,EAAKpT,OAAQoT,EAAKrQ,MAC9D,EAAIL,EAAK6H,sBAAsB6I,EAAKrQ,KAAMrB,KAKlDuR,EAAcE,EAGhB,IAAKvS,EAAI,EAAGA,EAAIqS,EAAYjT,OAAQY,IAClCkS,EAAMG,EAAYrS,IAAS,IAAI,EAGjC,MAAO,CAAEwR,IAAKU,EAAOE,MAAOA,GAmFhBQ,CAzKd,SAAqBC,GAEnB,IADA,IAAIV,EAAQ,GACHhS,EAAI,EAAGA,EAAI0S,EAAKzT,OAAQe,IAAK,CACpC,IAAI8R,EAAMY,EAAK1S,GAEf,OAAQ8R,EAAI9P,MACV,KAAKL,EAAKyH,QACR4I,EAAM7Q,KAAK,CAAC2Q,EACV,CAAEhQ,KAAMgQ,EAAIhQ,KAAME,KAAML,EAAKM,aAAchD,OAAQ6S,EAAI7S,QACvD,CAAE6C,KAAMgQ,EAAIhQ,KAAME,KAAML,EAAKqC,KAAM/E,OAAQ6S,EAAI7S,UAEjD,MACF,KAAK0C,EAAKM,aACR+P,EAAM7Q,KAAK,CAAC2Q,EACV,CAAEhQ,KAAMgQ,EAAIhQ,KAAME,KAAML,EAAKqC,KAAM/E,OAAQ6S,EAAI7S,UAEjD,MACF,KAAK0C,EAAK2E,MACR0L,EAAM7Q,KAAK,CAAC2Q,EACV,CAAEhQ,KAAMgQ,EAAIhQ,KAAME,KAAML,EAAKqC,KAAM/E,OAAQqR,EAAoBwB,EAAIhQ,SAErE,MACF,KAAKH,EAAKqC,KACRgO,EAAM7Q,KAAK,CACT,CAAEW,KAAMgQ,EAAIhQ,KAAME,KAAML,EAAKqC,KAAM/E,OAAQqR,EAAoBwB,EAAIhQ,UAK3E,OAAOkQ,EA2IKW,CAFD/B,EAAsB9O,EAAMwD,EAAM2L,uBAGftQ,GAC1BiS,EAAOvC,EAASwC,UAAUd,EAAMV,IAAK,QAAS,OAE9CyB,EAAgB,GACX9S,EAAI,EAAGA,EAAI4S,EAAK3T,OAAS,EAAGe,IACnC8S,EAAc3R,KAAK4Q,EAAME,MAAMW,EAAK5S,IAAIqS,MAG1C,OAAOzU,EAAQ4P,UA9MjB,SAAwBkF,GACtB,OAAOA,EAAKd,QAAO,SAAUC,EAAKkB,GAChC,IAAIC,EAAUnB,EAAI5S,OAAS,GAAK,EAAI4S,EAAIA,EAAI5S,OAAS,GAAK,KAC1D,OAAI+T,GAAWA,EAAQhR,OAAS+Q,EAAK/Q,MACnC6P,EAAIA,EAAI5S,OAAS,GAAG6C,MAAQiR,EAAKjR,KAC1B+P,IAGTA,EAAI1Q,KAAK4R,GACFlB,KACN,IAoMsBoB,CAAcH,KAazClV,EAAQ+P,SAAW,SAAmB7L,GACpC,OAAOlE,EAAQ4P,UACboD,EAAsB9O,EAAMwD,EAAM2L,yBAIpC,CAAC,sBAAsB,EAAE,cAAc,EAAE,eAAe,GAAG,SAAS,GAAG,iBAAiB,GAAG,UAAU,GAAG,UAAU,GAAG,WAAa,KAAKiC,GAAG,CAAC,SAAS1S,EAAQ7C,EAAOC,GACrK,IAAIuV,EACAC,EAAkB,CACpB,EACA,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC1C,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAC7C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACtD,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MASxDxV,EAAQ6C,cAAgB,SAAwBE,GAC9C,IAAKA,EAAS,MAAM,IAAIpB,MAAM,yCAC9B,GAAIoB,EAAU,GAAKA,EAAU,GAAI,MAAM,IAAIpB,MAAM,6CACjD,OAAiB,EAAVoB,EAAc,IASvB/C,EAAQsO,wBAA0B,SAAkCvL,GAClE,OAAOyS,EAAgBzS,IASzB/C,EAAQ4H,YAAc,SAAU1D,GAG9B,IAFA,IAAIuR,EAAQ,EAEI,IAATvR,GACLuR,IACAvR,KAAU,EAGZ,OAAOuR,GAGTzV,EAAQmR,kBAAoB,SAA4B9O,GACtD,GAAiB,mBAANA,EACT,MAAM,IAAIV,MAAM,yCAGlB4T,EAAiBlT,GAGnBrC,EAAQqT,mBAAqB,WAC3B,YAAiC,IAAnBkC,GAGhBvV,EAAQ2I,OAAS,SAAiBoJ,GAChC,OAAOwD,EAAexD,KAGtB,IAAI2D,GAAG,CAAC,SAAS9S,EAAQ7C,EAAOC,GAOlCA,EAAQkH,QAAU,SAAkBnE,GAClC,OAAQ0G,MAAM1G,IAAYA,GAAW,GAAKA,GAAW,KAGrD,IAAI4S,GAAG,CAAC,SAAS/S,EAAQ7C,EAAOC,GAClC,IAAI0H,EAAQ9E,EAAQ,WAChB6K,EAAS7K,EAAQ,2BACjB2D,EAAU3D,EAAQ,4BAClBmB,EAAOnB,EAAQ,UACf0I,EAAe1I,EAAQ,mBACvBkL,EAAUlL,EAAQ,WAIlBgT,EAAUlO,EAAME,YADV,MAaV,SAASiO,EAAsBzR,EAAMrB,GAEnC,OAAOgB,EAAK6H,sBAAsBxH,EAAMrB,GAAW,EAGrD,SAAS+S,EAA2B3H,EAAUpL,GAC5C,IAAIgT,EAAY,EAOhB,OALA5H,EAASC,SAAQ,SAAUlK,GACzB,IAAI8R,EAAeH,EAAqB3R,EAAKE,KAAMrB,GACnDgT,GAAaC,EAAe9R,EAAKI,mBAG5ByR,EAsBT/V,EAAQoH,KAAO,SAAezC,EAAO0C,GACnC,OAAIiE,EAAapE,QAAQvC,GAChB+E,SAAS/E,EAAO,IAGlB0C,GAYTrH,EAAQiW,YAAc,SAAsBlT,EAAS4D,EAAsBvC,GACzE,IAAKkH,EAAapE,QAAQnE,GACxB,MAAM,IAAIpB,MAAM,gCAIE,IAATyC,IAAsBA,EAAOL,EAAKqC,MAG7C,IAMIiI,EAA+D,GAN9C3G,EAAM4G,wBAAwBvL,GAG5B0K,EAAOzG,uBAAuBjE,EAAS4D,IAK9D,GAAIvC,IAASL,EAAK4H,MAAO,OAAO0C,EAEhC,IAAI6H,EAAa7H,EAAyBwH,EAAqBzR,EAAMrB,GAGrE,OAAQqB,GACN,KAAKL,EAAKyH,QACR,OAAOvI,KAAKC,MAAOgT,EAAa,GAAM,GAExC,KAAKnS,EAAKM,aACR,OAAOpB,KAAKC,MAAOgT,EAAa,GAAM,GAExC,KAAKnS,EAAK2E,MACR,OAAOzF,KAAKC,MAAMgT,EAAa,IAEjC,KAAKnS,EAAKqC,KACV,QACE,OAAOnD,KAAKC,MAAMgT,EAAa,KAYrClW,EAAQgQ,sBAAwB,SAAgC9L,EAAMyC,GACpE,IAAIuN,EAEAiC,EAAM5P,EAAQa,KAAKT,EAAsBJ,EAAQM,GAErD,GAAIiH,EAAQ5J,GAAO,CACjB,GAAIA,EAAK7C,OAAS,EAChB,OAzFN,SAAqC8M,EAAUxH,GAC7C,IAAK,IAAIyP,EAAiB,EAAGA,GAAkB,GAAIA,IAEjD,GADaN,EAA0B3H,EAAUiI,IACnCpW,EAAQiW,YAAYG,EAAgBzP,EAAsB5C,EAAK4H,OAC3E,OAAOyK,EAqFAC,CAA2BnS,EAAMiS,GAG1C,GAAoB,IAAhBjS,EAAK7C,OACP,OAAO,EAGT6S,EAAMhQ,EAAK,QAEXgQ,EAAMhQ,EAGR,OA/HF,SAAsCE,EAAM/C,EAAQsF,GAClD,IAAK,IAAIyP,EAAiB,EAAGA,GAAkB,GAAIA,IACjD,GAAI/U,GAAUrB,EAAQiW,YAAYG,EAAgBzP,EAAsBvC,GACtE,OAAOgS,EA4HJE,CAA4BpC,EAAI9P,KAAM8P,EAAI1P,YAAa2R,IAahEnW,EAAQ6H,eAAiB,SAAyB9E,GAChD,IAAKuI,EAAapE,QAAQnE,IAAYA,EAAU,EAC9C,MAAM,IAAIpB,MAAM,2BAKlB,IAFA,IAAIoG,EAAIhF,GAAW,GAEZ2E,EAAME,YAAYG,GAAK6N,GAAW,GACvC7N,GAvJM,MAuJQL,EAAME,YAAYG,GAAK6N,EAGvC,OAAQ7S,GAAW,GAAMgF,IAGzB,CAAC,0BAA0B,EAAE,2BAA2B,EAAE,SAAS,GAAG,UAAU,GAAG,kBAAkB,GAAG,QAAU,KAAKwO,GAAG,CAAC,SAAS3T,EAAQ7C,EAAOC,GACrJ,IAAIwW,EAAa5T,EAAQ,eACrB6T,EAAS7T,EAAQ,iBACjB8T,EAAiB9T,EAAQ,qBACzB+T,EAAc/T,EAAQ,yBAE1B,SAASgU,EAAcC,EAAYC,EAAQC,EAAMC,EAAMC,GACrD,IAAIC,EAAO,GAAGjK,MAAMvK,KAAKyU,UAAW,GAChCC,EAAUF,EAAK7V,OACfgW,EAA2C,mBAAtBH,EAAKE,EAAU,GAExC,IAAKC,IAAgBb,IACnB,MAAM,IAAI7U,MAAM,sCAGlB,IAAI0V,EAoBG,CACL,GAAID,EAAU,EACZ,MAAM,IAAIzV,MAAM,8BAYlB,OATgB,IAAZyV,GACFL,EAAOD,EACPA,EAASE,OAAOpW,GACK,IAAZwW,GAAkBN,EAAOQ,aAClCN,EAAOD,EACPA,EAAOD,EACPA,OAASlW,GAGJ,IAAI2W,SAAQ,SAAUC,EAASC,GACpC,IACE,IAAIvT,EAAOuS,EAAOzF,OAAO+F,EAAMC,GAC/BQ,EAAQX,EAAW3S,EAAM4S,EAAQE,IACjC,MAAOhV,GACPyV,EAAOzV,OAtCX,GAAIoV,EAAU,EACZ,MAAM,IAAIzV,MAAM,8BAGF,IAAZyV,GACFH,EAAKF,EACLA,EAAOD,EACPA,EAASE,OAAOpW,GACK,IAAZwW,IACLN,EAAOQ,iBAA4B,IAAPL,GAC9BA,EAAKD,EACLA,OAAOpW,IAEPqW,EAAKD,EACLA,EAAOD,EACPA,EAAOD,EACPA,OAASlW,IA2Bf,IACE,IAAIsD,EAAOuS,EAAOzF,OAAO+F,EAAMC,GAC/BC,EAAG,KAAMJ,EAAW3S,EAAM4S,EAAQE,IAClC,MAAOhV,GACPiV,EAAGjV,IAIPhC,EAAQgR,OAASyF,EAAOzF,OACxBhR,EAAQ0X,SAAWd,EAAa7F,KAAK,KAAM2F,EAAeiB,QAC1D3X,EAAQ4X,UAAYhB,EAAa7F,KAAK,KAAM2F,EAAemB,iBAG3D7X,EAAQO,SAAWqW,EAAa7F,KAAK,MAAM,SAAU7M,EAAM4T,EAAGd,GAC5D,OAAOL,EAAYgB,OAAOzT,EAAM8S,OAGhC,CAAC,gBAAgB,GAAG,oBAAoB,GAAG,wBAAwB,GAAG,cAAc,KAAKe,GAAG,CAAC,SAASnV,EAAQ7C,EAAOC,GACvH,IAAI0H,EAAQ9E,EAAQ,WAoBpB5C,EAAQ2X,OAAS,SAAiBK,EAAQlB,EAAQ7F,GAChD,IAAI+F,EAAO/F,EACPgH,EAAWnB,OAEK,IAATE,GAA0BF,GAAWA,EAAOQ,aACrDN,EAAOF,EACPA,OAASlW,GAGNkW,IACHmB,EAlBJ,WACE,IACE,OAAOC,SAASC,cAAc,UAC9B,MAAOnW,GACP,MAAM,IAAIL,MAAM,yCAcLyW,IAGbpB,EAAOtP,EAAM2Q,WAAWrB,GACxB,IAAI7T,EAAOuE,EAAM4Q,cAAcN,EAAO5H,QAAQjN,KAAM6T,GAEhDuB,EAAMN,EAASX,WAAW,MAC1BkB,EAAQD,EAAIE,gBAAgBtV,EAAMA,GAMtC,OALAuE,EAAMgR,cAAcF,EAAMtU,KAAM8T,EAAQhB,GApC1C,SAAsBuB,EAAKzB,EAAQ3T,GACjCoV,EAAII,UAAU,EAAG,EAAG7B,EAAO8B,MAAO9B,EAAO+B,QAEpC/B,EAAOgC,QAAOhC,EAAOgC,MAAQ,IAClChC,EAAO+B,OAAS1V,EAChB2T,EAAO8B,MAAQzV,EACf2T,EAAOgC,MAAMD,OAAS1V,EAAO,KAC7B2T,EAAOgC,MAAMF,MAAQzV,EAAO,KA+B5B4V,CAAYR,EAAKN,EAAU9U,GAC3BoV,EAAIS,aAAaR,EAAO,EAAG,GAEpBP,GAGTjY,EAAQ6X,gBAAkB,SAA0BG,EAAQlB,EAAQ7F,GAClE,IAAI+F,EAAO/F,OAES,IAAT+F,GAA0BF,GAAWA,EAAOQ,aACrDN,EAAOF,EACPA,OAASlW,GAGNoW,IAAMA,EAAO,IAElB,IAAIiB,EAAWjY,EAAQ2X,OAAOK,EAAQlB,EAAQE,GAE1CiC,EAAOjC,EAAKiC,MAAQ,YACpBC,EAAelC,EAAKkC,cAAgB,GAExC,OAAOjB,EAASL,UAAUqB,EAAMC,EAAaC,WAG7C,CAAC,UAAU,KAAKC,GAAG,CAAC,SAASxW,EAAQ7C,EAAOC,GAC9C,IAAI0H,EAAQ9E,EAAQ,WAEpB,SAASyW,EAAgBC,EAAOC,GAC9B,IAAIC,EAAQF,EAAM/W,EAAI,IAClB+P,EAAMiH,EAAS,KAAOD,EAAMG,IAAM,IAEtC,OAAOD,EAAQ,EACXlH,EAAM,IAAMiH,EAAS,aAAeC,EAAME,QAAQ,GAAGzM,MAAM,GAAK,IAChEqF,EAGN,SAASqH,EAAQC,EAAKzR,EAAGI,GACvB,IAAI+J,EAAMsH,EAAMzR,EAGhB,YAFiB,IAANI,IAAmB+J,GAAO,IAAM/J,GAEpC+J,EAuCTtS,EAAQ2X,OAAS,SAAiBK,EAAQ/G,EAASgG,GACjD,IAAID,EAAOtP,EAAM2Q,WAAWpH,GACxB9N,EAAO6U,EAAO5H,QAAQjN,KACtBe,EAAO8T,EAAO5H,QAAQlM,KACtB2V,EAAa1W,EAAqB,EAAd6T,EAAK8C,OAEzBC,EAAM/C,EAAKsC,MAAMU,MAAMzX,EAEvB,SAAW8W,EAAerC,EAAKsC,MAAMU,MAAO,QAC5C,YAAcH,EAAa,IAAMA,EAAa,SAF9C,GAIA7E,EACF,SAAWqE,EAAerC,EAAKsC,MAAMzI,KAAM,UAC3C,OAjDJ,SAAmB3M,EAAMf,EAAM2W,GAM7B,IALA,IAAI9E,EAAO,GACPiF,EAAS,EACTC,GAAS,EACTC,EAAa,EAER/X,EAAI,EAAGA,EAAI8B,EAAK7C,OAAQe,IAAK,CACpC,IAAI0D,EAAM7C,KAAKC,MAAMd,EAAIe,GACrB0C,EAAM5C,KAAKC,MAAMd,EAAIe,GAEpB2C,GAAQoU,IAAQA,GAAS,GAE1BhW,EAAK9B,IACP+X,IAEM/X,EAAI,GAAK0D,EAAM,GAAK5B,EAAK9B,EAAI,KACjC4S,GAAQkF,EACJP,EAAO,IAAK7T,EAAMgU,EAAQ,GAAMjU,EAAMiU,GACtCH,EAAO,IAAKM,EAAQ,GAExBA,EAAS,EACTC,GAAS,GAGLpU,EAAM,EAAI3C,GAAQe,EAAK9B,EAAI,KAC/B4S,GAAQ2E,EAAO,IAAKQ,GACpBA,EAAa,IAGfF,IAIJ,OAAOjF,EAgBIoF,CAASlW,EAAMf,EAAM6T,EAAK8C,QAAU,MAE3CO,EAAU,gBAAuBR,EAAa,IAAMA,EAAa,IAIjES,EAAS,4CAFAtD,EAAK4B,MAAa,UAAY5B,EAAK4B,MAAQ,aAAe5B,EAAK4B,MAAQ,KAA1D,IAEwCyB,EAAU,iCAAmCN,EAAK/E,EAAO,WAM3H,MAJkB,mBAAPiC,GACTA,EAAG,KAAMqD,GAGJA,IAGP,CAAC,UAAU,KAAKC,GAAG,CAAC,SAAS3X,EAAQ7C,EAAOC,GAC9C,SAASwa,EAAUf,GACjB,GAAmB,iBAARA,EACT,MAAM,IAAI9X,MAAM,yCAGlB,IAAI8Y,EAAUhB,EAAIxM,QAAQpM,QAAQ,IAAK,IAAI6Z,MAAM,IACjD,GAAID,EAAQpZ,OAAS,GAAwB,IAAnBoZ,EAAQpZ,QAAgBoZ,EAAQpZ,OAAS,EACjE,MAAM,IAAIM,MAAM,sBAAwB8X,GAInB,IAAnBgB,EAAQpZ,QAAmC,IAAnBoZ,EAAQpZ,SAClCoZ,EAAUtL,MAAM5K,UAAUmN,OAAOiJ,MAAM,GAAIF,EAAQhH,KAAI,SAAUpD,GAC/D,MAAO,CAACA,EAAGA,QAKQ,IAAnBoK,EAAQpZ,QAAcoZ,EAAQlX,KAAK,IAAK,KAE5C,IAAIqX,EAAWlR,SAAS+Q,EAAQvZ,KAAK,IAAK,IAE1C,MAAO,CACLa,EAAI6Y,GAAY,GAAM,IACtBC,EAAID,GAAY,GAAM,IACtBtL,EAAIsL,GAAY,EAAK,IACrBrY,EAAc,IAAXqY,EACHnB,IAAK,IAAMgB,EAAQxN,MAAM,EAAG,GAAG/L,KAAK,KAIxClB,EAAQqY,WAAa,SAAqBpH,GACnCA,IAASA,EAAU,IACnBA,EAAQqI,QAAOrI,EAAQqI,MAAQ,IAEpC,IAAIQ,OAAmC,IAAnB7I,EAAQ6I,QACP,OAAnB7I,EAAQ6I,QACR7I,EAAQ6I,OAAS,EAAI,EAAI7I,EAAQ6I,OAE/BlB,EAAQ3H,EAAQ2H,OAAS3H,EAAQ2H,OAAS,GAAK3H,EAAQ2H,WAAQhY,EAC/Dka,EAAQ7J,EAAQ6J,OAAS,EAE7B,MAAO,CACLlC,MAAOA,EACPkC,MAAOlC,EAAQ,EAAIkC,EACnBhB,OAAQA,EACRR,MAAO,CACLzI,KAAM2J,EAASvJ,EAAQqI,MAAMzI,MAAQ,aACrCmJ,MAAOQ,EAASvJ,EAAQqI,MAAMU,OAAS,cAEzCf,KAAMhI,EAAQgI,KACdC,aAAcjI,EAAQiI,cAAgB,KAI1ClZ,EAAQ+a,SAAW,SAAmBC,EAAQhE,GAC5C,OAAOA,EAAK4B,OAAS5B,EAAK4B,OAASoC,EAAuB,EAAdhE,EAAK8C,OAC7C9C,EAAK4B,OAASoC,EAAuB,EAAdhE,EAAK8C,QAC5B9C,EAAK8D,OAGX9a,EAAQsY,cAAgB,SAAwB0C,EAAQhE,GACtD,IAAI8D,EAAQ9a,EAAQ+a,SAASC,EAAQhE,GACrC,OAAO/T,KAAKC,OAAO8X,EAAuB,EAAdhE,EAAK8C,QAAcgB,IAGjD9a,EAAQ0Y,cAAgB,SAAwBuC,EAASC,EAAIlE,GAQ3D,IAPA,IAAI7T,EAAO+X,EAAG9K,QAAQjN,KAClBe,EAAOgX,EAAG9K,QAAQlM,KAClB4W,EAAQ9a,EAAQ+a,SAAS5X,EAAM6T,GAC/BmE,EAAalY,KAAKC,OAAOC,EAAqB,EAAd6T,EAAK8C,QAAcgB,GACnDM,EAAepE,EAAK8C,OAASgB,EAC7BO,EAAU,CAACrE,EAAKsC,MAAMU,MAAOhD,EAAKsC,MAAMzI,MAEnCzO,EAAI,EAAGA,EAAI+Y,EAAY/Y,IAC9B,IAAK,IAAIyB,EAAI,EAAGA,EAAIsX,EAAYtX,IAAK,CACnC,IAAIyX,EAAgC,GAAtBlZ,EAAI+Y,EAAatX,GAC3B0X,EAAUvE,EAAKsC,MAAMU,MAErB5X,GAAKgZ,GAAgBvX,GAAKuX,GAC5BhZ,EAAI+Y,EAAaC,GAAgBvX,EAAIsX,EAAaC,IAGlDG,EAAUF,EAAQnX,EAFPjB,KAAKC,OAAOd,EAAIgZ,GAAgBN,GAEb3X,EADnBF,KAAKC,OAAOW,EAAIuX,GAAgBN,IACE,EAAI,IAGnDG,EAAQK,KAAYC,EAAQxZ,EAC5BkZ,EAAQK,KAAYC,EAAQV,EAC5BI,EAAQK,KAAYC,EAAQjM,EAC5B2L,EAAQK,GAAUC,EAAQhZ,KAK9B,IAAIiZ,GAAG,CAAC,SAAS5Y,EAAQ7C,EAAOC,GAElC,IAAI8N,EAAUlL,EAAQ,WAatB4C,EAAOiW,oBAXP,WAEE,IACE,IAAIxb,EAAM,IAAIyb,WAAW,GAEzB,OADAzb,EAAI0b,UAAY,CAACA,UAAWD,WAAWnX,UAAWqX,IAAK,WAAc,OAAO,KACvD,KAAd3b,EAAI2b,MACX,MAAO5Z,GACP,OAAO,GAIkB6Z,GAE7B,IAAIC,EAAetW,EAAOiW,oBACpB,WACA,WAEN,SAASjW,EAAQuW,EAAK/O,EAAQ3L,GAC5B,OAAKmE,EAAOiW,qBAAyBtX,gBAAgBqB,EAIlC,iBAARuW,EACFC,EAAY7X,KAAM4X,GAmQ7B,SAAeE,EAAMtX,EAAOqI,EAAQ3L,GAClC,GAAqB,iBAAVsD,EACT,MAAM,IAAIuX,UAAU,yCAGtB,MAA2B,oBAAhBC,aAA+BxX,aAAiBwX,YA9K7D,SAA0BF,EAAMlI,EAAOqI,EAAY/a,GACjD,GAAI+a,EAAa,GAAKrI,EAAMsI,WAAaD,EACvC,MAAM,IAAIE,WAAW,6BAGvB,GAAIvI,EAAMsI,WAAaD,GAAc/a,GAAU,GAC7C,MAAM,IAAIib,WAAW,6BAGvB,IAAIC,EAiBJ,OAfEA,OADiB3b,IAAfwb,QAAuCxb,IAAXS,EACxB,IAAIqa,WAAW3H,QACDnT,IAAXS,EACH,IAAIqa,WAAW3H,EAAOqI,GAEtB,IAAIV,WAAW3H,EAAOqI,EAAY/a,GAGtCmE,EAAOiW,oBAETc,EAAIZ,UAAYnW,EAAOjB,UAGvBgY,EAAMC,EAAcP,EAAMM,GAGrBA,EAqJEE,CAAgBR,EAAMtX,EAAOqI,EAAQ3L,GAGzB,iBAAVsD,EA3Mb,SAAqBsX,EAAMxb,GACzB,IAAIY,EAA8B,EAArBgb,EAAW5b,GACpB8b,EAAMG,EAAaT,EAAM5a,GAEzBsb,EAASJ,EAAI9X,MAAMhE,GASvB,OAPIkc,IAAWtb,IAIbkb,EAAMA,EAAItP,MAAM,EAAG0P,IAGdJ,EA+LEhV,CAAW0U,EAAMtX,GAtJ5B,SAAqBsX,EAAMvI,GACzB,GAAIlO,EAAOoX,SAASlJ,GAAM,CACxB,IAAImJ,EAA4B,EAAtBC,EAAQpJ,EAAIrS,QAClBkb,EAAMG,EAAaT,EAAMY,GAE7B,OAAmB,IAAfN,EAAIlb,QAIRqS,EAAI7B,KAAK0K,EAAK,EAAG,EAAGM,GAHXN,EAOX,GAAI7I,EAAK,CACP,GAA4B,oBAAhByI,aACRzI,EAAI1O,kBAAkBmX,aAAgB,WAAYzI,EACpD,MAA0B,iBAAfA,EAAIrS,SAvGL0b,EAuGkCrJ,EAAIrS,SAtGrC0b,EAuGFL,EAAaT,EAAM,GAErBO,EAAcP,EAAMvI,GAG7B,GAAiB,WAAbA,EAAIuF,MAAqB9J,MAAMrB,QAAQ4F,EAAIxP,MAC7C,OAAOsY,EAAcP,EAAMvI,EAAIxP,MA9GrC,IAAgB6Y,EAkHd,MAAM,IAAIb,UAAU,sFA8Hbc,CAAWf,EAAMtX,GA7QjByC,CAAKjD,KAAM4X,EAAK/O,EAAQ3L,GAPtB,IAAImE,EAAOuW,EAAK/O,EAAQ3L,GA0BnC,SAASyb,EAASzb,GAGhB,GAAIA,GAAUya,EACZ,MAAM,IAAIQ,WAAW,0DACaR,EAAavb,SAAS,IAAM,UAEhE,OAAgB,EAATc,EAOT,SAASqb,EAAcT,EAAM5a,GAC3B,IAAIkb,EAaJ,OAZI/W,EAAOiW,qBACTc,EAAM,IAAIb,WAAWra,IACjBsa,UAAYnW,EAAOjB,WAIX,QADZgY,EAAMN,KAEJM,EAAM,IAAI/W,EAAOnE,IAEnBkb,EAAIlb,OAASA,GAGRkb,EAGT,SAASP,EAAaC,EAAM9Y,GAC1B,IAAIoZ,EAAMG,EAAaT,EAAM9Y,EAAO,EAAI,EAAoB,EAAhB2Z,EAAQ3Z,IAEpD,IAAKqC,EAAOiW,oBACV,IAAK,IAAIrZ,EAAI,EAAGA,EAAIe,IAAQf,EAC1Bma,EAAIna,GAAK,EAIb,OAAOma,EAmBT,SAASC,EAAeP,EAAMlI,GAG5B,IAFA,IAAI1S,EAAS0S,EAAM1S,OAAS,EAAI,EAA4B,EAAxByb,EAAQ/I,EAAM1S,QAC9Ckb,EAAMG,EAAaT,EAAM5a,GACpBe,EAAI,EAAGA,EAAIf,EAAQe,GAAK,EAC/Bma,EAAIna,GAAgB,IAAX2R,EAAM3R,GAEjB,OAAOma,EA8DT,SAASU,EAAaxc,EAAQyc,GAE5B,IAAIC,EADJD,EAAQA,GAAS/R,IAMjB,IAJA,IAAI9J,EAASZ,EAAOY,OAChB+b,EAAgB,KAChBC,EAAQ,GAEHjb,EAAI,EAAGA,EAAIf,IAAUe,EAAG,CAI/B,IAHA+a,EAAY1c,EAAO6c,WAAWlb,IAGd,OAAU+a,EAAY,MAAQ,CAE5C,IAAKC,EAAe,CAElB,GAAID,EAAY,MAAQ,EAEjBD,GAAS,IAAM,GAAGG,EAAM9Z,KAAK,IAAM,IAAM,KAC9C,SACK,GAAInB,EAAI,IAAMf,EAAQ,EAEtB6b,GAAS,IAAM,GAAGG,EAAM9Z,KAAK,IAAM,IAAM,KAC9C,SAIF6Z,EAAgBD,EAEhB,SAIF,GAAIA,EAAY,MAAQ,EACjBD,GAAS,IAAM,GAAGG,EAAM9Z,KAAK,IAAM,IAAM,KAC9C6Z,EAAgBD,EAChB,SAIFA,EAAkE,OAArDC,EAAgB,OAAU,GAAKD,EAAY,YAC/CC,IAEJF,GAAS,IAAM,GAAGG,EAAM9Z,KAAK,IAAM,IAAM,KAMhD,GAHA6Z,EAAgB,KAGZD,EAAY,IAAM,CACpB,IAAKD,GAAS,GAAK,EAAG,MACtBG,EAAM9Z,KAAK4Z,QACN,GAAIA,EAAY,KAAO,CAC5B,IAAKD,GAAS,GAAK,EAAG,MACtBG,EAAM9Z,KACJ4Z,GAAa,EAAM,IACP,GAAZA,EAAmB,UAEhB,GAAIA,EAAY,MAAS,CAC9B,IAAKD,GAAS,GAAK,EAAG,MACtBG,EAAM9Z,KACJ4Z,GAAa,GAAM,IACnBA,GAAa,EAAM,GAAO,IACd,GAAZA,EAAmB,SAEhB,MAAIA,EAAY,SASrB,MAAM,IAAIxb,MAAM,sBARhB,IAAKub,GAAS,GAAK,EAAG,MACtBG,EAAM9Z,KACJ4Z,GAAa,GAAO,IACpBA,GAAa,GAAM,GAAO,IAC1BA,GAAa,EAAM,GAAO,IACd,GAAZA,EAAmB,MAOzB,OAAOE,EAGT,SAAShB,EAAY5b,GACnB,OAAI+E,EAAOoX,SAASnc,GACXA,EAAOY,OAEW,oBAAhB8a,aAA6D,mBAAvBA,YAAYoB,SACxDpB,YAAYoB,OAAO9c,IAAWA,aAAkB0b,aAC5C1b,EAAO4b,YAEM,iBAAX5b,IACTA,EAAS,GAAKA,GAIJ,IADFA,EAAOY,OACK,EAEf4b,EAAYxc,GAAQY,QA9OzBmE,EAAOiW,sBACTjW,EAAOjB,UAAUoX,UAAYD,WAAWnX,UACxCiB,EAAOmW,UAAYD,WAGG,oBAAX8B,QAA0BA,OAAOC,SACxCjY,EAAOgY,OAAOC,WAAajY,GAC7BuF,OAAO2S,eAAelY,EAAQgY,OAAOC,QAAS,CAC5C9Y,MAAO,KACPgZ,cAAc,EACdC,YAAY,EACZC,UAAU,KAkQhBrY,EAAOjB,UAAUE,MAAQ,SAAgBhE,EAAQuM,EAAQ3L,QAExCT,IAAXoM,QAIkBpM,IAAXS,GAA0C,iBAAX2L,GAHxC3L,EAAS8C,KAAK9C,OACd2L,EAAS,GAMA8Q,SAAS9Q,KAClBA,GAAkB,EACd8Q,SAASzc,GACXA,GAAkB,EAElBA,OAAST,GAIb,IAAImd,EAAY5Z,KAAK9C,OAAS2L,EAG9B,SAFepM,IAAXS,GAAwBA,EAAS0c,KAAW1c,EAAS0c,GAEpDtd,EAAOY,OAAS,IAAMA,EAAS,GAAK2L,EAAS,IAAOA,EAAS7I,KAAK9C,OACrE,MAAM,IAAIib,WAAW,0CAGvB,OA9CF,SAAoBC,EAAK9b,EAAQuM,EAAQ3L,GACvC,OATF,SAAqB2c,EAAKC,EAAKjR,EAAQ3L,GACrC,IAAK,IAAIe,EAAI,EAAGA,EAAIf,KACbe,EAAI4K,GAAUiR,EAAI5c,QAAYe,GAAK4b,EAAI3c,UADhBe,EAE5B6b,EAAI7b,EAAI4K,GAAUgR,EAAI5b,GAExB,OAAOA,EAIA8b,CAAWjB,EAAYxc,EAAQ8b,EAAIlb,OAAS2L,GAASuP,EAAKvP,EAAQ3L,GA6ClE8c,CAAUha,KAAM1D,EAAQuM,EAAQ3L,IAGzCmE,EAAOjB,UAAU0I,MAAQ,SAAgBjM,EAAOC,GAC9C,IAoBImd,EApBAvB,EAAM1Y,KAAK9C,OAqBf,IApBAL,IAAUA,GAGE,GACVA,GAAS6b,GACG,IAAG7b,EAAQ,GACdA,EAAQ6b,IACjB7b,EAAQ6b,IANV5b,OAAcL,IAARK,EAAoB4b,IAAQ5b,GASxB,GACRA,GAAO4b,GACG,IAAG5b,EAAM,GACVA,EAAM4b,IACf5b,EAAM4b,GAGJ5b,EAAMD,IAAOC,EAAMD,GAGnBwE,EAAOiW,qBACT2C,EAASja,KAAKka,SAASrd,EAAOC,IAEvB0a,UAAYnW,EAAOjB,cACrB,CACL,IAAI+Z,EAAWrd,EAAMD,EACrBod,EAAS,IAAI5Y,EAAO8Y,OAAU1d,GAC9B,IAAK,IAAIwB,EAAI,EAAGA,EAAIkc,IAAYlc,EAC9Bgc,EAAOhc,GAAK+B,KAAK/B,EAAIpB,GAIzB,OAAOod,GAGT5Y,EAAOjB,UAAUsN,KAAO,SAAe0M,EAAQC,EAAaxd,EAAOC,GAQjE,GAPKD,IAAOA,EAAQ,GACfC,GAAe,IAARA,IAAWA,EAAMkD,KAAK9C,QAC9Bmd,GAAeD,EAAOld,SAAQmd,EAAcD,EAAOld,QAClDmd,IAAaA,EAAc,GAC5Bvd,EAAM,GAAKA,EAAMD,IAAOC,EAAMD,GAG9BC,IAAQD,EAAO,OAAO,EAC1B,GAAsB,IAAlBud,EAAOld,QAAgC,IAAhB8C,KAAK9C,OAAc,OAAO,EAGrD,GAAImd,EAAc,EAChB,MAAM,IAAIlC,WAAW,6BAEvB,GAAItb,EAAQ,GAAKA,GAASmD,KAAK9C,OAAQ,MAAM,IAAIib,WAAW,6BAC5D,GAAIrb,EAAM,EAAG,MAAM,IAAIqb,WAAW,2BAG9Brb,EAAMkD,KAAK9C,SAAQJ,EAAMkD,KAAK9C,QAC9Bkd,EAAOld,OAASmd,EAAcvd,EAAMD,IACtCC,EAAMsd,EAAOld,OAASmd,EAAcxd,GAGtC,IACIoB,EADAya,EAAM5b,EAAMD,EAGhB,GAAImD,OAASoa,GAAUvd,EAAQwd,GAAeA,EAAcvd,EAE1D,IAAKmB,EAAIya,EAAM,EAAGza,GAAK,IAAKA,EAC1Bmc,EAAOnc,EAAIoc,GAAera,KAAK/B,EAAIpB,QAEhC,GAAI6b,EAAM,MAASrX,EAAOiW,oBAE/B,IAAKrZ,EAAI,EAAGA,EAAIya,IAAOza,EACrBmc,EAAOnc,EAAIoc,GAAera,KAAK/B,EAAIpB,QAGrC0a,WAAWnX,UAAUqB,IAAIlD,KACvB6b,EACApa,KAAKka,SAASrd,EAAOA,EAAQ6b,GAC7B2B,GAIJ,OAAO3B,GAGTrX,EAAOjB,UAAUmB,KAAO,SAAeqX,EAAK/b,EAAOC,GAEjD,GAAmB,iBAAR8b,GAOT,GANqB,iBAAV/b,GACTA,EAAQ,EACRC,EAAMkD,KAAK9C,QACa,iBAARJ,IAChBA,EAAMkD,KAAK9C,QAEM,IAAf0b,EAAI1b,OAAc,CACpB,IAAImB,EAAOua,EAAIO,WAAW,GACtB9a,EAAO,MACTua,EAAMva,QAGc,iBAARua,IAChBA,GAAY,KAId,GAAI/b,EAAQ,GAAKmD,KAAK9C,OAASL,GAASmD,KAAK9C,OAASJ,EACpD,MAAM,IAAIqb,WAAW,sBAGvB,GAAIrb,GAAOD,EACT,OAAOmD,KAQT,IAAI/B,EACJ,GANApB,KAAkB,EAClBC,OAAcL,IAARK,EAAoBkD,KAAK9C,OAASJ,IAAQ,EAE3C8b,IAAKA,EAAM,GAGG,iBAARA,EACT,IAAK3a,EAAIpB,EAAOoB,EAAInB,IAAOmB,EACzB+B,KAAK/B,GAAK2a,MAEP,CACL,IAAIM,EAAQ7X,EAAOoX,SAASG,GACxBA,EACA,IAAIvX,EAAOuX,GACXF,EAAMQ,EAAMhc,OAChB,IAAKe,EAAI,EAAGA,EAAInB,EAAMD,IAASoB,EAC7B+B,KAAK/B,EAAIpB,GAASqc,EAAMjb,EAAIya,GAIhC,OAAO1Y,MAGTqB,EAAOkM,OAAS,SAAiB+M,EAAMpd,GACrC,IAAKyM,EAAQ2Q,GACX,MAAM,IAAIvC,UAAU,+CAGtB,GAAoB,IAAhBuC,EAAKpd,OACP,OAAOqb,EAAa,KAAM,GAG5B,IAAIta,EACJ,QAAexB,IAAXS,EAEF,IADAA,EAAS,EACJe,EAAI,EAAGA,EAAIqc,EAAKpd,SAAUe,EAC7Bf,GAAUod,EAAKrc,GAAGf,OAItB,IAAI2D,EAASgX,EAAY,KAAM3a,GAC3BsC,EAAM,EACV,IAAKvB,EAAI,EAAGA,EAAIqc,EAAKpd,SAAUe,EAAG,CAChC,IAAIma,EAAMkC,EAAKrc,GACf,IAAKoD,EAAOoX,SAASL,GACnB,MAAM,IAAIL,UAAU,+CAEtBK,EAAI1K,KAAK7M,EAAQrB,GACjBA,GAAO4Y,EAAIlb,OAEb,OAAO2D,GAGTQ,EAAO6W,WAAaA,EAEpB7W,EAAOjB,UAAUma,WAAY,EAC7BlZ,EAAOoX,SAAW,SAAmBtN,GACnC,QAAe,MAALA,IAAaA,EAAEoP,YAG3B3e,EAAOC,QAAUwF,GAEf,CAAC,QAAU,KAAKmZ,GAAG,CAAC,SAAS/b,EAAQ7C,EAAOC,GAE9C,IAAI4e,EAAIhc,EAAQ,oBAEhB7C,EAAOC,QAAU,WACf,MACuB,mBAAd4e,EAAErH,SAC2B,mBAA7BqH,EAAErH,QAAQhT,UAAUsa,OAI7B,CAAC,mBAAmB,KAAKC,GAAG,CAAC,SAASlc,EAAQ7C,EAAOC,GAuBvD,IAAIyS,EAAW,CACbsM,6BAA8B,SAAS5K,EAAO6K,EAAGjX,GAG/C,IAAIkX,EAAe,GAIfC,EAAQ,GACZA,EAAMF,GAAK,EAMX,IAGIG,EACA7c,EAAG8c,EACHC,EACAC,EAEAC,EACAC,EATAC,EAAOhN,EAASiN,cAAcC,OAWlC,IAVAF,EAAKlc,KAAKyb,EAAG,IAULS,EAAKG,SAaX,IAAKR,KATL9c,GADA6c,EAAUM,EAAKI,OACHlb,MACZ0a,EAAiBF,EAAQW,KAGzBR,EAAiBnL,EAAM7R,IAAM,GAMvBgd,EAAeS,eAAeX,KAOhCG,EAAgCF,EALpBC,EAAeF,GAW3BI,EAAiBN,EAAME,SACY,IAAbF,EAAME,IACTI,EAAiBD,KAClCL,EAAME,GAAKG,EACXE,EAAKlc,KAAK6b,EAAGG,GACbN,EAAaG,GAAK9c,IAM1B,QAAiB,IAANyF,QAAyC,IAAbmX,EAAMnX,GAAoB,CAC/D,IAAIiY,EAAM,CAAC,8BAA+BhB,EAAG,OAAQjX,EAAG,KAAK7G,KAAK,IAClE,MAAM,IAAIS,MAAMqe,GAGlB,OAAOf,GAGTgB,4CAA6C,SAAShB,EAAclX,GAIlE,IAHA,IAAIqM,EAAQ,GACR9R,EAAIyF,EAEDzF,GACL8R,EAAM7Q,KAAKjB,GACG2c,EAAa3c,GAC3BA,EAAI2c,EAAa3c,GAGnB,OADA8R,EAAM5Q,UACC4Q,GAGTa,UAAW,SAASd,EAAO6K,EAAGjX,GAC5B,IAAIkX,EAAexM,EAASsM,6BAA6B5K,EAAO6K,EAAGjX,GACnE,OAAO0K,EAASwN,4CACdhB,EAAclX,IAMlB2X,cAAe,CACbC,KAAM,SAAU3I,GACd,IAEItC,EAFAwL,EAAIzN,EAASiN,cACbxd,EAAI,GAGR,IAAKwS,KADLsC,EAAOA,GAAQ,GACHkJ,EACNA,EAAEH,eAAerL,KACnBxS,EAAEwS,GAAOwL,EAAExL,IAKf,OAFAxS,EAAEie,MAAQ,GACVje,EAAEke,OAASpJ,EAAKoJ,QAAUF,EAAEG,eACrBne,GAGTme,eAAgB,SAAU9d,EAAG+M,GAC3B,OAAO/M,EAAEud,KAAOxQ,EAAEwQ,MAOpBvc,KAAM,SAAUoB,EAAOmb,GACrB,IAAIQ,EAAO,CAAC3b,MAAOA,EAAOmb,KAAMA,GAChC3b,KAAKgc,MAAM5c,KAAK+c,GAChBnc,KAAKgc,MAAM7M,KAAKnP,KAAKic,SAMvBP,IAAK,WACH,OAAO1b,KAAKgc,MAAMI,SAGpBX,MAAO,WACL,OAA6B,IAAtBzb,KAAKgc,MAAM9e,eAOF,IAAXtB,IACTA,EAAOC,QAAUyS,IAGjB,IAAI+N,GAAG,CAAC,SAAS5d,EAAQ7C,EAAOC,GAClC,IAAIO,EAAW,GAAGA,SAElBR,EAAOC,QAAUmP,MAAMrB,SAAW,SAAU7N,GAC1C,MAA6B,kBAAtBM,EAASmC,KAAKzC,KAGrB,IAAIwgB,GAAG,CAAC,SAAS7d,EAAQ7C,EAAOC,IAClC,SAAWwB,GACXzB,EAAOC,QAA2B,iBAATyB,MAAqBA,KAAKA,OAASA,MAAQA,MAC/C,iBAAXD,GAAuBA,EAAOA,SAAWA,GAAUA,GAC3D2C,OAECzB,KAAKyB,UAA+B,IAAnB7C,EAAiCA,EAAiC,oBAATG,KAAuBA,KAAyB,oBAAXF,OAAyBA,OAAS,KAElJ,KAAK,GAAG,CAAC,IAjyG4C,CAiyGvC,OAMZH,EAAQ,CACVsf,KAAM,SACNC,MAAO,CAKL1P,QAASlG,OAKT6V,IAAK,CACH3H,KAAM4H,OACNC,QAAS,UAMXnc,MAAO,MAETgT,OAAQ,SAAgBQ,GACtB,OAAOA,EAAchU,KAAKyc,IAAKzc,KAAK4c,OAAOD,UAE7CE,MAAO,CACLC,OAAQ,CACNC,MAAM,EACNC,WAAW,EACXC,QAAS,WACHjd,KAAKkd,KACPld,KAAKmd,cAKbC,QAAS,CAIPD,SAAU,WACR,IAAIE,EAAQrd,KAER8M,EAAU9M,KAAK8M,QACf2P,EAAMzc,KAAKyc,IACXjc,EAAQkc,OAAO1c,KAAKQ,OAEZ,WAARic,EACFhf,EAAO8V,SAASvT,KAAKkd,IAAK1c,EAAOsM,GAAS,SAAUwQ,GAClD,GAAIA,EACF,MAAMA,KAGO,QAARb,EACThf,EAAOgW,UAAUjT,EAAOsM,GAAS,SAAUwQ,EAAOC,GAChD,GAAID,EACF,MAAMA,EAGRD,EAAMH,IAAIrD,IAAM0D,KAGlB9f,EAAOrB,SAASoE,EAAOsM,GAAS,SAAUwQ,EAAOhhB,GAC/C,GAAIghB,EACF,MAAMA,EAGRD,EAAMH,IAAIM,UAAYlhB,OAK9BmhB,QAAS,WACPzd,KAAKmd,aAIM,Q;;;;;;;;;GC/3Gf,SAASO,EAAQnO,GAWf,OATEmO,EADoB,mBAAXrE,QAAoD,iBAApBA,OAAOsE,SACtC,SAAUpO,GAClB,cAAcA,GAGN,SAAUA,GAClB,OAAOA,GAAyB,mBAAX8J,QAAyB9J,EAAIqO,cAAgBvE,QAAU9J,IAAQ8J,OAAOjZ,UAAY,gBAAkBmP,IAI9GA,GAGjB,SAASsO,EAAgBC,EAAUC,GACjC,KAAMD,aAAoBC,GACxB,MAAM,IAAIhG,UAAU,qCAIxB,SAASiG,EAAkB5D,EAAQoC,GACjC,IAAK,IAAIve,EAAI,EAAGA,EAAIue,EAAMtf,OAAQe,IAAK,CACrC,IAAIggB,EAAazB,EAAMve,GACvBggB,EAAWxE,WAAawE,EAAWxE,aAAc,EACjDwE,EAAWzE,cAAe,EACtB,UAAWyE,IAAYA,EAAWvE,UAAW,GACjD9S,OAAO2S,eAAea,EAAQ6D,EAAW1N,IAAK0N,IAUlD,SAASC,EAAmBpiB,GAC1B,OAGF,SAA4BA,GAC1B,GAAIkP,MAAMrB,QAAQ7N,GAAM,CACtB,IAAK,IAAImC,EAAI,EAAGkgB,EAAO,IAAInT,MAAMlP,EAAIoB,QAASe,EAAInC,EAAIoB,OAAQe,IAAKkgB,EAAKlgB,GAAKnC,EAAImC,GAEjF,OAAOkgB,GAPFC,CAAmBtiB,IAW5B,SAA0BuiB,GACxB,GAAIhF,OAAOsE,YAAY/W,OAAOyX,IAAkD,uBAAzCzX,OAAOxG,UAAUhE,SAASmC,KAAK8f,GAAgC,OAAOrT,MAAM/H,KAAKob,GAZtFC,CAAiBxiB,IAerD,WACE,MAAM,IAAIic,UAAU,mDAhBuCwG,GAmB7D,IAAIC,EAA+B,oBAAXphB,OACpBqhB,EAASD,EAAaphB,OAAS,GAgB/BshB,EAAa,GAAGnR,OAfJ,UAesB,SAClCoR,EAAiB,GAAGpR,OAhBR,UAgB0B,aACtCqR,EAAe,GAAGrR,OAjBN,UAiBwB,WACpCsR,EAAa,GAAGtR,OAlBJ,UAkBsB,SAClCuR,EAAkB,GAAGvR,OAnBT,UAmB2B,cACvCwR,EAAc,GAAGxR,OApBL,UAoBuB,UACnCyR,EAAa,GAAGzR,OArBJ,UAqBsB,SAElC0R,EAAc,GAAG1R,OAvBL,UAuBuB,UACnC2R,EAAe,GAAG3R,OAxBN,UAwBwB,WAWpC4R,EAAqBV,EAAOW,aAAe,cAAgB,uBAC3DC,EAAqBZ,EAAOW,aAAe,cAAgB,sBAC3DE,EAAmBb,EAAOW,aAAe,0BAA4B,+BAQrEG,EAAiB,+CACjBC,EAAkB,SAClBC,EAAuB,4BACvBC,EAAkB,oBAElBC,EAAW,CAEbC,SAAU,EAGVC,SA7BmB,OAgCnBC,mBAAoBC,IAEpBC,YAAaD,IAEbhgB,KAAM,KAENkgB,QAAS,GAETC,YAAY,EAEZC,SAAS,EAETC,kBAAkB,EAElBC,kBAAkB,EAElBC,OAAO,EAEPC,QAAQ,EAERC,QAAQ,EAERC,WAAW,EAEXC,YAAY,EAEZC,UAAU,EAEVC,aAAc,GAEdC,SAAS,EAETC,WAAW,EAEXC,UAAU,EAEVC,UAAU,EAEVC,aAAa,EAEbC,aAAa,EAEbC,eAAgB,GAEhBC,gBAAgB,EAEhBC,kBAAkB,EAElBC,0BAA0B,EAE1BC,eAAgB,EAChBC,gBAAiB,EACjBC,gBAAiB,EACjBC,iBAAkB,EAClBC,kBAAmB,IACnBC,mBAAoB,IAEpBC,MAAO,KACPC,UAAW,KACXC,SAAU,KACVC,QAAS,KACTC,KAAM,KACNC,KAAM,MASJ5c,EAAQ6c,OAAO7c,OAASmZ,EAAOnZ,MAOnC,SAAS8c,EAAS5hB,GAChB,MAAwB,iBAAVA,IAAuB8E,EAAM9E,GAQ7C,SAAS6hB,EAAY7hB,GACnB,YAAwB,IAAVA,EAQhB,SAAS8hB,EAAS9hB,GAChB,MAA0B,WAAnBkd,EAAQld,IAAiC,OAAVA,EAExC,IAAIob,EAAiBhV,OAAOxG,UAAUwb,eAOtC,SAAS2G,EAAc/hB,GACrB,IAAK8hB,EAAS9hB,GACZ,OAAO,EAGT,IACE,IAAIgiB,EAAehiB,EAAMod,YACrBxd,EAAYoiB,EAAapiB,UAC7B,OAAOoiB,GAAgBpiB,GAAawb,EAAerd,KAAK6B,EAAW,iBACnE,MAAOvC,GACP,OAAO,GASX,SAAS4kB,EAAWjiB,GAClB,MAAwB,mBAAVA,EAShB,SAASyJ,EAAQlK,EAAM2iB,GACrB,GAAI3iB,GAAQ0iB,EAAWC,GACrB,GAAI1X,MAAMrB,QAAQ5J,IAASqiB,EAASriB,EAAK7C,QAEvC,CACE,IACIe,EADAf,EAAS6C,EAAK7C,OAGlB,IAAKe,EAAI,EAAGA,EAAIf,IACgC,IAA1CwlB,EAASnkB,KAAKwB,EAAMA,EAAK9B,GAAIA,EAAG8B,GADd9B,GAAK,SAKpBqkB,EAASviB,IACpB6G,OAAOC,KAAK9G,GAAMkK,SAAQ,SAAUsG,GAClCmS,EAASnkB,KAAKwB,EAAMA,EAAKwQ,GAAMA,EAAKxQ,MAK1C,OAAOA,EAST,IAAI4iB,EAAS/b,OAAO+b,QAAU,SAAgBpT,GAC5C,IAAK,IAAIqT,EAAO5P,UAAU9V,OAAQ6V,EAAO,IAAI/H,MAAM4X,EAAO,EAAIA,EAAO,EAAI,GAAIC,EAAO,EAAGA,EAAOD,EAAMC,IAClG9P,EAAK8P,EAAO,GAAK7P,UAAU6P,GAa7B,OAVIP,EAAS/S,IAAQwD,EAAK7V,OAAS,GACjC6V,EAAK9I,SAAQ,SAAU2N,GACjB0K,EAAS1K,IACXhR,OAAOC,KAAK+Q,GAAK3N,SAAQ,SAAUsG,GACjChB,EAAIgB,GAAOqH,EAAIrH,SAMhBhB,GAELuT,EAAkB,uBAStB,SAASC,EAAuBviB,GAC9B,IAAIwiB,EAAQhQ,UAAU9V,OAAS,QAAsBT,IAAjBuW,UAAU,GAAmBA,UAAU,GAAK,KAChF,OAAO8P,EAAgB1U,KAAK5N,GAAS1B,KAAKmkB,MAAMziB,EAAQwiB,GAASA,EAAQxiB,EAE3E,IAAI0iB,EAAgB,mDAOpB,SAASC,EAASC,EAASC,GACzB,IAAI1O,EAAQyO,EAAQzO,MACpB1K,EAAQoZ,GAAQ,SAAU7iB,EAAO8iB,GAC3BJ,EAAc9U,KAAKkV,IAAalB,EAAS5hB,KAC3CA,GAAS,MAGXmU,EAAM2O,GAAY9iB,KAmBtB,SAAS+iB,EAASH,EAAS5iB,GACzB,GAAKA,EAIL,GAAI4hB,EAASgB,EAAQlmB,QACnB+M,EAAQmZ,GAAS,SAAUI,GACzBD,EAASC,EAAMhjB,WAKnB,GAAI4iB,EAAQK,UACVL,EAAQK,UAAUC,IAAIljB,OADxB,CAKA,IAAImjB,EAAYP,EAAQO,UAAUC,OAE7BD,EAEMA,EAAUljB,QAAQD,GAAS,IACpC4iB,EAAQO,UAAY,GAAGpW,OAAOoW,EAAW,KAAKpW,OAAO/M,IAFrD4iB,EAAQO,UAAYnjB,GAWxB,SAASqjB,EAAYT,EAAS5iB,GACvBA,IAID4hB,EAASgB,EAAQlmB,QACnB+M,EAAQmZ,GAAS,SAAUI,GACzBK,EAAYL,EAAMhjB,MAKlB4iB,EAAQK,UACVL,EAAQK,UAAUK,OAAOtjB,GAIvB4iB,EAAQO,UAAUljB,QAAQD,IAAU,IACtC4iB,EAAQO,UAAYP,EAAQO,UAAUjnB,QAAQ8D,EAAO,MAUzD,SAASujB,EAAYX,EAAS5iB,EAAOwjB,GAC9BxjB,IAID4hB,EAASgB,EAAQlmB,QACnB+M,EAAQmZ,GAAS,SAAUI,GACzBO,EAAYP,EAAMhjB,EAAOwjB,MAMzBA,EACFT,EAASH,EAAS5iB,GAElBqjB,EAAYT,EAAS5iB,IAGzB,IAAIyjB,EAAmB,oBAOvB,SAASC,EAAU1jB,GACjB,OAAOA,EAAM9D,QAAQunB,EAAkB,SAAS9gB,cASlD,SAASghB,EAAQf,EAAS7G,GACxB,OAAI+F,EAASc,EAAQ7G,IACZ6G,EAAQ7G,GAGb6G,EAAQgB,QACHhB,EAAQgB,QAAQ7H,GAGlB6G,EAAQiB,aAAa,QAAQ9W,OAAO2W,EAAU3H,KASvD,SAAS+H,EAAQlB,EAAS7G,EAAMxc,GAC1BuiB,EAASviB,GACXqjB,EAAQ7G,GAAQxc,EACPqjB,EAAQgB,QACjBhB,EAAQgB,QAAQ7H,GAAQxc,EAExBqjB,EAAQmB,aAAa,QAAQhX,OAAO2W,EAAU3H,IAAQxc,GA2B1D,IAAIykB,EAAgB,QAEhBC,EAAgB,WAClB,IAAIC,GAAY,EAEhB,GAAIlG,EAAY,CACd,IAAImG,GAAO,EAEPC,EAAW,aAEX9X,EAAUlG,OAAO2S,eAAe,GAAI,OAAQ,CAC9CzY,IAAK,WAEH,OADA4jB,GAAY,EACLC,GAQTljB,IAAK,SAAajB,GAChBmkB,EAAOnkB,KAGXie,EAAOoG,iBAAiB,OAAQD,EAAU9X,GAC1C2R,EAAOqG,oBAAoB,OAAQF,EAAU9X,GAG/C,OAAO4X,EA3BW,GAsCpB,SAASK,EAAe3B,EAAStO,EAAM8P,GACrC,IAAI9X,EAAUkG,UAAU9V,OAAS,QAAsBT,IAAjBuW,UAAU,GAAmBA,UAAU,GAAK,GAC9EiK,EAAU2H,EACd9P,EAAK8O,OAAOrN,MAAMiO,GAAeva,SAAQ,SAAU+a,GACjD,IAAKP,EAAe,CAClB,IAAIQ,EAAY7B,EAAQ6B,UAEpBA,GAAaA,EAAUD,IAAUC,EAAUD,GAAOJ,KACpD3H,EAAUgI,EAAUD,GAAOJ,UACpBK,EAAUD,GAAOJ,GAEqB,IAAzChe,OAAOC,KAAKoe,EAAUD,IAAQ9nB,eACzB+nB,EAAUD,GAGmB,IAAlCpe,OAAOC,KAAKoe,GAAW/nB,eAClBkmB,EAAQ6B,WAKrB7B,EAAQ0B,oBAAoBE,EAAO/H,EAASnQ,MAWhD,SAASoY,EAAY9B,EAAStO,EAAM8P,GAClC,IAAI9X,EAAUkG,UAAU9V,OAAS,QAAsBT,IAAjBuW,UAAU,GAAmBA,UAAU,GAAK,GAC9EmS,EAAWP,EACf9P,EAAK8O,OAAOrN,MAAMiO,GAAeva,SAAQ,SAAU+a,GACjD,GAAIlY,EAAQ6X,OAASF,EAAe,CAClC,IAAIW,EAAqBhC,EAAQ6B,UAC7BA,OAAmC,IAAvBG,EAAgC,GAAKA,EAErDD,EAAW,kBACFF,EAAUD,GAAOJ,GACxBxB,EAAQ0B,oBAAoBE,EAAOG,EAAUrY,GAE7C,IAAK,IAAIuY,EAAQrS,UAAU9V,OAAQ6V,EAAO,IAAI/H,MAAMqa,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACpFvS,EAAKuS,GAAStS,UAAUsS,GAG1BV,EAASpO,MAAM4M,EAASrQ,IAGrBkS,EAAUD,KACbC,EAAUD,GAAS,IAGjBC,EAAUD,GAAOJ,IACnBxB,EAAQ0B,oBAAoBE,EAAOC,EAAUD,GAAOJ,GAAW9X,GAGjEmY,EAAUD,GAAOJ,GAAYO,EAC7B/B,EAAQ6B,UAAYA,EAGtB7B,EAAQyB,iBAAiBG,EAAOG,EAAUrY,MAW9C,SAASyY,EAAcnC,EAAStO,EAAM/U,GACpC,IAAIilB,EAaJ,OAXIvC,EAAW+C,QAAU/C,EAAWgD,aAClCT,EAAQ,IAAIS,YAAY3Q,EAAM,CAC5B4Q,OAAQ3lB,EACR4lB,SAAS,EACTC,YAAY,KAGdZ,EAAQjR,SAAS8R,YAAY,gBACvBC,gBAAgBhR,GAAM,GAAM,EAAM/U,GAGnCqjB,EAAQmC,cAAcP,GAQ/B,SAASe,EAAU3C,GACjB,IAAI4C,EAAM5C,EAAQ6C,wBAClB,MAAO,CACLC,KAAMF,EAAIE,MAAQ9oB,OAAO+oB,YAAcpS,SAASqS,gBAAgBC,YAChEC,IAAKN,EAAIM,KAAOlpB,OAAOmpB,YAAcxS,SAASqS,gBAAgBI,YAGlE,IAAIC,EAAWhI,EAAOgI,SAClBC,EAAiB,mCAOrB,SAASC,GAAiBpJ,GACxB,IAAIqJ,EAAQrJ,EAAIsJ,MAAMH,GACtB,OAAOE,IAAUA,EAAM,KAAOH,EAASK,UAAYF,EAAM,KAAOH,EAASM,UAAYH,EAAM,KAAOH,EAASO,MAQ7G,SAASC,GAAa1J,GACpB,IAAI2J,EAAY,aAAa3Z,QAAO,IAAI4Z,MAAOC,WAC/C,OAAO7J,IAA6B,IAAtBA,EAAI9c,QAAQ,KAAc,IAAM,KAAOymB,EAQvD,SAASG,GAAcC,GACrB,IAAIC,EAASD,EAAKC,OACdC,EAASF,EAAKE,OACdC,EAASH,EAAKG,OACdC,EAAaJ,EAAKI,WAClBC,EAAaL,EAAKK,WAClBC,EAAS,GAETxF,EAASsF,IAA8B,IAAfA,GAC1BE,EAAOxoB,KAAK,cAAcmO,OAAOma,EAAY,QAG3CtF,EAASuF,IAA8B,IAAfA,GAC1BC,EAAOxoB,KAAK,cAAcmO,OAAOoa,EAAY,QAI3CvF,EAASmF,IAAsB,IAAXA,GACtBK,EAAOxoB,KAAK,UAAUmO,OAAOga,EAAQ,SAGnCnF,EAASoF,IAAsB,IAAXA,GACtBI,EAAOxoB,KAAK,UAAUmO,OAAOia,EAAQ,MAGnCpF,EAASqF,IAAsB,IAAXA,GACtBG,EAAOxoB,KAAK,UAAUmO,OAAOka,EAAQ,MAGvC,IAAII,EAAYD,EAAO1qB,OAAS0qB,EAAO7qB,KAAK,KAAO,OACnD,MAAO,CACL+qB,gBAAiBD,EACjBE,YAAaF,EACbA,UAAWA,GAqCf,SAASG,GAAWC,EAAOC,GACzB,IAAIC,EAAQF,EAAME,MACdC,EAAQH,EAAMG,MACdtrB,EAAM,CACRurB,KAAMF,EACNG,KAAMF,GAER,OAAOF,EAAUprB,EAAM6lB,EAAO,CAC5B4F,OAAQJ,EACRK,OAAQJ,GACPtrB,GA8BL,IAAI6c,GAAWwI,OAAOxI,UAAY8E,EAAO9E,SAQzC,SAAS8O,GAAiBC,GAExB,IAAI1I,EAAc0I,EAAM1I,YACpBtL,EAASgU,EAAMhU,OACfD,EAAQiU,EAAMjU,MACdK,EAAO9B,UAAU9V,OAAS,QAAsBT,IAAjBuW,UAAU,GAAmBA,UAAU,GAAK,UAE3E2V,EAAgB,SAAuBnoB,GACzC,OAAOmZ,GAASnZ,IAAUA,EAAQ,GAGpC,GAAImoB,EAAclU,IAAUkU,EAAcjU,GAAS,CACjD,IAAIkU,EAAgBlU,EAASsL,EAEhB,YAATlL,GAAsB8T,EAAgBnU,GAAkB,UAATK,GAAoB8T,EAAgBnU,EACrFC,EAASD,EAAQuL,EAEjBvL,EAAQC,EAASsL,OAEV2I,EAAclU,GACvBC,EAASD,EAAQuL,EACR2I,EAAcjU,KACvBD,EAAQC,EAASsL,GAGnB,MAAO,CACLvL,MAAOA,EACPC,OAAQA,GA4CZ,SAASmU,GAAgBxU,EAAOyU,EAAOC,EAAOC,GAC5C,IAAIC,EAAmBH,EAAM9I,YACzBkJ,EAAoBJ,EAAMK,aAC1BC,EAAqBN,EAAMO,cAC3BC,EAAeR,EAAMvB,OACrBA,OAA0B,IAAjB+B,EAA0B,EAAIA,EACvCC,EAAeT,EAAMtB,OACrBA,OAA0B,IAAjB+B,EAA0B,EAAIA,EACvCC,EAAeV,EAAMrB,OACrBA,OAA0B,IAAjB+B,EAA0B,EAAIA,EACvCxJ,EAAc+I,EAAM/I,YACpBmJ,EAAeJ,EAAMI,aACrBE,EAAgBN,EAAMM,cACtBI,EAAkBT,EAAMU,UACxBA,OAAgC,IAApBD,EAA6B,cAAgBA,EACzDE,EAAwBX,EAAMY,sBAC9BA,OAAkD,IAA1BD,GAA0CA,EAClEE,EAAwBb,EAAMc,sBAC9BA,OAAkD,IAA1BD,EAAmC,MAAQA,EACnEE,EAAiBf,EAAMgB,SACvBA,OAA8B,IAAnBD,EAA4B/iB,IAAW+iB,EAClDE,EAAkBjB,EAAMkB,UACxBA,OAAgC,IAApBD,EAA6BjjB,IAAWijB,EACpDE,EAAiBnB,EAAMoB,SACvBA,OAA8B,IAAnBD,EAA4B,EAAIA,EAC3CE,EAAkBrB,EAAMsB,UACxBA,OAAgC,IAApBD,EAA6B,EAAIA,EAC7C1X,EAASoB,SAASC,cAAc,UAChCuW,EAAU5X,EAAOQ,WAAW,MAC5BqX,EAAW/B,GAAiB,CAC9BzI,YAAaA,EACbvL,MAAOuV,EACPtV,OAAQwV,IAENO,EAAWhC,GAAiB,CAC9BzI,YAAaA,EACbvL,MAAO2V,EACP1V,OAAQ4V,GACP,SACC7V,EAAQ3V,KAAK4rB,IAAIF,EAAS/V,MAAO3V,KAAKwM,IAAImf,EAAShW,MAAO0U,IAC1DzU,EAAS5V,KAAK4rB,IAAIF,EAAS9V,OAAQ5V,KAAKwM,IAAImf,EAAS/V,OAAQ2U,IAG7DsB,EAAelC,GAAiB,CAClCzI,YAAaiJ,EACbxU,MAAOuV,EACPtV,OAAQwV,IAENU,EAAenC,GAAiB,CAClCzI,YAAaiJ,EACbxU,MAAO2V,EACP1V,OAAQ4V,GACP,SACCO,EAAY/rB,KAAK4rB,IAAIC,EAAalW,MAAO3V,KAAKwM,IAAIsf,EAAanW,MAAOyU,IACtE4B,EAAahsB,KAAK4rB,IAAIC,EAAajW,OAAQ5V,KAAKwM,IAAIsf,EAAalW,OAAQ0U,IACzE2B,EAAS,EAAEF,EAAY,GAAIC,EAAa,EAAGD,EAAWC,GAe1D,OAdAnY,EAAO8B,MAAQsO,EAAuBtO,GACtC9B,EAAO+B,OAASqO,EAAuBrO,GACvC6V,EAAQS,UAAYtB,EACpBa,EAAQU,SAAS,EAAG,EAAGxW,EAAOC,GAC9B6V,EAAQW,OACRX,EAAQY,UAAU1W,EAAQ,EAAGC,EAAS,GACtC6V,EAAQhD,OAAOA,EAASzoB,KAAKssB,GAAK,KAClCb,EAAQ5T,MAAM6Q,EAAQC,GACtB8C,EAAQX,sBAAwBA,EAChCW,EAAQT,sBAAwBA,EAChCS,EAAQc,UAAU7U,MAAM+T,EAAS,CAAClW,GAAO9G,OAAO2Q,EAAmB6M,EAAOzb,KAAI,SAAUgc,GACtF,OAAOxsB,KAAKC,MAAMgkB,EAAuBuI,UAE3Cf,EAAQpK,UACDxN,EAET,IAAI4Y,GAAe7O,OAAO6O,aAoB1B,IAAIC,GAAuB,YA0C3B,SAASC,GAAuBC,GAC9B,IACIC,EADAC,EAAW,IAAIC,SAASH,GAG5B,IACE,IAAII,EACAC,EACAC,EAEJ,GAA6B,MAAzBJ,EAASK,SAAS,IAAwC,MAAzBL,EAASK,SAAS,GAIrD,IAHA,IAAI/uB,EAAS0uB,EAAS1T,WAClBrP,EAAS,EAENA,EAAS,EAAI3L,GAAQ,CAC1B,GAAkC,MAA9B0uB,EAASK,SAASpjB,IAAsD,MAAlC+iB,EAASK,SAASpjB,EAAS,GAAa,CAChFkjB,EAAYljB,EACZ,MAGFA,GAAU,EAId,GAAIkjB,EAAW,CACb,IACIG,EAAaH,EAAY,GAE7B,GAAuD,SAhF7D,SAA+BH,EAAU/uB,EAAOK,GAC9C,IACIe,EADAkQ,EAAM,GAIV,IAFAjR,GAAUL,EAELoB,EAAIpB,EAAOoB,EAAIf,EAAQe,GAAK,EAC/BkQ,GAAOod,GAAaK,EAASK,SAAShuB,IAGxC,OAAOkQ,EAuECge,CAAsBP,EAHTG,EAAY,EAGmB,GAAe,CAC7D,IAAIK,EAAaR,EAASS,UAAUH,GAGpC,KAFAJ,EAA8B,QAAfM,IAEoB,QAAfA,IAGyC,KAArDR,EAASS,UAAUH,EAAa,EAAGJ,GAA0B,CAC/D,IAAIQ,EAAiBV,EAASW,UAAUL,EAAa,EAAGJ,GAEpDQ,GAAkB,IACpBN,EAAWE,EAAaI,KAOpC,GAAIN,EAAU,CACZ,IAEIQ,EAEAvuB,EAJAwuB,EAAUb,EAASS,UAAUL,EAAUF,GAM3C,IAAK7tB,EAAI,EAAGA,EAAIwuB,EAASxuB,GAAK,EAG5B,GAFAuuB,EAAUR,EAAe,GAAJ/tB,EAAS,EAEoB,MAA9C2tB,EAASS,UAAUG,EAASV,GAE9B,CAEEU,GAAW,EAEXb,EAAcC,EAASS,UAAUG,EAASV,GAE1CF,EAASc,UAAUF,EAAS,EAAGV,GAC/B,QAIR,MAAOjuB,GACP8tB,EAAc,EAGhB,OAAOA,EA6DT,IAAInY,GAAS,CACXA,OAAQ,WACNxT,KAAK2sB,gBACL3sB,KAAK4sB,aACL5sB,KAAK6sB,cACL7sB,KAAKyS,eAEDzS,KAAK8sB,SACP9sB,KAAK+sB,iBAGTJ,cAAe,WACb,IAAIvJ,EAAUpjB,KAAKojB,QACftW,EAAU9M,KAAK8M,QACfkgB,EAAYhtB,KAAKgtB,UACjBC,EAAUjtB,KAAKitB,QACnB1J,EAAS0J,EAASrO,GAClBiF,EAAYT,EAASxE,GACrB,IAAIsO,EAAgB,CAClBzY,MAAO3V,KAAKwM,IAAI0hB,EAAUG,YAAahL,OAAOrV,EAAQ6U,oBAAsB,KAC5EjN,OAAQ5V,KAAKwM,IAAI0hB,EAAUI,aAAcjL,OAAOrV,EAAQ8U,qBAAuB,MAEjF5hB,KAAKktB,cAAgBA,EACrB/J,EAAS8J,EAAS,CAChBxY,MAAOyY,EAAczY,MACrBC,OAAQwY,EAAcxY,SAExB6O,EAASH,EAASxE,GAClBiF,EAAYoJ,EAASrO,IAGvBgO,WAAY,WACV,IAAIM,EAAgBltB,KAAKktB,cACrBG,EAAYrtB,KAAKqtB,UACjBzN,EAAW5f,KAAK8M,QAAQ8S,SACxB0N,EAAUxuB,KAAKwH,IAAI+mB,EAAU9F,QAAU,KAAQ,GAC/C4B,EAAemE,EAAUD,EAAUhE,cAAgBgE,EAAUlE,aAC7DE,EAAgBiE,EAAUD,EAAUlE,aAAekE,EAAUhE,cAC7DrJ,EAAcmJ,EAAeE,EAC7BkE,EAAcL,EAAczY,MAC5B+Y,EAAeN,EAAcxY,OAE7BwY,EAAcxY,OAASsL,EAAckN,EAAczY,MACpC,IAAbmL,EACF2N,EAAcL,EAAcxY,OAASsL,EAErCwN,EAAeN,EAAczY,MAAQuL,EAEjB,IAAbJ,EACT4N,EAAeN,EAAczY,MAAQuL,EAErCuN,EAAcL,EAAcxY,OAASsL,EAGvC,IAAIyN,EAAa,CACfzN,YAAaA,EACbmJ,aAAcA,EACdE,cAAeA,EACf5U,MAAO8Y,EACP7Y,OAAQ8Y,GAEVC,EAAWvH,MAAQgH,EAAczY,MAAQ8Y,GAAe,EACxDE,EAAWnH,KAAO4G,EAAcxY,OAAS8Y,GAAgB,EACzDC,EAAWC,QAAUD,EAAWvH,KAChCuH,EAAWE,OAASF,EAAWnH,IAC/BtmB,KAAKytB,WAAaA,EAClBztB,KAAK4tB,QAAuB,IAAbhO,GAA+B,IAAbA,EACjC5f,KAAK6tB,aAAY,GAAM,GACvB7tB,KAAK8tB,iBAAmBnL,EAAO,GAAI0K,GACnCrtB,KAAK+tB,kBAAoBpL,EAAO,GAAI8K,IAEtCI,YAAa,SAAqBG,EAAaC,GAC7C,IAAInhB,EAAU9M,KAAK8M,QACfogB,EAAgBltB,KAAKktB,cACrBO,EAAaztB,KAAKytB,WAClBS,EAAcluB,KAAKkuB,YACnBtO,EAAW9S,EAAQ8S,SACnBI,EAAcyN,EAAWzN,YACzB8M,EAAU9sB,KAAK8sB,SAAWoB,EAE9B,GAAIF,EAAa,CACf,IAAIzM,EAAiBY,OAAOrV,EAAQyU,iBAAmB,EACnDC,EAAkBW,OAAOrV,EAAQ0U,kBAAoB,EAErD5B,EAAW,GACb2B,EAAiBziB,KAAKwM,IAAIiW,EAAgB2L,EAAczY,OACxD+M,EAAkB1iB,KAAKwM,IAAIkW,EAAiB0L,EAAcxY,QAEzC,IAAbkL,IACE4B,EAAkBxB,EAAcuB,EAClCA,EAAiBC,EAAkBxB,EAEnCwB,EAAkBD,EAAiBvB,IAG9BJ,EAAW,IAChB2B,EACFA,EAAiBziB,KAAKwM,IAAIiW,EAAgBuL,EAAUoB,EAAYzZ,MAAQ,GAC/D+M,EACTA,EAAkB1iB,KAAKwM,IAAIkW,EAAiBsL,EAAUoB,EAAYxZ,OAAS,GAClEoY,IACTvL,EAAiB2M,EAAYzZ,OAC7B+M,EAAkB0M,EAAYxZ,QAERsL,EAAcuB,EAClCA,EAAiBC,EAAkBxB,EAEnCwB,EAAkBD,EAAiBvB,IAKzC,IAAImO,EAAoB1F,GAAiB,CACvCzI,YAAaA,EACbvL,MAAO8M,EACP7M,OAAQ8M,IAGVD,EAAiB4M,EAAkB1Z,MACnC+M,EAAkB2M,EAAkBzZ,OACpC+Y,EAAWrD,SAAW7I,EACtBkM,EAAWnD,UAAY9I,EACvBiM,EAAWzD,SAAWhjB,IACtBymB,EAAWvD,UAAYljB,IAGzB,GAAIinB,EACF,GAAIrO,GAAYkN,EAAU,EAAI,GAAI,CAChC,IAAIsB,EAAgBlB,EAAczY,MAAQgZ,EAAWhZ,MACjD4Z,EAAenB,EAAcxY,OAAS+Y,EAAW/Y,OACrD+Y,EAAWa,QAAUxvB,KAAK4rB,IAAI,EAAG0D,GACjCX,EAAWc,OAASzvB,KAAK4rB,IAAI,EAAG2D,GAChCZ,EAAWe,QAAU1vB,KAAKwM,IAAI,EAAG8iB,GACjCX,EAAWgB,OAAS3vB,KAAKwM,IAAI,EAAG+iB,GAE5BvB,GAAW9sB,KAAK4tB,UAClBH,EAAWa,QAAUxvB,KAAK4rB,IAAIwD,EAAYhI,KAAMgI,EAAYhI,MAAQgI,EAAYzZ,MAAQgZ,EAAWhZ,QACnGgZ,EAAWc,OAASzvB,KAAK4rB,IAAIwD,EAAY5H,IAAK4H,EAAY5H,KAAO4H,EAAYxZ,OAAS+Y,EAAW/Y,SACjG+Y,EAAWe,QAAUN,EAAYhI,KACjCuH,EAAWgB,OAASP,EAAY5H,IAEf,IAAb1G,IACE6N,EAAWhZ,OAASyY,EAAczY,QACpCgZ,EAAWa,QAAUxvB,KAAK4rB,IAAI,EAAG0D,GACjCX,EAAWe,QAAU1vB,KAAKwM,IAAI,EAAG8iB,IAG/BX,EAAW/Y,QAAUwY,EAAcxY,SACrC+Y,EAAWc,OAASzvB,KAAK4rB,IAAI,EAAG2D,GAChCZ,EAAWgB,OAAS3vB,KAAKwM,IAAI,EAAG+iB,WAKtCZ,EAAWa,SAAWb,EAAWhZ,MACjCgZ,EAAWc,QAAUd,EAAW/Y,OAChC+Y,EAAWe,QAAUtB,EAAczY,MACnCgZ,EAAWgB,OAASvB,EAAcxY,QAIxCjC,aAAc,SAAsBic,EAASC,GAC3C,IAAIlB,EAAaztB,KAAKytB,WAClBJ,EAAYrtB,KAAKqtB,UAErB,GAAIsB,EAAa,CACf,IAAIC,EApdV,SAAyBC,GACvB,IAAIpa,EAAQoa,EAAMpa,MACdC,EAASma,EAAMna,OACf1L,EAAS6lB,EAAM7lB,OAGnB,GAAe,MAFfA,EAASlK,KAAKwH,IAAI0C,GAAU,KAG1B,MAAO,CACLyL,MAAOC,EACPA,OAAQD,GAIZ,IAAIqa,EAAM9lB,EAAS,GAAKlK,KAAKssB,GAAK,IAC9B2D,EAASjwB,KAAKkwB,IAAIF,GAClBG,EAASnwB,KAAKowB,IAAIJ,GAClBK,EAAW1a,EAAQwa,EAASva,EAASqa,EACrCK,EAAY3a,EAAQsa,EAASra,EAASua,EAC1C,OAAOjmB,EAAS,GAAK,CACnByL,MAAO2a,EACP1a,OAAQya,GACN,CACF1a,MAAO0a,EACPza,OAAQ0a,GA6biBC,CAAgB,CACrC5a,MAAO4Y,EAAUlE,aAAerqB,KAAKwH,IAAI+mB,EAAU7F,QAAU,GAC7D9S,OAAQ2Y,EAAUhE,cAAgBvqB,KAAKwH,IAAI+mB,EAAU5F,QAAU,GAC/Dze,OAAQqkB,EAAU9F,QAAU,IAE1B4B,EAAeyF,EAAiBna,MAChC4U,EAAgBuF,EAAiBla,OAEjCD,EAAQgZ,EAAWhZ,OAAS0U,EAAesE,EAAWtE,cACtDzU,EAAS+Y,EAAW/Y,QAAU2U,EAAgBoE,EAAWpE,eAC7DoE,EAAWvH,OAASzR,EAAQgZ,EAAWhZ,OAAS,EAChDgZ,EAAWnH,MAAQ5R,EAAS+Y,EAAW/Y,QAAU,EACjD+Y,EAAWhZ,MAAQA,EACnBgZ,EAAW/Y,OAASA,EACpB+Y,EAAWzN,YAAcmJ,EAAeE,EACxCoE,EAAWtE,aAAeA,EAC1BsE,EAAWpE,cAAgBA,EAC3BrpB,KAAK6tB,aAAY,GAAM,IAGrBJ,EAAWhZ,MAAQgZ,EAAWzD,UAAYyD,EAAWhZ,MAAQgZ,EAAWrD,YAC1EqD,EAAWvH,KAAOuH,EAAWC,UAG3BD,EAAW/Y,OAAS+Y,EAAWvD,WAAauD,EAAW/Y,OAAS+Y,EAAWnD,aAC7EmD,EAAWnH,IAAMmH,EAAWE,QAG9BF,EAAWhZ,MAAQ3V,KAAK4rB,IAAI5rB,KAAKwM,IAAImiB,EAAWhZ,MAAOgZ,EAAWrD,UAAWqD,EAAWzD,UACxFyD,EAAW/Y,OAAS5V,KAAK4rB,IAAI5rB,KAAKwM,IAAImiB,EAAW/Y,OAAQ+Y,EAAWnD,WAAYmD,EAAWvD,WAC3FlqB,KAAK6tB,aAAY,GAAO,GACxBJ,EAAWvH,KAAOpnB,KAAK4rB,IAAI5rB,KAAKwM,IAAImiB,EAAWvH,KAAMuH,EAAWa,SAAUb,EAAWe,SACrFf,EAAWnH,IAAMxnB,KAAK4rB,IAAI5rB,KAAKwM,IAAImiB,EAAWnH,IAAKmH,EAAWc,QAASd,EAAWgB,QAClFhB,EAAWC,QAAUD,EAAWvH,KAChCuH,EAAWE,OAASF,EAAWnH,IAC/BnD,EAASnjB,KAAK2S,OAAQgQ,EAAO,CAC3BlO,MAAOgZ,EAAWhZ,MAClBC,OAAQ+Y,EAAW/Y,QAClB2S,GAAc,CACfK,WAAY+F,EAAWvH,KACvByB,WAAY8F,EAAWnH,QAEzBtmB,KAAKsvB,YAAYZ,GAEb1uB,KAAK8sB,SAAW9sB,KAAK4tB,SACvB5tB,KAAKuvB,cAAa,GAAM,IAG5BD,YAAa,SAAqBZ,GAChC,IAAIjB,EAAaztB,KAAKytB,WAClBJ,EAAYrtB,KAAKqtB,UACjB5Y,EAAQ4Y,EAAUlE,cAAgBsE,EAAWhZ,MAAQgZ,EAAWtE,cAChEzU,EAAS2Y,EAAUhE,eAAiBoE,EAAW/Y,OAAS+Y,EAAWpE,eACvE1G,EAAO0K,EAAW,CAChB5Y,MAAOA,EACPC,OAAQA,EACRwR,MAAOuH,EAAWhZ,MAAQA,GAAS,EACnC6R,KAAMmH,EAAW/Y,OAASA,GAAU,IAEtCyO,EAASnjB,KAAKqU,MAAOsO,EAAO,CAC1BlO,MAAO4Y,EAAU5Y,MACjBC,OAAQ2Y,EAAU3Y,QACjB2S,GAAc1E,EAAO,CACtB+E,WAAY2F,EAAUnH,KACtByB,WAAY0F,EAAU/G,KACrB+G,MAECqB,GACF1uB,KAAKwvB,UAGT3C,YAAa,WACX,IAAI/f,EAAU9M,KAAK8M,QACf2gB,EAAaztB,KAAKytB,WAClBzN,EAAclT,EAAQkT,aAAelT,EAAQgT,mBAC7Cc,EAAeuB,OAAOrV,EAAQ8T,eAAiB,GAC/CsN,EAAc,CAChBzZ,MAAOgZ,EAAWhZ,MAClBC,OAAQ+Y,EAAW/Y,QAGjBsL,IACEyN,EAAW/Y,OAASsL,EAAcyN,EAAWhZ,MAC/CyZ,EAAYxZ,OAASwZ,EAAYzZ,MAAQuL,EAEzCkO,EAAYzZ,MAAQyZ,EAAYxZ,OAASsL,GAI7ChgB,KAAKkuB,YAAcA,EACnBluB,KAAKuvB,cAAa,GAAM,GAExBrB,EAAYzZ,MAAQ3V,KAAK4rB,IAAI5rB,KAAKwM,IAAI4iB,EAAYzZ,MAAOyZ,EAAY9D,UAAW8D,EAAYlE,UAC5FkE,EAAYxZ,OAAS5V,KAAK4rB,IAAI5rB,KAAKwM,IAAI4iB,EAAYxZ,OAAQwZ,EAAY5D,WAAY4D,EAAYhE,WAE/FgE,EAAYzZ,MAAQ3V,KAAKwM,IAAI4iB,EAAY9D,SAAU8D,EAAYzZ,MAAQmM,GACvEsN,EAAYxZ,OAAS5V,KAAKwM,IAAI4iB,EAAY5D,UAAW4D,EAAYxZ,OAASkM,GAC1EsN,EAAYhI,KAAOuH,EAAWvH,MAAQuH,EAAWhZ,MAAQyZ,EAAYzZ,OAAS,EAC9EyZ,EAAY5H,IAAMmH,EAAWnH,KAAOmH,EAAW/Y,OAASwZ,EAAYxZ,QAAU,EAC9EwZ,EAAYR,QAAUQ,EAAYhI,KAClCgI,EAAYP,OAASO,EAAY5H,IACjCtmB,KAAKyvB,mBAAqB9M,EAAO,GAAIuL,IAEvCqB,aAAc,SAAsBvB,EAAaC,GAC/C,IAAInhB,EAAU9M,KAAK8M,QACfogB,EAAgBltB,KAAKktB,cACrBO,EAAaztB,KAAKytB,WAClBS,EAAcluB,KAAKkuB,YACnBN,EAAU5tB,KAAK4tB,QACf5N,EAAclT,EAAQkT,YAE1B,GAAIgO,EAAa,CACf,IAAIvM,EAAkBU,OAAOrV,EAAQ2U,kBAAoB,EACrDC,EAAmBS,OAAOrV,EAAQ4U,mBAAqB,EACvDgO,EAAkB9B,EAAU9uB,KAAK4rB,IAAIwC,EAAczY,MAAOgZ,EAAWhZ,MAAOgZ,EAAWhZ,MAAQgZ,EAAWvH,KAAMgH,EAAczY,MAAQgZ,EAAWvH,MAAQgH,EAAczY,MACvKkb,EAAmB/B,EAAU9uB,KAAK4rB,IAAIwC,EAAcxY,OAAQ+Y,EAAW/Y,OAAQ+Y,EAAW/Y,OAAS+Y,EAAWnH,IAAK4G,EAAcxY,OAAS+Y,EAAWnH,KAAO4G,EAAcxY,OAE9K+M,EAAkB3iB,KAAK4rB,IAAIjJ,EAAiByL,EAAczY,OAC1DiN,EAAmB5iB,KAAK4rB,IAAIhJ,EAAkBwL,EAAcxY,QAExDsL,IACEyB,GAAmBC,EACjBA,EAAmB1B,EAAcyB,EACnCC,EAAmBD,EAAkBzB,EAErCyB,EAAkBC,EAAmB1B,EAE9ByB,EACTC,EAAmBD,EAAkBzB,EAC5B0B,IACTD,EAAkBC,EAAmB1B,GAGnC2P,EAAmB3P,EAAc0P,EACnCC,EAAmBD,EAAkB1P,EAErC0P,EAAkBC,EAAmB3P,GAKzCkO,EAAY9D,SAAWtrB,KAAK4rB,IAAIjJ,EAAiBiO,GACjDxB,EAAY5D,UAAYxrB,KAAK4rB,IAAIhJ,EAAkBiO,GACnDzB,EAAYlE,SAAW0F,EACvBxB,EAAYhE,UAAYyF,EAGtB1B,IACEL,GACFM,EAAYI,QAAUxvB,KAAKwM,IAAI,EAAGmiB,EAAWvH,MAC7CgI,EAAYK,OAASzvB,KAAKwM,IAAI,EAAGmiB,EAAWnH,KAC5C4H,EAAYM,QAAU1vB,KAAK4rB,IAAIwC,EAAczY,MAAOgZ,EAAWvH,KAAOuH,EAAWhZ,OAASyZ,EAAYzZ,MACtGyZ,EAAYO,OAAS3vB,KAAK4rB,IAAIwC,EAAcxY,OAAQ+Y,EAAWnH,IAAMmH,EAAW/Y,QAAUwZ,EAAYxZ,SAEtGwZ,EAAYI,QAAU,EACtBJ,EAAYK,OAAS,EACrBL,EAAYM,QAAUtB,EAAczY,MAAQyZ,EAAYzZ,MACxDyZ,EAAYO,OAASvB,EAAcxY,OAASwZ,EAAYxZ,UAI9DqY,cAAe,WACb,IAAIjgB,EAAU9M,KAAK8M,QACfogB,EAAgBltB,KAAKktB,cACrBgB,EAAcluB,KAAKkuB,aAEnBA,EAAYzZ,MAAQyZ,EAAYlE,UAAYkE,EAAYzZ,MAAQyZ,EAAY9D,YAC9E8D,EAAYhI,KAAOgI,EAAYR,UAG7BQ,EAAYxZ,OAASwZ,EAAYhE,WAAagE,EAAYxZ,OAASwZ,EAAY5D,aACjF4D,EAAY5H,IAAM4H,EAAYP,QAGhCO,EAAYzZ,MAAQ3V,KAAK4rB,IAAI5rB,KAAKwM,IAAI4iB,EAAYzZ,MAAOyZ,EAAY9D,UAAW8D,EAAYlE,UAC5FkE,EAAYxZ,OAAS5V,KAAK4rB,IAAI5rB,KAAKwM,IAAI4iB,EAAYxZ,OAAQwZ,EAAY5D,WAAY4D,EAAYhE,WAC/FlqB,KAAKuvB,cAAa,GAAO,GACzBrB,EAAYhI,KAAOpnB,KAAK4rB,IAAI5rB,KAAKwM,IAAI4iB,EAAYhI,KAAMgI,EAAYI,SAAUJ,EAAYM,SACzFN,EAAY5H,IAAMxnB,KAAK4rB,IAAI5rB,KAAKwM,IAAI4iB,EAAY5H,IAAK4H,EAAYK,QAASL,EAAYO,QACtFP,EAAYR,QAAUQ,EAAYhI,KAClCgI,EAAYP,OAASO,EAAY5H,IAE7BxZ,EAAQ+T,SAAW/T,EAAQsU,gBAE7BkD,EAAQtkB,KAAK4vB,KAAM3Q,EAAaiP,EAAYzZ,OAASyY,EAAczY,OAASyZ,EAAYxZ,QAAUwY,EAAcxY,OA53CpG,OAFD,OAi4CbyO,EAASnjB,KAAK6vB,QAASlN,EAAO,CAC5BlO,MAAOyZ,EAAYzZ,MACnBC,OAAQwZ,EAAYxZ,QACnB2S,GAAc,CACfK,WAAYwG,EAAYhI,KACxByB,WAAYuG,EAAY5H,QAGtBtmB,KAAK8sB,SAAW9sB,KAAK4tB,SACvB5tB,KAAK6tB,aAAY,GAAM,GAGpB7tB,KAAK8vB,UACR9vB,KAAKwvB,UAGTA,OAAQ,WACNxvB,KAAKigB,UACLsF,EAAcvlB,KAAKojB,QAv3CN,OAu3C2BpjB,KAAKmkB,aAI7ClE,GAAU,CACZ8P,YAAa,WACX,IAAIC,EAAchwB,KAAKgwB,YACnB/P,EAAUjgB,KAAK8M,QAAQmT,QACvB1C,EAAMyS,EAAchwB,KAAKiwB,eAAiBjwB,KAAKud,IAC/ClJ,EAAQN,SAASC,cAAc,OAUnC,GARIgc,IACF3b,EAAM2b,YAAcA,GAGtB3b,EAAMwF,IAAM0D,EACZvd,KAAKkW,QAAQga,YAAY7b,GACzBrU,KAAKmwB,aAAe9b,EAEf4L,EAAL,CAIA,IAAImQ,EAAWnQ,EAEQ,iBAAZA,EACTmQ,EAAWpwB,KAAKojB,QAAQiN,cAAcC,iBAAiBrQ,GAC9CA,EAAQsQ,gBACjBH,EAAW,CAACnQ,IAGdjgB,KAAKowB,SAAWA,EAChBnmB,EAAQmmB,GAAU,SAAUI,GAC1B,IAAIC,EAAM1c,SAASC,cAAc,OAEjCsQ,EAAQkM,EAAItR,EAAc,CACxBzK,MAAO+b,EAAGrD,YACVzY,OAAQ8b,EAAGpD,aACXsD,KAAMF,EAAGhT,YAGPwS,IACFS,EAAIT,YAAcA,GAGpBS,EAAI5W,IAAM0D,EAQVkT,EAAI9b,MAAMgc,QAAU,0KACpBH,EAAGhT,UAAY,GACfgT,EAAGN,YAAYO,QAGnBG,aAAc,WACZ3mB,EAAQjK,KAAKowB,UAAU,SAAUhN,GAC/B,IAAIrjB,EAAOokB,EAAQf,EAASlE,GAC5BiE,EAASC,EAAS,CAChB3O,MAAO1U,EAAK0U,MACZC,OAAQ3U,EAAK2U,SAEf0O,EAAQ5F,UAAYzd,EAAK2wB,KAzjC/B,SAAoBtN,EAAS7G,GAC3B,GAAI+F,EAASc,EAAQ7G,IACnB,WACS6G,EAAQ7G,GACf,MAAO1e,GACPulB,EAAQ7G,QAAQ9f,OAEb,GAAI2mB,EAAQgB,QAEjB,WACShB,EAAQgB,QAAQ7H,GACvB,MAAO1e,GACPulB,EAAQgB,QAAQ7H,QAAQ9f,OAG1B2mB,EAAQyN,gBAAgB,QAAQtjB,OAAO2W,EAAU3H,KA2iC/CuU,CAAW1N,EAASlE,OAGxBe,QAAS,WACP,IAAIoN,EAAYrtB,KAAKqtB,UACjBI,EAAaztB,KAAKytB,WAClBS,EAAcluB,KAAKkuB,YACnB6C,EAAe7C,EAAYzZ,MAC3Buc,EAAgB9C,EAAYxZ,OAC5BD,EAAQ4Y,EAAU5Y,MAClBC,EAAS2Y,EAAU3Y,OACnBwR,EAAOgI,EAAYhI,KAAOuH,EAAWvH,KAAOmH,EAAUnH,KACtDI,EAAM4H,EAAY5H,IAAMmH,EAAWnH,IAAM+G,EAAU/G,IAElDtmB,KAAK8sB,UAAW9sB,KAAK8vB,WAI1B3M,EAASnjB,KAAKmwB,aAAcxN,EAAO,CACjClO,MAAOA,EACPC,OAAQA,GACP2S,GAAc1E,EAAO,CACtB+E,YAAaxB,EACbyB,YAAarB,GACZ+G,MACHpjB,EAAQjK,KAAKowB,UAAU,SAAUhN,GAC/B,IAAIrjB,EAAOokB,EAAQf,EAASlE,GACxB+R,EAAgBlxB,EAAK0U,MACrByc,EAAiBnxB,EAAK2U,OACtBya,EAAW8B,EACX7B,EAAY8B,EACZC,EAAQ,EAERJ,IAEF3B,EAAY4B,GADZG,EAAQF,EAAgBF,IAItBC,GAAiB5B,EAAY8B,IAE/B/B,EAAW4B,GADXI,EAAQD,EAAiBF,GAEzB5B,EAAY8B,GAGd/N,EAASC,EAAS,CAChB3O,MAAO0a,EACPza,OAAQ0a,IAEVjM,EAASC,EAAQgO,qBAAqB,OAAO,GAAIzO,EAAO,CACtDlO,MAAOA,EAAQ0c,EACfzc,OAAQA,EAASyc,GAChB9J,GAAc1E,EAAO,CACtB+E,YAAaxB,EAAOiL,EACpBxJ,YAAarB,EAAM6K,GAClB9D,YAKLgE,GAAS,CACXzkB,KAAM,WACJ,IAAIwW,EAAUpjB,KAAKojB,QACftW,EAAU9M,KAAK8M,QACfmgB,EAAUjtB,KAAKitB,QAEfxK,EAAW3V,EAAQgV,YACrBoD,EAAY9B,EAx/CK,YAw/CsBtW,EAAQgV,WAG7CW,EAAW3V,EAAQiV,WACrBmD,EAAY9B,EA7/CI,WA6/CsBtW,EAAQiV,UAG5CU,EAAW3V,EAAQkV,UACrBkD,EAAY9B,EAlgDG,UAkgDsBtW,EAAQkV,SAG3CS,EAAW3V,EAAQmV,OACrBiD,EAAY9B,EAvgDD,OAugDsBtW,EAAQmV,MAGvCQ,EAAW3V,EAAQoV,OACrBgD,EAAY9B,EAhgDD,OAggDsBtW,EAAQoV,MAG3CgD,EAAY+H,EAAS9N,EAAoBnf,KAAKsxB,YAActxB,KAAKuxB,UAAU3kB,KAAK5M,OAE5E8M,EAAQkU,UAAYlU,EAAQoU,aAC9BgE,EAAY+H,EAvgDA,kCAugDsBjtB,KAAKwxB,QAAUxxB,KAAKyxB,MAAM7kB,KAAK5M,OAG/D8M,EAAQwU,0BACV4D,EAAY+H,EAjhDG,WAihDsBjtB,KAAK0xB,WAAa1xB,KAAK2xB,SAAS/kB,KAAK5M,OAG5EklB,EAAY9B,EAAQiN,cAAehR,EAAoBrf,KAAK4xB,WAAa5xB,KAAK6xB,SAASjlB,KAAK5M,OAC5FklB,EAAY9B,EAAQiN,cAAe/Q,EAAkBtf,KAAK8xB,UAAY9xB,KAAK+xB,QAAQnlB,KAAK5M,OAEpF8M,EAAQoT,YACVgF,EAAY9nB,OAnhDC,SAmhDqB4C,KAAKgyB,SAAWhyB,KAAKiyB,OAAOrlB,KAAK5M,QAGvEkyB,OAAQ,WACN,IAAI9O,EAAUpjB,KAAKojB,QACftW,EAAU9M,KAAK8M,QACfmgB,EAAUjtB,KAAKitB,QAEfxK,EAAW3V,EAAQgV,YACrBiD,EAAe3B,EAliDE,YAkiDyBtW,EAAQgV,WAGhDW,EAAW3V,EAAQiV,WACrBgD,EAAe3B,EAviDC,WAuiDyBtW,EAAQiV,UAG/CU,EAAW3V,EAAQkV,UACrB+C,EAAe3B,EA5iDA,UA4iDyBtW,EAAQkV,SAG9CS,EAAW3V,EAAQmV,OACrB8C,EAAe3B,EAjjDJ,OAijDyBtW,EAAQmV,MAG1CQ,EAAW3V,EAAQoV,OACrB6C,EAAe3B,EA1iDJ,OA0iDyBtW,EAAQoV,MAG9C6C,EAAekI,EAAS9N,EAAoBnf,KAAKsxB,aAE7CxkB,EAAQkU,UAAYlU,EAAQoU,aAC9B6D,EAAekI,EAjjDH,kCAijDyBjtB,KAAKwxB,SAGxC1kB,EAAQwU,0BACVyD,EAAekI,EA3jDA,WA2jDyBjtB,KAAK0xB,YAG/C3M,EAAe3B,EAAQiN,cAAehR,EAAoBrf,KAAK4xB,YAC/D7M,EAAe3B,EAAQiN,cAAe/Q,EAAkBtf,KAAK8xB,WAEzDhlB,EAAQoT,YACV6E,EAAe3nB,OA7jDF,SA6jDwB4C,KAAKgyB,YAK5CG,GAAW,CACbF,OAAQ,WACN,IAAInlB,EAAU9M,KAAK8M,QACfkgB,EAAYhtB,KAAKgtB,UACjBE,EAAgBltB,KAAKktB,cACrBvL,EAAoBQ,OAAOrV,EAAQ6U,oBAAsB,IACzDC,EAAqBO,OAAOrV,EAAQ8U,qBAAuB,IAE/D,KAAI5hB,KAAK8vB,UAAY5C,EAAczY,OAASkN,GAAqBuL,EAAcxY,QAAUkN,GAAzF,CAIA,IAGM6L,EACAS,EAJFiD,EAAQnE,EAAUG,YAAcD,EAAczY,MAElD,GAAc,IAAV0c,GAAenE,EAAUI,eAAiBF,EAAcxY,OAItD5H,EAAQqT,UACVsN,EAAaztB,KAAKoyB,gBAClBlE,EAAcluB,KAAKqyB,kBAGrBryB,KAAKwT,SAED1G,EAAQqT,UACVngB,KAAKsyB,cAAcroB,EAAQwjB,GAAY,SAAU3vB,EAAGG,GAClDwvB,EAAWxvB,GAAKH,EAAIqzB,MAEtBnxB,KAAKuyB,eAAetoB,EAAQikB,GAAa,SAAUpwB,EAAGG,GACpDiwB,EAAYjwB,GAAKH,EAAIqzB,SAK7BQ,SAAU,WAx3CZ,IAAkBvO,EAAS5iB,EAy3CnBR,KAAK8vB,UAjnDQ,SAinDI9vB,KAAK8M,QAAQ+S,UAIlC7f,KAAKwyB,aA73CSpP,EA63CYpjB,KAAKyyB,QA73CRjyB,EA63CiBke,GA53CnC0E,EAAQK,UAAYL,EAAQK,UAAUiP,SAASlyB,GAAS4iB,EAAQO,UAAUljB,QAAQD,IAAU,GA1PhF,OADA,UAynDnBixB,MAAO,SAAe5zB,GACpB,IAAIwf,EAAQrd,KAERmxB,EAAQhP,OAAOniB,KAAK8M,QAAQqU,iBAAmB,GAC/CwR,EAAQ,EAER3yB,KAAK8vB,WAITjyB,EAAE+0B,iBAEE5yB,KAAK6yB,WAIT7yB,KAAK6yB,UAAW,EAChBC,YAAW,WACTzV,EAAMwV,UAAW,IAChB,IAECh1B,EAAEk1B,OACJJ,EAAQ90B,EAAEk1B,OAAS,EAAI,GAAK,EACnBl1B,EAAEm1B,WACXL,GAAS90B,EAAEm1B,WAAa,IACfn1B,EAAE6nB,SACXiN,EAAQ90B,EAAE6nB,OAAS,EAAI,GAAK,GAG9B1lB,KAAKkiB,MAAMyQ,EAAQxB,EAAOtzB,MAE5B0zB,UAAW,SAAmB1zB,GAC5B,IAAImC,KAAK8vB,SAAT,CAIA,IAEImD,EAFAnmB,EAAU9M,KAAK8M,QACfomB,EAAWlzB,KAAKkzB,SAGhBr1B,EAAEs1B,eAEJlpB,EAAQpM,EAAEs1B,gBAAgB,SAAUC,GAClCF,EAASE,EAAMC,YAAcrL,GAAWoL,MAI1CF,EAASr1B,EAAEy1B,WAAa,GAAKtL,GAAWnqB,GAIxCo1B,EADErsB,OAAOC,KAAKqsB,GAAUh2B,OAAS,GAAK4P,EAAQkU,UAAYlU,EAAQmU,YAhsDtD,OAmsDHkD,EAAQtmB,EAAEuc,OAAQ6E,GAGxBM,EAAenR,KAAK6kB,KAOlB,IAHH1N,EAAcvlB,KAAKojB,QA9qDJ,YA8qD+B,CAChDmQ,cAAe11B,EACfo1B,OAAQA,MAMVp1B,EAAE+0B,iBACF5yB,KAAKizB,OAASA,EACdjzB,KAAKwzB,UAAW,EAttDF,SAwtDVP,IACFjzB,KAAKwzB,UAAW,EAChBjQ,EAASvjB,KAAKyyB,QAAS1T,OAG3B8S,SAAU,SAAkBh0B,GAC1B,IAAIo1B,EAASjzB,KAAKizB,OAElB,IAAIjzB,KAAK8vB,UAAamD,EAAtB,CAIA,IAAIC,EAAWlzB,KAAKkzB,SACpBr1B,EAAE+0B,kBAKK,IAHHrN,EAAcvlB,KAAKojB,QA1sDL,WA0sD+B,CAC/CmQ,cAAe11B,EACfo1B,OAAQA,MAKNp1B,EAAEs1B,eACJlpB,EAAQpM,EAAEs1B,gBAAgB,SAAUC,GAElCzQ,EAAOuQ,EAASE,EAAMC,aAAe,GAAIrL,GAAWoL,GAAO,OAG7DzQ,EAAOuQ,EAASr1B,EAAEy1B,WAAa,IAAM,GAAItL,GAAWnqB,GAAG,IAGzDmC,KAAKyzB,OAAO51B,MAEdk0B,QAAS,SAAiBl0B,GACxB,IAAImC,KAAK8vB,SAAT,CAIA,IAAImD,EAASjzB,KAAKizB,OACdC,EAAWlzB,KAAKkzB,SAEhBr1B,EAAEs1B,eACJlpB,EAAQpM,EAAEs1B,gBAAgB,SAAUC,UAC3BF,EAASE,EAAMC,sBAGjBH,EAASr1B,EAAEy1B,WAAa,GAG5BL,IAILp1B,EAAE+0B,iBAEGhsB,OAAOC,KAAKqsB,GAAUh2B,SACzB8C,KAAKizB,OAAS,IAGZjzB,KAAKwzB,WACPxzB,KAAKwzB,UAAW,EAChBzP,EAAY/jB,KAAKyyB,QAAS1T,EAAa/e,KAAK8sB,SAAW9sB,KAAK8M,QAAQwT,QAGtEiF,EAAcvlB,KAAKojB,QA5vDF,UA4vD2B,CAC1CmQ,cAAe11B,EACfo1B,OAAQA,QAKVQ,GAAS,CACXA,OAAQ,SAAgB51B,GACtB,IAkBIgL,EAlBAiE,EAAU9M,KAAK8M,QACf2gB,EAAaztB,KAAKytB,WAClBP,EAAgBltB,KAAKktB,cACrBgB,EAAcluB,KAAKkuB,YACnBgF,EAAWlzB,KAAKkzB,SAChBD,EAASjzB,KAAKizB,OACdjT,EAAclT,EAAQkT,YACtBkG,EAAOgI,EAAYhI,KACnBI,EAAM4H,EAAY5H,IAClB7R,EAAQyZ,EAAYzZ,MACpBC,EAASwZ,EAAYxZ,OACrBgf,EAAQxN,EAAOzR,EACfkf,EAASrN,EAAM5R,EACf4Z,EAAU,EACVC,EAAS,EACTvE,EAAWkD,EAAczY,MACzByV,EAAYgD,EAAcxY,OAC1Bkf,GAAa,GAGZ5T,GAAeniB,EAAEg2B,WACpB7T,EAAcvL,GAASC,EAASD,EAAQC,EAAS,GAG/C1U,KAAK4tB,UACPU,EAAUJ,EAAYI,QACtBC,EAASL,EAAYK,OACrBvE,EAAWsE,EAAUxvB,KAAK4rB,IAAIwC,EAAczY,MAAOgZ,EAAWhZ,MAAOgZ,EAAWvH,KAAOuH,EAAWhZ,OAClGyV,EAAYqE,EAASzvB,KAAK4rB,IAAIwC,EAAcxY,OAAQ+Y,EAAW/Y,OAAQ+Y,EAAWnH,IAAMmH,EAAW/Y,SAGrG,IAAIof,EAAUZ,EAAStsB,OAAOC,KAAKqsB,GAAU,IACzCa,EAAQ,CACV/vB,EAAG8vB,EAAQzL,KAAOyL,EAAQvL,OAC1BnkB,EAAG0vB,EAAQxL,KAAOwL,EAAQtL,QAGxBwL,EAAQ,SAAeC,GACzB,OAAQA,GACN,IAr0DU,IAs0DJP,EAAQK,EAAM/vB,EAAIgmB,IACpB+J,EAAM/vB,EAAIgmB,EAAW0J,GAGvB,MAEF,IA30DU,IA40DJxN,EAAO6N,EAAM/vB,EAAIsqB,IACnByF,EAAM/vB,EAAIsqB,EAAUpI,GAGtB,MAEF,IAh1DW,IAi1DLI,EAAMyN,EAAM3vB,EAAImqB,IAClBwF,EAAM3vB,EAAImqB,EAASjI,GAGrB,MAEF,IAx1DW,IAy1DLqN,EAASI,EAAM3vB,EAAI8lB,IACrB6J,EAAM3vB,EAAI8lB,EAAYyJ,KAS9B,OAAQV,GAEN,IA32DW,MA42DT/M,GAAQ6N,EAAM/vB,EACdsiB,GAAOyN,EAAM3vB,EACb,MAGF,IA72DY,IA82DV,GAAI2vB,EAAM/vB,GAAK,IAAM0vB,GAAS1J,GAAYhK,IAAgBsG,GAAOiI,GAAUoF,GAAUzJ,IAAa,CAChG0J,GAAa,EACb,MAGFI,EAn3DU,MAo3DVvf,GAASsf,EAAM/vB,GAEH,IACVivB,EAt3DQ,IAw3DR/M,GADAzR,GAASA,GAIPuL,IACFtL,EAASD,EAAQuL,EACjBsG,IAAQ4H,EAAYxZ,OAASA,GAAU,GAGzC,MAEF,IAh4Da,IAi4DX,GAAIqf,EAAM3vB,GAAK,IAAMkiB,GAAOiI,GAAUvO,IAAgBkG,GAAQoI,GAAWoF,GAAS1J,IAAY,CAC5F4J,GAAa,EACb,MAGFI,EAt4DW,KAu4DXtf,GAAUqf,EAAM3vB,EAChBkiB,GAAOyN,EAAM3vB,EAETsQ,EAAS,IACXue,EA54DS,IA84DT3M,GADA5R,GAAUA,GAIRsL,IACFvL,EAAQC,EAASsL,EACjBkG,IAASgI,EAAYzZ,MAAQA,GAAS,GAGxC,MAEF,IAz5DY,IA05DV,GAAIsf,EAAM/vB,GAAK,IAAMkiB,GAAQoI,GAAWtO,IAAgBsG,GAAOiI,GAAUoF,GAAUzJ,IAAa,CAC9F0J,GAAa,EACb,MAGFI,EA/5DU,KAg6DVvf,GAASsf,EAAM/vB,EACfkiB,GAAQ6N,EAAM/vB,EAEVyQ,EAAQ,IACVwe,EAr6DQ,IAu6DR/M,GADAzR,GAASA,GAIPuL,IACFtL,EAASD,EAAQuL,EACjBsG,IAAQ4H,EAAYxZ,OAASA,GAAU,GAGzC,MAEF,IA/6Da,IAg7DX,GAAIqf,EAAM3vB,GAAK,IAAMuvB,GAAUzJ,GAAalK,IAAgBkG,GAAQoI,GAAWoF,GAAS1J,IAAY,CAClG4J,GAAa,EACb,MAGFI,EAr7DW,MAs7DXtf,GAAUqf,EAAM3vB,GAEH,IACX6uB,EAx7DS,IA07DT3M,GADA5R,GAAUA,GAIRsL,IACFvL,EAAQC,EAASsL,EACjBkG,IAASgI,EAAYzZ,MAAQA,GAAS,GAGxC,MAEF,IAn8DkB,KAo8DhB,GAAIuL,EAAa,CACf,GAAI+T,EAAM3vB,GAAK,IAAMkiB,GAAOiI,GAAUmF,GAAS1J,GAAW,CACxD4J,GAAa,EACb,MAGFI,EA38DS,KA48DTtf,GAAUqf,EAAM3vB,EAChBkiB,GAAOyN,EAAM3vB,EACbqQ,EAAQC,EAASsL,OAEjBgU,EAh9DS,KAi9DTA,EAp9DQ,KAs9DJD,EAAM/vB,GAAK,EACT0vB,EAAQ1J,EACVvV,GAASsf,EAAM/vB,EACN+vB,EAAM3vB,GAAK,GAAKkiB,GAAOiI,IAChCqF,GAAa,GAGfnf,GAASsf,EAAM/vB,EAGb+vB,EAAM3vB,GAAK,EACTkiB,EAAMiI,IACR7Z,GAAUqf,EAAM3vB,EAChBkiB,GAAOyN,EAAM3vB,IAGfsQ,GAAUqf,EAAM3vB,EAChBkiB,GAAOyN,EAAM3vB,GAIbqQ,EAAQ,GAAKC,EAAS,GACxBue,EAr+Dc,KAw+Dd3M,GAFA5R,GAAUA,EAGVwR,GAFAzR,GAASA,GAGAA,EAAQ,GACjBwe,EA7+Dc,KA++Dd/M,GADAzR,GAASA,GAEAC,EAAS,IAClBue,EAh/Dc,KAk/Dd3M,GADA5R,GAAUA,GAIZ,MAEF,IAx/DkB,KAy/DhB,GAAIsL,EAAa,CACf,GAAI+T,EAAM3vB,GAAK,IAAMkiB,GAAOiI,GAAUrI,GAAQoI,GAAU,CACtDsF,GAAa,EACb,MAGFI,EAjgES,KAkgETtf,GAAUqf,EAAM3vB,EAChBkiB,GAAOyN,EAAM3vB,EACbqQ,EAAQC,EAASsL,EACjBkG,GAAQgI,EAAYzZ,MAAQA,OAE5Buf,EAvgES,KAwgETA,EA1gEQ,KA4gEJD,EAAM/vB,GAAK,EACTkiB,EAAOoI,GACT7Z,GAASsf,EAAM/vB,EACfkiB,GAAQ6N,EAAM/vB,GACL+vB,EAAM3vB,GAAK,GAAKkiB,GAAOiI,IAChCqF,GAAa,IAGfnf,GAASsf,EAAM/vB,EACfkiB,GAAQ6N,EAAM/vB,GAGZ+vB,EAAM3vB,GAAK,EACTkiB,EAAMiI,IACR7Z,GAAUqf,EAAM3vB,EAChBkiB,GAAOyN,EAAM3vB,IAGfsQ,GAAUqf,EAAM3vB,EAChBkiB,GAAOyN,EAAM3vB,GAIbqQ,EAAQ,GAAKC,EAAS,GACxBue,EA/hEc,KAkiEd3M,GAFA5R,GAAUA,EAGVwR,GAFAzR,GAASA,GAGAA,EAAQ,GACjBwe,EAviEc,KAyiEd/M,GADAzR,GAASA,GAEAC,EAAS,IAClBue,EAxiEc,KA0iEd3M,GADA5R,GAAUA,GAIZ,MAEF,IA/iEkB,KAgjEhB,GAAIsL,EAAa,CACf,GAAI+T,EAAM/vB,GAAK,IAAMkiB,GAAQoI,GAAWqF,GAAUzJ,GAAY,CAC5D0J,GAAa,EACb,MAGFI,EA5jEQ,KA6jERvf,GAASsf,EAAM/vB,EACfkiB,GAAQ6N,EAAM/vB,EACd0Q,EAASD,EAAQuL,OAEjBgU,EAhkES,KAikETA,EAlkEQ,KAokEJD,EAAM/vB,GAAK,EACTkiB,EAAOoI,GACT7Z,GAASsf,EAAM/vB,EACfkiB,GAAQ6N,EAAM/vB,GACL+vB,EAAM3vB,GAAK,GAAKuvB,GAAUzJ,IACnC0J,GAAa,IAGfnf,GAASsf,EAAM/vB,EACfkiB,GAAQ6N,EAAM/vB,GAGZ+vB,EAAM3vB,GAAK,EACTuvB,EAASzJ,IACXxV,GAAUqf,EAAM3vB,GAGlBsQ,GAAUqf,EAAM3vB,EAIhBqQ,EAAQ,GAAKC,EAAS,GACxBue,EAvlEc,KA0lEd3M,GAFA5R,GAAUA,EAGVwR,GAFAzR,GAASA,GAGAA,EAAQ,GACjBwe,EA3lEc,KA6lEd/M,GADAzR,GAASA,GAEAC,EAAS,IAClBue,EAhmEc,KAkmEd3M,GADA5R,GAAUA,GAIZ,MAEF,IAtmEkB,KAumEhB,GAAIsL,EAAa,CACf,GAAI+T,EAAM/vB,GAAK,IAAM0vB,GAAS1J,GAAY2J,GAAUzJ,GAAY,CAC9D0J,GAAa,EACb,MAGFI,EAnnEQ,KAqnERtf,GADAD,GAASsf,EAAM/vB,GACEgc,OAEjBgU,EArnES,KAsnETA,EAxnEQ,KA0nEJD,EAAM/vB,GAAK,EACT0vB,EAAQ1J,EACVvV,GAASsf,EAAM/vB,EACN+vB,EAAM3vB,GAAK,GAAKuvB,GAAUzJ,IACnC0J,GAAa,GAGfnf,GAASsf,EAAM/vB,EAGb+vB,EAAM3vB,GAAK,EACTuvB,EAASzJ,IACXxV,GAAUqf,EAAM3vB,GAGlBsQ,GAAUqf,EAAM3vB,EAIhBqQ,EAAQ,GAAKC,EAAS,GACxBue,EAzoEc,KA4oEd3M,GAFA5R,GAAUA,EAGVwR,GAFAzR,GAASA,GAGAA,EAAQ,GACjBwe,EA7oEc,KA+oEd/M,GADAzR,GAASA,GAEAC,EAAS,IAClBue,EAppEc,KAspEd3M,GADA5R,GAAUA,GAIZ,MAGF,IAlqEY,OAmqEV1U,KAAKk0B,KAAKH,EAAM/vB,EAAG+vB,EAAM3vB,GACzBwvB,GAAa,EACb,MAGF,IAvqEY,OAwqEV5zB,KAAKkiB,KAziDb,SAAyBgR,GACvB,IAAIiB,EAAYxR,EAAO,GAAIuQ,GACvBkB,EAAS,GAiBb,OAhBAnqB,EAAQipB,GAAU,SAAUY,EAASR,UAC5Ba,EAAUb,GACjBrpB,EAAQkqB,GAAW,SAAUE,GAC3B,IAAIC,EAAKx1B,KAAKwH,IAAIwtB,EAAQvL,OAAS8L,EAAS9L,QACxCgM,EAAKz1B,KAAKwH,IAAIwtB,EAAQtL,OAAS6L,EAAS7L,QACxCgM,EAAK11B,KAAKwH,IAAIwtB,EAAQzL,KAAOgM,EAAShM,MACtCoM,EAAK31B,KAAKwH,IAAIwtB,EAAQxL,KAAO+L,EAAS/L,MACtCoM,EAAK51B,KAAK61B,KAAKL,EAAKA,EAAKC,EAAKA,GAE9BpD,GADKryB,KAAK61B,KAAKH,EAAKA,EAAKC,EAAKA,GAChBC,GAAMA,EACxBN,EAAOh1B,KAAK+xB,SAGhBiD,EAAOjlB,MAAK,SAAU/Q,EAAG+M,GACvB,OAAOrM,KAAKwH,IAAIlI,GAAKU,KAAKwH,IAAI6E,MAEzBipB,EAAO,GAshDEQ,CAAgB1B,GAAWr1B,GACrC+1B,GAAa,EACb,MAGF,IA/qEY,OAgrEV,IAAKG,EAAM/vB,IAAM+vB,EAAM3vB,EAAG,CACxBwvB,GAAa,EACb,MAGF/qB,EAASkd,EAAU/lB,KAAKitB,SACxB/G,EAAO4N,EAAQvL,OAAS1f,EAAOqd,KAC/BI,EAAMwN,EAAQtL,OAAS3f,EAAOyd,IAC9B7R,EAAQyZ,EAAY9D,SACpB1V,EAASwZ,EAAY5D,UAEjByJ,EAAM/vB,EAAI,EACZivB,EAASc,EAAM3vB,EAAI,EAnrEL,KAFA,KAsrEL2vB,EAAM/vB,EAAI,IACnBkiB,GAAQzR,EACRwe,EAASc,EAAM3vB,EAAI,EArrEL,KAFA,MA0rEZ2vB,EAAM3vB,EAAI,IACZkiB,GAAO5R,GAIJ1U,KAAK8sB,UACRjJ,EAAY7jB,KAAK6vB,QAASjR,GAC1B5e,KAAK8sB,SAAU,EAEX9sB,KAAK4tB,SACP5tB,KAAKuvB,cAAa,GAAM,IAS5BqE,IACF1F,EAAYzZ,MAAQA,EACpByZ,EAAYxZ,OAASA,EACrBwZ,EAAYhI,KAAOA,EACnBgI,EAAY5H,IAAMA,EAClBtmB,KAAKizB,OAASA,EACdjzB,KAAK+sB,iBAIP9iB,EAAQipB,GAAU,SAAU50B,GAC1BA,EAAEiqB,OAASjqB,EAAE+pB,KACb/pB,EAAEkqB,OAASlqB,EAAEgqB,UAKflL,GAAU,CAEZ6E,KAAM,WAaJ,OAZIjiB,KAAK6hB,OAAU7hB,KAAK8sB,SAAY9sB,KAAK8vB,WACvC9vB,KAAK8sB,SAAU,EACf9sB,KAAKuvB,cAAa,GAAM,GAEpBvvB,KAAK8M,QAAQwT,OACfiD,EAASvjB,KAAKyyB,QAAS1T,GAGzB8E,EAAY7jB,KAAK6vB,QAASjR,GAC1B5e,KAAKuyB,eAAevyB,KAAKyvB,qBAGpBzvB,MAGT60B,MAAO,WAYL,OAXI70B,KAAK6hB,QAAU7hB,KAAK8vB,WACtB9vB,KAAKqtB,UAAY1K,EAAO,GAAI3iB,KAAK8tB,kBACjC9tB,KAAKytB,WAAa9K,EAAO,GAAI3iB,KAAK+tB,mBAClC/tB,KAAKkuB,YAAcvL,EAAO,GAAI3iB,KAAKyvB,oBACnCzvB,KAAKyS,eAEDzS,KAAK8sB,SACP9sB,KAAK+sB,iBAIF/sB,MAGT80B,MAAO,WAiBL,OAhBI90B,KAAK8sB,UAAY9sB,KAAK8vB,WACxBnN,EAAO3iB,KAAKkuB,YAAa,CACvBhI,KAAM,EACNI,IAAK,EACL7R,MAAO,EACPC,OAAQ,IAEV1U,KAAK8sB,SAAU,EACf9sB,KAAK+sB,gBACL/sB,KAAK6tB,aAAY,GAAM,GAEvB7tB,KAAKyS,eACLoR,EAAY7jB,KAAKyyB,QAAS1T,GAC1BwE,EAASvjB,KAAK6vB,QAASjR,IAGlB5e,MASTtD,QAAS,SAAiB6gB,GACxB,IAAIwX,EAAc/hB,UAAU9V,OAAS,QAAsBT,IAAjBuW,UAAU,IAAmBA,UAAU,GA4BjF,OA1BKhT,KAAK8vB,UAAYvS,IAChBvd,KAAKg1B,QACPh1B,KAAKojB,QAAQvJ,IAAM0D,GAGjBwX,GACF/0B,KAAKud,IAAMA,EACXvd,KAAKqU,MAAMwF,IAAM0D,EAEbvd,KAAK6hB,QACP7hB,KAAKmwB,aAAatW,IAAM0D,EACxBtT,EAAQjK,KAAKowB,UAAU,SAAUhN,GAC/BA,EAAQgO,qBAAqB,OAAO,GAAGvX,IAAM0D,QAI7Cvd,KAAKg1B,QACPh1B,KAAKi1B,UAAW,GAGlBj1B,KAAK8M,QAAQ/M,KAAO,KACpBC,KAAKk1B,WACLl1B,KAAKm1B,KAAK5X,KAIPvd,MAGTo1B,OAAQ,WAMN,OALIp1B,KAAK6hB,OAAS7hB,KAAK8vB,WACrB9vB,KAAK8vB,UAAW,EAChBjM,EAAY7jB,KAAKitB,QAAStO,IAGrB3e,MAGTq1B,QAAS,WAMP,OALIr1B,KAAK6hB,QAAU7hB,KAAK8vB,WACtB9vB,KAAK8vB,UAAW,EAChBvM,EAASvjB,KAAKitB,QAAStO,IAGlB3e,MAOTs1B,QAAS,WACP,IAAIlS,EAAUpjB,KAAKojB,QAEnB,OAAKA,EAAiB,SAItBA,EAAiB,aAAI3mB,EAEjBuD,KAAKg1B,OAASh1B,KAAKi1B,WACrB7R,EAAQvJ,IAAM7Z,KAAKu1B,aAGrBv1B,KAAKk1B,WACEl1B,MAVEA,MAmBXk0B,KAAM,SAAcsB,GAClB,IAAIC,EAAUziB,UAAU9V,OAAS,QAAsBT,IAAjBuW,UAAU,GAAmBA,UAAU,GAAKwiB,EAC9EE,EAAmB11B,KAAKytB,WACxBvH,EAAOwP,EAAiBxP,KACxBI,EAAMoP,EAAiBpP,IAC3B,OAAOtmB,KAAK21B,OAAOtT,EAAYmT,GAAWA,EAAUtP,EAAO/D,OAAOqT,GAAUnT,EAAYoT,GAAWA,EAAUnP,EAAMnE,OAAOsT,KAS5HE,OAAQ,SAAgB3xB,GACtB,IAAII,EAAI4O,UAAU9V,OAAS,QAAsBT,IAAjBuW,UAAU,GAAmBA,UAAU,GAAKhP,EACxEypB,EAAaztB,KAAKytB,WAClBiB,GAAU,EAoBd,OAnBA1qB,EAAIme,OAAOne,GACXI,EAAI+d,OAAO/d,GAEPpE,KAAK6hB,QAAU7hB,KAAK8vB,UAAY9vB,KAAK8M,QAAQ+T,UAC3CuB,EAASpe,KACXypB,EAAWvH,KAAOliB,EAClB0qB,GAAU,GAGRtM,EAAShe,KACXqpB,EAAWnH,IAAMliB,EACjBsqB,GAAU,GAGRA,GACF1uB,KAAKyS,cAAa,IAIfzS,MASTkiB,KAAM,SAAciP,EAAOyE,GACzB,IAAInI,EAAaztB,KAAKytB,WAStB,OALE0D,GAHFA,EAAQhP,OAAOgP,IAEH,EACF,GAAK,EAAIA,GAET,EAAIA,EAGPnxB,KAAK61B,OAAOpI,EAAWhZ,MAAQ0c,EAAQ1D,EAAWtE,aAAc,KAAMyM,IAU/EC,OAAQ,SAAgB1E,EAAO2E,EAAOF,GACpC,IAAI9oB,EAAU9M,KAAK8M,QACf2gB,EAAaztB,KAAKytB,WAClBhZ,EAAQgZ,EAAWhZ,MACnBC,EAAS+Y,EAAW/Y,OACpByU,EAAesE,EAAWtE,aAC1BE,EAAgBoE,EAAWpE,cAG/B,IAFA8H,EAAQhP,OAAOgP,KAEF,GAAKnxB,KAAK6hB,QAAU7hB,KAAK8vB,UAAYhjB,EAAQkU,SAAU,CAClE,IAAImO,EAAWhG,EAAegI,EAC1B/B,EAAY/F,EAAgB8H,EAEhC,IAIO,IAJH5L,EAAcvlB,KAAKojB,QAv5EZ,OAu5EiC,CAC1C+N,MAAOA,EACP4E,SAAUthB,EAAQ0U,EAClBoK,cAAeqC,IAEf,OAAO51B,KAGT,GAAI41B,EAAgB,CAClB,IAAI1C,EAAWlzB,KAAKkzB,SAChBrqB,EAASkd,EAAU/lB,KAAKitB,SACxBzM,EAAS0S,GAAYtsB,OAAOC,KAAKqsB,GAAUh2B,OAzxDvD,SAA2Bg2B,GACzB,IAAI/K,EAAQ,EACRC,EAAQ,EACR4N,EAAQ,EAUZ,OATA/rB,EAAQipB,GAAU,SAAU+C,GAC1B,IAAI1N,EAAS0N,EAAM1N,OACfC,EAASyN,EAAMzN,OACnBL,GAASI,EACTH,GAASI,EACTwN,GAAS,KAIJ,CACL7N,MAHFA,GAAS6N,EAIP5N,MAHFA,GAAS4N,GA6wDqDE,CAAkBhD,GAAY,CACpF/K,MAAOyN,EAAezN,MACtBC,MAAOwN,EAAexN,OAGxBqF,EAAWvH,OAASiJ,EAAW1a,KAAW+L,EAAO2H,MAAQtf,EAAOqd,KAAOuH,EAAWvH,MAAQzR,GAC1FgZ,EAAWnH,MAAQ8I,EAAY1a,KAAY8L,EAAO4H,MAAQvf,EAAOyd,IAAMmH,EAAWnH,KAAO5R,QAChF6N,EAAcuT,IAAU1T,EAAS0T,EAAM9xB,IAAMoe,EAAS0T,EAAM1xB,IACrEqpB,EAAWvH,OAASiJ,EAAW1a,KAAWqhB,EAAM9xB,EAAIypB,EAAWvH,MAAQzR,GACvEgZ,EAAWnH,MAAQ8I,EAAY1a,KAAYohB,EAAM1xB,EAAIqpB,EAAWnH,KAAO5R,KAGvE+Y,EAAWvH,OAASiJ,EAAW1a,GAAS,EACxCgZ,EAAWnH,MAAQ8I,EAAY1a,GAAU,GAG3C+Y,EAAWhZ,MAAQ0a,EACnB1B,EAAW/Y,OAAS0a,EACpBpvB,KAAKyS,cAAa,GAGpB,OAAOzS,MAQTunB,OAAQ,SAAgBve,GACtB,OAAOhJ,KAAKm2B,UAAUn2B,KAAKqtB,UAAU9F,QAAU,GAAKpF,OAAOnZ,KAQ7DmtB,SAAU,SAAkBntB,GAQ1B,OALIoZ,EAFJpZ,EAASmZ,OAAOnZ,KAEQhJ,KAAK6hB,QAAU7hB,KAAK8vB,UAAY9vB,KAAK8M,QAAQgU,YACnE9gB,KAAKqtB,UAAU9F,OAASve,EAAS,IACjChJ,KAAKyS,cAAa,GAAM,IAGnBzS,MAQTwnB,OAAQ,SAAgB4O,GACtB,IAAI3O,EAASznB,KAAKqtB,UAAU5F,OAC5B,OAAOznB,KAAK2W,MAAMyf,EAAShU,EAASqF,GAAUA,EAAS,IAQzDA,OAAQ,SAAgB4O,GACtB,IAAI7O,EAASxnB,KAAKqtB,UAAU7F,OAC5B,OAAOxnB,KAAK2W,MAAMyL,EAASoF,GAAUA,EAAS,EAAG6O,IASnD1f,MAAO,SAAe6Q,GACpB,IAAIC,EAASzU,UAAU9V,OAAS,QAAsBT,IAAjBuW,UAAU,GAAmBA,UAAU,GAAKwU,EAC7E6F,EAAYrtB,KAAKqtB,UACjBsB,GAAc,EAoBlB,OAnBAnH,EAASrF,OAAOqF,GAChBC,EAAStF,OAAOsF,GAEZznB,KAAK6hB,QAAU7hB,KAAK8vB,UAAY9vB,KAAK8M,QAAQiU,WAC3CqB,EAASoF,KACX6F,EAAU7F,OAASA,EACnBmH,GAAc,GAGZvM,EAASqF,KACX4F,EAAU5F,OAASA,EACnBkH,GAAc,GAGZA,GACF3uB,KAAKyS,cAAa,GAAM,IAIrBzS,MAQTmkB,QAAS,WACP,IAKIpkB,EALAu2B,EAAUtjB,UAAU9V,OAAS,QAAsBT,IAAjBuW,UAAU,IAAmBA,UAAU,GACzElG,EAAU9M,KAAK8M,QACfugB,EAAYrtB,KAAKqtB,UACjBI,EAAaztB,KAAKytB,WAClBS,EAAcluB,KAAKkuB,YAGvB,GAAIluB,KAAK6hB,OAAS7hB,KAAK8sB,QAAS,CAC9B/sB,EAAO,CACLiE,EAAGkqB,EAAYhI,KAAOuH,EAAWvH,KACjC9hB,EAAG8pB,EAAY5H,IAAMmH,EAAWnH,IAChC7R,MAAOyZ,EAAYzZ,MACnBC,OAAQwZ,EAAYxZ,QAEtB,IAAIyc,EAAQ9D,EAAU5Y,MAAQ4Y,EAAUlE,aAKxC,GAJAlf,EAAQlK,GAAM,SAAUjC,EAAGG,GACzB8B,EAAK9B,GAAKH,EAAIqzB,KAGZmF,EAAS,CAGX,IAAI3C,EAAS70B,KAAKmkB,MAAMljB,EAAKqE,EAAIrE,EAAK2U,QAClCgf,EAAQ50B,KAAKmkB,MAAMljB,EAAKiE,EAAIjE,EAAK0U,OACrC1U,EAAKiE,EAAIlF,KAAKmkB,MAAMljB,EAAKiE,GACzBjE,EAAKqE,EAAItF,KAAKmkB,MAAMljB,EAAKqE,GACzBrE,EAAK0U,MAAQif,EAAQ3zB,EAAKiE,EAC1BjE,EAAK2U,OAASif,EAAS5zB,EAAKqE,QAG9BrE,EAAO,CACLiE,EAAG,EACHI,EAAG,EACHqQ,MAAO,EACPC,OAAQ,GAaZ,OATI5H,EAAQgU,YACV/gB,EAAKwnB,OAAS8F,EAAU9F,QAAU,GAGhCza,EAAQiU,WACVhhB,EAAKynB,OAAS6F,EAAU7F,QAAU,EAClCznB,EAAK0nB,OAAS4F,EAAU5F,QAAU,GAG7B1nB,GAQTukB,QAAS,SAAoBvkB,GAC3B,IAAI+M,EAAU9M,KAAK8M,QACfugB,EAAYrtB,KAAKqtB,UACjBI,EAAaztB,KAAKytB,WAClBS,EAAc,GAElB,GAAIluB,KAAK6hB,QAAU7hB,KAAK8vB,UAAYvN,EAAcxiB,GAAO,CACvD,IAAI4uB,GAAc,EAEd7hB,EAAQgU,WACNsB,EAASriB,EAAKwnB,SAAWxnB,EAAKwnB,SAAW8F,EAAU9F,SACrD8F,EAAU9F,OAASxnB,EAAKwnB,OACxBoH,GAAc,GAId7hB,EAAQiU,WACNqB,EAASriB,EAAKynB,SAAWznB,EAAKynB,SAAW6F,EAAU7F,SACrD6F,EAAU7F,OAASznB,EAAKynB,OACxBmH,GAAc,GAGZvM,EAASriB,EAAK0nB,SAAW1nB,EAAK0nB,SAAW4F,EAAU5F,SACrD4F,EAAU5F,OAAS1nB,EAAK0nB,OACxBkH,GAAc,IAIdA,GACF3uB,KAAKyS,cAAa,GAAM,GAG1B,IAAI0e,EAAQ9D,EAAU5Y,MAAQ4Y,EAAUlE,aAEpC/G,EAASriB,EAAKiE,KAChBkqB,EAAYhI,KAAOnmB,EAAKiE,EAAImtB,EAAQ1D,EAAWvH,MAG7C9D,EAASriB,EAAKqE,KAChB8pB,EAAY5H,IAAMvmB,EAAKqE,EAAI+sB,EAAQ1D,EAAWnH,KAG5ClE,EAASriB,EAAK0U,SAChByZ,EAAYzZ,MAAQ1U,EAAK0U,MAAQ0c,GAG/B/O,EAASriB,EAAK2U,UAChBwZ,EAAYxZ,OAAS3U,EAAK2U,OAASyc,GAGrCnxB,KAAKuyB,eAAerE,GAGtB,OAAOluB,MAOTu2B,iBAAkB,WAChB,OAAOv2B,KAAK6hB,MAAQc,EAAO,GAAI3iB,KAAKktB,eAAiB,IAOvDsJ,aAAc,WACZ,OAAOx2B,KAAKy2B,MAAQ9T,EAAO,GAAI3iB,KAAKqtB,WAAa,IAOnD+E,cAAe,WACb,IAAI3E,EAAaztB,KAAKytB,WAClB1tB,EAAO,GAQX,OANIC,KAAK6hB,OACP5X,EAAQ,CAAC,OAAQ,MAAO,QAAS,SAAU,eAAgB,kBAAkB,SAAUnM,GACrFiC,EAAKjC,GAAK2vB,EAAW3vB,MAIlBiC,GAQTuyB,cAAe,SAAuBvyB,GACpC,IAAI0tB,EAAaztB,KAAKytB,WAClBzN,EAAcyN,EAAWzN,YAsB7B,OApBIhgB,KAAK6hB,QAAU7hB,KAAK8vB,UAAYvN,EAAcxiB,KAC5CqiB,EAASriB,EAAKmmB,QAChBuH,EAAWvH,KAAOnmB,EAAKmmB,MAGrB9D,EAASriB,EAAKumB,OAChBmH,EAAWnH,IAAMvmB,EAAKumB,KAGpBlE,EAASriB,EAAK0U,QAChBgZ,EAAWhZ,MAAQ1U,EAAK0U,MACxBgZ,EAAW/Y,OAAS3U,EAAK0U,MAAQuL,GACxBoC,EAASriB,EAAK2U,UACvB+Y,EAAW/Y,OAAS3U,EAAK2U,OACzB+Y,EAAWhZ,MAAQ1U,EAAK2U,OAASsL,GAGnChgB,KAAKyS,cAAa,IAGbzS,MAOTqyB,eAAgB,WACd,IACItyB,EADAmuB,EAAcluB,KAAKkuB,YAYvB,OATIluB,KAAK6hB,OAAS7hB,KAAK8sB,UACrB/sB,EAAO,CACLmmB,KAAMgI,EAAYhI,KAClBI,IAAK4H,EAAY5H,IACjB7R,MAAOyZ,EAAYzZ,MACnBC,OAAQwZ,EAAYxZ,SAIjB3U,GAAQ,IAQjBwyB,eAAgB,SAAwBxyB,GACtC,IAEI22B,EACAC,EAHAzI,EAAcluB,KAAKkuB,YACnBlO,EAAchgB,KAAK8M,QAAQkT,YAkC/B,OA9BIhgB,KAAK6hB,OAAS7hB,KAAK8sB,UAAY9sB,KAAK8vB,UAAYvN,EAAcxiB,KAC5DqiB,EAASriB,EAAKmmB,QAChBgI,EAAYhI,KAAOnmB,EAAKmmB,MAGtB9D,EAASriB,EAAKumB,OAChB4H,EAAY5H,IAAMvmB,EAAKumB,KAGrBlE,EAASriB,EAAK0U,QAAU1U,EAAK0U,QAAUyZ,EAAYzZ,QACrDiiB,GAAe,EACfxI,EAAYzZ,MAAQ1U,EAAK0U,OAGvB2N,EAASriB,EAAK2U,SAAW3U,EAAK2U,SAAWwZ,EAAYxZ,SACvDiiB,GAAgB,EAChBzI,EAAYxZ,OAAS3U,EAAK2U,QAGxBsL,IACE0W,EACFxI,EAAYxZ,OAASwZ,EAAYzZ,MAAQuL,EAChC2W,IACTzI,EAAYzZ,MAAQyZ,EAAYxZ,OAASsL,IAI7ChgB,KAAK+sB,iBAGA/sB,MAQT42B,iBAAkB,WAChB,IAAI9pB,EAAUkG,UAAU9V,OAAS,QAAsBT,IAAjBuW,UAAU,GAAmBA,UAAU,GAAK,GAElF,IAAKhT,KAAK6hB,QAAUzkB,OAAOy5B,kBACzB,OAAO,KAGT,IAAIpJ,EAAaztB,KAAKytB,WAClBqJ,EAASjO,GAAgB7oB,KAAKqU,MAAOrU,KAAKqtB,UAAWI,EAAY3gB,GAErE,IAAK9M,KAAK8sB,QACR,OAAOgK,EAGT,IAAIC,EAAgB/2B,KAAKmkB,UACrB6S,EAAWD,EAAc/yB,EACzBizB,EAAWF,EAAc3yB,EACzB8yB,EAAeH,EAActiB,MAC7B0iB,EAAgBJ,EAAcriB,OAE9Byc,EAAQ2F,EAAOriB,MAAQ3V,KAAKC,MAAM0uB,EAAWtE,cAEnC,IAAVgI,IACF6F,GAAY7F,EACZ8F,GAAY9F,EACZ+F,GAAgB/F,EAChBgG,GAAiBhG,GAGnB,IAAInR,EAAckX,EAAeC,EAC7B3M,EAAW/B,GAAiB,CAC9BzI,YAAaA,EACbvL,MAAO3H,EAAQkd,UAAYhjB,IAC3B0N,OAAQ5H,EAAQod,WAAaljB,MAE3ByjB,EAAWhC,GAAiB,CAC9BzI,YAAaA,EACbvL,MAAO3H,EAAQsd,UAAY,EAC3B1V,OAAQ5H,EAAQwd,WAAa,GAC5B,SAEC6D,EAAoB1F,GAAiB,CACvCzI,YAAaA,EACbvL,MAAO3H,EAAQ2H,QAAoB,IAAV0c,EAAc2F,EAAOriB,MAAQyiB,GACtDxiB,OAAQ5H,EAAQ4H,SAAqB,IAAVyc,EAAc2F,EAAOpiB,OAASyiB,KAEvD1iB,EAAQ0Z,EAAkB1Z,MAC1BC,EAASyZ,EAAkBzZ,OAE/BD,EAAQ3V,KAAK4rB,IAAIF,EAAS/V,MAAO3V,KAAKwM,IAAImf,EAAShW,MAAOA,IAC1DC,EAAS5V,KAAK4rB,IAAIF,EAAS9V,OAAQ5V,KAAKwM,IAAImf,EAAS/V,OAAQA,IAC7D,IAAI/B,EAASoB,SAASC,cAAc,UAChCuW,EAAU5X,EAAOQ,WAAW,MAChCR,EAAO8B,MAAQsO,EAAuBtO,GACtC9B,EAAO+B,OAASqO,EAAuBrO,GACvC6V,EAAQS,UAAYle,EAAQ4c,WAAa,cACzCa,EAAQU,SAAS,EAAG,EAAGxW,EAAOC,GAC9B,IAAI0iB,EAAwBtqB,EAAQ8c,sBAChCA,OAAkD,IAA1BwN,GAA0CA,EAClEtN,EAAwBhd,EAAQgd,sBACpCS,EAAQX,sBAAwBA,EAE5BE,IACFS,EAAQT,sBAAwBA,GAIlC,IAKIuN,EACAC,EAEAC,EACAC,EACAC,EACAC,EAXAC,EAAcb,EAAOriB,MACrBmjB,EAAed,EAAOpiB,OAEtBmjB,EAAOb,EACPc,EAAOb,EASPY,IAASX,GAAgBW,EAAOF,GAClCE,EAAO,EACPR,EAAW,EACXE,EAAO,EACPE,EAAW,GACFI,GAAQ,GACjBN,GAAQM,EACRA,EAAO,EAEPJ,EADAJ,EAAWv4B,KAAK4rB,IAAIiN,EAAaT,EAAeW,IAEvCA,GAAQF,IACjBJ,EAAO,EAEPE,EADAJ,EAAWv4B,KAAK4rB,IAAIwM,EAAcS,EAAcE,IAI9CR,GAAY,GAAKS,IAASX,GAAiBW,EAAOF,GACpDE,EAAO,EACPR,EAAY,EACZE,EAAO,EACPE,EAAY,GACHI,GAAQ,GACjBN,GAAQM,EACRA,EAAO,EAEPJ,EADAJ,EAAYx4B,KAAK4rB,IAAIkN,EAAcT,EAAgBW,IAE1CA,GAAQF,IACjBJ,EAAO,EAEPE,EADAJ,EAAYx4B,KAAK4rB,IAAIyM,EAAeS,EAAeE,IAIrD,IAAI/M,EAAS,CAAC8M,EAAMC,EAAMT,EAAUC,GAEpC,GAAIG,EAAW,GAAKC,EAAY,EAAG,CACjC,IAAI/gB,EAAQlC,EAAQyiB,EACpBnM,EAAO3rB,KAAKm4B,EAAO5gB,EAAO6gB,EAAO7gB,EAAO8gB,EAAW9gB,EAAO+gB,EAAY/gB,GAQxE,OAHA4T,EAAQc,UAAU7U,MAAM+T,EAAS,CAACuM,GAAQvpB,OAAO2Q,EAAmB6M,EAAOzb,KAAI,SAAUgc,GACvF,OAAOxsB,KAAKC,MAAMgkB,EAAuBuI,UAEpC3Y,GAQTolB,eAAgB,SAAwB/X,GACtC,IAAIlT,EAAU9M,KAAK8M,QAenB,OAbK9M,KAAK8vB,UAAazN,EAAYrC,KAEjClT,EAAQkT,YAAclhB,KAAKwM,IAAI,EAAG0U,IAAgBD,IAE9C/f,KAAK6hB,QACP7hB,KAAK6sB,cAED7sB,KAAK8sB,SACP9sB,KAAK+sB,kBAKJ/sB,MAQTwyB,YAAa,SAAqBvyB,GAChC,IAAI6M,EAAU9M,KAAK8M,QACf2lB,EAAUzyB,KAAKyyB,QACf7C,EAAO5vB,KAAK4vB,KAEhB,GAAI5vB,KAAK6hB,QAAU7hB,KAAK8vB,SAAU,CAChC,IAAIkI,EAn7FW,SAm7FC/3B,EACZ4gB,EAAU/T,EAAQ+T,SAn7FP,SAm7FkB5gB,EACjCA,EAAO+3B,GAAanX,EAAU5gB,EAn7Ff,OAo7Ff6M,EAAQ+S,SAAW5f,EACnBqkB,EAAQmO,EAASxT,EAAahf,GAC9B8jB,EAAY0O,EAAS/T,EAAYsZ,GACjCjU,EAAY0O,EAASzT,EAAY6B,GAE5B/T,EAAQsU,iBAEXkD,EAAQsL,EAAM3Q,EAAahf,GAC3B8jB,EAAY6L,EAAMlR,EAAYsZ,GAC9BjU,EAAY6L,EAAM5Q,EAAY6B,IAIlC,OAAO7gB,OAIPi4B,GAAiBxZ,EAAOyZ,QAExBA,GAEJ,WAME,SAASA,EAAQ9U,GACf,IAAItW,EAAUkG,UAAU9V,OAAS,QAAsBT,IAAjBuW,UAAU,GAAmBA,UAAU,GAAK,GAIlF,GAFA6K,EAAgB7d,KAAMk4B,IAEjB9U,IAAY1D,EAAgBtR,KAAKgV,EAAQ+U,SAC5C,MAAM,IAAI36B,MAAM,4EAGlBwC,KAAKojB,QAAUA,EACfpjB,KAAK8M,QAAU6V,EAAO,GAAIhD,EAAU4C,EAAczV,IAAYA,GAC9D9M,KAAK8sB,SAAU,EACf9sB,KAAK8vB,UAAW,EAChB9vB,KAAKkzB,SAAW,GAChBlzB,KAAK6hB,OAAQ,EACb7hB,KAAKo4B,WAAY,EACjBp4B,KAAKi1B,UAAW,EAChBj1B,KAAKy2B,OAAQ,EACbz2B,KAAKq4B,QAAS,EACdr4B,KAAKs4B,OA1hGT,IAAsBva,EAAawa,EAAYC,EA24G7C,OA34GoBza,EA6hGPma,EA7hGgCM,EAy3GzC,CAAC,CACHjoB,IAAK,aACL/P,MAAO,WAEL,OADApD,OAAO86B,QAAUD,GACVC,IAOR,CACD3nB,IAAK,cACL/P,MAAO,SAAqBsM,GAC1B6V,EAAOhD,EAAU4C,EAAczV,IAAYA,OAv4GdyrB,EA6hGX,CAAC,CACrBhoB,IAAK,OACL/P,MAAO,WACL,IAEI+c,EAFA6F,EAAUpjB,KAAKojB,QACf+U,EAAU/U,EAAQ+U,QAAQh1B,cAG9B,IAAIigB,EAAiB,QAArB,CAMA,GAFAA,EAAiB,QAAIpjB,KAEL,QAAZm4B,EAAmB,CAMrB,GALAn4B,KAAKg1B,OAAQ,EAEbzX,EAAM6F,EAAQiB,aAAa,QAAU,GACrCrkB,KAAKu1B,YAAchY,GAEdA,EACH,OAIFA,EAAM6F,EAAQvJ,QACO,WAAZse,GAAwB/6B,OAAOy5B,oBACxCtZ,EAAM6F,EAAQ3P,aAGhBzT,KAAKm1B,KAAK5X,MAEX,CACDhN,IAAK,OACL/P,MAAO,SAAc+c,GACnB,IAAIF,EAAQrd,KAEZ,GAAKud,EAAL,CAIAvd,KAAKud,IAAMA,EACXvd,KAAKqtB,UAAY,GACjB,IAAIjK,EAAUpjB,KAAKojB,QACftW,EAAU9M,KAAK8M,QAOnB,GALKA,EAAQgU,WAAchU,EAAQiU,WACjCjU,EAAQuT,kBAAmB,GAIxBvT,EAAQuT,kBAAqBjjB,OAAO4a,YAMzC,GAAIwH,EAAgBpR,KAAKmP,GACnBkC,EAAqBrR,KAAKmP,GAC5Bvd,KAAKy4B,MAhsETC,EAgsEmCnb,EAhsElB7gB,QAAQ8uB,GAAsB,IAC/CmN,EAASC,KAAKF,GACdhN,EAAc,IAAI1T,YAAY2gB,EAAOz7B,QAEzC+M,EADI4uB,EAAQ,IAAIthB,WAAWmU,IACZ,SAAUlrB,EAAOvC,GAC9B46B,EAAM56B,GAAK06B,EAAOxf,WAAWlb,MAExBytB,IA2rEC1rB,KAAK84B,YAJT,CA/rEN,IACMJ,EACAC,EACAjN,EACAmN,EAqsEIE,EAAM,IAAIC,eACVF,EAAQ94B,KAAK84B,MAAMlsB,KAAK5M,MAC5BA,KAAKo4B,WAAY,EACjBp4B,KAAK+4B,IAAMA,EACXA,EAAIE,UAAYH,EAChBC,EAAIG,QAAUJ,EACdC,EAAII,QAAUL,EAEdC,EAAIK,WAAa,WAhiGF,eAiiGTL,EAAIM,kBAAkB,iBACxBN,EAAIO,SAIRP,EAAIQ,OAAS,WACXlc,EAAMob,KAAKM,EAAIS,WAGjBT,EAAIU,UAAY,WACdpc,EAAM+a,WAAY,EAClB/a,EAAM0b,IAAM,MAIVjsB,EAAQsT,kBAAoBuG,GAAiBpJ,IAAQ6F,EAAQ4M,cAC/DzS,EAAM0J,GAAa1J,IAGrBwb,EAAIzd,KAAK,MAAOiC,GAChBwb,EAAIW,aAAe,cACnBX,EAAIY,gBAA0C,oBAAxBvW,EAAQ4M,YAC9B+I,EAAIa,YA9CF55B,KAAK84B,WAgDR,CACDvoB,IAAK,OACL/P,MAAO,SAAckrB,GACnB,IAAI5e,EAAU9M,KAAK8M,QACfugB,EAAYrtB,KAAKqtB,UACjB1B,EAAcF,GAAuBC,GACrCnE,EAAS,EACTC,EAAS,EACTC,EAAS,EAEb,GAAIkE,EAAc,EAAG,CAGnB3rB,KAAKud,IAtuEb,SAA8BmO,EAAamO,GAKzC,IAJA,IAAIC,EAAS,GAETjB,EAAQ,IAAIthB,WAAWmU,GAEpBmN,EAAM37B,OAAS,GACpB48B,EAAO16B,KAAKmsB,GAAa/U,WAAM,EAAQ0H,EAAmB2a,EAAM3e,SAAS,EAJ3D,SAKd2e,EAAQA,EAAM3e,SALA,MAQhB,MAAO,QAAQ3M,OAAOssB,EAAU,YAAYtsB,OAAOwsB,KAAKD,EAAO/8B,KAAK,MA4tEnDi9B,CAAqBtO,EAtkGnB,cAwkGb,IAAIuO,EAtoEZ,SAA0BtO,GACxB,IAAIpE,EAAS,EACTC,EAAS,EACTC,EAAS,EAEb,OAAQkE,GAEN,KAAK,EACHnE,GAAU,EACV,MAGF,KAAK,EACHD,GAAU,IACV,MAGF,KAAK,EACHE,GAAU,EACV,MAGF,KAAK,EACHF,EAAS,GACTE,GAAU,EACV,MAGF,KAAK,EACHF,EAAS,GACT,MAGF,KAAK,EACHA,EAAS,GACTC,GAAU,EACV,MAGF,KAAK,EACHD,GAAU,GAMd,MAAO,CACLA,OAAQA,EACRC,OAAQA,EACRC,OAAQA,GAqlEoByS,CAAiBvO,GAEzCpE,EAAS0S,EAAkB1S,OAC3BC,EAASyS,EAAkBzS,OAC3BC,EAASwS,EAAkBxS,OAGzB3a,EAAQgU,YACVuM,EAAU9F,OAASA,GAGjBza,EAAQiU,WACVsM,EAAU7F,OAASA,EACnB6F,EAAU5F,OAASA,GAGrBznB,KAAK84B,UAEN,CACDvoB,IAAK,QACL/P,MAAO,WACL,IAEIwvB,EACAC,EAHA7M,EAAUpjB,KAAKojB,QACf7F,EAAMvd,KAAKud,IAIXvd,KAAK8M,QAAQsT,kBAAoBuG,GAAiBpJ,MACpDyS,EAAc5M,EAAQ4M,aAGpBC,EAAiB1S,GAEjByS,EAAc,YAEdC,EAAiBhJ,GAAa1J,KAIlCvd,KAAKgwB,YAAcA,EACnBhwB,KAAKiwB,eAAiBA,EACtB,IAAI5b,EAAQN,SAASC,cAAc,OAE/Bgc,IACF3b,EAAM2b,YAAcA,GAGtB3b,EAAMwF,IAAMoW,GAAkB1S,EAC9Bvd,KAAKqU,MAAQA,EACbA,EAAMklB,OAASv5B,KAAKnD,MAAM+P,KAAK5M,MAC/BqU,EAAM8kB,QAAUn5B,KAAKm6B,KAAKvtB,KAAK5M,MAC/BujB,EAASlP,EAAOwK,GAChBuE,EAAQgX,WAAWC,aAAahmB,EAAO+O,EAAQkX,eAEhD,CACD/pB,IAAK,QACL/P,MAAO,WACL,IAAI+5B,EAASv6B,KAETqU,EAAQrU,KAAKg1B,MAAQh1B,KAAKojB,QAAUpjB,KAAKqU,MAC7CA,EAAMklB,OAAS,KACfllB,EAAM8kB,QAAU,KAChBn5B,KAAKq4B,QAAS,EACd,IAAImC,EAAY/b,EAAOgc,WAAa,6CAA6CrsB,KAAKqQ,EAAOgc,UAAUC,WAEnGC,EAAO,SAAcxR,EAAcE,GACrC1G,EAAO4X,EAAOlN,UAAW,CACvBlE,aAAcA,EACdE,cAAeA,EACfrJ,YAAamJ,EAAeE,IAE9BkR,EAAOlC,QAAS,EAChBkC,EAAO9D,OAAQ,EAEf8D,EAAOK,SAIT,IAAIvmB,EAAM8U,cAAiBqR,EAA3B,CAKA,IAAIK,EAAc9mB,SAASC,cAAc,OACrC8mB,EAAO/mB,SAAS+mB,MAAQ/mB,SAASqS,gBACrCpmB,KAAK66B,YAAcA,EAEnBA,EAAYtB,OAAS,WACnBoB,EAAKE,EAAYpmB,MAAOomB,EAAYnmB,QAE/B8lB,GACHM,EAAKC,YAAYF,IAIrBA,EAAYhhB,IAAMxF,EAAMwF,IAGnB2gB,IACHK,EAAYlmB,MAAMgc,QAAU,uJAC5BmK,EAAK5K,YAAY2K,SArBjBF,EAAKtmB,EAAM8U,aAAc9U,EAAMgV,iBAwBlC,CACD9Y,IAAK,OACL/P,MAAO,WACL,IAAI6T,EAAQrU,KAAKqU,MACjBA,EAAMklB,OAAS,KACfllB,EAAM8kB,QAAU,KAChB9kB,EAAM+lB,WAAWW,YAAY1mB,GAC7BrU,KAAKqU,MAAQ,OAEd,CACD9D,IAAK,QACL/P,MAAO,WACL,GAAKR,KAAKy2B,QAASz2B,KAAK6hB,MAAxB,CAIA,IAAIuB,EAAUpjB,KAAKojB,QACftW,EAAU9M,KAAK8M,QACfuH,EAAQrU,KAAKqU,MAEb2Y,EAAY5J,EAAQgX,WACpBY,EAAWjnB,SAASC,cAAc,OACtCgnB,EAASxd,UApnGA,orCAqnGT,IAAIyP,EAAU+N,EAASzK,cAAc,IAAIhjB,OAhvG/B,UAgvGiD,eACvDoF,EAASsa,EAAQsD,cAAc,IAAIhjB,OAjvG7B,UAivG+C,YACrDklB,EAAUxF,EAAQsD,cAAc,IAAIhjB,OAlvG9B,UAkvGgD,cACtDsiB,EAAU5C,EAAQsD,cAAc,IAAIhjB,OAnvG9B,UAmvGgD,cACtDqiB,EAAOC,EAAQU,cAAc,IAAIhjB,OApvG3B,UAovG6C,UACvDvN,KAAKgtB,UAAYA,EACjBhtB,KAAKitB,QAAUA,EACfjtB,KAAK2S,OAASA,EACd3S,KAAKyyB,QAAUA,EACfzyB,KAAK6vB,QAAUA,EACf7vB,KAAKkW,QAAU+W,EAAQsD,cAAc,IAAIhjB,OA1vG/B,UA0vGiD,cAC3DvN,KAAK4vB,KAAOA,EACZjd,EAAOud,YAAY7b,GAEnBkP,EAASH,EAASxE,GAElBoO,EAAUqN,aAAapN,EAAS7J,EAAQkX,aAEnCt6B,KAAKg1B,OACRnR,EAAYxP,EAAOwK,GAGrB7e,KAAK+vB,cACL/vB,KAAK4M,OACLE,EAAQgT,mBAAqBhhB,KAAKwM,IAAI,EAAGwB,EAAQgT,qBAAuBC,IACxEjT,EAAQkT,YAAclhB,KAAKwM,IAAI,EAAGwB,EAAQkT,cAAgBD,IAC1DjT,EAAQ8S,SAAW9gB,KAAKwM,IAAI,EAAGxM,KAAK4rB,IAAI,EAAG5rB,KAAKmkB,MAAMnW,EAAQ8S,aAAe,EAC7E2D,EAASsM,EAASjR,GAEb9R,EAAQyT,QACXgD,EAASsM,EAAQoL,uBAAuB,GAAG1tB,OA9wGnC,UA8wGqD,YAAaqR,GAGvE9R,EAAQ0T,QACX+C,EAASsM,EAAQoL,uBAAuB,GAAG1tB,OAlxGnC,UAkxGqD,YAAaqR,GAGxE9R,EAAQ4T,YACV6C,EAAS0J,EAAS,GAAG1f,OAtxGb,UAsxG+B,QAGpCT,EAAQ2T,WACX8C,EAASqM,EAAM9Q,GAGbhS,EAAQsU,iBACVmC,EAASqM,EAAM5Q,GACfsF,EAAQsL,EAAM3Q,EA7xGL,QAgyGNnS,EAAQuU,mBACXkC,EAASsM,EAAQoL,uBAAuB,GAAG1tB,OAnyGnC,UAmyGqD,UAAWqR,GACxE2E,EAASsM,EAAQoL,uBAAuB,GAAG1tB,OApyGnC,UAoyGqD,WAAYqR,IAG3E5e,KAAKwT,SACLxT,KAAK6hB,OAAQ,EACb7hB,KAAKwyB,YAAY1lB,EAAQ+S,UAErB/S,EAAQ6T,UACV3gB,KAAKiiB,OAGPjiB,KAAKskB,QAAQxX,EAAQ/M,MAEjB0iB,EAAW3V,EAAQ+U,QACrBqD,EAAY9B,EA5wGF,QA4wGwBtW,EAAQ+U,MAAO,CAC/C8C,MAAM,IAIVY,EAAcnC,EAjxGF,YAmxGb,CACD7S,IAAK,UACL/P,MAAO,WACAR,KAAK6hB,QAIV7hB,KAAK6hB,OAAQ,EACb7hB,KAAKkyB,SACLlyB,KAAK4wB,eACL5wB,KAAKitB,QAAQmN,WAAWW,YAAY/6B,KAAKitB,SACzCpJ,EAAY7jB,KAAKojB,QAASxE,MAE3B,CACDrO,IAAK,WACL/P,MAAO,WACDR,KAAK6hB,OACP7hB,KAAKk7B,UACLl7B,KAAK6hB,OAAQ,EACb7hB,KAAK8sB,SAAU,GACN9sB,KAAKq4B,QACdr4B,KAAK66B,YAAYtB,OAAS,KAC1Bv5B,KAAKq4B,QAAS,EACdr4B,KAAKy2B,OAAQ,GACJz2B,KAAKo4B,WACdp4B,KAAK+4B,IAAIG,QAAU,KACnBl5B,KAAK+4B,IAAIO,SACAt5B,KAAKqU,OACdrU,KAAKm6B,YAh3GKnc,EAAkBD,EAAY3d,UAAWm4B,GACrDC,GAAaxa,EAAkBD,EAAaya,GAy4GzCN,EA1YT,GA6YAvV,EAAOuV,GAAQ93B,UAAWoT,GAAQyM,GAASoR,GAAQc,GAAUsB,GAAQrW,IAEtD,Q,yFCrtFA,MAnuBQ,CACrB+d,GAAI,CACF5e,KAAM,OACN6e,WAAY,UAEdC,GAAI,CACF9e,KAAM,SACN6e,WAAY,gBAEdE,GAAI,CACF/e,KAAM,UACN6e,WAAY,UAEdG,GAAI,CACFhf,KAAM,YACN6e,WAAY,aAEdI,GAAI,CACFjf,KAAM,OACN6e,WAAY,QAEdK,GAAI,CACFlf,KAAM,UACN6e,WAAY,QAEdM,GAAI,CACFnf,KAAM,YACN6e,WAAY,YAEdO,GAAI,CACFpf,KAAM,SACN6e,WAAY,iBAEdQ,GAAI,CACFrf,KAAM,WACN6e,WAAY,WAEdS,GAAI,CACFtf,KAAM,SACN6e,WAAY,aAEdU,GAAI,CACFvf,KAAM,SACN6e,WAAY,aAEdW,GAAI,CACFxf,KAAM,cACN6e,WAAY,mBAEdY,GAAI,CACFzf,KAAM,UACN6e,WAAY,gBAEda,GAAI,CACF1f,KAAM,aACN6e,WAAY,mBAEdxlB,GAAI,CACF2G,KAAM,YACN6e,WAAY,kBAEdc,GAAI,CACF3f,KAAM,SACN6e,WAAY,WAEde,GAAI,CACF5f,KAAM,UACN6e,WAAY,WAEdgB,GAAI,CACF7f,KAAM,UACN6e,WAAY,cAEdiB,GAAI,CACF9f,KAAM,UACN6e,WAAY,SAEdkB,GAAI,CACF/f,KAAM,mBACN6e,WAAY,WAEdmB,GAAI,CACFhgB,KAAM,SACN6e,WAAY,aAEdoB,GAAI,CACFjgB,KAAM,UACN6e,WAAY,kBAEdqB,GAAI,CACFlgB,KAAM,UACN6e,WAAY,UAEdsB,GAAI,CACFngB,KAAM,UACN6e,WAAY,gBAEduB,GAAI,CACFpgB,KAAM,WACN6e,WAAY,WAEdwB,GAAI,CACFrgB,KAAM,WACN6e,WAAY,SAEdyB,GAAI,CACFtgB,KAAM,OACN6e,WAAY,WAEd0B,GAAI,CACFvgB,KAAM,QACN6e,WAAY,WAEd2B,GAAI,CACFxgB,KAAM,sBACN6e,WAAY,oBAEd4B,GAAI,CACFzgB,KAAM,UACN6e,WAAY,eAEd6B,GAAI,CACF1gB,KAAM,QACN6e,WAAY,WAEd8B,GAAI,CACF3gB,KAAM,SACN6e,WAAY,SAEd+B,GAAI,CACF5gB,KAAM,SACN6e,WAAY,WAEdgC,GAAI,CACF7gB,KAAM,SACN6e,WAAY,WAEdiC,GAAI,CACF9gB,KAAM,WACN6e,WAAY,UAEdkC,GAAI,CACF/gB,KAAM,MACN6e,WAAY,UAEd5K,GAAI,CACFjU,KAAM,QACN6e,WAAY,YAEdmC,GAAI,CACFhhB,KAAM,UACN6e,WAAY,WAEdoC,GAAI,CACFjhB,KAAM,YACN6e,WAAY,aAEdqC,GAAI,CACFlhB,KAAM,UACN6e,WAAY,WAEdsC,GAAI,CACFnhB,KAAM,WACN6e,WAAY,SAEduC,GAAI,CACFphB,KAAM,SACN6e,WAAY,WAEdwC,GAAI,CACFrhB,KAAM,UACN6e,WAAY,SAEdyC,GAAI,CACFthB,KAAM,OACN6e,WAAY,YAEd0C,GAAI,CACFvhB,KAAM,UACN6e,WAAY,SAEd2C,GAAI,CACFxhB,KAAM,SACN6e,WAAY,YAEd4C,GAAI,CACFzhB,KAAM,UACN6e,WAAY,YAEd6C,GAAI,CACF1hB,KAAM,SACN6e,WAAY,YAEd8C,GAAI,CACF3hB,KAAM,kBACN6e,WAAY,SAEd+C,GAAI,CACF5hB,KAAM,QACN6e,WAAY,WAEdgD,GAAI,CACF7hB,KAAM,kBACN6e,WAAY,YAEdiD,GAAI,CACF9hB,KAAM,WACN6e,WAAY,UAEdkD,GAAI,CACF/hB,KAAM,UACN6e,WAAY,WAEdmD,GAAI,CACFhiB,KAAM,WACN6e,WAAY,WAEdoD,GAAI,CACFjiB,KAAM,OACN6e,WAAY,SAEdqD,GAAI,CACFliB,KAAM,QACN6e,WAAY,UAEdsD,GAAI,CACFniB,KAAM,SACN6e,WAAY,SAEduD,GAAI,CACFpiB,KAAM,QACN6e,WAAY,UAEdwD,GAAI,CACFriB,KAAM,YACN6e,WAAY,aAEdyD,GAAI,CACFtiB,KAAM,WACN6e,WAAY,kBAEd0D,GAAI,CACFviB,KAAM,UACN6e,WAAY,kBAEd2D,GAAI,CACFxiB,KAAM,YACN6e,WAAY,UAEd4D,GAAI,CACFziB,KAAM,WACN6e,WAAY,WAEd6D,GAAI,CACF1iB,KAAM,SACN6e,WAAY,cAEd8D,GAAI,CACF3iB,KAAM,cACN6e,WAAY,eAEd9zB,GAAI,CACFiV,KAAM,aACN6e,WAAY,cAEd+D,GAAI,CACF5iB,KAAM,cACN6e,WAAY,eAEdgE,GAAI,CACF7iB,KAAM,OACN6e,WAAY,cAEdiE,GAAI,CACF9iB,KAAM,QACN6e,WAAY,iBAEdkE,GAAI,CACF/iB,KAAM,UACN6e,WAAY,WAEdmE,GAAI,CACFhjB,KAAM,MACN6e,WAAY,OAEdoE,GAAI,CACFjjB,KAAM,YACN6e,WAAY,YAEdqE,GAAI,CACFljB,KAAM,UACN6e,WAAY,YAEdsE,GAAI,CACFnjB,KAAM,YACN6e,WAAY,UAEduE,GAAI,CACFpjB,KAAM,WACN6e,WAAY,OAEdwE,GAAI,CACFrjB,KAAM,WACN6e,WAAY,aAEdyE,GAAI,CACFtjB,KAAM,WACN6e,WAAY,WAEd0E,GAAI,CACFvjB,KAAM,QACN6e,WAAY,WAEd2E,GAAI,CACFxjB,KAAM,SACN6e,WAAY,UAEd4E,GAAI,CACFzjB,KAAM,WACN6e,WAAY,YAEd6E,GAAI,CACF1jB,KAAM,SACN6e,WAAY,cAEd8E,GAAI,CACF3jB,KAAM,cACN6e,WAAY,eAEd+E,GAAI,CACF5jB,KAAM,QACN6e,WAAY,YAEdgF,GAAI,CACF7jB,KAAM,UACN6e,WAAY,SAEdiF,GAAI,CACF9jB,KAAM,SACN6e,WAAY,OAEdkF,GAAI,CACF/jB,KAAM,SACN6e,WAAY,UAEdmF,GAAI,CACFhkB,KAAM,WACN6e,WAAY,WAEdoF,GAAI,CACFjkB,KAAM,UACN6e,WAAY,SAEdqF,GAAI,CACFlkB,KAAM,OACN6e,WAAY,YAEdsF,GAAI,CACFnkB,KAAM,UACN6e,WAAY,YAEduF,GAAI,CACFpkB,KAAM,SACN6e,WAAY,YAEdwF,GAAI,CACFrkB,KAAM,QACN6e,WAAY,UAEdyF,GAAI,CACFtkB,KAAM,gBACN6e,WAAY,kBAEd0F,GAAI,CACFvkB,KAAM,QACN6e,WAAY,WAEd2F,GAAI,CACFxkB,KAAM,aACN6e,WAAY,YAEd4F,GAAI,CACFzkB,KAAM,UACN6e,WAAY,WAEd6F,GAAI,CACF1kB,KAAM,MACN6e,WAAY,QAEd8F,GAAI,CACF3kB,KAAM,aACN6e,WAAY,kBAEd+F,GAAI,CACF5kB,KAAM,eACN6e,WAAY,YAEdgG,GAAI,CACF7kB,KAAM,UACN6e,WAAY,mBAEdiG,GAAI,CACF9kB,KAAM,WACN6e,WAAY,mBAEdkG,GAAI,CACF/kB,KAAM,cACN6e,WAAY,gBAEdmG,GAAI,CACFhlB,KAAM,QACN6e,WAAY,gBAEdoG,GAAI,CACFjlB,KAAM,aACN6e,WAAY,oBAEdqG,GAAI,CACFllB,KAAM,YACN6e,WAAY,UAEdsG,GAAI,CACFnlB,KAAM,YACN6e,WAAY,cAEduG,GAAI,CACFplB,KAAM,UACN6e,WAAY,SAEdwG,GAAI,CACFrlB,KAAM,QACN6e,WAAY,cAEdyG,GAAI,CACFtlB,KAAM,UACN6e,WAAY,SAEd0G,GAAI,CACFvlB,KAAM,UACN6e,WAAY,SAEd2G,GAAI,CACFxlB,KAAM,QACN6e,WAAY,mBAEd4G,GAAI,CACFzlB,KAAM,mBACN6e,WAAY,gBAEd6G,GAAI,CACF1lB,KAAM,mBACN6e,WAAY,cAEd8G,GAAI,CACF3lB,KAAM,SACN6e,WAAY,UAEd+G,GAAI,CACF5lB,KAAM,SACN6e,WAAY,UAEdgH,GAAI,CACF7lB,KAAM,QACN6e,WAAY,cAEdiH,GAAI,CACF9lB,KAAM,oBACN6e,WAAY,iBAEdkH,GAAI,CACF/lB,KAAM,YACN6e,WAAY,SAEdmH,GAAI,CACFhmB,KAAM,mBACN6e,WAAY,cAEdoH,GAAI,CACFjmB,KAAM,SACN6e,WAAY,eAEdqH,GAAI,CACFlmB,KAAM,WACN6e,WAAY,YAEdsH,GAAI,CACFnmB,KAAM,UACN6e,WAAY,WAEduH,GAAI,CACFpmB,KAAM,SACN6e,WAAY,YAEdwH,GAAI,CACFrmB,KAAM,QACN6e,WAAY,gBAEdyH,GAAI,CACFtmB,KAAM,QACN6e,WAAY,SAEd0H,GAAI,CACFvmB,KAAM,WACN6e,WAAY,cAEd2H,GAAI,CACFxmB,KAAM,UACN6e,WAAY,UAEd4H,GAAI,CACFzmB,KAAM,OACN6e,WAAY,QAEd6H,GAAI,CACF1mB,KAAM,SACN6e,WAAY,gBAEd8H,GAAI,CACF3mB,KAAM,SACN6e,WAAY,QAEd+H,GAAI,CACF5mB,KAAM,aACN6e,WAAY,aAEdgI,GAAI,CACF7mB,KAAM,UACN6e,WAAY,aAEdiI,GAAI,CACF9mB,KAAM,UACN6e,WAAY,sBAEdkI,GAAI,CACF/mB,KAAM,UACN6e,WAAY,YAEdmI,GAAI,CACFhnB,KAAM,WACN6e,WAAY,gBAEdoI,GAAI,CACFjnB,KAAM,UACN6e,WAAY,WAEdqI,GAAI,CACFlnB,KAAM,cACN6e,WAAY,gBAEdsI,GAAI,CACFnnB,KAAM,WACN6e,WAAY,aAEduI,GAAI,CACFpnB,KAAM,YACN6e,WAAY,SAEdwI,GAAI,CACFrnB,KAAM,SACN6e,WAAY,UAEdyI,GAAI,CACFtnB,KAAM,gBACN6e,WAAY,mBAEd0I,GAAI,CACFvnB,KAAM,QACN6e,WAAY,kBAEd2I,GAAI,CACFxnB,KAAM,UACN6e,WAAY,SAEd4I,GAAI,CACFznB,KAAM,SACN6e,WAAY,cAEd6I,GAAI,CACF1nB,KAAM,UACN6e,WAAY,mBAEd8I,GAAI,CACF3nB,KAAM,SACN6e,WAAY,qBAEd+I,GAAI,CACF5nB,KAAM,QACN6e,WAAY,YAEdgJ,GAAI,CACF7nB,KAAM,SACN6e,WAAY,cAEdiJ,GAAI,CACF9nB,KAAM,WACN6e,WAAY,SAEdkJ,GAAI,CACF/nB,KAAM,UACN6e,WAAY,gBAEdmJ,GAAI,CACFhoB,KAAM,QACN6e,WAAY,WAEdoJ,GAAI,CACFjoB,KAAM,iBACN6e,WAAY,WAEdqJ,GAAI,CACFloB,KAAM,YACN6e,WAAY,cAEdsJ,GAAI,CACFnoB,KAAM,UACN6e,WAAY,WAEduJ,GAAI,CACFpoB,KAAM,UACN6e,WAAY,aAEdwJ,GAAI,CACFroB,KAAM,QACN6e,WAAY,SAEdyJ,GAAI,CACFtoB,KAAM,SACN6e,WAAY,UAEd0J,GAAI,CACFvoB,KAAM,QACN6e,WAAY,UAEd2J,GAAI,CACFxoB,KAAM,OACN6e,WAAY,OAEd4J,GAAI,CACFzoB,KAAM,WACN6e,WAAY,QAEd6J,GAAI,CACF1oB,KAAM,UACN6e,WAAY,WAEd8J,GAAI,CACF3oB,KAAM,UACN6e,WAAY,kBAEd+J,GAAI,CACF5oB,KAAM,SACN6e,WAAY,YAEdgK,GAAI,CACF7oB,KAAM,QACN6e,WAAY,cAEdiK,GAAI,CACF9oB,KAAM,UACN6e,WAAY,UAEdkK,GAAI,CACF/oB,KAAM,SACN6e,WAAY,YAEdmK,GAAI,CACFhpB,KAAM,QACN6e,WAAY,cAEdoK,GAAI,CACFjpB,KAAM,MACN6e,WAAY,OAEdqK,GAAI,CACFlpB,KAAM,WACN6e,WAAY,cAEdsK,GAAI,CACFnpB,KAAM,SACN6e,WAAY,aAEduK,GAAI,CACFppB,KAAM,YACN6e,WAAY,cAEdwK,GAAI,CACFrpB,KAAM,OACN6e,WAAY,QAEdyK,GAAI,CACFtpB,KAAM,QACN6e,WAAY,SAEd0K,GAAI,CACFvpB,KAAM,QACN6e,WAAY,aAEd2K,GAAI,CACFxpB,KAAM,aACN6e,WAAY,cAEd4K,GAAI,CACFzpB,KAAM,UACN6e,WAAY,WAEd6K,GAAI,CACF1pB,KAAM,UACN6e,WAAY,SAEd8K,GAAI,CACF3pB,KAAM,QACN6e,WAAY,UAEd+K,GAAI,CACF5pB,KAAM,QACN6e,WAAY,YAEdgL,GAAI,CACF7pB,KAAM,UACN6e,WAAY,UAEdiL,GAAI,CACF9pB,KAAM,SACN6e,WAAY,UAEdkL,GAAI,CACF/pB,KAAM,SACN6e,WAAY,aAEdmL,GAAI,CACFhqB,KAAM,UACN6e,WAAY,MAEdoL,GAAI,CACFjqB,KAAM,OACN6e,WAAY,YC7tBD,MAAM,EACnB,oBAAoBqL,EAAQ,IAC1B,OAAOA,EAAMn3B,IAAIjR,IAAQ,CACvBA,OACAke,KAAM,EAAQmqB,QAAQroC,GACtB+8B,WAAY,EAAQuL,cAActoC,MAItC,eAAeA,GACb,OAAO,EAAQuoC,SAASvoC,GAAQ,EAAeA,GAAMke,KAAO,GAG9D,qBACE,OAAO3V,OAAOghB,OAAO,GAAgBtY,IAAIpN,GAAKA,EAAEqa,MAGlD,qBAAqBle,GACnB,OAAO,EAAQuoC,SAASvoC,GAAQ,EAAeA,GAAM+8B,WAAa,GAGpE,2BACE,OAAOx0B,OAAOghB,OAAO,GAAgBtY,IAAIpN,GAAKA,EAAEk5B,YAGlD,eAAe7e,GASb,OARa3V,OAAOC,KAAK,GAAgBggC,KAAKxoC,IAC5C,MAAMyoC,EAAW,EAAezoC,GAEhC,OACEyoC,EAASvqB,KAAKpZ,gBAAkBoZ,EAAKpZ,eACrC2jC,EAAS1L,WAAWj4B,gBAAkBoZ,EAAKpZ,iBAGhC,GAGjB,qBACE,OAAOyD,OAAOC,KAAK,GAGrB,gBAAgBxI,GACd,YAAgC5B,IAAzB,EAAe4B","file":"static/js/3.bde677e65143f0cd1105.js","sourcesContent":["var arrayWithHoles = require(\"./arrayWithHoles\");\n\nvar iterableToArray = require(\"./iterableToArray\");\n\nvar nonIterableRest = require(\"./nonIterableRest\");\n\nfunction _toArray(arr) {\n return arrayWithHoles(arr) || iterableToArray(arr) || nonIterableRest();\n}\n\nmodule.exports = _toArray;","var baseToString = require('./_baseToString'),\n castSlice = require('./_castSlice'),\n charsEndIndex = require('./_charsEndIndex'),\n charsStartIndex = require('./_charsStartIndex'),\n stringToArray = require('./_stringToArray'),\n toString = require('./toString');\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/**\n * Removes leading and trailing whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trim(' abc ');\n * // => 'abc'\n *\n * _.trim('-_-abc-_-', '_-');\n * // => 'abc'\n *\n * _.map([' foo ', ' bar '], _.trim);\n * // => ['foo', 'bar']\n */\nfunction trim(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.replace(reTrim, '');\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n chrSymbols = stringToArray(chars),\n start = charsStartIndex(strSymbols, chrSymbols),\n end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n return castSlice(strSymbols, start, end).join('');\n}\n\nmodule.exports = trim;\n","var baseIndexOf = require('./_baseIndexOf');\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the last unmatched string symbol.\n */\nfunction charsEndIndex(strSymbols, chrSymbols) {\n var index = strSymbols.length;\n\n while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n}\n\nmodule.exports = charsEndIndex;\n","var baseIndexOf = require('./_baseIndexOf');\n\n/**\n * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the first unmatched string symbol.\n */\nfunction charsStartIndex(strSymbols, chrSymbols) {\n var index = -1,\n length = strSymbols.length;\n\n while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n}\n\nmodule.exports = charsStartIndex;\n","/*!\n * vue-qrcode v1.0.0\n * https://fengyuanchen.github.io/vue-qrcode\n *\n * Copyright 2018-present Chen Fengyuan\n * Released under the MIT license\n *\n * Date: 2018-10-21T13:04:02.951Z\n */\n\nvar commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction commonjsRequire () {\n\tthrow new Error('Dynamic requires are not currently supported by rollup-plugin-commonjs');\n}\n\nfunction createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nvar qrcode = createCommonjsModule(function (module, exports) {\n(function(f){{module.exports=f();}})(function(){return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof commonjsRequire&&commonjsRequire;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t);}return n[i].exports}for(var u=\"function\"==typeof commonjsRequire&&commonjsRequire,i=0;i>> (7 - index % 8)) & 1) === 1\n },\n\n put: function (num, length) {\n for (var i = 0; i < length; i++) {\n this.putBit(((num >>> (length - i - 1)) & 1) === 1);\n }\n },\n\n getLengthInBits: function () {\n return this.length\n },\n\n putBit: function (bit) {\n var bufIndex = Math.floor(this.length / 8);\n if (this.buffer.length <= bufIndex) {\n this.buffer.push(0);\n }\n\n if (bit) {\n this.buffer[bufIndex] |= (0x80 >>> (this.length % 8));\n }\n\n this.length++;\n }\n};\n\nmodule.exports = BitBuffer;\n\n},{}],4:[function(require,module,exports){\nvar Buffer = require('../utils/buffer');\n\n/**\n * Helper class to handle QR Code symbol modules\n *\n * @param {Number} size Symbol size\n */\nfunction BitMatrix (size) {\n if (!size || size < 1) {\n throw new Error('BitMatrix size must be defined and greater than 0')\n }\n\n this.size = size;\n this.data = new Buffer(size * size);\n this.data.fill(0);\n this.reservedBit = new Buffer(size * size);\n this.reservedBit.fill(0);\n}\n\n/**\n * Set bit value at specified location\n * If reserved flag is set, this bit will be ignored during masking process\n *\n * @param {Number} row\n * @param {Number} col\n * @param {Boolean} value\n * @param {Boolean} reserved\n */\nBitMatrix.prototype.set = function (row, col, value, reserved) {\n var index = row * this.size + col;\n this.data[index] = value;\n if (reserved) this.reservedBit[index] = true;\n};\n\n/**\n * Returns bit value at specified location\n *\n * @param {Number} row\n * @param {Number} col\n * @return {Boolean}\n */\nBitMatrix.prototype.get = function (row, col) {\n return this.data[row * this.size + col]\n};\n\n/**\n * Applies xor operator at specified location\n * (used during masking process)\n *\n * @param {Number} row\n * @param {Number} col\n * @param {Boolean} value\n */\nBitMatrix.prototype.xor = function (row, col, value) {\n this.data[row * this.size + col] ^= value;\n};\n\n/**\n * Check if bit at specified location is reserved\n *\n * @param {Number} row\n * @param {Number} col\n * @return {Boolean}\n */\nBitMatrix.prototype.isReserved = function (row, col) {\n return this.reservedBit[row * this.size + col]\n};\n\nmodule.exports = BitMatrix;\n\n},{\"../utils/buffer\":27}],5:[function(require,module,exports){\nvar Buffer = require('../utils/buffer');\nvar Mode = require('./mode');\n\nfunction ByteData (data) {\n this.mode = Mode.BYTE;\n this.data = new Buffer(data);\n}\n\nByteData.getBitsLength = function getBitsLength (length) {\n return length * 8\n};\n\nByteData.prototype.getLength = function getLength () {\n return this.data.length\n};\n\nByteData.prototype.getBitsLength = function getBitsLength () {\n return ByteData.getBitsLength(this.data.length)\n};\n\nByteData.prototype.write = function (bitBuffer) {\n for (var i = 0, l = this.data.length; i < l; i++) {\n bitBuffer.put(this.data[i], 8);\n }\n};\n\nmodule.exports = ByteData;\n\n},{\"../utils/buffer\":27,\"./mode\":13}],6:[function(require,module,exports){\nvar ECLevel = require('./error-correction-level');\r\n\r\nvar EC_BLOCKS_TABLE = [\r\n// L M Q H\r\n 1, 1, 1, 1,\r\n 1, 1, 1, 1,\r\n 1, 1, 2, 2,\r\n 1, 2, 2, 4,\r\n 1, 2, 4, 4,\r\n 2, 4, 4, 4,\r\n 2, 4, 6, 5,\r\n 2, 4, 6, 6,\r\n 2, 5, 8, 8,\r\n 4, 5, 8, 8,\r\n 4, 5, 8, 11,\r\n 4, 8, 10, 11,\r\n 4, 9, 12, 16,\r\n 4, 9, 16, 16,\r\n 6, 10, 12, 18,\r\n 6, 10, 17, 16,\r\n 6, 11, 16, 19,\r\n 6, 13, 18, 21,\r\n 7, 14, 21, 25,\r\n 8, 16, 20, 25,\r\n 8, 17, 23, 25,\r\n 9, 17, 23, 34,\r\n 9, 18, 25, 30,\r\n 10, 20, 27, 32,\r\n 12, 21, 29, 35,\r\n 12, 23, 34, 37,\r\n 12, 25, 34, 40,\r\n 13, 26, 35, 42,\r\n 14, 28, 38, 45,\r\n 15, 29, 40, 48,\r\n 16, 31, 43, 51,\r\n 17, 33, 45, 54,\r\n 18, 35, 48, 57,\r\n 19, 37, 51, 60,\r\n 19, 38, 53, 63,\r\n 20, 40, 56, 66,\r\n 21, 43, 59, 70,\r\n 22, 45, 62, 74,\r\n 24, 47, 65, 77,\r\n 25, 49, 68, 81\r\n];\r\n\r\nvar EC_CODEWORDS_TABLE = [\r\n// L M Q H\r\n 7, 10, 13, 17,\r\n 10, 16, 22, 28,\r\n 15, 26, 36, 44,\r\n 20, 36, 52, 64,\r\n 26, 48, 72, 88,\r\n 36, 64, 96, 112,\r\n 40, 72, 108, 130,\r\n 48, 88, 132, 156,\r\n 60, 110, 160, 192,\r\n 72, 130, 192, 224,\r\n 80, 150, 224, 264,\r\n 96, 176, 260, 308,\r\n 104, 198, 288, 352,\r\n 120, 216, 320, 384,\r\n 132, 240, 360, 432,\r\n 144, 280, 408, 480,\r\n 168, 308, 448, 532,\r\n 180, 338, 504, 588,\r\n 196, 364, 546, 650,\r\n 224, 416, 600, 700,\r\n 224, 442, 644, 750,\r\n 252, 476, 690, 816,\r\n 270, 504, 750, 900,\r\n 300, 560, 810, 960,\r\n 312, 588, 870, 1050,\r\n 336, 644, 952, 1110,\r\n 360, 700, 1020, 1200,\r\n 390, 728, 1050, 1260,\r\n 420, 784, 1140, 1350,\r\n 450, 812, 1200, 1440,\r\n 480, 868, 1290, 1530,\r\n 510, 924, 1350, 1620,\r\n 540, 980, 1440, 1710,\r\n 570, 1036, 1530, 1800,\r\n 570, 1064, 1590, 1890,\r\n 600, 1120, 1680, 1980,\r\n 630, 1204, 1770, 2100,\r\n 660, 1260, 1860, 2220,\r\n 720, 1316, 1950, 2310,\r\n 750, 1372, 2040, 2430\r\n];\r\n\r\n/**\r\n * Returns the number of error correction block that the QR Code should contain\r\n * for the specified version and error correction level.\r\n *\r\n * @param {Number} version QR Code version\r\n * @param {Number} errorCorrectionLevel Error correction level\r\n * @return {Number} Number of error correction blocks\r\n */\r\nexports.getBlocksCount = function getBlocksCount (version, errorCorrectionLevel) {\r\n switch (errorCorrectionLevel) {\r\n case ECLevel.L:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 0]\r\n case ECLevel.M:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 1]\r\n case ECLevel.Q:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 2]\r\n case ECLevel.H:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 3]\r\n default:\r\n return undefined\r\n }\r\n};\r\n\r\n/**\r\n * Returns the number of error correction codewords to use for the specified\r\n * version and error correction level.\r\n *\r\n * @param {Number} version QR Code version\r\n * @param {Number} errorCorrectionLevel Error correction level\r\n * @return {Number} Number of error correction codewords\r\n */\r\nexports.getTotalCodewordsCount = function getTotalCodewordsCount (version, errorCorrectionLevel) {\r\n switch (errorCorrectionLevel) {\r\n case ECLevel.L:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 0]\r\n case ECLevel.M:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 1]\r\n case ECLevel.Q:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 2]\r\n case ECLevel.H:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 3]\r\n default:\r\n return undefined\r\n }\r\n};\r\n\n},{\"./error-correction-level\":7}],7:[function(require,module,exports){\nexports.L = { bit: 1 };\nexports.M = { bit: 0 };\nexports.Q = { bit: 3 };\nexports.H = { bit: 2 };\n\nfunction fromString (string) {\n if (typeof string !== 'string') {\n throw new Error('Param is not a string')\n }\n\n var lcStr = string.toLowerCase();\n\n switch (lcStr) {\n case 'l':\n case 'low':\n return exports.L\n\n case 'm':\n case 'medium':\n return exports.M\n\n case 'q':\n case 'quartile':\n return exports.Q\n\n case 'h':\n case 'high':\n return exports.H\n\n default:\n throw new Error('Unknown EC Level: ' + string)\n }\n}\n\nexports.isValid = function isValid (level) {\n return level && typeof level.bit !== 'undefined' &&\n level.bit >= 0 && level.bit < 4\n};\n\nexports.from = function from (value, defaultValue) {\n if (exports.isValid(value)) {\n return value\n }\n\n try {\n return fromString(value)\n } catch (e) {\n return defaultValue\n }\n};\n\n},{}],8:[function(require,module,exports){\nvar getSymbolSize = require('./utils').getSymbolSize;\nvar FINDER_PATTERN_SIZE = 7;\n\n/**\n * Returns an array containing the positions of each finder pattern.\n * Each array's element represent the top-left point of the pattern as (x, y) coordinates\n *\n * @param {Number} version QR Code version\n * @return {Array} Array of coordinates\n */\nexports.getPositions = function getPositions (version) {\n var size = getSymbolSize(version);\n\n return [\n // top-left\n [0, 0],\n // top-right\n [size - FINDER_PATTERN_SIZE, 0],\n // bottom-left\n [0, size - FINDER_PATTERN_SIZE]\n ]\n};\n\n},{\"./utils\":20}],9:[function(require,module,exports){\nvar Utils = require('./utils');\n\nvar G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0);\nvar G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1);\nvar G15_BCH = Utils.getBCHDigit(G15);\n\n/**\n * Returns format information with relative error correction bits\n *\n * The format information is a 15-bit sequence containing 5 data bits,\n * with 10 error correction bits calculated using the (15, 5) BCH code.\n *\n * @param {Number} errorCorrectionLevel Error correction level\n * @param {Number} mask Mask pattern\n * @return {Number} Encoded format information bits\n */\nexports.getEncodedBits = function getEncodedBits (errorCorrectionLevel, mask) {\n var data = ((errorCorrectionLevel.bit << 3) | mask);\n var d = data << 10;\n\n while (Utils.getBCHDigit(d) - G15_BCH >= 0) {\n d ^= (G15 << (Utils.getBCHDigit(d) - G15_BCH));\n }\n\n // xor final data with mask pattern in order to ensure that\n // no combination of Error Correction Level and data mask pattern\n // will result in an all-zero data string\n return ((data << 10) | d) ^ G15_MASK\n};\n\n},{\"./utils\":20}],10:[function(require,module,exports){\nvar Buffer = require('../utils/buffer');\n\nvar EXP_TABLE = new Buffer(512);\nvar LOG_TABLE = new Buffer(256)\n\n/**\n * Precompute the log and anti-log tables for faster computation later\n *\n * For each possible value in the galois field 2^8, we will pre-compute\n * the logarithm and anti-logarithm (exponential) of this value\n *\n * ref {@link https://en.wikiversity.org/wiki/Reed%E2%80%93Solomon_codes_for_coders#Introduction_to_mathematical_fields}\n */\n;(function initTables () {\n var x = 1;\n for (var i = 0; i < 255; i++) {\n EXP_TABLE[i] = x;\n LOG_TABLE[x] = i;\n\n x <<= 1; // multiply by 2\n\n // The QR code specification says to use byte-wise modulo 100011101 arithmetic.\n // This means that when a number is 256 or larger, it should be XORed with 0x11D.\n if (x & 0x100) { // similar to x >= 256, but a lot faster (because 0x100 == 256)\n x ^= 0x11D;\n }\n }\n\n // Optimization: double the size of the anti-log table so that we don't need to mod 255 to\n // stay inside the bounds (because we will mainly use this table for the multiplication of\n // two GF numbers, no more).\n // @see {@link mul}\n for (i = 255; i < 512; i++) {\n EXP_TABLE[i] = EXP_TABLE[i - 255];\n }\n}());\n\n/**\n * Returns log value of n inside Galois Field\n *\n * @param {Number} n\n * @return {Number}\n */\nexports.log = function log (n) {\n if (n < 1) throw new Error('log(' + n + ')')\n return LOG_TABLE[n]\n};\n\n/**\n * Returns anti-log value of n inside Galois Field\n *\n * @param {Number} n\n * @return {Number}\n */\nexports.exp = function exp (n) {\n return EXP_TABLE[n]\n};\n\n/**\n * Multiplies two number inside Galois Field\n *\n * @param {Number} x\n * @param {Number} y\n * @return {Number}\n */\nexports.mul = function mul (x, y) {\n if (x === 0 || y === 0) return 0\n\n // should be EXP_TABLE[(LOG_TABLE[x] + LOG_TABLE[y]) % 255] if EXP_TABLE wasn't oversized\n // @see {@link initTables}\n return EXP_TABLE[LOG_TABLE[x] + LOG_TABLE[y]]\n};\n\n},{\"../utils/buffer\":27}],11:[function(require,module,exports){\nvar Mode = require('./mode');\nvar Utils = require('./utils');\n\nfunction KanjiData (data) {\n this.mode = Mode.KANJI;\n this.data = data;\n}\n\nKanjiData.getBitsLength = function getBitsLength (length) {\n return length * 13\n};\n\nKanjiData.prototype.getLength = function getLength () {\n return this.data.length\n};\n\nKanjiData.prototype.getBitsLength = function getBitsLength () {\n return KanjiData.getBitsLength(this.data.length)\n};\n\nKanjiData.prototype.write = function (bitBuffer) {\n var i;\n\n // In the Shift JIS system, Kanji characters are represented by a two byte combination.\n // These byte values are shifted from the JIS X 0208 values.\n // JIS X 0208 gives details of the shift coded representation.\n for (i = 0; i < this.data.length; i++) {\n var value = Utils.toSJIS(this.data[i]);\n\n // For characters with Shift JIS values from 0x8140 to 0x9FFC:\n if (value >= 0x8140 && value <= 0x9FFC) {\n // Subtract 0x8140 from Shift JIS value\n value -= 0x8140;\n\n // For characters with Shift JIS values from 0xE040 to 0xEBBF\n } else if (value >= 0xE040 && value <= 0xEBBF) {\n // Subtract 0xC140 from Shift JIS value\n value -= 0xC140;\n } else {\n throw new Error(\n 'Invalid SJIS character: ' + this.data[i] + '\\n' +\n 'Make sure your charset is UTF-8')\n }\n\n // Multiply most significant byte of result by 0xC0\n // and add least significant byte to product\n value = (((value >>> 8) & 0xff) * 0xC0) + (value & 0xff);\n\n // Convert result to a 13-bit binary string\n bitBuffer.put(value, 13);\n }\n};\n\nmodule.exports = KanjiData;\n\n},{\"./mode\":13,\"./utils\":20}],12:[function(require,module,exports){\n/**\n * Data mask pattern reference\n * @type {Object}\n */\nexports.Patterns = {\n PATTERN000: 0,\n PATTERN001: 1,\n PATTERN010: 2,\n PATTERN011: 3,\n PATTERN100: 4,\n PATTERN101: 5,\n PATTERN110: 6,\n PATTERN111: 7\n};\n\n/**\n * Weighted penalty scores for the undesirable features\n * @type {Object}\n */\nvar PenaltyScores = {\n N1: 3,\n N2: 3,\n N3: 40,\n N4: 10\n};\n\n/**\n * Check if mask pattern value is valid\n *\n * @param {Number} mask Mask pattern\n * @return {Boolean} true if valid, false otherwise\n */\nexports.isValid = function isValid (mask) {\n return mask != null && mask !== '' && !isNaN(mask) && mask >= 0 && mask <= 7\n};\n\n/**\n * Returns mask pattern from a value.\n * If value is not valid, returns undefined\n *\n * @param {Number|String} value Mask pattern value\n * @return {Number} Valid mask pattern or undefined\n */\nexports.from = function from (value) {\n return exports.isValid(value) ? parseInt(value, 10) : undefined\n};\n\n/**\n* Find adjacent modules in row/column with the same color\n* and assign a penalty value.\n*\n* Points: N1 + i\n* i is the amount by which the number of adjacent modules of the same color exceeds 5\n*/\nexports.getPenaltyN1 = function getPenaltyN1 (data) {\n var size = data.size;\n var points = 0;\n var sameCountCol = 0;\n var sameCountRow = 0;\n var lastCol = null;\n var lastRow = null;\n\n for (var row = 0; row < size; row++) {\n sameCountCol = sameCountRow = 0;\n lastCol = lastRow = null;\n\n for (var col = 0; col < size; col++) {\n var module = data.get(row, col);\n if (module === lastCol) {\n sameCountCol++;\n } else {\n if (sameCountCol >= 5) points += PenaltyScores.N1 + (sameCountCol - 5);\n lastCol = module;\n sameCountCol = 1;\n }\n\n module = data.get(col, row);\n if (module === lastRow) {\n sameCountRow++;\n } else {\n if (sameCountRow >= 5) points += PenaltyScores.N1 + (sameCountRow - 5);\n lastRow = module;\n sameCountRow = 1;\n }\n }\n\n if (sameCountCol >= 5) points += PenaltyScores.N1 + (sameCountCol - 5);\n if (sameCountRow >= 5) points += PenaltyScores.N1 + (sameCountRow - 5);\n }\n\n return points\n};\n\n/**\n * Find 2x2 blocks with the same color and assign a penalty value\n *\n * Points: N2 * (m - 1) * (n - 1)\n */\nexports.getPenaltyN2 = function getPenaltyN2 (data) {\n var size = data.size;\n var points = 0;\n\n for (var row = 0; row < size - 1; row++) {\n for (var col = 0; col < size - 1; col++) {\n var last = data.get(row, col) +\n data.get(row, col + 1) +\n data.get(row + 1, col) +\n data.get(row + 1, col + 1);\n\n if (last === 4 || last === 0) points++;\n }\n }\n\n return points * PenaltyScores.N2\n};\n\n/**\n * Find 1:1:3:1:1 ratio (dark:light:dark:light:dark) pattern in row/column,\n * preceded or followed by light area 4 modules wide\n *\n * Points: N3 * number of pattern found\n */\nexports.getPenaltyN3 = function getPenaltyN3 (data) {\n var size = data.size;\n var points = 0;\n var bitsCol = 0;\n var bitsRow = 0;\n\n for (var row = 0; row < size; row++) {\n bitsCol = bitsRow = 0;\n for (var col = 0; col < size; col++) {\n bitsCol = ((bitsCol << 1) & 0x7FF) | data.get(row, col);\n if (col >= 10 && (bitsCol === 0x5D0 || bitsCol === 0x05D)) points++;\n\n bitsRow = ((bitsRow << 1) & 0x7FF) | data.get(col, row);\n if (col >= 10 && (bitsRow === 0x5D0 || bitsRow === 0x05D)) points++;\n }\n }\n\n return points * PenaltyScores.N3\n};\n\n/**\n * Calculate proportion of dark modules in entire symbol\n *\n * Points: N4 * k\n *\n * k is the rating of the deviation of the proportion of dark modules\n * in the symbol from 50% in steps of 5%\n */\nexports.getPenaltyN4 = function getPenaltyN4 (data) {\n var darkCount = 0;\n var modulesCount = data.data.length;\n\n for (var i = 0; i < modulesCount; i++) darkCount += data.data[i];\n\n var k = Math.abs(Math.ceil((darkCount * 100 / modulesCount) / 5) - 10);\n\n return k * PenaltyScores.N4\n};\n\n/**\n * Return mask value at given position\n *\n * @param {Number} maskPattern Pattern reference value\n * @param {Number} i Row\n * @param {Number} j Column\n * @return {Boolean} Mask value\n */\nfunction getMaskAt (maskPattern, i, j) {\n switch (maskPattern) {\n case exports.Patterns.PATTERN000: return (i + j) % 2 === 0\n case exports.Patterns.PATTERN001: return i % 2 === 0\n case exports.Patterns.PATTERN010: return j % 3 === 0\n case exports.Patterns.PATTERN011: return (i + j) % 3 === 0\n case exports.Patterns.PATTERN100: return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 === 0\n case exports.Patterns.PATTERN101: return (i * j) % 2 + (i * j) % 3 === 0\n case exports.Patterns.PATTERN110: return ((i * j) % 2 + (i * j) % 3) % 2 === 0\n case exports.Patterns.PATTERN111: return ((i * j) % 3 + (i + j) % 2) % 2 === 0\n\n default: throw new Error('bad maskPattern:' + maskPattern)\n }\n}\n\n/**\n * Apply a mask pattern to a BitMatrix\n *\n * @param {Number} pattern Pattern reference number\n * @param {BitMatrix} data BitMatrix data\n */\nexports.applyMask = function applyMask (pattern, data) {\n var size = data.size;\n\n for (var col = 0; col < size; col++) {\n for (var row = 0; row < size; row++) {\n if (data.isReserved(row, col)) continue\n data.xor(row, col, getMaskAt(pattern, row, col));\n }\n }\n};\n\n/**\n * Returns the best mask pattern for data\n *\n * @param {BitMatrix} data\n * @return {Number} Mask pattern reference number\n */\nexports.getBestMask = function getBestMask (data, setupFormatFunc) {\n var numPatterns = Object.keys(exports.Patterns).length;\n var bestPattern = 0;\n var lowerPenalty = Infinity;\n\n for (var p = 0; p < numPatterns; p++) {\n setupFormatFunc(p);\n exports.applyMask(p, data);\n\n // Calculate penalty\n var penalty =\n exports.getPenaltyN1(data) +\n exports.getPenaltyN2(data) +\n exports.getPenaltyN3(data) +\n exports.getPenaltyN4(data);\n\n // Undo previously applied mask\n exports.applyMask(p, data);\n\n if (penalty < lowerPenalty) {\n lowerPenalty = penalty;\n bestPattern = p;\n }\n }\n\n return bestPattern\n};\n\n},{}],13:[function(require,module,exports){\nvar VersionCheck = require('./version-check');\nvar Regex = require('./regex');\n\n/**\n * Numeric mode encodes data from the decimal digit set (0 - 9)\n * (byte values 30HEX to 39HEX).\n * Normally, 3 data characters are represented by 10 bits.\n *\n * @type {Object}\n */\nexports.NUMERIC = {\n id: 'Numeric',\n bit: 1 << 0,\n ccBits: [10, 12, 14]\n};\n\n/**\n * Alphanumeric mode encodes data from a set of 45 characters,\n * i.e. 10 numeric digits (0 - 9),\n * 26 alphabetic characters (A - Z),\n * and 9 symbols (SP, $, %, *, +, -, ., /, :).\n * Normally, two input characters are represented by 11 bits.\n *\n * @type {Object}\n */\nexports.ALPHANUMERIC = {\n id: 'Alphanumeric',\n bit: 1 << 1,\n ccBits: [9, 11, 13]\n};\n\n/**\n * In byte mode, data is encoded at 8 bits per character.\n *\n * @type {Object}\n */\nexports.BYTE = {\n id: 'Byte',\n bit: 1 << 2,\n ccBits: [8, 16, 16]\n};\n\n/**\n * The Kanji mode efficiently encodes Kanji characters in accordance with\n * the Shift JIS system based on JIS X 0208.\n * The Shift JIS values are shifted from the JIS X 0208 values.\n * JIS X 0208 gives details of the shift coded representation.\n * Each two-byte character value is compacted to a 13-bit binary codeword.\n *\n * @type {Object}\n */\nexports.KANJI = {\n id: 'Kanji',\n bit: 1 << 3,\n ccBits: [8, 10, 12]\n};\n\n/**\n * Mixed mode will contain a sequences of data in a combination of any of\n * the modes described above\n *\n * @type {Object}\n */\nexports.MIXED = {\n bit: -1\n};\n\n/**\n * Returns the number of bits needed to store the data length\n * according to QR Code specifications.\n *\n * @param {Mode} mode Data mode\n * @param {Number} version QR Code version\n * @return {Number} Number of bits\n */\nexports.getCharCountIndicator = function getCharCountIndicator (mode, version) {\n if (!mode.ccBits) throw new Error('Invalid mode: ' + mode)\n\n if (!VersionCheck.isValid(version)) {\n throw new Error('Invalid version: ' + version)\n }\n\n if (version >= 1 && version < 10) return mode.ccBits[0]\n else if (version < 27) return mode.ccBits[1]\n return mode.ccBits[2]\n};\n\n/**\n * Returns the most efficient mode to store the specified data\n *\n * @param {String} dataStr Input data string\n * @return {Mode} Best mode\n */\nexports.getBestModeForData = function getBestModeForData (dataStr) {\n if (Regex.testNumeric(dataStr)) return exports.NUMERIC\n else if (Regex.testAlphanumeric(dataStr)) return exports.ALPHANUMERIC\n else if (Regex.testKanji(dataStr)) return exports.KANJI\n else return exports.BYTE\n};\n\n/**\n * Return mode name as string\n *\n * @param {Mode} mode Mode object\n * @returns {String} Mode name\n */\nexports.toString = function toString (mode) {\n if (mode && mode.id) return mode.id\n throw new Error('Invalid mode')\n};\n\n/**\n * Check if input param is a valid mode object\n *\n * @param {Mode} mode Mode object\n * @returns {Boolean} True if valid mode, false otherwise\n */\nexports.isValid = function isValid (mode) {\n return mode && mode.bit && mode.ccBits\n};\n\n/**\n * Get mode object from its name\n *\n * @param {String} string Mode name\n * @returns {Mode} Mode object\n */\nfunction fromString (string) {\n if (typeof string !== 'string') {\n throw new Error('Param is not a string')\n }\n\n var lcStr = string.toLowerCase();\n\n switch (lcStr) {\n case 'numeric':\n return exports.NUMERIC\n case 'alphanumeric':\n return exports.ALPHANUMERIC\n case 'kanji':\n return exports.KANJI\n case 'byte':\n return exports.BYTE\n default:\n throw new Error('Unknown mode: ' + string)\n }\n}\n\n/**\n * Returns mode from a value.\n * If value is not a valid mode, returns defaultValue\n *\n * @param {Mode|String} value Encoding mode\n * @param {Mode} defaultValue Fallback value\n * @return {Mode} Encoding mode\n */\nexports.from = function from (value, defaultValue) {\n if (exports.isValid(value)) {\n return value\n }\n\n try {\n return fromString(value)\n } catch (e) {\n return defaultValue\n }\n};\n\n},{\"./regex\":18,\"./version-check\":21}],14:[function(require,module,exports){\nvar Mode = require('./mode');\n\nfunction NumericData (data) {\n this.mode = Mode.NUMERIC;\n this.data = data.toString();\n}\n\nNumericData.getBitsLength = function getBitsLength (length) {\n return 10 * Math.floor(length / 3) + ((length % 3) ? ((length % 3) * 3 + 1) : 0)\n};\n\nNumericData.prototype.getLength = function getLength () {\n return this.data.length\n};\n\nNumericData.prototype.getBitsLength = function getBitsLength () {\n return NumericData.getBitsLength(this.data.length)\n};\n\nNumericData.prototype.write = function write (bitBuffer) {\n var i, group, value;\n\n // The input data string is divided into groups of three digits,\n // and each group is converted to its 10-bit binary equivalent.\n for (i = 0; i + 3 <= this.data.length; i += 3) {\n group = this.data.substr(i, 3);\n value = parseInt(group, 10);\n\n bitBuffer.put(value, 10);\n }\n\n // If the number of input digits is not an exact multiple of three,\n // the final one or two digits are converted to 4 or 7 bits respectively.\n var remainingNum = this.data.length - i;\n if (remainingNum > 0) {\n group = this.data.substr(i);\n value = parseInt(group, 10);\n\n bitBuffer.put(value, remainingNum * 3 + 1);\n }\n};\n\nmodule.exports = NumericData;\n\n},{\"./mode\":13}],15:[function(require,module,exports){\nvar Buffer = require('../utils/buffer');\nvar GF = require('./galois-field');\n\n/**\n * Multiplies two polynomials inside Galois Field\n *\n * @param {Buffer} p1 Polynomial\n * @param {Buffer} p2 Polynomial\n * @return {Buffer} Product of p1 and p2\n */\nexports.mul = function mul (p1, p2) {\n var coeff = new Buffer(p1.length + p2.length - 1);\n coeff.fill(0);\n\n for (var i = 0; i < p1.length; i++) {\n for (var j = 0; j < p2.length; j++) {\n coeff[i + j] ^= GF.mul(p1[i], p2[j]);\n }\n }\n\n return coeff\n};\n\n/**\n * Calculate the remainder of polynomials division\n *\n * @param {Buffer} divident Polynomial\n * @param {Buffer} divisor Polynomial\n * @return {Buffer} Remainder\n */\nexports.mod = function mod (divident, divisor) {\n var result = new Buffer(divident);\n\n while ((result.length - divisor.length) >= 0) {\n var coeff = result[0];\n\n for (var i = 0; i < divisor.length; i++) {\n result[i] ^= GF.mul(divisor[i], coeff);\n }\n\n // remove all zeros from buffer head\n var offset = 0;\n while (offset < result.length && result[offset] === 0) offset++;\n result = result.slice(offset);\n }\n\n return result\n};\n\n/**\n * Generate an irreducible generator polynomial of specified degree\n * (used by Reed-Solomon encoder)\n *\n * @param {Number} degree Degree of the generator polynomial\n * @return {Buffer} Buffer containing polynomial coefficients\n */\nexports.generateECPolynomial = function generateECPolynomial (degree) {\n var poly = new Buffer([1]);\n for (var i = 0; i < degree; i++) {\n poly = exports.mul(poly, [1, GF.exp(i)]);\n }\n\n return poly\n};\n\n},{\"../utils/buffer\":27,\"./galois-field\":10}],16:[function(require,module,exports){\nvar Buffer = require('../utils/buffer');\nvar Utils = require('./utils');\nvar ECLevel = require('./error-correction-level');\nvar BitBuffer = require('./bit-buffer');\nvar BitMatrix = require('./bit-matrix');\nvar AlignmentPattern = require('./alignment-pattern');\nvar FinderPattern = require('./finder-pattern');\nvar MaskPattern = require('./mask-pattern');\nvar ECCode = require('./error-correction-code');\nvar ReedSolomonEncoder = require('./reed-solomon-encoder');\nvar Version = require('./version');\nvar FormatInfo = require('./format-info');\nvar Mode = require('./mode');\nvar Segments = require('./segments');\nvar isArray = require('isarray');\n\n/**\n * QRCode for JavaScript\n *\n * modified by Ryan Day for nodejs support\n * Copyright (c) 2011 Ryan Day\n *\n * Licensed under the MIT license:\n * http://www.opensource.org/licenses/mit-license.php\n *\n//---------------------------------------------------------------------\n// QRCode for JavaScript\n//\n// Copyright (c) 2009 Kazuhiko Arase\n//\n// URL: http://www.d-project.com/\n//\n// Licensed under the MIT license:\n// http://www.opensource.org/licenses/mit-license.php\n//\n// The word \"QR Code\" is registered trademark of\n// DENSO WAVE INCORPORATED\n// http://www.denso-wave.com/qrcode/faqpatent-e.html\n//\n//---------------------------------------------------------------------\n*/\n\n/**\n * Add finder patterns bits to matrix\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {Number} version QR Code version\n */\nfunction setupFinderPattern (matrix, version) {\n var size = matrix.size;\n var pos = FinderPattern.getPositions(version);\n\n for (var i = 0; i < pos.length; i++) {\n var row = pos[i][0];\n var col = pos[i][1];\n\n for (var r = -1; r <= 7; r++) {\n if (row + r <= -1 || size <= row + r) continue\n\n for (var c = -1; c <= 7; c++) {\n if (col + c <= -1 || size <= col + c) continue\n\n if ((r >= 0 && r <= 6 && (c === 0 || c === 6)) ||\n (c >= 0 && c <= 6 && (r === 0 || r === 6)) ||\n (r >= 2 && r <= 4 && c >= 2 && c <= 4)) {\n matrix.set(row + r, col + c, true, true);\n } else {\n matrix.set(row + r, col + c, false, true);\n }\n }\n }\n }\n}\n\n/**\n * Add timing pattern bits to matrix\n *\n * Note: this function must be called before {@link setupAlignmentPattern}\n *\n * @param {BitMatrix} matrix Modules matrix\n */\nfunction setupTimingPattern (matrix) {\n var size = matrix.size;\n\n for (var r = 8; r < size - 8; r++) {\n var value = r % 2 === 0;\n matrix.set(r, 6, value, true);\n matrix.set(6, r, value, true);\n }\n}\n\n/**\n * Add alignment patterns bits to matrix\n *\n * Note: this function must be called after {@link setupTimingPattern}\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {Number} version QR Code version\n */\nfunction setupAlignmentPattern (matrix, version) {\n var pos = AlignmentPattern.getPositions(version);\n\n for (var i = 0; i < pos.length; i++) {\n var row = pos[i][0];\n var col = pos[i][1];\n\n for (var r = -2; r <= 2; r++) {\n for (var c = -2; c <= 2; c++) {\n if (r === -2 || r === 2 || c === -2 || c === 2 ||\n (r === 0 && c === 0)) {\n matrix.set(row + r, col + c, true, true);\n } else {\n matrix.set(row + r, col + c, false, true);\n }\n }\n }\n }\n}\n\n/**\n * Add version info bits to matrix\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {Number} version QR Code version\n */\nfunction setupVersionInfo (matrix, version) {\n var size = matrix.size;\n var bits = Version.getEncodedBits(version);\n var row, col, mod;\n\n for (var i = 0; i < 18; i++) {\n row = Math.floor(i / 3);\n col = i % 3 + size - 8 - 3;\n mod = ((bits >> i) & 1) === 1;\n\n matrix.set(row, col, mod, true);\n matrix.set(col, row, mod, true);\n }\n}\n\n/**\n * Add format info bits to matrix\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {ErrorCorrectionLevel} errorCorrectionLevel Error correction level\n * @param {Number} maskPattern Mask pattern reference value\n */\nfunction setupFormatInfo (matrix, errorCorrectionLevel, maskPattern) {\n var size = matrix.size;\n var bits = FormatInfo.getEncodedBits(errorCorrectionLevel, maskPattern);\n var i, mod;\n\n for (i = 0; i < 15; i++) {\n mod = ((bits >> i) & 1) === 1;\n\n // vertical\n if (i < 6) {\n matrix.set(i, 8, mod, true);\n } else if (i < 8) {\n matrix.set(i + 1, 8, mod, true);\n } else {\n matrix.set(size - 15 + i, 8, mod, true);\n }\n\n // horizontal\n if (i < 8) {\n matrix.set(8, size - i - 1, mod, true);\n } else if (i < 9) {\n matrix.set(8, 15 - i - 1 + 1, mod, true);\n } else {\n matrix.set(8, 15 - i - 1, mod, true);\n }\n }\n\n // fixed module\n matrix.set(size - 8, 8, 1, true);\n}\n\n/**\n * Add encoded data bits to matrix\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {Buffer} data Data codewords\n */\nfunction setupData (matrix, data) {\n var size = matrix.size;\n var inc = -1;\n var row = size - 1;\n var bitIndex = 7;\n var byteIndex = 0;\n\n for (var col = size - 1; col > 0; col -= 2) {\n if (col === 6) col--;\n\n while (true) {\n for (var c = 0; c < 2; c++) {\n if (!matrix.isReserved(row, col - c)) {\n var dark = false;\n\n if (byteIndex < data.length) {\n dark = (((data[byteIndex] >>> bitIndex) & 1) === 1);\n }\n\n matrix.set(row, col - c, dark);\n bitIndex--;\n\n if (bitIndex === -1) {\n byteIndex++;\n bitIndex = 7;\n }\n }\n }\n\n row += inc;\n\n if (row < 0 || size <= row) {\n row -= inc;\n inc = -inc;\n break\n }\n }\n }\n}\n\n/**\n * Create encoded codewords from data input\n *\n * @param {Number} version QR Code version\n * @param {ErrorCorrectionLevel} errorCorrectionLevel Error correction level\n * @param {ByteData} data Data input\n * @return {Buffer} Buffer containing encoded codewords\n */\nfunction createData (version, errorCorrectionLevel, segments) {\n // Prepare data buffer\n var buffer = new BitBuffer();\n\n segments.forEach(function (data) {\n // prefix data with mode indicator (4 bits)\n buffer.put(data.mode.bit, 4);\n\n // Prefix data with character count indicator.\n // The character count indicator is a string of bits that represents the\n // number of characters that are being encoded.\n // The character count indicator must be placed after the mode indicator\n // and must be a certain number of bits long, depending on the QR version\n // and data mode\n // @see {@link Mode.getCharCountIndicator}.\n buffer.put(data.getLength(), Mode.getCharCountIndicator(data.mode, version));\n\n // add binary data sequence to buffer\n data.write(buffer);\n });\n\n // Calculate required number of bits\n var totalCodewords = Utils.getSymbolTotalCodewords(version);\n var ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel);\n var dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8;\n\n // Add a terminator.\n // If the bit string is shorter than the total number of required bits,\n // a terminator of up to four 0s must be added to the right side of the string.\n // If the bit string is more than four bits shorter than the required number of bits,\n // add four 0s to the end.\n if (buffer.getLengthInBits() + 4 <= dataTotalCodewordsBits) {\n buffer.put(0, 4);\n }\n\n // If the bit string is fewer than four bits shorter, add only the number of 0s that\n // are needed to reach the required number of bits.\n\n // After adding the terminator, if the number of bits in the string is not a multiple of 8,\n // pad the string on the right with 0s to make the string's length a multiple of 8.\n while (buffer.getLengthInBits() % 8 !== 0) {\n buffer.putBit(0);\n }\n\n // Add pad bytes if the string is still shorter than the total number of required bits.\n // Extend the buffer to fill the data capacity of the symbol corresponding to\n // the Version and Error Correction Level by adding the Pad Codewords 11101100 (0xEC)\n // and 00010001 (0x11) alternately.\n var remainingByte = (dataTotalCodewordsBits - buffer.getLengthInBits()) / 8;\n for (var i = 0; i < remainingByte; i++) {\n buffer.put(i % 2 ? 0x11 : 0xEC, 8);\n }\n\n return createCodewords(buffer, version, errorCorrectionLevel)\n}\n\n/**\n * Encode input data with Reed-Solomon and return codewords with\n * relative error correction bits\n *\n * @param {BitBuffer} bitBuffer Data to encode\n * @param {Number} version QR Code version\n * @param {ErrorCorrectionLevel} errorCorrectionLevel Error correction level\n * @return {Buffer} Buffer containing encoded codewords\n */\nfunction createCodewords (bitBuffer, version, errorCorrectionLevel) {\n // Total codewords for this QR code version (Data + Error correction)\n var totalCodewords = Utils.getSymbolTotalCodewords(version);\n\n // Total number of error correction codewords\n var ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel);\n\n // Total number of data codewords\n var dataTotalCodewords = totalCodewords - ecTotalCodewords;\n\n // Total number of blocks\n var ecTotalBlocks = ECCode.getBlocksCount(version, errorCorrectionLevel);\n\n // Calculate how many blocks each group should contain\n var blocksInGroup2 = totalCodewords % ecTotalBlocks;\n var blocksInGroup1 = ecTotalBlocks - blocksInGroup2;\n\n var totalCodewordsInGroup1 = Math.floor(totalCodewords / ecTotalBlocks);\n\n var dataCodewordsInGroup1 = Math.floor(dataTotalCodewords / ecTotalBlocks);\n var dataCodewordsInGroup2 = dataCodewordsInGroup1 + 1;\n\n // Number of EC codewords is the same for both groups\n var ecCount = totalCodewordsInGroup1 - dataCodewordsInGroup1;\n\n // Initialize a Reed-Solomon encoder with a generator polynomial of degree ecCount\n var rs = new ReedSolomonEncoder(ecCount);\n\n var offset = 0;\n var dcData = new Array(ecTotalBlocks);\n var ecData = new Array(ecTotalBlocks);\n var maxDataSize = 0;\n var buffer = new Buffer(bitBuffer.buffer);\n\n // Divide the buffer into the required number of blocks\n for (var b = 0; b < ecTotalBlocks; b++) {\n var dataSize = b < blocksInGroup1 ? dataCodewordsInGroup1 : dataCodewordsInGroup2;\n\n // extract a block of data from buffer\n dcData[b] = buffer.slice(offset, offset + dataSize);\n\n // Calculate EC codewords for this data block\n ecData[b] = rs.encode(dcData[b]);\n\n offset += dataSize;\n maxDataSize = Math.max(maxDataSize, dataSize);\n }\n\n // Create final data\n // Interleave the data and error correction codewords from each block\n var data = new Buffer(totalCodewords);\n var index = 0;\n var i, r;\n\n // Add data codewords\n for (i = 0; i < maxDataSize; i++) {\n for (r = 0; r < ecTotalBlocks; r++) {\n if (i < dcData[r].length) {\n data[index++] = dcData[r][i];\n }\n }\n }\n\n // Apped EC codewords\n for (i = 0; i < ecCount; i++) {\n for (r = 0; r < ecTotalBlocks; r++) {\n data[index++] = ecData[r][i];\n }\n }\n\n return data\n}\n\n/**\n * Build QR Code symbol\n *\n * @param {String} data Input string\n * @param {Number} version QR Code version\n * @param {ErrorCorretionLevel} errorCorrectionLevel Error level\n * @param {MaskPattern} maskPattern Mask pattern\n * @return {Object} Object containing symbol data\n */\nfunction createSymbol (data, version, errorCorrectionLevel, maskPattern) {\n var segments;\n\n if (isArray(data)) {\n segments = Segments.fromArray(data);\n } else if (typeof data === 'string') {\n var estimatedVersion = version;\n\n if (!estimatedVersion) {\n var rawSegments = Segments.rawSplit(data);\n\n // Estimate best version that can contain raw splitted segments\n estimatedVersion = Version.getBestVersionForData(rawSegments,\n errorCorrectionLevel);\n }\n\n // Build optimized segments\n // If estimated version is undefined, try with the highest version\n segments = Segments.fromString(data, estimatedVersion || 40);\n } else {\n throw new Error('Invalid data')\n }\n\n // Get the min version that can contain data\n var bestVersion = Version.getBestVersionForData(segments,\n errorCorrectionLevel);\n\n // If no version is found, data cannot be stored\n if (!bestVersion) {\n throw new Error('The amount of data is too big to be stored in a QR Code')\n }\n\n // If not specified, use min version as default\n if (!version) {\n version = bestVersion;\n\n // Check if the specified version can contain the data\n } else if (version < bestVersion) {\n throw new Error('\\n' +\n 'The chosen QR Code version cannot contain this amount of data.\\n' +\n 'Minimum version required to store current data is: ' + bestVersion + '.\\n'\n )\n }\n\n var dataBits = createData(version, errorCorrectionLevel, segments);\n\n // Allocate matrix buffer\n var moduleCount = Utils.getSymbolSize(version);\n var modules = new BitMatrix(moduleCount);\n\n // Add function modules\n setupFinderPattern(modules, version);\n setupTimingPattern(modules);\n setupAlignmentPattern(modules, version);\n\n // Add temporary dummy bits for format info just to set them as reserved.\n // This is needed to prevent these bits from being masked by {@link MaskPattern.applyMask}\n // since the masking operation must be performed only on the encoding region.\n // These blocks will be replaced with correct values later in code.\n setupFormatInfo(modules, errorCorrectionLevel, 0);\n\n if (version >= 7) {\n setupVersionInfo(modules, version);\n }\n\n // Add data codewords\n setupData(modules, dataBits);\n\n if (isNaN(maskPattern)) {\n // Find best mask pattern\n maskPattern = MaskPattern.getBestMask(modules,\n setupFormatInfo.bind(null, modules, errorCorrectionLevel));\n }\n\n // Apply mask pattern\n MaskPattern.applyMask(maskPattern, modules);\n\n // Replace format info bits with correct values\n setupFormatInfo(modules, errorCorrectionLevel, maskPattern);\n\n return {\n modules: modules,\n version: version,\n errorCorrectionLevel: errorCorrectionLevel,\n maskPattern: maskPattern,\n segments: segments\n }\n}\n\n/**\n * QR Code\n *\n * @param {String | Array} data Input data\n * @param {Object} options Optional configurations\n * @param {Number} options.version QR Code version\n * @param {String} options.errorCorrectionLevel Error correction level\n * @param {Function} options.toSJISFunc Helper func to convert utf8 to sjis\n */\nexports.create = function create (data, options) {\n if (typeof data === 'undefined' || data === '') {\n throw new Error('No input text')\n }\n\n var errorCorrectionLevel = ECLevel.M;\n var version;\n var mask;\n\n if (typeof options !== 'undefined') {\n // Use higher error correction level as default\n errorCorrectionLevel = ECLevel.from(options.errorCorrectionLevel, ECLevel.M);\n version = Version.from(options.version);\n mask = MaskPattern.from(options.maskPattern);\n\n if (options.toSJISFunc) {\n Utils.setToSJISFunction(options.toSJISFunc);\n }\n }\n\n return createSymbol(data, version, errorCorrectionLevel, mask)\n};\n\n},{\"../utils/buffer\":27,\"./alignment-pattern\":1,\"./bit-buffer\":3,\"./bit-matrix\":4,\"./error-correction-code\":6,\"./error-correction-level\":7,\"./finder-pattern\":8,\"./format-info\":9,\"./mask-pattern\":12,\"./mode\":13,\"./reed-solomon-encoder\":17,\"./segments\":19,\"./utils\":20,\"./version\":22,\"isarray\":30}],17:[function(require,module,exports){\nvar Buffer = require('../utils/buffer');\nvar Polynomial = require('./polynomial');\n\nfunction ReedSolomonEncoder (degree) {\n this.genPoly = undefined;\n this.degree = degree;\n\n if (this.degree) this.initialize(this.degree);\n}\n\n/**\n * Initialize the encoder.\n * The input param should correspond to the number of error correction codewords.\n *\n * @param {Number} degree\n */\nReedSolomonEncoder.prototype.initialize = function initialize (degree) {\n // create an irreducible generator polynomial\n this.degree = degree;\n this.genPoly = Polynomial.generateECPolynomial(this.degree);\n};\n\n/**\n * Encodes a chunk of data\n *\n * @param {Buffer} data Buffer containing input data\n * @return {Buffer} Buffer containing encoded data\n */\nReedSolomonEncoder.prototype.encode = function encode (data) {\n if (!this.genPoly) {\n throw new Error('Encoder not initialized')\n }\n\n // Calculate EC for this data block\n // extends data size to data+genPoly size\n var pad = new Buffer(this.degree);\n pad.fill(0);\n var paddedData = Buffer.concat([data, pad], data.length + this.degree);\n\n // The error correction codewords are the remainder after dividing the data codewords\n // by a generator polynomial\n var remainder = Polynomial.mod(paddedData, this.genPoly);\n\n // return EC data blocks (last n byte, where n is the degree of genPoly)\n // If coefficients number in remainder are less than genPoly degree,\n // pad with 0s to the left to reach the needed number of coefficients\n var start = this.degree - remainder.length;\n if (start > 0) {\n var buff = new Buffer(this.degree);\n buff.fill(0);\n remainder.copy(buff, start);\n\n return buff\n }\n\n return remainder\n};\n\nmodule.exports = ReedSolomonEncoder;\n\n},{\"../utils/buffer\":27,\"./polynomial\":15}],18:[function(require,module,exports){\nvar numeric = '[0-9]+';\nvar alphanumeric = '[A-Z $%*+\\\\-./:]+';\nvar kanji = '(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|' +\n '[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|' +\n '[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|' +\n '[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+';\nkanji = kanji.replace(/u/g, '\\\\u');\n\nvar byte = '(?:(?![A-Z0-9 $%*+\\\\-./:]|' + kanji + ')(?:.|[\\r\\n]))+';\n\nexports.KANJI = new RegExp(kanji, 'g');\nexports.BYTE_KANJI = new RegExp('[^A-Z0-9 $%*+\\\\-./:]+', 'g');\nexports.BYTE = new RegExp(byte, 'g');\nexports.NUMERIC = new RegExp(numeric, 'g');\nexports.ALPHANUMERIC = new RegExp(alphanumeric, 'g');\n\nvar TEST_KANJI = new RegExp('^' + kanji + '$');\nvar TEST_NUMERIC = new RegExp('^' + numeric + '$');\nvar TEST_ALPHANUMERIC = new RegExp('^[A-Z0-9 $%*+\\\\-./:]+$');\n\nexports.testKanji = function testKanji (str) {\n return TEST_KANJI.test(str)\n};\n\nexports.testNumeric = function testNumeric (str) {\n return TEST_NUMERIC.test(str)\n};\n\nexports.testAlphanumeric = function testAlphanumeric (str) {\n return TEST_ALPHANUMERIC.test(str)\n};\n\n},{}],19:[function(require,module,exports){\nvar Mode = require('./mode');\nvar NumericData = require('./numeric-data');\nvar AlphanumericData = require('./alphanumeric-data');\nvar ByteData = require('./byte-data');\nvar KanjiData = require('./kanji-data');\nvar Regex = require('./regex');\nvar Utils = require('./utils');\nvar dijkstra = require('dijkstrajs');\n\n/**\n * Returns UTF8 byte length\n *\n * @param {String} str Input string\n * @return {Number} Number of byte\n */\nfunction getStringByteLength (str) {\n return unescape(encodeURIComponent(str)).length\n}\n\n/**\n * Get a list of segments of the specified mode\n * from a string\n *\n * @param {Mode} mode Segment mode\n * @param {String} str String to process\n * @return {Array} Array of object with segments data\n */\nfunction getSegments (regex, mode, str) {\n var segments = [];\n var result;\n\n while ((result = regex.exec(str)) !== null) {\n segments.push({\n data: result[0],\n index: result.index,\n mode: mode,\n length: result[0].length\n });\n }\n\n return segments\n}\n\n/**\n * Extracts a series of segments with the appropriate\n * modes from a string\n *\n * @param {String} dataStr Input string\n * @return {Array} Array of object with segments data\n */\nfunction getSegmentsFromString (dataStr) {\n var numSegs = getSegments(Regex.NUMERIC, Mode.NUMERIC, dataStr);\n var alphaNumSegs = getSegments(Regex.ALPHANUMERIC, Mode.ALPHANUMERIC, dataStr);\n var byteSegs;\n var kanjiSegs;\n\n if (Utils.isKanjiModeEnabled()) {\n byteSegs = getSegments(Regex.BYTE, Mode.BYTE, dataStr);\n kanjiSegs = getSegments(Regex.KANJI, Mode.KANJI, dataStr);\n } else {\n byteSegs = getSegments(Regex.BYTE_KANJI, Mode.BYTE, dataStr);\n kanjiSegs = [];\n }\n\n var segs = numSegs.concat(alphaNumSegs, byteSegs, kanjiSegs);\n\n return segs\n .sort(function (s1, s2) {\n return s1.index - s2.index\n })\n .map(function (obj) {\n return {\n data: obj.data,\n mode: obj.mode,\n length: obj.length\n }\n })\n}\n\n/**\n * Returns how many bits are needed to encode a string of\n * specified length with the specified mode\n *\n * @param {Number} length String length\n * @param {Mode} mode Segment mode\n * @return {Number} Bit length\n */\nfunction getSegmentBitsLength (length, mode) {\n switch (mode) {\n case Mode.NUMERIC:\n return NumericData.getBitsLength(length)\n case Mode.ALPHANUMERIC:\n return AlphanumericData.getBitsLength(length)\n case Mode.KANJI:\n return KanjiData.getBitsLength(length)\n case Mode.BYTE:\n return ByteData.getBitsLength(length)\n }\n}\n\n/**\n * Merges adjacent segments which have the same mode\n *\n * @param {Array} segs Array of object with segments data\n * @return {Array} Array of object with segments data\n */\nfunction mergeSegments (segs) {\n return segs.reduce(function (acc, curr) {\n var prevSeg = acc.length - 1 >= 0 ? acc[acc.length - 1] : null;\n if (prevSeg && prevSeg.mode === curr.mode) {\n acc[acc.length - 1].data += curr.data;\n return acc\n }\n\n acc.push(curr);\n return acc\n }, [])\n}\n\n/**\n * Generates a list of all possible nodes combination which\n * will be used to build a segments graph.\n *\n * Nodes are divided by groups. Each group will contain a list of all the modes\n * in which is possible to encode the given text.\n *\n * For example the text '12345' can be encoded as Numeric, Alphanumeric or Byte.\n * The group for '12345' will contain then 3 objects, one for each\n * possible encoding mode.\n *\n * Each node represents a possible segment.\n *\n * @param {Array} segs Array of object with segments data\n * @return {Array} Array of object with segments data\n */\nfunction buildNodes (segs) {\n var nodes = [];\n for (var i = 0; i < segs.length; i++) {\n var seg = segs[i];\n\n switch (seg.mode) {\n case Mode.NUMERIC:\n nodes.push([seg,\n { data: seg.data, mode: Mode.ALPHANUMERIC, length: seg.length },\n { data: seg.data, mode: Mode.BYTE, length: seg.length }\n ]);\n break\n case Mode.ALPHANUMERIC:\n nodes.push([seg,\n { data: seg.data, mode: Mode.BYTE, length: seg.length }\n ]);\n break\n case Mode.KANJI:\n nodes.push([seg,\n { data: seg.data, mode: Mode.BYTE, length: getStringByteLength(seg.data) }\n ]);\n break\n case Mode.BYTE:\n nodes.push([\n { data: seg.data, mode: Mode.BYTE, length: getStringByteLength(seg.data) }\n ]);\n }\n }\n\n return nodes\n}\n\n/**\n * Builds a graph from a list of nodes.\n * All segments in each node group will be connected with all the segments of\n * the next group and so on.\n *\n * At each connection will be assigned a weight depending on the\n * segment's byte length.\n *\n * @param {Array} nodes Array of object with segments data\n * @param {Number} version QR Code version\n * @return {Object} Graph of all possible segments\n */\nfunction buildGraph (nodes, version) {\n var table = {};\n var graph = {'start': {}};\n var prevNodeIds = ['start'];\n\n for (var i = 0; i < nodes.length; i++) {\n var nodeGroup = nodes[i];\n var currentNodeIds = [];\n\n for (var j = 0; j < nodeGroup.length; j++) {\n var node = nodeGroup[j];\n var key = '' + i + j;\n\n currentNodeIds.push(key);\n table[key] = { node: node, lastCount: 0 };\n graph[key] = {};\n\n for (var n = 0; n < prevNodeIds.length; n++) {\n var prevNodeId = prevNodeIds[n];\n\n if (table[prevNodeId] && table[prevNodeId].node.mode === node.mode) {\n graph[prevNodeId][key] =\n getSegmentBitsLength(table[prevNodeId].lastCount + node.length, node.mode) -\n getSegmentBitsLength(table[prevNodeId].lastCount, node.mode);\n\n table[prevNodeId].lastCount += node.length;\n } else {\n if (table[prevNodeId]) table[prevNodeId].lastCount = node.length;\n\n graph[prevNodeId][key] = getSegmentBitsLength(node.length, node.mode) +\n 4 + Mode.getCharCountIndicator(node.mode, version); // switch cost\n }\n }\n }\n\n prevNodeIds = currentNodeIds;\n }\n\n for (n = 0; n < prevNodeIds.length; n++) {\n graph[prevNodeIds[n]]['end'] = 0;\n }\n\n return { map: graph, table: table }\n}\n\n/**\n * Builds a segment from a specified data and mode.\n * If a mode is not specified, the more suitable will be used.\n *\n * @param {String} data Input data\n * @param {Mode | String} modesHint Data mode\n * @return {Segment} Segment\n */\nfunction buildSingleSegment (data, modesHint) {\n var mode;\n var bestMode = Mode.getBestModeForData(data);\n\n mode = Mode.from(modesHint, bestMode);\n\n // Make sure data can be encoded\n if (mode !== Mode.BYTE && mode.bit < bestMode.bit) {\n throw new Error('\"' + data + '\"' +\n ' cannot be encoded with mode ' + Mode.toString(mode) +\n '.\\n Suggested mode is: ' + Mode.toString(bestMode))\n }\n\n // Use Mode.BYTE if Kanji support is disabled\n if (mode === Mode.KANJI && !Utils.isKanjiModeEnabled()) {\n mode = Mode.BYTE;\n }\n\n switch (mode) {\n case Mode.NUMERIC:\n return new NumericData(data)\n\n case Mode.ALPHANUMERIC:\n return new AlphanumericData(data)\n\n case Mode.KANJI:\n return new KanjiData(data)\n\n case Mode.BYTE:\n return new ByteData(data)\n }\n}\n\n/**\n * Builds a list of segments from an array.\n * Array can contain Strings or Objects with segment's info.\n *\n * For each item which is a string, will be generated a segment with the given\n * string and the more appropriate encoding mode.\n *\n * For each item which is an object, will be generated a segment with the given\n * data and mode.\n * Objects must contain at least the property \"data\".\n * If property \"mode\" is not present, the more suitable mode will be used.\n *\n * @param {Array} array Array of objects with segments data\n * @return {Array} Array of Segments\n */\nexports.fromArray = function fromArray (array) {\n return array.reduce(function (acc, seg) {\n if (typeof seg === 'string') {\n acc.push(buildSingleSegment(seg, null));\n } else if (seg.data) {\n acc.push(buildSingleSegment(seg.data, seg.mode));\n }\n\n return acc\n }, [])\n};\n\n/**\n * Builds an optimized sequence of segments from a string,\n * which will produce the shortest possible bitstream.\n *\n * @param {String} data Input string\n * @param {Number} version QR Code version\n * @return {Array} Array of segments\n */\nexports.fromString = function fromString (data, version) {\n var segs = getSegmentsFromString(data, Utils.isKanjiModeEnabled());\n\n var nodes = buildNodes(segs);\n var graph = buildGraph(nodes, version);\n var path = dijkstra.find_path(graph.map, 'start', 'end');\n\n var optimizedSegs = [];\n for (var i = 1; i < path.length - 1; i++) {\n optimizedSegs.push(graph.table[path[i]].node);\n }\n\n return exports.fromArray(mergeSegments(optimizedSegs))\n};\n\n/**\n * Splits a string in various segments with the modes which\n * best represent their content.\n * The produced segments are far from being optimized.\n * The output of this function is only used to estimate a QR Code version\n * which may contain the data.\n *\n * @param {string} data Input string\n * @return {Array} Array of segments\n */\nexports.rawSplit = function rawSplit (data) {\n return exports.fromArray(\n getSegmentsFromString(data, Utils.isKanjiModeEnabled())\n )\n};\n\n},{\"./alphanumeric-data\":2,\"./byte-data\":5,\"./kanji-data\":11,\"./mode\":13,\"./numeric-data\":14,\"./regex\":18,\"./utils\":20,\"dijkstrajs\":29}],20:[function(require,module,exports){\nvar toSJISFunction;\nvar CODEWORDS_COUNT = [\n 0, // Not used\n 26, 44, 70, 100, 134, 172, 196, 242, 292, 346,\n 404, 466, 532, 581, 655, 733, 815, 901, 991, 1085,\n 1156, 1258, 1364, 1474, 1588, 1706, 1828, 1921, 2051, 2185,\n 2323, 2465, 2611, 2761, 2876, 3034, 3196, 3362, 3532, 3706\n];\n\n/**\n * Returns the QR Code size for the specified version\n *\n * @param {Number} version QR Code version\n * @return {Number} size of QR code\n */\nexports.getSymbolSize = function getSymbolSize (version) {\n if (!version) throw new Error('\"version\" cannot be null or undefined')\n if (version < 1 || version > 40) throw new Error('\"version\" should be in range from 1 to 40')\n return version * 4 + 17\n};\n\n/**\n * Returns the total number of codewords used to store data and EC information.\n *\n * @param {Number} version QR Code version\n * @return {Number} Data length in bits\n */\nexports.getSymbolTotalCodewords = function getSymbolTotalCodewords (version) {\n return CODEWORDS_COUNT[version]\n};\n\n/**\n * Encode data with Bose-Chaudhuri-Hocquenghem\n *\n * @param {Number} data Value to encode\n * @return {Number} Encoded value\n */\nexports.getBCHDigit = function (data) {\n var digit = 0;\n\n while (data !== 0) {\n digit++;\n data >>>= 1;\n }\n\n return digit\n};\n\nexports.setToSJISFunction = function setToSJISFunction (f) {\n if (typeof f !== 'function') {\n throw new Error('\"toSJISFunc\" is not a valid function.')\n }\n\n toSJISFunction = f;\n};\n\nexports.isKanjiModeEnabled = function () {\n return typeof toSJISFunction !== 'undefined'\n};\n\nexports.toSJIS = function toSJIS (kanji) {\n return toSJISFunction(kanji)\n};\n\n},{}],21:[function(require,module,exports){\n/**\n * Check if QR Code version is valid\n *\n * @param {Number} version QR Code version\n * @return {Boolean} true if valid version, false otherwise\n */\nexports.isValid = function isValid (version) {\n return !isNaN(version) && version >= 1 && version <= 40\n};\n\n},{}],22:[function(require,module,exports){\nvar Utils = require('./utils');\nvar ECCode = require('./error-correction-code');\nvar ECLevel = require('./error-correction-level');\nvar Mode = require('./mode');\nvar VersionCheck = require('./version-check');\nvar isArray = require('isarray');\n\n// Generator polynomial used to encode version information\nvar G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0);\nvar G18_BCH = Utils.getBCHDigit(G18);\n\nfunction getBestVersionForDataLength (mode, length, errorCorrectionLevel) {\n for (var currentVersion = 1; currentVersion <= 40; currentVersion++) {\n if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, mode)) {\n return currentVersion\n }\n }\n\n return undefined\n}\n\nfunction getReservedBitsCount (mode, version) {\n // Character count indicator + mode indicator bits\n return Mode.getCharCountIndicator(mode, version) + 4\n}\n\nfunction getTotalBitsFromDataArray (segments, version) {\n var totalBits = 0;\n\n segments.forEach(function (data) {\n var reservedBits = getReservedBitsCount(data.mode, version);\n totalBits += reservedBits + data.getBitsLength();\n });\n\n return totalBits\n}\n\nfunction getBestVersionForMixedData (segments, errorCorrectionLevel) {\n for (var currentVersion = 1; currentVersion <= 40; currentVersion++) {\n var length = getTotalBitsFromDataArray(segments, currentVersion);\n if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, Mode.MIXED)) {\n return currentVersion\n }\n }\n\n return undefined\n}\n\n/**\n * Returns version number from a value.\n * If value is not a valid version, returns defaultValue\n *\n * @param {Number|String} value QR Code version\n * @param {Number} defaultValue Fallback value\n * @return {Number} QR Code version number\n */\nexports.from = function from (value, defaultValue) {\n if (VersionCheck.isValid(value)) {\n return parseInt(value, 10)\n }\n\n return defaultValue\n};\n\n/**\n * Returns how much data can be stored with the specified QR code version\n * and error correction level\n *\n * @param {Number} version QR Code version (1-40)\n * @param {Number} errorCorrectionLevel Error correction level\n * @param {Mode} mode Data mode\n * @return {Number} Quantity of storable data\n */\nexports.getCapacity = function getCapacity (version, errorCorrectionLevel, mode) {\n if (!VersionCheck.isValid(version)) {\n throw new Error('Invalid QR Code version')\n }\n\n // Use Byte mode as default\n if (typeof mode === 'undefined') mode = Mode.BYTE;\n\n // Total codewords for this QR code version (Data + Error correction)\n var totalCodewords = Utils.getSymbolTotalCodewords(version);\n\n // Total number of error correction codewords\n var ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel);\n\n // Total number of data codewords\n var dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8;\n\n if (mode === Mode.MIXED) return dataTotalCodewordsBits\n\n var usableBits = dataTotalCodewordsBits - getReservedBitsCount(mode, version);\n\n // Return max number of storable codewords\n switch (mode) {\n case Mode.NUMERIC:\n return Math.floor((usableBits / 10) * 3)\n\n case Mode.ALPHANUMERIC:\n return Math.floor((usableBits / 11) * 2)\n\n case Mode.KANJI:\n return Math.floor(usableBits / 13)\n\n case Mode.BYTE:\n default:\n return Math.floor(usableBits / 8)\n }\n};\n\n/**\n * Returns the minimum version needed to contain the amount of data\n *\n * @param {Segment} data Segment of data\n * @param {Number} [errorCorrectionLevel=H] Error correction level\n * @param {Mode} mode Data mode\n * @return {Number} QR Code version\n */\nexports.getBestVersionForData = function getBestVersionForData (data, errorCorrectionLevel) {\n var seg;\n\n var ecl = ECLevel.from(errorCorrectionLevel, ECLevel.M);\n\n if (isArray(data)) {\n if (data.length > 1) {\n return getBestVersionForMixedData(data, ecl)\n }\n\n if (data.length === 0) {\n return 1\n }\n\n seg = data[0];\n } else {\n seg = data;\n }\n\n return getBestVersionForDataLength(seg.mode, seg.getLength(), ecl)\n};\n\n/**\n * Returns version information with relative error correction bits\n *\n * The version information is included in QR Code symbols of version 7 or larger.\n * It consists of an 18-bit sequence containing 6 data bits,\n * with 12 error correction bits calculated using the (18, 6) Golay code.\n *\n * @param {Number} version QR Code version\n * @return {Number} Encoded version info bits\n */\nexports.getEncodedBits = function getEncodedBits (version) {\n if (!VersionCheck.isValid(version) || version < 7) {\n throw new Error('Invalid QR Code version')\n }\n\n var d = version << 12;\n\n while (Utils.getBCHDigit(d) - G18_BCH >= 0) {\n d ^= (G18 << (Utils.getBCHDigit(d) - G18_BCH));\n }\n\n return (version << 12) | d\n};\n\n},{\"./error-correction-code\":6,\"./error-correction-level\":7,\"./mode\":13,\"./utils\":20,\"./version-check\":21,\"isarray\":30}],23:[function(require,module,exports){\nvar canPromise = require('can-promise');\nvar QRCode = require('./core/qrcode');\nvar CanvasRenderer = require('./renderer/canvas');\nvar SvgRenderer = require('./renderer/svg-tag.js');\n\nfunction renderCanvas (renderFunc, canvas, text, opts, cb) {\n var args = [].slice.call(arguments, 1);\n var argsNum = args.length;\n var isLastArgCb = typeof args[argsNum - 1] === 'function';\n\n if (!isLastArgCb && !canPromise()) {\n throw new Error('Callback required as last argument')\n }\n\n if (isLastArgCb) {\n if (argsNum < 2) {\n throw new Error('Too few arguments provided')\n }\n\n if (argsNum === 2) {\n cb = text;\n text = canvas;\n canvas = opts = undefined;\n } else if (argsNum === 3) {\n if (canvas.getContext && typeof cb === 'undefined') {\n cb = opts;\n opts = undefined;\n } else {\n cb = opts;\n opts = text;\n text = canvas;\n canvas = undefined;\n }\n }\n } else {\n if (argsNum < 1) {\n throw new Error('Too few arguments provided')\n }\n\n if (argsNum === 1) {\n text = canvas;\n canvas = opts = undefined;\n } else if (argsNum === 2 && !canvas.getContext) {\n opts = text;\n text = canvas;\n canvas = undefined;\n }\n\n return new Promise(function (resolve, reject) {\n try {\n var data = QRCode.create(text, opts);\n resolve(renderFunc(data, canvas, opts));\n } catch (e) {\n reject(e);\n }\n })\n }\n\n try {\n var data = QRCode.create(text, opts);\n cb(null, renderFunc(data, canvas, opts));\n } catch (e) {\n cb(e);\n }\n}\n\nexports.create = QRCode.create;\nexports.toCanvas = renderCanvas.bind(null, CanvasRenderer.render);\nexports.toDataURL = renderCanvas.bind(null, CanvasRenderer.renderToDataURL);\n\n// only svg for now.\nexports.toString = renderCanvas.bind(null, function (data, _, opts) {\n return SvgRenderer.render(data, opts)\n});\n\n},{\"./core/qrcode\":16,\"./renderer/canvas\":24,\"./renderer/svg-tag.js\":25,\"can-promise\":28}],24:[function(require,module,exports){\nvar Utils = require('./utils');\n\nfunction clearCanvas (ctx, canvas, size) {\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n if (!canvas.style) canvas.style = {};\n canvas.height = size;\n canvas.width = size;\n canvas.style.height = size + 'px';\n canvas.style.width = size + 'px';\n}\n\nfunction getCanvasElement () {\n try {\n return document.createElement('canvas')\n } catch (e) {\n throw new Error('You need to specify a canvas element')\n }\n}\n\nexports.render = function render (qrData, canvas, options) {\n var opts = options;\n var canvasEl = canvas;\n\n if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {\n opts = canvas;\n canvas = undefined;\n }\n\n if (!canvas) {\n canvasEl = getCanvasElement();\n }\n\n opts = Utils.getOptions(opts);\n var size = Utils.getImageWidth(qrData.modules.size, opts);\n\n var ctx = canvasEl.getContext('2d');\n var image = ctx.createImageData(size, size);\n Utils.qrToImageData(image.data, qrData, opts);\n\n clearCanvas(ctx, canvasEl, size);\n ctx.putImageData(image, 0, 0);\n\n return canvasEl\n};\n\nexports.renderToDataURL = function renderToDataURL (qrData, canvas, options) {\n var opts = options;\n\n if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {\n opts = canvas;\n canvas = undefined;\n }\n\n if (!opts) opts = {};\n\n var canvasEl = exports.render(qrData, canvas, opts);\n\n var type = opts.type || 'image/png';\n var rendererOpts = opts.rendererOpts || {};\n\n return canvasEl.toDataURL(type, rendererOpts.quality)\n};\n\n},{\"./utils\":26}],25:[function(require,module,exports){\nvar Utils = require('./utils');\n\nfunction getColorAttrib (color, attrib) {\n var alpha = color.a / 255;\n var str = attrib + '=\"' + color.hex + '\"';\n\n return alpha < 1\n ? str + ' ' + attrib + '-opacity=\"' + alpha.toFixed(2).slice(1) + '\"'\n : str\n}\n\nfunction svgCmd (cmd, x, y) {\n var str = cmd + x;\n if (typeof y !== 'undefined') str += ' ' + y;\n\n return str\n}\n\nfunction qrToPath (data, size, margin) {\n var path = '';\n var moveBy = 0;\n var newRow = false;\n var lineLength = 0;\n\n for (var i = 0; i < data.length; i++) {\n var col = Math.floor(i % size);\n var row = Math.floor(i / size);\n\n if (!col && !newRow) newRow = true;\n\n if (data[i]) {\n lineLength++;\n\n if (!(i > 0 && col > 0 && data[i - 1])) {\n path += newRow\n ? svgCmd('M', col + margin, 0.5 + row + margin)\n : svgCmd('m', moveBy, 0);\n\n moveBy = 0;\n newRow = false;\n }\n\n if (!(col + 1 < size && data[i + 1])) {\n path += svgCmd('h', lineLength);\n lineLength = 0;\n }\n } else {\n moveBy++;\n }\n }\n\n return path\n}\n\nexports.render = function render (qrData, options, cb) {\n var opts = Utils.getOptions(options);\n var size = qrData.modules.size;\n var data = qrData.modules.data;\n var qrcodesize = size + opts.margin * 2;\n\n var bg = !opts.color.light.a\n ? ''\n : '';\n\n var path =\n '';\n\n var viewBox = 'viewBox=\"' + '0 0 ' + qrcodesize + ' ' + qrcodesize + '\"';\n\n var width = !opts.width ? '' : 'width=\"' + opts.width + '\" height=\"' + opts.width + '\" ';\n\n var svgTag = '' + bg + path + '\\n';\n\n if (typeof cb === 'function') {\n cb(null, svgTag);\n }\n\n return svgTag\n};\n\n},{\"./utils\":26}],26:[function(require,module,exports){\nfunction hex2rgba (hex) {\n if (typeof hex !== 'string') {\n throw new Error('Color should be defined as hex string')\n }\n\n var hexCode = hex.slice().replace('#', '').split('');\n if (hexCode.length < 3 || hexCode.length === 5 || hexCode.length > 8) {\n throw new Error('Invalid hex color: ' + hex)\n }\n\n // Convert from short to long form (fff -> ffffff)\n if (hexCode.length === 3 || hexCode.length === 4) {\n hexCode = Array.prototype.concat.apply([], hexCode.map(function (c) {\n return [c, c]\n }));\n }\n\n // Add default alpha value\n if (hexCode.length === 6) hexCode.push('F', 'F');\n\n var hexValue = parseInt(hexCode.join(''), 16);\n\n return {\n r: (hexValue >> 24) & 255,\n g: (hexValue >> 16) & 255,\n b: (hexValue >> 8) & 255,\n a: hexValue & 255,\n hex: '#' + hexCode.slice(0, 6).join('')\n }\n}\n\nexports.getOptions = function getOptions (options) {\n if (!options) options = {};\n if (!options.color) options.color = {};\n\n var margin = typeof options.margin === 'undefined' ||\n options.margin === null ||\n options.margin < 0 ? 4 : options.margin;\n\n var width = options.width && options.width >= 21 ? options.width : undefined;\n var scale = options.scale || 4;\n\n return {\n width: width,\n scale: width ? 4 : scale,\n margin: margin,\n color: {\n dark: hex2rgba(options.color.dark || '#000000ff'),\n light: hex2rgba(options.color.light || '#ffffffff')\n },\n type: options.type,\n rendererOpts: options.rendererOpts || {}\n }\n};\n\nexports.getScale = function getScale (qrSize, opts) {\n return opts.width && opts.width >= qrSize + opts.margin * 2\n ? opts.width / (qrSize + opts.margin * 2)\n : opts.scale\n};\n\nexports.getImageWidth = function getImageWidth (qrSize, opts) {\n var scale = exports.getScale(qrSize, opts);\n return Math.floor((qrSize + opts.margin * 2) * scale)\n};\n\nexports.qrToImageData = function qrToImageData (imgData, qr, opts) {\n var size = qr.modules.size;\n var data = qr.modules.data;\n var scale = exports.getScale(size, opts);\n var symbolSize = Math.floor((size + opts.margin * 2) * scale);\n var scaledMargin = opts.margin * scale;\n var palette = [opts.color.light, opts.color.dark];\n\n for (var i = 0; i < symbolSize; i++) {\n for (var j = 0; j < symbolSize; j++) {\n var posDst = (i * symbolSize + j) * 4;\n var pxColor = opts.color.light;\n\n if (i >= scaledMargin && j >= scaledMargin &&\n i < symbolSize - scaledMargin && j < symbolSize - scaledMargin) {\n var iSrc = Math.floor((i - scaledMargin) / scale);\n var jSrc = Math.floor((j - scaledMargin) / scale);\n pxColor = palette[data[iSrc * size + jSrc] ? 1 : 0];\n }\n\n imgData[posDst++] = pxColor.r;\n imgData[posDst++] = pxColor.g;\n imgData[posDst++] = pxColor.b;\n imgData[posDst] = pxColor.a;\n }\n }\n};\n\n},{}],27:[function(require,module,exports){\n\nvar isArray = require('isarray');\n\nfunction typedArraySupport () {\n // Can typed array instances be augmented?\n try {\n var arr = new Uint8Array(1);\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }};\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport();\n\nvar K_MAX_LENGTH = Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff;\n\nfunction Buffer (arg, offset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, offset, length)\n }\n\n if (typeof arg === 'number') {\n return allocUnsafe(this, arg)\n }\n\n return from(this, arg, offset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype;\n Buffer.__proto__ = Uint8Array;\n\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true,\n enumerable: false,\n writable: false\n });\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n\nfunction createBuffer (that, length) {\n var buf;\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n buf = new Uint8Array(length);\n buf.__proto__ = Buffer.prototype;\n } else {\n // Fallback: Return an object instance of the Buffer class\n buf = that;\n if (buf === null) {\n buf = new Buffer(length);\n }\n buf.length = length;\n }\n\n return buf\n}\n\nfunction allocUnsafe (that, size) {\n var buf = createBuffer(that, size < 0 ? 0 : checked(size) | 0);\n\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n buf[i] = 0;\n }\n }\n\n return buf\n}\n\nfunction fromString (that, string) {\n var length = byteLength(string) | 0;\n var buf = createBuffer(that, length);\n\n var actual = buf.write(string);\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual);\n }\n\n return buf\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0;\n var buf = createBuffer(that, length);\n for (var i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255;\n }\n return buf\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n var buf;\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array);\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset);\n } else {\n buf = new Uint8Array(array, byteOffset, length);\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n buf.__proto__ = Buffer.prototype;\n } else {\n // Fallback: Return an object instance of the Buffer class\n buf = fromArrayLike(that, buf);\n }\n\n return buf\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0;\n var buf = createBuffer(that, len);\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len);\n return buf\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity;\n var codePoint;\n var length = string.length;\n var leadSurrogate = null;\n var bytes = [];\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i);\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint;\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n leadSurrogate = codePoint;\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000;\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n }\n\n leadSurrogate = null;\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint);\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n );\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n );\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n );\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction byteLength (string) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string;\n }\n\n var len = string.length;\n if (len === 0) return 0\n\n return utf8ToBytes(string).length\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i];\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction from (that, value, offset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, offset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, offset)\n }\n\n return fromObject(that, value)\n}\n\nBuffer.prototype.write = function write (string, offset, length) {\n // Buffer#write(string)\n if (offset === undefined) {\n length = this.length;\n offset = 0;\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n length = this.length;\n offset = 0;\n // Buffer#write(string, offset[, length])\n } else if (isFinite(offset)) {\n offset = offset | 0;\n if (isFinite(length)) {\n length = length | 0;\n } else {\n length = undefined;\n }\n }\n\n var remaining = this.length - offset;\n if (length === undefined || length > remaining) length = remaining;\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n return utf8Write(this, string, offset, length)\n};\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length;\n start = ~~start;\n end = end === undefined ? len : ~~end;\n\n if (start < 0) {\n start += len;\n if (start < 0) start = 0;\n } else if (start > len) {\n start = len;\n }\n\n if (end < 0) {\n end += len;\n if (end < 0) end = 0;\n } else if (end > len) {\n end = len;\n }\n\n if (end < start) end = start;\n\n var newBuf;\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end);\n // Return an augmented `Uint8Array` instance\n newBuf.__proto__ = Buffer.prototype;\n } else {\n var sliceLen = end - start;\n newBuf = new Buffer(sliceLen, undefined);\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start];\n }\n }\n\n return newBuf\n};\n\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0;\n if (!end && end !== 0) end = this.length;\n if (targetStart >= target.length) targetStart = target.length;\n if (!targetStart) targetStart = 0;\n if (end > 0 && end < start) end = start;\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length;\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start;\n }\n\n var len = end - start;\n var i;\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start];\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start];\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n );\n }\n\n return len\n};\n\nBuffer.prototype.fill = function fill (val, start, end) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n start = 0;\n end = this.length;\n } else if (typeof end === 'string') {\n end = this.length;\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0);\n if (code < 256) {\n val = code;\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255;\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0;\n end = end === undefined ? this.length : end >>> 0;\n\n if (!val) val = 0;\n\n var i;\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val;\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : new Buffer(val);\n var len = bytes.length;\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len];\n }\n }\n\n return this\n};\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return createBuffer(null, 0)\n }\n\n var i;\n if (length === undefined) {\n length = 0;\n for (i = 0; i < list.length; ++i) {\n length += list[i].length;\n }\n }\n\n var buffer = allocUnsafe(null, length);\n var pos = 0;\n for (i = 0; i < list.length; ++i) {\n var buf = list[i];\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos);\n pos += buf.length;\n }\n return buffer\n};\n\nBuffer.byteLength = byteLength;\n\nBuffer.prototype._isBuffer = true;\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n};\n\nmodule.exports = Buffer;\n\n},{\"isarray\":30}],28:[function(require,module,exports){\n\nvar G = require('window-or-global');\n\nmodule.exports = function() {\n return (\n typeof G.Promise === 'function' &&\n typeof G.Promise.prototype.then === 'function'\n )\n};\n\n},{\"window-or-global\":31}],29:[function(require,module,exports){\n\n/******************************************************************************\n * Created 2008-08-19.\n *\n * Dijkstra path-finding functions. Adapted from the Dijkstar Python project.\n *\n * Copyright (C) 2008\n * Wyatt Baldwin \n * All rights reserved\n *\n * Licensed under the MIT license.\n *\n * http://www.opensource.org/licenses/mit-license.php\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n *****************************************************************************/\nvar dijkstra = {\n single_source_shortest_paths: function(graph, s, d) {\n // Predecessor map for each node that has been encountered.\n // node ID => predecessor node ID\n var predecessors = {};\n\n // Costs of shortest paths from s to all nodes encountered.\n // node ID => cost\n var costs = {};\n costs[s] = 0;\n\n // Costs of shortest paths from s to all nodes encountered; differs from\n // `costs` in that it provides easy access to the node that currently has\n // the known shortest path from s.\n // XXX: Do we actually need both `costs` and `open`?\n var open = dijkstra.PriorityQueue.make();\n open.push(s, 0);\n\n var closest,\n u, v,\n cost_of_s_to_u,\n adjacent_nodes,\n cost_of_e,\n cost_of_s_to_u_plus_cost_of_e,\n cost_of_s_to_v,\n first_visit;\n while (!open.empty()) {\n // In the nodes remaining in graph that have a known cost from s,\n // find the node, u, that currently has the shortest path from s.\n closest = open.pop();\n u = closest.value;\n cost_of_s_to_u = closest.cost;\n\n // Get nodes adjacent to u...\n adjacent_nodes = graph[u] || {};\n\n // ...and explore the edges that connect u to those nodes, updating\n // the cost of the shortest paths to any or all of those nodes as\n // necessary. v is the node across the current edge from u.\n for (v in adjacent_nodes) {\n if (adjacent_nodes.hasOwnProperty(v)) {\n // Get the cost of the edge running from u to v.\n cost_of_e = adjacent_nodes[v];\n\n // Cost of s to u plus the cost of u to v across e--this is *a*\n // cost from s to v that may or may not be less than the current\n // known cost to v.\n cost_of_s_to_u_plus_cost_of_e = cost_of_s_to_u + cost_of_e;\n\n // If we haven't visited v yet OR if the current known cost from s to\n // v is greater than the new cost we just found (cost of s to u plus\n // cost of u to v across e), update v's cost in the cost list and\n // update v's predecessor in the predecessor list (it's now u).\n cost_of_s_to_v = costs[v];\n first_visit = (typeof costs[v] === 'undefined');\n if (first_visit || cost_of_s_to_v > cost_of_s_to_u_plus_cost_of_e) {\n costs[v] = cost_of_s_to_u_plus_cost_of_e;\n open.push(v, cost_of_s_to_u_plus_cost_of_e);\n predecessors[v] = u;\n }\n }\n }\n }\n\n if (typeof d !== 'undefined' && typeof costs[d] === 'undefined') {\n var msg = ['Could not find a path from ', s, ' to ', d, '.'].join('');\n throw new Error(msg);\n }\n\n return predecessors;\n },\n\n extract_shortest_path_from_predecessor_list: function(predecessors, d) {\n var nodes = [];\n var u = d;\n var predecessor;\n while (u) {\n nodes.push(u);\n predecessor = predecessors[u];\n u = predecessors[u];\n }\n nodes.reverse();\n return nodes;\n },\n\n find_path: function(graph, s, d) {\n var predecessors = dijkstra.single_source_shortest_paths(graph, s, d);\n return dijkstra.extract_shortest_path_from_predecessor_list(\n predecessors, d);\n },\n\n /**\n * A very naive priority queue implementation.\n */\n PriorityQueue: {\n make: function (opts) {\n var T = dijkstra.PriorityQueue,\n t = {},\n key;\n opts = opts || {};\n for (key in T) {\n if (T.hasOwnProperty(key)) {\n t[key] = T[key];\n }\n }\n t.queue = [];\n t.sorter = opts.sorter || T.default_sorter;\n return t;\n },\n\n default_sorter: function (a, b) {\n return a.cost - b.cost;\n },\n\n /**\n * Add a new item to the queue and ensure the highest priority element\n * is at the front of the queue.\n */\n push: function (value, cost) {\n var item = {value: value, cost: cost};\n this.queue.push(item);\n this.queue.sort(this.sorter);\n },\n\n /**\n * Return the highest priority element in the queue.\n */\n pop: function () {\n return this.queue.shift();\n },\n\n empty: function () {\n return this.queue.length === 0;\n }\n }\n};\n\n\n// node.js module exports\nif (typeof module !== 'undefined') {\n module.exports = dijkstra;\n}\n\n},{}],30:[function(require,module,exports){\nvar toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n\n},{}],31:[function(require,module,exports){\n(function (global){\nmodule.exports = (typeof self === 'object' && self.self === self && self) ||\n (typeof global === 'object' && global.global === global && global) ||\n this;\n\n}).call(this,typeof commonjsGlobal !== \"undefined\" ? commonjsGlobal : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {});\n\n},{}]},{},[23])(23)\n});\n\n\n});\n\nvar index = {\n name: 'qrcode',\n props: {\n /**\n * The options for the QR code generator.\n * {@link https://github.com/soldair/node-qrcode#qr-code-options}\n */\n options: Object,\n\n /**\n * The tag name of the component's root element.\n */\n tag: {\n type: String,\n default: 'canvas'\n },\n\n /**\n * The value of the QR code.\n */\n value: null\n },\n render: function render(createElement) {\n return createElement(this.tag, this.$slots.default);\n },\n watch: {\n $props: {\n deep: true,\n immediate: true,\n handler: function handler() {\n if (this.$el) {\n this.generate();\n }\n }\n }\n },\n methods: {\n /**\n * Generate QR code.\n */\n generate: function generate() {\n var _this = this;\n\n var options = this.options,\n tag = this.tag;\n var value = String(this.value);\n\n if (tag === 'canvas') {\n qrcode.toCanvas(this.$el, value, options, function (error) {\n if (error) {\n throw error;\n }\n });\n } else if (tag === 'img') {\n qrcode.toDataURL(value, options, function (error, url) {\n if (error) {\n throw error;\n }\n\n _this.$el.src = url;\n });\n } else {\n qrcode.toString(value, options, function (error, string) {\n if (error) {\n throw error;\n }\n\n _this.$el.innerHTML = string;\n });\n }\n }\n },\n mounted: function mounted() {\n this.generate();\n }\n};\n\nexport default index;\n","/*!\n * Cropper.js v1.4.3\n * https://fengyuanchen.github.io/cropperjs\n *\n * Copyright 2015-present Chen Fengyuan\n * Released under the MIT license\n *\n * Date: 2018-10-24T13:07:15.032Z\n */\n\nfunction _typeof(obj) {\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n}\n\nfunction _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nvar IN_BROWSER = typeof window !== 'undefined';\nvar WINDOW = IN_BROWSER ? window : {};\nvar NAMESPACE = 'cropper'; // Actions\n\nvar ACTION_ALL = 'all';\nvar ACTION_CROP = 'crop';\nvar ACTION_MOVE = 'move';\nvar ACTION_ZOOM = 'zoom';\nvar ACTION_EAST = 'e';\nvar ACTION_WEST = 'w';\nvar ACTION_SOUTH = 's';\nvar ACTION_NORTH = 'n';\nvar ACTION_NORTH_EAST = 'ne';\nvar ACTION_NORTH_WEST = 'nw';\nvar ACTION_SOUTH_EAST = 'se';\nvar ACTION_SOUTH_WEST = 'sw'; // Classes\n\nvar CLASS_CROP = \"\".concat(NAMESPACE, \"-crop\");\nvar CLASS_DISABLED = \"\".concat(NAMESPACE, \"-disabled\");\nvar CLASS_HIDDEN = \"\".concat(NAMESPACE, \"-hidden\");\nvar CLASS_HIDE = \"\".concat(NAMESPACE, \"-hide\");\nvar CLASS_INVISIBLE = \"\".concat(NAMESPACE, \"-invisible\");\nvar CLASS_MODAL = \"\".concat(NAMESPACE, \"-modal\");\nvar CLASS_MOVE = \"\".concat(NAMESPACE, \"-move\"); // Data keys\n\nvar DATA_ACTION = \"\".concat(NAMESPACE, \"Action\");\nvar DATA_PREVIEW = \"\".concat(NAMESPACE, \"Preview\"); // Drag modes\n\nvar DRAG_MODE_CROP = 'crop';\nvar DRAG_MODE_MOVE = 'move';\nvar DRAG_MODE_NONE = 'none'; // Events\n\nvar EVENT_CROP = 'crop';\nvar EVENT_CROP_END = 'cropend';\nvar EVENT_CROP_MOVE = 'cropmove';\nvar EVENT_CROP_START = 'cropstart';\nvar EVENT_DBLCLICK = 'dblclick';\nvar EVENT_POINTER_DOWN = WINDOW.PointerEvent ? 'pointerdown' : 'touchstart mousedown';\nvar EVENT_POINTER_MOVE = WINDOW.PointerEvent ? 'pointermove' : 'touchmove mousemove';\nvar EVENT_POINTER_UP = WINDOW.PointerEvent ? 'pointerup pointercancel' : 'touchend touchcancel mouseup';\nvar EVENT_READY = 'ready';\nvar EVENT_RESIZE = 'resize';\nvar EVENT_WHEEL = 'wheel mousewheel DOMMouseScroll';\nvar EVENT_ZOOM = 'zoom'; // Mime types\n\nvar MIME_TYPE_JPEG = 'image/jpeg'; // RegExps\n\nvar REGEXP_ACTIONS = /^(?:e|w|s|n|se|sw|ne|nw|all|crop|move|zoom)$/;\nvar REGEXP_DATA_URL = /^data:/;\nvar REGEXP_DATA_URL_JPEG = /^data:image\\/jpeg;base64,/;\nvar REGEXP_TAG_NAME = /^(?:img|canvas)$/i;\n\nvar DEFAULTS = {\n // Define the view mode of the cropper\n viewMode: 0,\n // 0, 1, 2, 3\n // Define the dragging mode of the cropper\n dragMode: DRAG_MODE_CROP,\n // 'crop', 'move' or 'none'\n // Define the initial aspect ratio of the crop box\n initialAspectRatio: NaN,\n // Define the aspect ratio of the crop box\n aspectRatio: NaN,\n // An object with the previous cropping result data\n data: null,\n // A selector for adding extra containers to preview\n preview: '',\n // Re-render the cropper when resize the window\n responsive: true,\n // Restore the cropped area after resize the window\n restore: true,\n // Check if the current image is a cross-origin image\n checkCrossOrigin: true,\n // Check the current image's Exif Orientation information\n checkOrientation: true,\n // Show the black modal\n modal: true,\n // Show the dashed lines for guiding\n guides: true,\n // Show the center indicator for guiding\n center: true,\n // Show the white modal to highlight the crop box\n highlight: true,\n // Show the grid background\n background: true,\n // Enable to crop the image automatically when initialize\n autoCrop: true,\n // Define the percentage of automatic cropping area when initializes\n autoCropArea: 0.8,\n // Enable to move the image\n movable: true,\n // Enable to rotate the image\n rotatable: true,\n // Enable to scale the image\n scalable: true,\n // Enable to zoom the image\n zoomable: true,\n // Enable to zoom the image by dragging touch\n zoomOnTouch: true,\n // Enable to zoom the image by wheeling mouse\n zoomOnWheel: true,\n // Define zoom ratio when zoom the image by wheeling mouse\n wheelZoomRatio: 0.1,\n // Enable to move the crop box\n cropBoxMovable: true,\n // Enable to resize the crop box\n cropBoxResizable: true,\n // Toggle drag mode between \"crop\" and \"move\" when click twice on the cropper\n toggleDragModeOnDblclick: true,\n // Size limitation\n minCanvasWidth: 0,\n minCanvasHeight: 0,\n minCropBoxWidth: 0,\n minCropBoxHeight: 0,\n minContainerWidth: 200,\n minContainerHeight: 100,\n // Shortcuts of events\n ready: null,\n cropstart: null,\n cropmove: null,\n cropend: null,\n crop: null,\n zoom: null\n};\n\nvar TEMPLATE = '
' + '
' + '
' + '
' + '
' + '
' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '
' + '
';\n\n/**\n * Check if the given value is not a number.\n */\n\nvar isNaN = Number.isNaN || WINDOW.isNaN;\n/**\n * Check if the given value is a number.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a number, else `false`.\n */\n\nfunction isNumber(value) {\n return typeof value === 'number' && !isNaN(value);\n}\n/**\n * Check if the given value is undefined.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is undefined, else `false`.\n */\n\nfunction isUndefined(value) {\n return typeof value === 'undefined';\n}\n/**\n * Check if the given value is an object.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is an object, else `false`.\n */\n\nfunction isObject(value) {\n return _typeof(value) === 'object' && value !== null;\n}\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n/**\n * Check if the given value is a plain object.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a plain object, else `false`.\n */\n\nfunction isPlainObject(value) {\n if (!isObject(value)) {\n return false;\n }\n\n try {\n var _constructor = value.constructor;\n var prototype = _constructor.prototype;\n return _constructor && prototype && hasOwnProperty.call(prototype, 'isPrototypeOf');\n } catch (e) {\n return false;\n }\n}\n/**\n * Check if the given value is a function.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a function, else `false`.\n */\n\nfunction isFunction(value) {\n return typeof value === 'function';\n}\n/**\n * Iterate the given data.\n * @param {*} data - The data to iterate.\n * @param {Function} callback - The process function for each element.\n * @returns {*} The original data.\n */\n\nfunction forEach(data, callback) {\n if (data && isFunction(callback)) {\n if (Array.isArray(data) || isNumber(data.length)\n /* array-like */\n ) {\n var length = data.length;\n var i;\n\n for (i = 0; i < length; i += 1) {\n if (callback.call(data, data[i], i, data) === false) {\n break;\n }\n }\n } else if (isObject(data)) {\n Object.keys(data).forEach(function (key) {\n callback.call(data, data[key], key, data);\n });\n }\n }\n\n return data;\n}\n/**\n * Extend the given object.\n * @param {*} obj - The object to be extended.\n * @param {*} args - The rest objects which will be merged to the first object.\n * @returns {Object} The extended object.\n */\n\nvar assign = Object.assign || function assign(obj) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n if (isObject(obj) && args.length > 0) {\n args.forEach(function (arg) {\n if (isObject(arg)) {\n Object.keys(arg).forEach(function (key) {\n obj[key] = arg[key];\n });\n }\n });\n }\n\n return obj;\n};\nvar REGEXP_DECIMALS = /\\.\\d*(?:0|9){12}\\d*$/;\n/**\n * Normalize decimal number.\n * Check out {@link http://0.30000000000000004.com/}\n * @param {number} value - The value to normalize.\n * @param {number} [times=100000000000] - The times for normalizing.\n * @returns {number} Returns the normalized number.\n */\n\nfunction normalizeDecimalNumber(value) {\n var times = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 100000000000;\n return REGEXP_DECIMALS.test(value) ? Math.round(value * times) / times : value;\n}\nvar REGEXP_SUFFIX = /^(?:width|height|left|top|marginLeft|marginTop)$/;\n/**\n * Apply styles to the given element.\n * @param {Element} element - The target element.\n * @param {Object} styles - The styles for applying.\n */\n\nfunction setStyle(element, styles) {\n var style = element.style;\n forEach(styles, function (value, property) {\n if (REGEXP_SUFFIX.test(property) && isNumber(value)) {\n value += 'px';\n }\n\n style[property] = value;\n });\n}\n/**\n * Check if the given element has a special class.\n * @param {Element} element - The element to check.\n * @param {string} value - The class to search.\n * @returns {boolean} Returns `true` if the special class was found.\n */\n\nfunction hasClass(element, value) {\n return element.classList ? element.classList.contains(value) : element.className.indexOf(value) > -1;\n}\n/**\n * Add classes to the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be added.\n */\n\nfunction addClass(element, value) {\n if (!value) {\n return;\n }\n\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n addClass(elem, value);\n });\n return;\n }\n\n if (element.classList) {\n element.classList.add(value);\n return;\n }\n\n var className = element.className.trim();\n\n if (!className) {\n element.className = value;\n } else if (className.indexOf(value) < 0) {\n element.className = \"\".concat(className, \" \").concat(value);\n }\n}\n/**\n * Remove classes from the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be removed.\n */\n\nfunction removeClass(element, value) {\n if (!value) {\n return;\n }\n\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n removeClass(elem, value);\n });\n return;\n }\n\n if (element.classList) {\n element.classList.remove(value);\n return;\n }\n\n if (element.className.indexOf(value) >= 0) {\n element.className = element.className.replace(value, '');\n }\n}\n/**\n * Add or remove classes from the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be toggled.\n * @param {boolean} added - Add only.\n */\n\nfunction toggleClass(element, value, added) {\n if (!value) {\n return;\n }\n\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n toggleClass(elem, value, added);\n });\n return;\n } // IE10-11 doesn't support the second parameter of `classList.toggle`\n\n\n if (added) {\n addClass(element, value);\n } else {\n removeClass(element, value);\n }\n}\nvar REGEXP_HYPHENATE = /([a-z\\d])([A-Z])/g;\n/**\n * Transform the given string from camelCase to kebab-case\n * @param {string} value - The value to transform.\n * @returns {string} The transformed value.\n */\n\nfunction hyphenate(value) {\n return value.replace(REGEXP_HYPHENATE, '$1-$2').toLowerCase();\n}\n/**\n * Get data from the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to get.\n * @returns {string} The data value.\n */\n\nfunction getData(element, name) {\n if (isObject(element[name])) {\n return element[name];\n }\n\n if (element.dataset) {\n return element.dataset[name];\n }\n\n return element.getAttribute(\"data-\".concat(hyphenate(name)));\n}\n/**\n * Set data to the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to set.\n * @param {string} data - The data value.\n */\n\nfunction setData(element, name, data) {\n if (isObject(data)) {\n element[name] = data;\n } else if (element.dataset) {\n element.dataset[name] = data;\n } else {\n element.setAttribute(\"data-\".concat(hyphenate(name)), data);\n }\n}\n/**\n * Remove data from the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to remove.\n */\n\nfunction removeData(element, name) {\n if (isObject(element[name])) {\n try {\n delete element[name];\n } catch (e) {\n element[name] = undefined;\n }\n } else if (element.dataset) {\n // #128 Safari not allows to delete dataset property\n try {\n delete element.dataset[name];\n } catch (e) {\n element.dataset[name] = undefined;\n }\n } else {\n element.removeAttribute(\"data-\".concat(hyphenate(name)));\n }\n}\nvar REGEXP_SPACES = /\\s\\s*/;\n\nvar onceSupported = function () {\n var supported = false;\n\n if (IN_BROWSER) {\n var once = false;\n\n var listener = function listener() {};\n\n var options = Object.defineProperty({}, 'once', {\n get: function get() {\n supported = true;\n return once;\n },\n\n /**\n * This setter can fix a `TypeError` in strict mode\n * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Getter_only}\n * @param {boolean} value - The value to set\n */\n set: function set(value) {\n once = value;\n }\n });\n WINDOW.addEventListener('test', listener, options);\n WINDOW.removeEventListener('test', listener, options);\n }\n\n return supported;\n}();\n/**\n * Remove event listener from the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Function} listener - The event listener.\n * @param {Object} options - The event options.\n */\n\n\nfunction removeListener(element, type, listener) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var handler = listener;\n type.trim().split(REGEXP_SPACES).forEach(function (event) {\n if (!onceSupported) {\n var listeners = element.listeners;\n\n if (listeners && listeners[event] && listeners[event][listener]) {\n handler = listeners[event][listener];\n delete listeners[event][listener];\n\n if (Object.keys(listeners[event]).length === 0) {\n delete listeners[event];\n }\n\n if (Object.keys(listeners).length === 0) {\n delete element.listeners;\n }\n }\n }\n\n element.removeEventListener(event, handler, options);\n });\n}\n/**\n * Add event listener to the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Function} listener - The event listener.\n * @param {Object} options - The event options.\n */\n\nfunction addListener(element, type, listener) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var _handler = listener;\n type.trim().split(REGEXP_SPACES).forEach(function (event) {\n if (options.once && !onceSupported) {\n var _element$listeners = element.listeners,\n listeners = _element$listeners === void 0 ? {} : _element$listeners;\n\n _handler = function handler() {\n delete listeners[event][listener];\n element.removeEventListener(event, _handler, options);\n\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n listener.apply(element, args);\n };\n\n if (!listeners[event]) {\n listeners[event] = {};\n }\n\n if (listeners[event][listener]) {\n element.removeEventListener(event, listeners[event][listener], options);\n }\n\n listeners[event][listener] = _handler;\n element.listeners = listeners;\n }\n\n element.addEventListener(event, _handler, options);\n });\n}\n/**\n * Dispatch event on the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Object} data - The additional event data.\n * @returns {boolean} Indicate if the event is default prevented or not.\n */\n\nfunction dispatchEvent(element, type, data) {\n var event; // Event and CustomEvent on IE9-11 are global objects, not constructors\n\n if (isFunction(Event) && isFunction(CustomEvent)) {\n event = new CustomEvent(type, {\n detail: data,\n bubbles: true,\n cancelable: true\n });\n } else {\n event = document.createEvent('CustomEvent');\n event.initCustomEvent(type, true, true, data);\n }\n\n return element.dispatchEvent(event);\n}\n/**\n * Get the offset base on the document.\n * @param {Element} element - The target element.\n * @returns {Object} The offset data.\n */\n\nfunction getOffset(element) {\n var box = element.getBoundingClientRect();\n return {\n left: box.left + (window.pageXOffset - document.documentElement.clientLeft),\n top: box.top + (window.pageYOffset - document.documentElement.clientTop)\n };\n}\nvar location = WINDOW.location;\nvar REGEXP_ORIGINS = /^(https?:)\\/\\/([^:/?#]+):?(\\d*)/i;\n/**\n * Check if the given URL is a cross origin URL.\n * @param {string} url - The target URL.\n * @returns {boolean} Returns `true` if the given URL is a cross origin URL, else `false`.\n */\n\nfunction isCrossOriginURL(url) {\n var parts = url.match(REGEXP_ORIGINS);\n return parts && (parts[1] !== location.protocol || parts[2] !== location.hostname || parts[3] !== location.port);\n}\n/**\n * Add timestamp to the given URL.\n * @param {string} url - The target URL.\n * @returns {string} The result URL.\n */\n\nfunction addTimestamp(url) {\n var timestamp = \"timestamp=\".concat(new Date().getTime());\n return url + (url.indexOf('?') === -1 ? '?' : '&') + timestamp;\n}\n/**\n * Get transforms base on the given object.\n * @param {Object} obj - The target object.\n * @returns {string} A string contains transform values.\n */\n\nfunction getTransforms(_ref) {\n var rotate = _ref.rotate,\n scaleX = _ref.scaleX,\n scaleY = _ref.scaleY,\n translateX = _ref.translateX,\n translateY = _ref.translateY;\n var values = [];\n\n if (isNumber(translateX) && translateX !== 0) {\n values.push(\"translateX(\".concat(translateX, \"px)\"));\n }\n\n if (isNumber(translateY) && translateY !== 0) {\n values.push(\"translateY(\".concat(translateY, \"px)\"));\n } // Rotate should come first before scale to match orientation transform\n\n\n if (isNumber(rotate) && rotate !== 0) {\n values.push(\"rotate(\".concat(rotate, \"deg)\"));\n }\n\n if (isNumber(scaleX) && scaleX !== 1) {\n values.push(\"scaleX(\".concat(scaleX, \")\"));\n }\n\n if (isNumber(scaleY) && scaleY !== 1) {\n values.push(\"scaleY(\".concat(scaleY, \")\"));\n }\n\n var transform = values.length ? values.join(' ') : 'none';\n return {\n WebkitTransform: transform,\n msTransform: transform,\n transform: transform\n };\n}\n/**\n * Get the max ratio of a group of pointers.\n * @param {string} pointers - The target pointers.\n * @returns {number} The result ratio.\n */\n\nfunction getMaxZoomRatio(pointers) {\n var pointers2 = assign({}, pointers);\n var ratios = [];\n forEach(pointers, function (pointer, pointerId) {\n delete pointers2[pointerId];\n forEach(pointers2, function (pointer2) {\n var x1 = Math.abs(pointer.startX - pointer2.startX);\n var y1 = Math.abs(pointer.startY - pointer2.startY);\n var x2 = Math.abs(pointer.endX - pointer2.endX);\n var y2 = Math.abs(pointer.endY - pointer2.endY);\n var z1 = Math.sqrt(x1 * x1 + y1 * y1);\n var z2 = Math.sqrt(x2 * x2 + y2 * y2);\n var ratio = (z2 - z1) / z1;\n ratios.push(ratio);\n });\n });\n ratios.sort(function (a, b) {\n return Math.abs(a) < Math.abs(b);\n });\n return ratios[0];\n}\n/**\n * Get a pointer from an event object.\n * @param {Object} event - The target event object.\n * @param {boolean} endOnly - Indicates if only returns the end point coordinate or not.\n * @returns {Object} The result pointer contains start and/or end point coordinates.\n */\n\nfunction getPointer(_ref2, endOnly) {\n var pageX = _ref2.pageX,\n pageY = _ref2.pageY;\n var end = {\n endX: pageX,\n endY: pageY\n };\n return endOnly ? end : assign({\n startX: pageX,\n startY: pageY\n }, end);\n}\n/**\n * Get the center point coordinate of a group of pointers.\n * @param {Object} pointers - The target pointers.\n * @returns {Object} The center point coordinate.\n */\n\nfunction getPointersCenter(pointers) {\n var pageX = 0;\n var pageY = 0;\n var count = 0;\n forEach(pointers, function (_ref3) {\n var startX = _ref3.startX,\n startY = _ref3.startY;\n pageX += startX;\n pageY += startY;\n count += 1;\n });\n pageX /= count;\n pageY /= count;\n return {\n pageX: pageX,\n pageY: pageY\n };\n}\n/**\n * Check if the given value is a finite number.\n */\n\nvar isFinite = Number.isFinite || WINDOW.isFinite;\n/**\n * Get the max sizes in a rectangle under the given aspect ratio.\n * @param {Object} data - The original sizes.\n * @param {string} [type='contain'] - The adjust type.\n * @returns {Object} The result sizes.\n */\n\nfunction getAdjustedSizes(_ref4) // or 'cover'\n{\n var aspectRatio = _ref4.aspectRatio,\n height = _ref4.height,\n width = _ref4.width;\n var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'contain';\n\n var isValidNumber = function isValidNumber(value) {\n return isFinite(value) && value > 0;\n };\n\n if (isValidNumber(width) && isValidNumber(height)) {\n var adjustedWidth = height * aspectRatio;\n\n if (type === 'contain' && adjustedWidth > width || type === 'cover' && adjustedWidth < width) {\n height = width / aspectRatio;\n } else {\n width = height * aspectRatio;\n }\n } else if (isValidNumber(width)) {\n height = width / aspectRatio;\n } else if (isValidNumber(height)) {\n width = height * aspectRatio;\n }\n\n return {\n width: width,\n height: height\n };\n}\n/**\n * Get the new sizes of a rectangle after rotated.\n * @param {Object} data - The original sizes.\n * @returns {Object} The result sizes.\n */\n\nfunction getRotatedSizes(_ref5) {\n var width = _ref5.width,\n height = _ref5.height,\n degree = _ref5.degree;\n degree = Math.abs(degree) % 180;\n\n if (degree === 90) {\n return {\n width: height,\n height: width\n };\n }\n\n var arc = degree % 90 * Math.PI / 180;\n var sinArc = Math.sin(arc);\n var cosArc = Math.cos(arc);\n var newWidth = width * cosArc + height * sinArc;\n var newHeight = width * sinArc + height * cosArc;\n return degree > 90 ? {\n width: newHeight,\n height: newWidth\n } : {\n width: newWidth,\n height: newHeight\n };\n}\n/**\n * Get a canvas which drew the given image.\n * @param {HTMLImageElement} image - The image for drawing.\n * @param {Object} imageData - The image data.\n * @param {Object} canvasData - The canvas data.\n * @param {Object} options - The options.\n * @returns {HTMLCanvasElement} The result canvas.\n */\n\nfunction getSourceCanvas(image, _ref6, _ref7, _ref8) {\n var imageAspectRatio = _ref6.aspectRatio,\n imageNaturalWidth = _ref6.naturalWidth,\n imageNaturalHeight = _ref6.naturalHeight,\n _ref6$rotate = _ref6.rotate,\n rotate = _ref6$rotate === void 0 ? 0 : _ref6$rotate,\n _ref6$scaleX = _ref6.scaleX,\n scaleX = _ref6$scaleX === void 0 ? 1 : _ref6$scaleX,\n _ref6$scaleY = _ref6.scaleY,\n scaleY = _ref6$scaleY === void 0 ? 1 : _ref6$scaleY;\n var aspectRatio = _ref7.aspectRatio,\n naturalWidth = _ref7.naturalWidth,\n naturalHeight = _ref7.naturalHeight;\n var _ref8$fillColor = _ref8.fillColor,\n fillColor = _ref8$fillColor === void 0 ? 'transparent' : _ref8$fillColor,\n _ref8$imageSmoothingE = _ref8.imageSmoothingEnabled,\n imageSmoothingEnabled = _ref8$imageSmoothingE === void 0 ? true : _ref8$imageSmoothingE,\n _ref8$imageSmoothingQ = _ref8.imageSmoothingQuality,\n imageSmoothingQuality = _ref8$imageSmoothingQ === void 0 ? 'low' : _ref8$imageSmoothingQ,\n _ref8$maxWidth = _ref8.maxWidth,\n maxWidth = _ref8$maxWidth === void 0 ? Infinity : _ref8$maxWidth,\n _ref8$maxHeight = _ref8.maxHeight,\n maxHeight = _ref8$maxHeight === void 0 ? Infinity : _ref8$maxHeight,\n _ref8$minWidth = _ref8.minWidth,\n minWidth = _ref8$minWidth === void 0 ? 0 : _ref8$minWidth,\n _ref8$minHeight = _ref8.minHeight,\n minHeight = _ref8$minHeight === void 0 ? 0 : _ref8$minHeight;\n var canvas = document.createElement('canvas');\n var context = canvas.getContext('2d');\n var maxSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: maxWidth,\n height: maxHeight\n });\n var minSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: minWidth,\n height: minHeight\n }, 'cover');\n var width = Math.min(maxSizes.width, Math.max(minSizes.width, naturalWidth));\n var height = Math.min(maxSizes.height, Math.max(minSizes.height, naturalHeight)); // Note: should always use image's natural sizes for drawing as\n // imageData.naturalWidth === canvasData.naturalHeight when rotate % 180 === 90\n\n var destMaxSizes = getAdjustedSizes({\n aspectRatio: imageAspectRatio,\n width: maxWidth,\n height: maxHeight\n });\n var destMinSizes = getAdjustedSizes({\n aspectRatio: imageAspectRatio,\n width: minWidth,\n height: minHeight\n }, 'cover');\n var destWidth = Math.min(destMaxSizes.width, Math.max(destMinSizes.width, imageNaturalWidth));\n var destHeight = Math.min(destMaxSizes.height, Math.max(destMinSizes.height, imageNaturalHeight));\n var params = [-destWidth / 2, -destHeight / 2, destWidth, destHeight];\n canvas.width = normalizeDecimalNumber(width);\n canvas.height = normalizeDecimalNumber(height);\n context.fillStyle = fillColor;\n context.fillRect(0, 0, width, height);\n context.save();\n context.translate(width / 2, height / 2);\n context.rotate(rotate * Math.PI / 180);\n context.scale(scaleX, scaleY);\n context.imageSmoothingEnabled = imageSmoothingEnabled;\n context.imageSmoothingQuality = imageSmoothingQuality;\n context.drawImage.apply(context, [image].concat(_toConsumableArray(params.map(function (param) {\n return Math.floor(normalizeDecimalNumber(param));\n }))));\n context.restore();\n return canvas;\n}\nvar fromCharCode = String.fromCharCode;\n/**\n * Get string from char code in data view.\n * @param {DataView} dataView - The data view for read.\n * @param {number} start - The start index.\n * @param {number} length - The read length.\n * @returns {string} The read result.\n */\n\nfunction getStringFromCharCode(dataView, start, length) {\n var str = '';\n var i;\n length += start;\n\n for (i = start; i < length; i += 1) {\n str += fromCharCode(dataView.getUint8(i));\n }\n\n return str;\n}\nvar REGEXP_DATA_URL_HEAD = /^data:.*,/;\n/**\n * Transform Data URL to array buffer.\n * @param {string} dataURL - The Data URL to transform.\n * @returns {ArrayBuffer} The result array buffer.\n */\n\nfunction dataURLToArrayBuffer(dataURL) {\n var base64 = dataURL.replace(REGEXP_DATA_URL_HEAD, '');\n var binary = atob(base64);\n var arrayBuffer = new ArrayBuffer(binary.length);\n var uint8 = new Uint8Array(arrayBuffer);\n forEach(uint8, function (value, i) {\n uint8[i] = binary.charCodeAt(i);\n });\n return arrayBuffer;\n}\n/**\n * Transform array buffer to Data URL.\n * @param {ArrayBuffer} arrayBuffer - The array buffer to transform.\n * @param {string} mimeType - The mime type of the Data URL.\n * @returns {string} The result Data URL.\n */\n\nfunction arrayBufferToDataURL(arrayBuffer, mimeType) {\n var chunks = [];\n var chunkSize = 8192;\n var uint8 = new Uint8Array(arrayBuffer);\n\n while (uint8.length > 0) {\n chunks.push(fromCharCode.apply(void 0, _toConsumableArray(uint8.subarray(0, chunkSize))));\n uint8 = uint8.subarray(chunkSize);\n }\n\n return \"data:\".concat(mimeType, \";base64,\").concat(btoa(chunks.join('')));\n}\n/**\n * Get orientation value from given array buffer.\n * @param {ArrayBuffer} arrayBuffer - The array buffer to read.\n * @returns {number} The read orientation value.\n */\n\nfunction resetAndGetOrientation(arrayBuffer) {\n var dataView = new DataView(arrayBuffer);\n var orientation; // Ignores range error when the image does not have correct Exif information\n\n try {\n var littleEndian;\n var app1Start;\n var ifdStart; // Only handle JPEG image (start by 0xFFD8)\n\n if (dataView.getUint8(0) === 0xFF && dataView.getUint8(1) === 0xD8) {\n var length = dataView.byteLength;\n var offset = 2;\n\n while (offset + 1 < length) {\n if (dataView.getUint8(offset) === 0xFF && dataView.getUint8(offset + 1) === 0xE1) {\n app1Start = offset;\n break;\n }\n\n offset += 1;\n }\n }\n\n if (app1Start) {\n var exifIDCode = app1Start + 4;\n var tiffOffset = app1Start + 10;\n\n if (getStringFromCharCode(dataView, exifIDCode, 4) === 'Exif') {\n var endianness = dataView.getUint16(tiffOffset);\n littleEndian = endianness === 0x4949;\n\n if (littleEndian || endianness === 0x4D4D\n /* bigEndian */\n ) {\n if (dataView.getUint16(tiffOffset + 2, littleEndian) === 0x002A) {\n var firstIFDOffset = dataView.getUint32(tiffOffset + 4, littleEndian);\n\n if (firstIFDOffset >= 0x00000008) {\n ifdStart = tiffOffset + firstIFDOffset;\n }\n }\n }\n }\n }\n\n if (ifdStart) {\n var _length = dataView.getUint16(ifdStart, littleEndian);\n\n var _offset;\n\n var i;\n\n for (i = 0; i < _length; i += 1) {\n _offset = ifdStart + i * 12 + 2;\n\n if (dataView.getUint16(_offset, littleEndian) === 0x0112\n /* Orientation */\n ) {\n // 8 is the offset of the current tag's value\n _offset += 8; // Get the original orientation value\n\n orientation = dataView.getUint16(_offset, littleEndian); // Override the orientation with its default value\n\n dataView.setUint16(_offset, 1, littleEndian);\n break;\n }\n }\n }\n } catch (e) {\n orientation = 1;\n }\n\n return orientation;\n}\n/**\n * Parse Exif Orientation value.\n * @param {number} orientation - The orientation to parse.\n * @returns {Object} The parsed result.\n */\n\nfunction parseOrientation(orientation) {\n var rotate = 0;\n var scaleX = 1;\n var scaleY = 1;\n\n switch (orientation) {\n // Flip horizontal\n case 2:\n scaleX = -1;\n break;\n // Rotate left 180°\n\n case 3:\n rotate = -180;\n break;\n // Flip vertical\n\n case 4:\n scaleY = -1;\n break;\n // Flip vertical and rotate right 90°\n\n case 5:\n rotate = 90;\n scaleY = -1;\n break;\n // Rotate right 90°\n\n case 6:\n rotate = 90;\n break;\n // Flip horizontal and rotate right 90°\n\n case 7:\n rotate = 90;\n scaleX = -1;\n break;\n // Rotate left 90°\n\n case 8:\n rotate = -90;\n break;\n\n default:\n }\n\n return {\n rotate: rotate,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n\nvar render = {\n render: function render() {\n this.initContainer();\n this.initCanvas();\n this.initCropBox();\n this.renderCanvas();\n\n if (this.cropped) {\n this.renderCropBox();\n }\n },\n initContainer: function initContainer() {\n var element = this.element,\n options = this.options,\n container = this.container,\n cropper = this.cropper;\n addClass(cropper, CLASS_HIDDEN);\n removeClass(element, CLASS_HIDDEN);\n var containerData = {\n width: Math.max(container.offsetWidth, Number(options.minContainerWidth) || 200),\n height: Math.max(container.offsetHeight, Number(options.minContainerHeight) || 100)\n };\n this.containerData = containerData;\n setStyle(cropper, {\n width: containerData.width,\n height: containerData.height\n });\n addClass(element, CLASS_HIDDEN);\n removeClass(cropper, CLASS_HIDDEN);\n },\n // Canvas (image wrapper)\n initCanvas: function initCanvas() {\n var containerData = this.containerData,\n imageData = this.imageData;\n var viewMode = this.options.viewMode;\n var rotated = Math.abs(imageData.rotate) % 180 === 90;\n var naturalWidth = rotated ? imageData.naturalHeight : imageData.naturalWidth;\n var naturalHeight = rotated ? imageData.naturalWidth : imageData.naturalHeight;\n var aspectRatio = naturalWidth / naturalHeight;\n var canvasWidth = containerData.width;\n var canvasHeight = containerData.height;\n\n if (containerData.height * aspectRatio > containerData.width) {\n if (viewMode === 3) {\n canvasWidth = containerData.height * aspectRatio;\n } else {\n canvasHeight = containerData.width / aspectRatio;\n }\n } else if (viewMode === 3) {\n canvasHeight = containerData.width / aspectRatio;\n } else {\n canvasWidth = containerData.height * aspectRatio;\n }\n\n var canvasData = {\n aspectRatio: aspectRatio,\n naturalWidth: naturalWidth,\n naturalHeight: naturalHeight,\n width: canvasWidth,\n height: canvasHeight\n };\n canvasData.left = (containerData.width - canvasWidth) / 2;\n canvasData.top = (containerData.height - canvasHeight) / 2;\n canvasData.oldLeft = canvasData.left;\n canvasData.oldTop = canvasData.top;\n this.canvasData = canvasData;\n this.limited = viewMode === 1 || viewMode === 2;\n this.limitCanvas(true, true);\n this.initialImageData = assign({}, imageData);\n this.initialCanvasData = assign({}, canvasData);\n },\n limitCanvas: function limitCanvas(sizeLimited, positionLimited) {\n var options = this.options,\n containerData = this.containerData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var viewMode = options.viewMode;\n var aspectRatio = canvasData.aspectRatio;\n var cropped = this.cropped && cropBoxData;\n\n if (sizeLimited) {\n var minCanvasWidth = Number(options.minCanvasWidth) || 0;\n var minCanvasHeight = Number(options.minCanvasHeight) || 0;\n\n if (viewMode > 1) {\n minCanvasWidth = Math.max(minCanvasWidth, containerData.width);\n minCanvasHeight = Math.max(minCanvasHeight, containerData.height);\n\n if (viewMode === 3) {\n if (minCanvasHeight * aspectRatio > minCanvasWidth) {\n minCanvasWidth = minCanvasHeight * aspectRatio;\n } else {\n minCanvasHeight = minCanvasWidth / aspectRatio;\n }\n }\n } else if (viewMode > 0) {\n if (minCanvasWidth) {\n minCanvasWidth = Math.max(minCanvasWidth, cropped ? cropBoxData.width : 0);\n } else if (minCanvasHeight) {\n minCanvasHeight = Math.max(minCanvasHeight, cropped ? cropBoxData.height : 0);\n } else if (cropped) {\n minCanvasWidth = cropBoxData.width;\n minCanvasHeight = cropBoxData.height;\n\n if (minCanvasHeight * aspectRatio > minCanvasWidth) {\n minCanvasWidth = minCanvasHeight * aspectRatio;\n } else {\n minCanvasHeight = minCanvasWidth / aspectRatio;\n }\n }\n }\n\n var _getAdjustedSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: minCanvasWidth,\n height: minCanvasHeight\n });\n\n minCanvasWidth = _getAdjustedSizes.width;\n minCanvasHeight = _getAdjustedSizes.height;\n canvasData.minWidth = minCanvasWidth;\n canvasData.minHeight = minCanvasHeight;\n canvasData.maxWidth = Infinity;\n canvasData.maxHeight = Infinity;\n }\n\n if (positionLimited) {\n if (viewMode > (cropped ? 0 : 1)) {\n var newCanvasLeft = containerData.width - canvasData.width;\n var newCanvasTop = containerData.height - canvasData.height;\n canvasData.minLeft = Math.min(0, newCanvasLeft);\n canvasData.minTop = Math.min(0, newCanvasTop);\n canvasData.maxLeft = Math.max(0, newCanvasLeft);\n canvasData.maxTop = Math.max(0, newCanvasTop);\n\n if (cropped && this.limited) {\n canvasData.minLeft = Math.min(cropBoxData.left, cropBoxData.left + (cropBoxData.width - canvasData.width));\n canvasData.minTop = Math.min(cropBoxData.top, cropBoxData.top + (cropBoxData.height - canvasData.height));\n canvasData.maxLeft = cropBoxData.left;\n canvasData.maxTop = cropBoxData.top;\n\n if (viewMode === 2) {\n if (canvasData.width >= containerData.width) {\n canvasData.minLeft = Math.min(0, newCanvasLeft);\n canvasData.maxLeft = Math.max(0, newCanvasLeft);\n }\n\n if (canvasData.height >= containerData.height) {\n canvasData.minTop = Math.min(0, newCanvasTop);\n canvasData.maxTop = Math.max(0, newCanvasTop);\n }\n }\n }\n } else {\n canvasData.minLeft = -canvasData.width;\n canvasData.minTop = -canvasData.height;\n canvasData.maxLeft = containerData.width;\n canvasData.maxTop = containerData.height;\n }\n }\n },\n renderCanvas: function renderCanvas(changed, transformed) {\n var canvasData = this.canvasData,\n imageData = this.imageData;\n\n if (transformed) {\n var _getRotatedSizes = getRotatedSizes({\n width: imageData.naturalWidth * Math.abs(imageData.scaleX || 1),\n height: imageData.naturalHeight * Math.abs(imageData.scaleY || 1),\n degree: imageData.rotate || 0\n }),\n naturalWidth = _getRotatedSizes.width,\n naturalHeight = _getRotatedSizes.height;\n\n var width = canvasData.width * (naturalWidth / canvasData.naturalWidth);\n var height = canvasData.height * (naturalHeight / canvasData.naturalHeight);\n canvasData.left -= (width - canvasData.width) / 2;\n canvasData.top -= (height - canvasData.height) / 2;\n canvasData.width = width;\n canvasData.height = height;\n canvasData.aspectRatio = naturalWidth / naturalHeight;\n canvasData.naturalWidth = naturalWidth;\n canvasData.naturalHeight = naturalHeight;\n this.limitCanvas(true, false);\n }\n\n if (canvasData.width > canvasData.maxWidth || canvasData.width < canvasData.minWidth) {\n canvasData.left = canvasData.oldLeft;\n }\n\n if (canvasData.height > canvasData.maxHeight || canvasData.height < canvasData.minHeight) {\n canvasData.top = canvasData.oldTop;\n }\n\n canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth);\n canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight);\n this.limitCanvas(false, true);\n canvasData.left = Math.min(Math.max(canvasData.left, canvasData.minLeft), canvasData.maxLeft);\n canvasData.top = Math.min(Math.max(canvasData.top, canvasData.minTop), canvasData.maxTop);\n canvasData.oldLeft = canvasData.left;\n canvasData.oldTop = canvasData.top;\n setStyle(this.canvas, assign({\n width: canvasData.width,\n height: canvasData.height\n }, getTransforms({\n translateX: canvasData.left,\n translateY: canvasData.top\n })));\n this.renderImage(changed);\n\n if (this.cropped && this.limited) {\n this.limitCropBox(true, true);\n }\n },\n renderImage: function renderImage(changed) {\n var canvasData = this.canvasData,\n imageData = this.imageData;\n var width = imageData.naturalWidth * (canvasData.width / canvasData.naturalWidth);\n var height = imageData.naturalHeight * (canvasData.height / canvasData.naturalHeight);\n assign(imageData, {\n width: width,\n height: height,\n left: (canvasData.width - width) / 2,\n top: (canvasData.height - height) / 2\n });\n setStyle(this.image, assign({\n width: imageData.width,\n height: imageData.height\n }, getTransforms(assign({\n translateX: imageData.left,\n translateY: imageData.top\n }, imageData))));\n\n if (changed) {\n this.output();\n }\n },\n initCropBox: function initCropBox() {\n var options = this.options,\n canvasData = this.canvasData;\n var aspectRatio = options.aspectRatio || options.initialAspectRatio;\n var autoCropArea = Number(options.autoCropArea) || 0.8;\n var cropBoxData = {\n width: canvasData.width,\n height: canvasData.height\n };\n\n if (aspectRatio) {\n if (canvasData.height * aspectRatio > canvasData.width) {\n cropBoxData.height = cropBoxData.width / aspectRatio;\n } else {\n cropBoxData.width = cropBoxData.height * aspectRatio;\n }\n }\n\n this.cropBoxData = cropBoxData;\n this.limitCropBox(true, true); // Initialize auto crop area\n\n cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth);\n cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight); // The width/height of auto crop area must large than \"minWidth/Height\"\n\n cropBoxData.width = Math.max(cropBoxData.minWidth, cropBoxData.width * autoCropArea);\n cropBoxData.height = Math.max(cropBoxData.minHeight, cropBoxData.height * autoCropArea);\n cropBoxData.left = canvasData.left + (canvasData.width - cropBoxData.width) / 2;\n cropBoxData.top = canvasData.top + (canvasData.height - cropBoxData.height) / 2;\n cropBoxData.oldLeft = cropBoxData.left;\n cropBoxData.oldTop = cropBoxData.top;\n this.initialCropBoxData = assign({}, cropBoxData);\n },\n limitCropBox: function limitCropBox(sizeLimited, positionLimited) {\n var options = this.options,\n containerData = this.containerData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData,\n limited = this.limited;\n var aspectRatio = options.aspectRatio;\n\n if (sizeLimited) {\n var minCropBoxWidth = Number(options.minCropBoxWidth) || 0;\n var minCropBoxHeight = Number(options.minCropBoxHeight) || 0;\n var maxCropBoxWidth = limited ? Math.min(containerData.width, canvasData.width, canvasData.width + canvasData.left, containerData.width - canvasData.left) : containerData.width;\n var maxCropBoxHeight = limited ? Math.min(containerData.height, canvasData.height, canvasData.height + canvasData.top, containerData.height - canvasData.top) : containerData.height; // The min/maxCropBoxWidth/Height must be less than container's width/height\n\n minCropBoxWidth = Math.min(minCropBoxWidth, containerData.width);\n minCropBoxHeight = Math.min(minCropBoxHeight, containerData.height);\n\n if (aspectRatio) {\n if (minCropBoxWidth && minCropBoxHeight) {\n if (minCropBoxHeight * aspectRatio > minCropBoxWidth) {\n minCropBoxHeight = minCropBoxWidth / aspectRatio;\n } else {\n minCropBoxWidth = minCropBoxHeight * aspectRatio;\n }\n } else if (minCropBoxWidth) {\n minCropBoxHeight = minCropBoxWidth / aspectRatio;\n } else if (minCropBoxHeight) {\n minCropBoxWidth = minCropBoxHeight * aspectRatio;\n }\n\n if (maxCropBoxHeight * aspectRatio > maxCropBoxWidth) {\n maxCropBoxHeight = maxCropBoxWidth / aspectRatio;\n } else {\n maxCropBoxWidth = maxCropBoxHeight * aspectRatio;\n }\n } // The minWidth/Height must be less than maxWidth/Height\n\n\n cropBoxData.minWidth = Math.min(minCropBoxWidth, maxCropBoxWidth);\n cropBoxData.minHeight = Math.min(minCropBoxHeight, maxCropBoxHeight);\n cropBoxData.maxWidth = maxCropBoxWidth;\n cropBoxData.maxHeight = maxCropBoxHeight;\n }\n\n if (positionLimited) {\n if (limited) {\n cropBoxData.minLeft = Math.max(0, canvasData.left);\n cropBoxData.minTop = Math.max(0, canvasData.top);\n cropBoxData.maxLeft = Math.min(containerData.width, canvasData.left + canvasData.width) - cropBoxData.width;\n cropBoxData.maxTop = Math.min(containerData.height, canvasData.top + canvasData.height) - cropBoxData.height;\n } else {\n cropBoxData.minLeft = 0;\n cropBoxData.minTop = 0;\n cropBoxData.maxLeft = containerData.width - cropBoxData.width;\n cropBoxData.maxTop = containerData.height - cropBoxData.height;\n }\n }\n },\n renderCropBox: function renderCropBox() {\n var options = this.options,\n containerData = this.containerData,\n cropBoxData = this.cropBoxData;\n\n if (cropBoxData.width > cropBoxData.maxWidth || cropBoxData.width < cropBoxData.minWidth) {\n cropBoxData.left = cropBoxData.oldLeft;\n }\n\n if (cropBoxData.height > cropBoxData.maxHeight || cropBoxData.height < cropBoxData.minHeight) {\n cropBoxData.top = cropBoxData.oldTop;\n }\n\n cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth);\n cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight);\n this.limitCropBox(false, true);\n cropBoxData.left = Math.min(Math.max(cropBoxData.left, cropBoxData.minLeft), cropBoxData.maxLeft);\n cropBoxData.top = Math.min(Math.max(cropBoxData.top, cropBoxData.minTop), cropBoxData.maxTop);\n cropBoxData.oldLeft = cropBoxData.left;\n cropBoxData.oldTop = cropBoxData.top;\n\n if (options.movable && options.cropBoxMovable) {\n // Turn to move the canvas when the crop box is equal to the container\n setData(this.face, DATA_ACTION, cropBoxData.width >= containerData.width && cropBoxData.height >= containerData.height ? ACTION_MOVE : ACTION_ALL);\n }\n\n setStyle(this.cropBox, assign({\n width: cropBoxData.width,\n height: cropBoxData.height\n }, getTransforms({\n translateX: cropBoxData.left,\n translateY: cropBoxData.top\n })));\n\n if (this.cropped && this.limited) {\n this.limitCanvas(true, true);\n }\n\n if (!this.disabled) {\n this.output();\n }\n },\n output: function output() {\n this.preview();\n dispatchEvent(this.element, EVENT_CROP, this.getData());\n }\n};\n\nvar preview = {\n initPreview: function initPreview() {\n var crossOrigin = this.crossOrigin;\n var preview = this.options.preview;\n var url = crossOrigin ? this.crossOriginUrl : this.url;\n var image = document.createElement('img');\n\n if (crossOrigin) {\n image.crossOrigin = crossOrigin;\n }\n\n image.src = url;\n this.viewBox.appendChild(image);\n this.viewBoxImage = image;\n\n if (!preview) {\n return;\n }\n\n var previews = preview;\n\n if (typeof preview === 'string') {\n previews = this.element.ownerDocument.querySelectorAll(preview);\n } else if (preview.querySelector) {\n previews = [preview];\n }\n\n this.previews = previews;\n forEach(previews, function (el) {\n var img = document.createElement('img'); // Save the original size for recover\n\n setData(el, DATA_PREVIEW, {\n width: el.offsetWidth,\n height: el.offsetHeight,\n html: el.innerHTML\n });\n\n if (crossOrigin) {\n img.crossOrigin = crossOrigin;\n }\n\n img.src = url;\n /**\n * Override img element styles\n * Add `display:block` to avoid margin top issue\n * Add `height:auto` to override `height` attribute on IE8\n * (Occur only when margin-top <= -height)\n */\n\n img.style.cssText = 'display:block;' + 'width:100%;' + 'height:auto;' + 'min-width:0!important;' + 'min-height:0!important;' + 'max-width:none!important;' + 'max-height:none!important;' + 'image-orientation:0deg!important;\"';\n el.innerHTML = '';\n el.appendChild(img);\n });\n },\n resetPreview: function resetPreview() {\n forEach(this.previews, function (element) {\n var data = getData(element, DATA_PREVIEW);\n setStyle(element, {\n width: data.width,\n height: data.height\n });\n element.innerHTML = data.html;\n removeData(element, DATA_PREVIEW);\n });\n },\n preview: function preview() {\n var imageData = this.imageData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var cropBoxWidth = cropBoxData.width,\n cropBoxHeight = cropBoxData.height;\n var width = imageData.width,\n height = imageData.height;\n var left = cropBoxData.left - canvasData.left - imageData.left;\n var top = cropBoxData.top - canvasData.top - imageData.top;\n\n if (!this.cropped || this.disabled) {\n return;\n }\n\n setStyle(this.viewBoxImage, assign({\n width: width,\n height: height\n }, getTransforms(assign({\n translateX: -left,\n translateY: -top\n }, imageData))));\n forEach(this.previews, function (element) {\n var data = getData(element, DATA_PREVIEW);\n var originalWidth = data.width;\n var originalHeight = data.height;\n var newWidth = originalWidth;\n var newHeight = originalHeight;\n var ratio = 1;\n\n if (cropBoxWidth) {\n ratio = originalWidth / cropBoxWidth;\n newHeight = cropBoxHeight * ratio;\n }\n\n if (cropBoxHeight && newHeight > originalHeight) {\n ratio = originalHeight / cropBoxHeight;\n newWidth = cropBoxWidth * ratio;\n newHeight = originalHeight;\n }\n\n setStyle(element, {\n width: newWidth,\n height: newHeight\n });\n setStyle(element.getElementsByTagName('img')[0], assign({\n width: width * ratio,\n height: height * ratio\n }, getTransforms(assign({\n translateX: -left * ratio,\n translateY: -top * ratio\n }, imageData))));\n });\n }\n};\n\nvar events = {\n bind: function bind() {\n var element = this.element,\n options = this.options,\n cropper = this.cropper;\n\n if (isFunction(options.cropstart)) {\n addListener(element, EVENT_CROP_START, options.cropstart);\n }\n\n if (isFunction(options.cropmove)) {\n addListener(element, EVENT_CROP_MOVE, options.cropmove);\n }\n\n if (isFunction(options.cropend)) {\n addListener(element, EVENT_CROP_END, options.cropend);\n }\n\n if (isFunction(options.crop)) {\n addListener(element, EVENT_CROP, options.crop);\n }\n\n if (isFunction(options.zoom)) {\n addListener(element, EVENT_ZOOM, options.zoom);\n }\n\n addListener(cropper, EVENT_POINTER_DOWN, this.onCropStart = this.cropStart.bind(this));\n\n if (options.zoomable && options.zoomOnWheel) {\n addListener(cropper, EVENT_WHEEL, this.onWheel = this.wheel.bind(this));\n }\n\n if (options.toggleDragModeOnDblclick) {\n addListener(cropper, EVENT_DBLCLICK, this.onDblclick = this.dblclick.bind(this));\n }\n\n addListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove = this.cropMove.bind(this));\n addListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd = this.cropEnd.bind(this));\n\n if (options.responsive) {\n addListener(window, EVENT_RESIZE, this.onResize = this.resize.bind(this));\n }\n },\n unbind: function unbind() {\n var element = this.element,\n options = this.options,\n cropper = this.cropper;\n\n if (isFunction(options.cropstart)) {\n removeListener(element, EVENT_CROP_START, options.cropstart);\n }\n\n if (isFunction(options.cropmove)) {\n removeListener(element, EVENT_CROP_MOVE, options.cropmove);\n }\n\n if (isFunction(options.cropend)) {\n removeListener(element, EVENT_CROP_END, options.cropend);\n }\n\n if (isFunction(options.crop)) {\n removeListener(element, EVENT_CROP, options.crop);\n }\n\n if (isFunction(options.zoom)) {\n removeListener(element, EVENT_ZOOM, options.zoom);\n }\n\n removeListener(cropper, EVENT_POINTER_DOWN, this.onCropStart);\n\n if (options.zoomable && options.zoomOnWheel) {\n removeListener(cropper, EVENT_WHEEL, this.onWheel);\n }\n\n if (options.toggleDragModeOnDblclick) {\n removeListener(cropper, EVENT_DBLCLICK, this.onDblclick);\n }\n\n removeListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove);\n removeListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd);\n\n if (options.responsive) {\n removeListener(window, EVENT_RESIZE, this.onResize);\n }\n }\n};\n\nvar handlers = {\n resize: function resize() {\n var options = this.options,\n container = this.container,\n containerData = this.containerData;\n var minContainerWidth = Number(options.minContainerWidth) || 200;\n var minContainerHeight = Number(options.minContainerHeight) || 100;\n\n if (this.disabled || containerData.width <= minContainerWidth || containerData.height <= minContainerHeight) {\n return;\n }\n\n var ratio = container.offsetWidth / containerData.width; // Resize when width changed or height changed\n\n if (ratio !== 1 || container.offsetHeight !== containerData.height) {\n var canvasData;\n var cropBoxData;\n\n if (options.restore) {\n canvasData = this.getCanvasData();\n cropBoxData = this.getCropBoxData();\n }\n\n this.render();\n\n if (options.restore) {\n this.setCanvasData(forEach(canvasData, function (n, i) {\n canvasData[i] = n * ratio;\n }));\n this.setCropBoxData(forEach(cropBoxData, function (n, i) {\n cropBoxData[i] = n * ratio;\n }));\n }\n }\n },\n dblclick: function dblclick() {\n if (this.disabled || this.options.dragMode === DRAG_MODE_NONE) {\n return;\n }\n\n this.setDragMode(hasClass(this.dragBox, CLASS_CROP) ? DRAG_MODE_MOVE : DRAG_MODE_CROP);\n },\n wheel: function wheel(e) {\n var _this = this;\n\n var ratio = Number(this.options.wheelZoomRatio) || 0.1;\n var delta = 1;\n\n if (this.disabled) {\n return;\n }\n\n e.preventDefault(); // Limit wheel speed to prevent zoom too fast (#21)\n\n if (this.wheeling) {\n return;\n }\n\n this.wheeling = true;\n setTimeout(function () {\n _this.wheeling = false;\n }, 50);\n\n if (e.deltaY) {\n delta = e.deltaY > 0 ? 1 : -1;\n } else if (e.wheelDelta) {\n delta = -e.wheelDelta / 120;\n } else if (e.detail) {\n delta = e.detail > 0 ? 1 : -1;\n }\n\n this.zoom(-delta * ratio, e);\n },\n cropStart: function cropStart(e) {\n if (this.disabled) {\n return;\n }\n\n var options = this.options,\n pointers = this.pointers;\n var action;\n\n if (e.changedTouches) {\n // Handle touch event\n forEach(e.changedTouches, function (touch) {\n pointers[touch.identifier] = getPointer(touch);\n });\n } else {\n // Handle mouse event and pointer event\n pointers[e.pointerId || 0] = getPointer(e);\n }\n\n if (Object.keys(pointers).length > 1 && options.zoomable && options.zoomOnTouch) {\n action = ACTION_ZOOM;\n } else {\n action = getData(e.target, DATA_ACTION);\n }\n\n if (!REGEXP_ACTIONS.test(action)) {\n return;\n }\n\n if (dispatchEvent(this.element, EVENT_CROP_START, {\n originalEvent: e,\n action: action\n }) === false) {\n return;\n } // This line is required for preventing page zooming in iOS browsers\n\n\n e.preventDefault();\n this.action = action;\n this.cropping = false;\n\n if (action === ACTION_CROP) {\n this.cropping = true;\n addClass(this.dragBox, CLASS_MODAL);\n }\n },\n cropMove: function cropMove(e) {\n var action = this.action;\n\n if (this.disabled || !action) {\n return;\n }\n\n var pointers = this.pointers;\n e.preventDefault();\n\n if (dispatchEvent(this.element, EVENT_CROP_MOVE, {\n originalEvent: e,\n action: action\n }) === false) {\n return;\n }\n\n if (e.changedTouches) {\n forEach(e.changedTouches, function (touch) {\n // The first parameter should not be undefined (#432)\n assign(pointers[touch.identifier] || {}, getPointer(touch, true));\n });\n } else {\n assign(pointers[e.pointerId || 0] || {}, getPointer(e, true));\n }\n\n this.change(e);\n },\n cropEnd: function cropEnd(e) {\n if (this.disabled) {\n return;\n }\n\n var action = this.action,\n pointers = this.pointers;\n\n if (e.changedTouches) {\n forEach(e.changedTouches, function (touch) {\n delete pointers[touch.identifier];\n });\n } else {\n delete pointers[e.pointerId || 0];\n }\n\n if (!action) {\n return;\n }\n\n e.preventDefault();\n\n if (!Object.keys(pointers).length) {\n this.action = '';\n }\n\n if (this.cropping) {\n this.cropping = false;\n toggleClass(this.dragBox, CLASS_MODAL, this.cropped && this.options.modal);\n }\n\n dispatchEvent(this.element, EVENT_CROP_END, {\n originalEvent: e,\n action: action\n });\n }\n};\n\nvar change = {\n change: function change(e) {\n var options = this.options,\n canvasData = this.canvasData,\n containerData = this.containerData,\n cropBoxData = this.cropBoxData,\n pointers = this.pointers;\n var action = this.action;\n var aspectRatio = options.aspectRatio;\n var left = cropBoxData.left,\n top = cropBoxData.top,\n width = cropBoxData.width,\n height = cropBoxData.height;\n var right = left + width;\n var bottom = top + height;\n var minLeft = 0;\n var minTop = 0;\n var maxWidth = containerData.width;\n var maxHeight = containerData.height;\n var renderable = true;\n var offset; // Locking aspect ratio in \"free mode\" by holding shift key\n\n if (!aspectRatio && e.shiftKey) {\n aspectRatio = width && height ? width / height : 1;\n }\n\n if (this.limited) {\n minLeft = cropBoxData.minLeft;\n minTop = cropBoxData.minTop;\n maxWidth = minLeft + Math.min(containerData.width, canvasData.width, canvasData.left + canvasData.width);\n maxHeight = minTop + Math.min(containerData.height, canvasData.height, canvasData.top + canvasData.height);\n }\n\n var pointer = pointers[Object.keys(pointers)[0]];\n var range = {\n x: pointer.endX - pointer.startX,\n y: pointer.endY - pointer.startY\n };\n\n var check = function check(side) {\n switch (side) {\n case ACTION_EAST:\n if (right + range.x > maxWidth) {\n range.x = maxWidth - right;\n }\n\n break;\n\n case ACTION_WEST:\n if (left + range.x < minLeft) {\n range.x = minLeft - left;\n }\n\n break;\n\n case ACTION_NORTH:\n if (top + range.y < minTop) {\n range.y = minTop - top;\n }\n\n break;\n\n case ACTION_SOUTH:\n if (bottom + range.y > maxHeight) {\n range.y = maxHeight - bottom;\n }\n\n break;\n\n default:\n }\n };\n\n switch (action) {\n // Move crop box\n case ACTION_ALL:\n left += range.x;\n top += range.y;\n break;\n // Resize crop box\n\n case ACTION_EAST:\n if (range.x >= 0 && (right >= maxWidth || aspectRatio && (top <= minTop || bottom >= maxHeight))) {\n renderable = false;\n break;\n }\n\n check(ACTION_EAST);\n width += range.x;\n\n if (width < 0) {\n action = ACTION_WEST;\n width = -width;\n left -= width;\n }\n\n if (aspectRatio) {\n height = width / aspectRatio;\n top += (cropBoxData.height - height) / 2;\n }\n\n break;\n\n case ACTION_NORTH:\n if (range.y <= 0 && (top <= minTop || aspectRatio && (left <= minLeft || right >= maxWidth))) {\n renderable = false;\n break;\n }\n\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n\n if (height < 0) {\n action = ACTION_SOUTH;\n height = -height;\n top -= height;\n }\n\n if (aspectRatio) {\n width = height * aspectRatio;\n left += (cropBoxData.width - width) / 2;\n }\n\n break;\n\n case ACTION_WEST:\n if (range.x <= 0 && (left <= minLeft || aspectRatio && (top <= minTop || bottom >= maxHeight))) {\n renderable = false;\n break;\n }\n\n check(ACTION_WEST);\n width -= range.x;\n left += range.x;\n\n if (width < 0) {\n action = ACTION_EAST;\n width = -width;\n left -= width;\n }\n\n if (aspectRatio) {\n height = width / aspectRatio;\n top += (cropBoxData.height - height) / 2;\n }\n\n break;\n\n case ACTION_SOUTH:\n if (range.y >= 0 && (bottom >= maxHeight || aspectRatio && (left <= minLeft || right >= maxWidth))) {\n renderable = false;\n break;\n }\n\n check(ACTION_SOUTH);\n height += range.y;\n\n if (height < 0) {\n action = ACTION_NORTH;\n height = -height;\n top -= height;\n }\n\n if (aspectRatio) {\n width = height * aspectRatio;\n left += (cropBoxData.width - width) / 2;\n }\n\n break;\n\n case ACTION_NORTH_EAST:\n if (aspectRatio) {\n if (range.y <= 0 && (top <= minTop || right >= maxWidth)) {\n renderable = false;\n break;\n }\n\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n width = height * aspectRatio;\n } else {\n check(ACTION_NORTH);\n check(ACTION_EAST);\n\n if (range.x >= 0) {\n if (right < maxWidth) {\n width += range.x;\n } else if (range.y <= 0 && top <= minTop) {\n renderable = false;\n }\n } else {\n width += range.x;\n }\n\n if (range.y <= 0) {\n if (top > minTop) {\n height -= range.y;\n top += range.y;\n }\n } else {\n height -= range.y;\n top += range.y;\n }\n }\n\n if (width < 0 && height < 0) {\n action = ACTION_SOUTH_WEST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_NORTH_WEST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_SOUTH_EAST;\n height = -height;\n top -= height;\n }\n\n break;\n\n case ACTION_NORTH_WEST:\n if (aspectRatio) {\n if (range.y <= 0 && (top <= minTop || left <= minLeft)) {\n renderable = false;\n break;\n }\n\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n width = height * aspectRatio;\n left += cropBoxData.width - width;\n } else {\n check(ACTION_NORTH);\n check(ACTION_WEST);\n\n if (range.x <= 0) {\n if (left > minLeft) {\n width -= range.x;\n left += range.x;\n } else if (range.y <= 0 && top <= minTop) {\n renderable = false;\n }\n } else {\n width -= range.x;\n left += range.x;\n }\n\n if (range.y <= 0) {\n if (top > minTop) {\n height -= range.y;\n top += range.y;\n }\n } else {\n height -= range.y;\n top += range.y;\n }\n }\n\n if (width < 0 && height < 0) {\n action = ACTION_SOUTH_EAST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_NORTH_EAST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_SOUTH_WEST;\n height = -height;\n top -= height;\n }\n\n break;\n\n case ACTION_SOUTH_WEST:\n if (aspectRatio) {\n if (range.x <= 0 && (left <= minLeft || bottom >= maxHeight)) {\n renderable = false;\n break;\n }\n\n check(ACTION_WEST);\n width -= range.x;\n left += range.x;\n height = width / aspectRatio;\n } else {\n check(ACTION_SOUTH);\n check(ACTION_WEST);\n\n if (range.x <= 0) {\n if (left > minLeft) {\n width -= range.x;\n left += range.x;\n } else if (range.y >= 0 && bottom >= maxHeight) {\n renderable = false;\n }\n } else {\n width -= range.x;\n left += range.x;\n }\n\n if (range.y >= 0) {\n if (bottom < maxHeight) {\n height += range.y;\n }\n } else {\n height += range.y;\n }\n }\n\n if (width < 0 && height < 0) {\n action = ACTION_NORTH_EAST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_SOUTH_EAST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_NORTH_WEST;\n height = -height;\n top -= height;\n }\n\n break;\n\n case ACTION_SOUTH_EAST:\n if (aspectRatio) {\n if (range.x >= 0 && (right >= maxWidth || bottom >= maxHeight)) {\n renderable = false;\n break;\n }\n\n check(ACTION_EAST);\n width += range.x;\n height = width / aspectRatio;\n } else {\n check(ACTION_SOUTH);\n check(ACTION_EAST);\n\n if (range.x >= 0) {\n if (right < maxWidth) {\n width += range.x;\n } else if (range.y >= 0 && bottom >= maxHeight) {\n renderable = false;\n }\n } else {\n width += range.x;\n }\n\n if (range.y >= 0) {\n if (bottom < maxHeight) {\n height += range.y;\n }\n } else {\n height += range.y;\n }\n }\n\n if (width < 0 && height < 0) {\n action = ACTION_NORTH_WEST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_SOUTH_WEST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_NORTH_EAST;\n height = -height;\n top -= height;\n }\n\n break;\n // Move canvas\n\n case ACTION_MOVE:\n this.move(range.x, range.y);\n renderable = false;\n break;\n // Zoom canvas\n\n case ACTION_ZOOM:\n this.zoom(getMaxZoomRatio(pointers), e);\n renderable = false;\n break;\n // Create crop box\n\n case ACTION_CROP:\n if (!range.x || !range.y) {\n renderable = false;\n break;\n }\n\n offset = getOffset(this.cropper);\n left = pointer.startX - offset.left;\n top = pointer.startY - offset.top;\n width = cropBoxData.minWidth;\n height = cropBoxData.minHeight;\n\n if (range.x > 0) {\n action = range.y > 0 ? ACTION_SOUTH_EAST : ACTION_NORTH_EAST;\n } else if (range.x < 0) {\n left -= width;\n action = range.y > 0 ? ACTION_SOUTH_WEST : ACTION_NORTH_WEST;\n }\n\n if (range.y < 0) {\n top -= height;\n } // Show the crop box if is hidden\n\n\n if (!this.cropped) {\n removeClass(this.cropBox, CLASS_HIDDEN);\n this.cropped = true;\n\n if (this.limited) {\n this.limitCropBox(true, true);\n }\n }\n\n break;\n\n default:\n }\n\n if (renderable) {\n cropBoxData.width = width;\n cropBoxData.height = height;\n cropBoxData.left = left;\n cropBoxData.top = top;\n this.action = action;\n this.renderCropBox();\n } // Override\n\n\n forEach(pointers, function (p) {\n p.startX = p.endX;\n p.startY = p.endY;\n });\n }\n};\n\nvar methods = {\n // Show the crop box manually\n crop: function crop() {\n if (this.ready && !this.cropped && !this.disabled) {\n this.cropped = true;\n this.limitCropBox(true, true);\n\n if (this.options.modal) {\n addClass(this.dragBox, CLASS_MODAL);\n }\n\n removeClass(this.cropBox, CLASS_HIDDEN);\n this.setCropBoxData(this.initialCropBoxData);\n }\n\n return this;\n },\n // Reset the image and crop box to their initial states\n reset: function reset() {\n if (this.ready && !this.disabled) {\n this.imageData = assign({}, this.initialImageData);\n this.canvasData = assign({}, this.initialCanvasData);\n this.cropBoxData = assign({}, this.initialCropBoxData);\n this.renderCanvas();\n\n if (this.cropped) {\n this.renderCropBox();\n }\n }\n\n return this;\n },\n // Clear the crop box\n clear: function clear() {\n if (this.cropped && !this.disabled) {\n assign(this.cropBoxData, {\n left: 0,\n top: 0,\n width: 0,\n height: 0\n });\n this.cropped = false;\n this.renderCropBox();\n this.limitCanvas(true, true); // Render canvas after crop box rendered\n\n this.renderCanvas();\n removeClass(this.dragBox, CLASS_MODAL);\n addClass(this.cropBox, CLASS_HIDDEN);\n }\n\n return this;\n },\n\n /**\n * Replace the image's src and rebuild the cropper\n * @param {string} url - The new URL.\n * @param {boolean} [hasSameSize] - Indicate if the new image has the same size as the old one.\n * @returns {Cropper} this\n */\n replace: function replace(url) {\n var hasSameSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n if (!this.disabled && url) {\n if (this.isImg) {\n this.element.src = url;\n }\n\n if (hasSameSize) {\n this.url = url;\n this.image.src = url;\n\n if (this.ready) {\n this.viewBoxImage.src = url;\n forEach(this.previews, function (element) {\n element.getElementsByTagName('img')[0].src = url;\n });\n }\n } else {\n if (this.isImg) {\n this.replaced = true;\n }\n\n this.options.data = null;\n this.uncreate();\n this.load(url);\n }\n }\n\n return this;\n },\n // Enable (unfreeze) the cropper\n enable: function enable() {\n if (this.ready && this.disabled) {\n this.disabled = false;\n removeClass(this.cropper, CLASS_DISABLED);\n }\n\n return this;\n },\n // Disable (freeze) the cropper\n disable: function disable() {\n if (this.ready && !this.disabled) {\n this.disabled = true;\n addClass(this.cropper, CLASS_DISABLED);\n }\n\n return this;\n },\n\n /**\n * Destroy the cropper and remove the instance from the image\n * @returns {Cropper} this\n */\n destroy: function destroy() {\n var element = this.element;\n\n if (!element[NAMESPACE]) {\n return this;\n }\n\n element[NAMESPACE] = undefined;\n\n if (this.isImg && this.replaced) {\n element.src = this.originalUrl;\n }\n\n this.uncreate();\n return this;\n },\n\n /**\n * Move the canvas with relative offsets\n * @param {number} offsetX - The relative offset distance on the x-axis.\n * @param {number} [offsetY=offsetX] - The relative offset distance on the y-axis.\n * @returns {Cropper} this\n */\n move: function move(offsetX) {\n var offsetY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : offsetX;\n var _this$canvasData = this.canvasData,\n left = _this$canvasData.left,\n top = _this$canvasData.top;\n return this.moveTo(isUndefined(offsetX) ? offsetX : left + Number(offsetX), isUndefined(offsetY) ? offsetY : top + Number(offsetY));\n },\n\n /**\n * Move the canvas to an absolute point\n * @param {number} x - The x-axis coordinate.\n * @param {number} [y=x] - The y-axis coordinate.\n * @returns {Cropper} this\n */\n moveTo: function moveTo(x) {\n var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : x;\n var canvasData = this.canvasData;\n var changed = false;\n x = Number(x);\n y = Number(y);\n\n if (this.ready && !this.disabled && this.options.movable) {\n if (isNumber(x)) {\n canvasData.left = x;\n changed = true;\n }\n\n if (isNumber(y)) {\n canvasData.top = y;\n changed = true;\n }\n\n if (changed) {\n this.renderCanvas(true);\n }\n }\n\n return this;\n },\n\n /**\n * Zoom the canvas with a relative ratio\n * @param {number} ratio - The target ratio.\n * @param {Event} _originalEvent - The original event if any.\n * @returns {Cropper} this\n */\n zoom: function zoom(ratio, _originalEvent) {\n var canvasData = this.canvasData;\n ratio = Number(ratio);\n\n if (ratio < 0) {\n ratio = 1 / (1 - ratio);\n } else {\n ratio = 1 + ratio;\n }\n\n return this.zoomTo(canvasData.width * ratio / canvasData.naturalWidth, null, _originalEvent);\n },\n\n /**\n * Zoom the canvas to an absolute ratio\n * @param {number} ratio - The target ratio.\n * @param {Object} pivot - The zoom pivot point coordinate.\n * @param {Event} _originalEvent - The original event if any.\n * @returns {Cropper} this\n */\n zoomTo: function zoomTo(ratio, pivot, _originalEvent) {\n var options = this.options,\n canvasData = this.canvasData;\n var width = canvasData.width,\n height = canvasData.height,\n naturalWidth = canvasData.naturalWidth,\n naturalHeight = canvasData.naturalHeight;\n ratio = Number(ratio);\n\n if (ratio >= 0 && this.ready && !this.disabled && options.zoomable) {\n var newWidth = naturalWidth * ratio;\n var newHeight = naturalHeight * ratio;\n\n if (dispatchEvent(this.element, EVENT_ZOOM, {\n ratio: ratio,\n oldRatio: width / naturalWidth,\n originalEvent: _originalEvent\n }) === false) {\n return this;\n }\n\n if (_originalEvent) {\n var pointers = this.pointers;\n var offset = getOffset(this.cropper);\n var center = pointers && Object.keys(pointers).length ? getPointersCenter(pointers) : {\n pageX: _originalEvent.pageX,\n pageY: _originalEvent.pageY\n }; // Zoom from the triggering point of the event\n\n canvasData.left -= (newWidth - width) * ((center.pageX - offset.left - canvasData.left) / width);\n canvasData.top -= (newHeight - height) * ((center.pageY - offset.top - canvasData.top) / height);\n } else if (isPlainObject(pivot) && isNumber(pivot.x) && isNumber(pivot.y)) {\n canvasData.left -= (newWidth - width) * ((pivot.x - canvasData.left) / width);\n canvasData.top -= (newHeight - height) * ((pivot.y - canvasData.top) / height);\n } else {\n // Zoom from the center of the canvas\n canvasData.left -= (newWidth - width) / 2;\n canvasData.top -= (newHeight - height) / 2;\n }\n\n canvasData.width = newWidth;\n canvasData.height = newHeight;\n this.renderCanvas(true);\n }\n\n return this;\n },\n\n /**\n * Rotate the canvas with a relative degree\n * @param {number} degree - The rotate degree.\n * @returns {Cropper} this\n */\n rotate: function rotate(degree) {\n return this.rotateTo((this.imageData.rotate || 0) + Number(degree));\n },\n\n /**\n * Rotate the canvas to an absolute degree\n * @param {number} degree - The rotate degree.\n * @returns {Cropper} this\n */\n rotateTo: function rotateTo(degree) {\n degree = Number(degree);\n\n if (isNumber(degree) && this.ready && !this.disabled && this.options.rotatable) {\n this.imageData.rotate = degree % 360;\n this.renderCanvas(true, true);\n }\n\n return this;\n },\n\n /**\n * Scale the image on the x-axis.\n * @param {number} scaleX - The scale ratio on the x-axis.\n * @returns {Cropper} this\n */\n scaleX: function scaleX(_scaleX) {\n var scaleY = this.imageData.scaleY;\n return this.scale(_scaleX, isNumber(scaleY) ? scaleY : 1);\n },\n\n /**\n * Scale the image on the y-axis.\n * @param {number} scaleY - The scale ratio on the y-axis.\n * @returns {Cropper} this\n */\n scaleY: function scaleY(_scaleY) {\n var scaleX = this.imageData.scaleX;\n return this.scale(isNumber(scaleX) ? scaleX : 1, _scaleY);\n },\n\n /**\n * Scale the image\n * @param {number} scaleX - The scale ratio on the x-axis.\n * @param {number} [scaleY=scaleX] - The scale ratio on the y-axis.\n * @returns {Cropper} this\n */\n scale: function scale(scaleX) {\n var scaleY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : scaleX;\n var imageData = this.imageData;\n var transformed = false;\n scaleX = Number(scaleX);\n scaleY = Number(scaleY);\n\n if (this.ready && !this.disabled && this.options.scalable) {\n if (isNumber(scaleX)) {\n imageData.scaleX = scaleX;\n transformed = true;\n }\n\n if (isNumber(scaleY)) {\n imageData.scaleY = scaleY;\n transformed = true;\n }\n\n if (transformed) {\n this.renderCanvas(true, true);\n }\n }\n\n return this;\n },\n\n /**\n * Get the cropped area position and size data (base on the original image)\n * @param {boolean} [rounded=false] - Indicate if round the data values or not.\n * @returns {Object} The result cropped data.\n */\n getData: function getData$$1() {\n var rounded = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var options = this.options,\n imageData = this.imageData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var data;\n\n if (this.ready && this.cropped) {\n data = {\n x: cropBoxData.left - canvasData.left,\n y: cropBoxData.top - canvasData.top,\n width: cropBoxData.width,\n height: cropBoxData.height\n };\n var ratio = imageData.width / imageData.naturalWidth;\n forEach(data, function (n, i) {\n data[i] = n / ratio;\n });\n\n if (rounded) {\n // In case rounding off leads to extra 1px in right or bottom border\n // we should round the top-left corner and the dimension (#343).\n var bottom = Math.round(data.y + data.height);\n var right = Math.round(data.x + data.width);\n data.x = Math.round(data.x);\n data.y = Math.round(data.y);\n data.width = right - data.x;\n data.height = bottom - data.y;\n }\n } else {\n data = {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n }\n\n if (options.rotatable) {\n data.rotate = imageData.rotate || 0;\n }\n\n if (options.scalable) {\n data.scaleX = imageData.scaleX || 1;\n data.scaleY = imageData.scaleY || 1;\n }\n\n return data;\n },\n\n /**\n * Set the cropped area position and size with new data\n * @param {Object} data - The new data.\n * @returns {Cropper} this\n */\n setData: function setData$$1(data) {\n var options = this.options,\n imageData = this.imageData,\n canvasData = this.canvasData;\n var cropBoxData = {};\n\n if (this.ready && !this.disabled && isPlainObject(data)) {\n var transformed = false;\n\n if (options.rotatable) {\n if (isNumber(data.rotate) && data.rotate !== imageData.rotate) {\n imageData.rotate = data.rotate;\n transformed = true;\n }\n }\n\n if (options.scalable) {\n if (isNumber(data.scaleX) && data.scaleX !== imageData.scaleX) {\n imageData.scaleX = data.scaleX;\n transformed = true;\n }\n\n if (isNumber(data.scaleY) && data.scaleY !== imageData.scaleY) {\n imageData.scaleY = data.scaleY;\n transformed = true;\n }\n }\n\n if (transformed) {\n this.renderCanvas(true, true);\n }\n\n var ratio = imageData.width / imageData.naturalWidth;\n\n if (isNumber(data.x)) {\n cropBoxData.left = data.x * ratio + canvasData.left;\n }\n\n if (isNumber(data.y)) {\n cropBoxData.top = data.y * ratio + canvasData.top;\n }\n\n if (isNumber(data.width)) {\n cropBoxData.width = data.width * ratio;\n }\n\n if (isNumber(data.height)) {\n cropBoxData.height = data.height * ratio;\n }\n\n this.setCropBoxData(cropBoxData);\n }\n\n return this;\n },\n\n /**\n * Get the container size data.\n * @returns {Object} The result container data.\n */\n getContainerData: function getContainerData() {\n return this.ready ? assign({}, this.containerData) : {};\n },\n\n /**\n * Get the image position and size data.\n * @returns {Object} The result image data.\n */\n getImageData: function getImageData() {\n return this.sized ? assign({}, this.imageData) : {};\n },\n\n /**\n * Get the canvas position and size data.\n * @returns {Object} The result canvas data.\n */\n getCanvasData: function getCanvasData() {\n var canvasData = this.canvasData;\n var data = {};\n\n if (this.ready) {\n forEach(['left', 'top', 'width', 'height', 'naturalWidth', 'naturalHeight'], function (n) {\n data[n] = canvasData[n];\n });\n }\n\n return data;\n },\n\n /**\n * Set the canvas position and size with new data.\n * @param {Object} data - The new canvas data.\n * @returns {Cropper} this\n */\n setCanvasData: function setCanvasData(data) {\n var canvasData = this.canvasData;\n var aspectRatio = canvasData.aspectRatio;\n\n if (this.ready && !this.disabled && isPlainObject(data)) {\n if (isNumber(data.left)) {\n canvasData.left = data.left;\n }\n\n if (isNumber(data.top)) {\n canvasData.top = data.top;\n }\n\n if (isNumber(data.width)) {\n canvasData.width = data.width;\n canvasData.height = data.width / aspectRatio;\n } else if (isNumber(data.height)) {\n canvasData.height = data.height;\n canvasData.width = data.height * aspectRatio;\n }\n\n this.renderCanvas(true);\n }\n\n return this;\n },\n\n /**\n * Get the crop box position and size data.\n * @returns {Object} The result crop box data.\n */\n getCropBoxData: function getCropBoxData() {\n var cropBoxData = this.cropBoxData;\n var data;\n\n if (this.ready && this.cropped) {\n data = {\n left: cropBoxData.left,\n top: cropBoxData.top,\n width: cropBoxData.width,\n height: cropBoxData.height\n };\n }\n\n return data || {};\n },\n\n /**\n * Set the crop box position and size with new data.\n * @param {Object} data - The new crop box data.\n * @returns {Cropper} this\n */\n setCropBoxData: function setCropBoxData(data) {\n var cropBoxData = this.cropBoxData;\n var aspectRatio = this.options.aspectRatio;\n var widthChanged;\n var heightChanged;\n\n if (this.ready && this.cropped && !this.disabled && isPlainObject(data)) {\n if (isNumber(data.left)) {\n cropBoxData.left = data.left;\n }\n\n if (isNumber(data.top)) {\n cropBoxData.top = data.top;\n }\n\n if (isNumber(data.width) && data.width !== cropBoxData.width) {\n widthChanged = true;\n cropBoxData.width = data.width;\n }\n\n if (isNumber(data.height) && data.height !== cropBoxData.height) {\n heightChanged = true;\n cropBoxData.height = data.height;\n }\n\n if (aspectRatio) {\n if (widthChanged) {\n cropBoxData.height = cropBoxData.width / aspectRatio;\n } else if (heightChanged) {\n cropBoxData.width = cropBoxData.height * aspectRatio;\n }\n }\n\n this.renderCropBox();\n }\n\n return this;\n },\n\n /**\n * Get a canvas drawn the cropped image.\n * @param {Object} [options={}] - The config options.\n * @returns {HTMLCanvasElement} - The result canvas.\n */\n getCroppedCanvas: function getCroppedCanvas() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (!this.ready || !window.HTMLCanvasElement) {\n return null;\n }\n\n var canvasData = this.canvasData;\n var source = getSourceCanvas(this.image, this.imageData, canvasData, options); // Returns the source canvas if it is not cropped.\n\n if (!this.cropped) {\n return source;\n }\n\n var _this$getData = this.getData(),\n initialX = _this$getData.x,\n initialY = _this$getData.y,\n initialWidth = _this$getData.width,\n initialHeight = _this$getData.height;\n\n var ratio = source.width / Math.floor(canvasData.naturalWidth);\n\n if (ratio !== 1) {\n initialX *= ratio;\n initialY *= ratio;\n initialWidth *= ratio;\n initialHeight *= ratio;\n }\n\n var aspectRatio = initialWidth / initialHeight;\n var maxSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.maxWidth || Infinity,\n height: options.maxHeight || Infinity\n });\n var minSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.minWidth || 0,\n height: options.minHeight || 0\n }, 'cover');\n\n var _getAdjustedSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.width || (ratio !== 1 ? source.width : initialWidth),\n height: options.height || (ratio !== 1 ? source.height : initialHeight)\n }),\n width = _getAdjustedSizes.width,\n height = _getAdjustedSizes.height;\n\n width = Math.min(maxSizes.width, Math.max(minSizes.width, width));\n height = Math.min(maxSizes.height, Math.max(minSizes.height, height));\n var canvas = document.createElement('canvas');\n var context = canvas.getContext('2d');\n canvas.width = normalizeDecimalNumber(width);\n canvas.height = normalizeDecimalNumber(height);\n context.fillStyle = options.fillColor || 'transparent';\n context.fillRect(0, 0, width, height);\n var _options$imageSmoothi = options.imageSmoothingEnabled,\n imageSmoothingEnabled = _options$imageSmoothi === void 0 ? true : _options$imageSmoothi,\n imageSmoothingQuality = options.imageSmoothingQuality;\n context.imageSmoothingEnabled = imageSmoothingEnabled;\n\n if (imageSmoothingQuality) {\n context.imageSmoothingQuality = imageSmoothingQuality;\n } // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.drawImage\n\n\n var sourceWidth = source.width;\n var sourceHeight = source.height; // Source canvas parameters\n\n var srcX = initialX;\n var srcY = initialY;\n var srcWidth;\n var srcHeight; // Destination canvas parameters\n\n var dstX;\n var dstY;\n var dstWidth;\n var dstHeight;\n\n if (srcX <= -initialWidth || srcX > sourceWidth) {\n srcX = 0;\n srcWidth = 0;\n dstX = 0;\n dstWidth = 0;\n } else if (srcX <= 0) {\n dstX = -srcX;\n srcX = 0;\n srcWidth = Math.min(sourceWidth, initialWidth + srcX);\n dstWidth = srcWidth;\n } else if (srcX <= sourceWidth) {\n dstX = 0;\n srcWidth = Math.min(initialWidth, sourceWidth - srcX);\n dstWidth = srcWidth;\n }\n\n if (srcWidth <= 0 || srcY <= -initialHeight || srcY > sourceHeight) {\n srcY = 0;\n srcHeight = 0;\n dstY = 0;\n dstHeight = 0;\n } else if (srcY <= 0) {\n dstY = -srcY;\n srcY = 0;\n srcHeight = Math.min(sourceHeight, initialHeight + srcY);\n dstHeight = srcHeight;\n } else if (srcY <= sourceHeight) {\n dstY = 0;\n srcHeight = Math.min(initialHeight, sourceHeight - srcY);\n dstHeight = srcHeight;\n }\n\n var params = [srcX, srcY, srcWidth, srcHeight]; // Avoid \"IndexSizeError\"\n\n if (dstWidth > 0 && dstHeight > 0) {\n var scale = width / initialWidth;\n params.push(dstX * scale, dstY * scale, dstWidth * scale, dstHeight * scale);\n } // All the numerical parameters should be integer for `drawImage`\n // https://github.com/fengyuanchen/cropper/issues/476\n\n\n context.drawImage.apply(context, [source].concat(_toConsumableArray(params.map(function (param) {\n return Math.floor(normalizeDecimalNumber(param));\n }))));\n return canvas;\n },\n\n /**\n * Change the aspect ratio of the crop box.\n * @param {number} aspectRatio - The new aspect ratio.\n * @returns {Cropper} this\n */\n setAspectRatio: function setAspectRatio(aspectRatio) {\n var options = this.options;\n\n if (!this.disabled && !isUndefined(aspectRatio)) {\n // 0 -> NaN\n options.aspectRatio = Math.max(0, aspectRatio) || NaN;\n\n if (this.ready) {\n this.initCropBox();\n\n if (this.cropped) {\n this.renderCropBox();\n }\n }\n }\n\n return this;\n },\n\n /**\n * Change the drag mode.\n * @param {string} mode - The new drag mode.\n * @returns {Cropper} this\n */\n setDragMode: function setDragMode(mode) {\n var options = this.options,\n dragBox = this.dragBox,\n face = this.face;\n\n if (this.ready && !this.disabled) {\n var croppable = mode === DRAG_MODE_CROP;\n var movable = options.movable && mode === DRAG_MODE_MOVE;\n mode = croppable || movable ? mode : DRAG_MODE_NONE;\n options.dragMode = mode;\n setData(dragBox, DATA_ACTION, mode);\n toggleClass(dragBox, CLASS_CROP, croppable);\n toggleClass(dragBox, CLASS_MOVE, movable);\n\n if (!options.cropBoxMovable) {\n // Sync drag mode to crop box when it is not movable\n setData(face, DATA_ACTION, mode);\n toggleClass(face, CLASS_CROP, croppable);\n toggleClass(face, CLASS_MOVE, movable);\n }\n }\n\n return this;\n }\n};\n\nvar AnotherCropper = WINDOW.Cropper;\n\nvar Cropper =\n/*#__PURE__*/\nfunction () {\n /**\n * Create a new Cropper.\n * @param {Element} element - The target element for cropping.\n * @param {Object} [options={}] - The configuration options.\n */\n function Cropper(element) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, Cropper);\n\n if (!element || !REGEXP_TAG_NAME.test(element.tagName)) {\n throw new Error('The first argument is required and must be an or element.');\n }\n\n this.element = element;\n this.options = assign({}, DEFAULTS, isPlainObject(options) && options);\n this.cropped = false;\n this.disabled = false;\n this.pointers = {};\n this.ready = false;\n this.reloading = false;\n this.replaced = false;\n this.sized = false;\n this.sizing = false;\n this.init();\n }\n\n _createClass(Cropper, [{\n key: \"init\",\n value: function init() {\n var element = this.element;\n var tagName = element.tagName.toLowerCase();\n var url;\n\n if (element[NAMESPACE]) {\n return;\n }\n\n element[NAMESPACE] = this;\n\n if (tagName === 'img') {\n this.isImg = true; // e.g.: \"img/picture.jpg\"\n\n url = element.getAttribute('src') || '';\n this.originalUrl = url; // Stop when it's a blank image\n\n if (!url) {\n return;\n } // e.g.: \"http://example.com/img/picture.jpg\"\n\n\n url = element.src;\n } else if (tagName === 'canvas' && window.HTMLCanvasElement) {\n url = element.toDataURL();\n }\n\n this.load(url);\n }\n }, {\n key: \"load\",\n value: function load(url) {\n var _this = this;\n\n if (!url) {\n return;\n }\n\n this.url = url;\n this.imageData = {};\n var element = this.element,\n options = this.options;\n\n if (!options.rotatable && !options.scalable) {\n options.checkOrientation = false;\n } // Only IE10+ supports Typed Arrays\n\n\n if (!options.checkOrientation || !window.ArrayBuffer) {\n this.clone();\n return;\n } // XMLHttpRequest disallows to open a Data URL in some browsers like IE11 and Safari\n\n\n if (REGEXP_DATA_URL.test(url)) {\n if (REGEXP_DATA_URL_JPEG.test(url)) {\n this.read(dataURLToArrayBuffer(url));\n } else {\n this.clone();\n }\n\n return;\n }\n\n var xhr = new XMLHttpRequest();\n var clone = this.clone.bind(this);\n this.reloading = true;\n this.xhr = xhr;\n xhr.ontimeout = clone;\n xhr.onabort = clone;\n xhr.onerror = clone;\n\n xhr.onprogress = function () {\n if (xhr.getResponseHeader('content-type') !== MIME_TYPE_JPEG) {\n xhr.abort();\n }\n };\n\n xhr.onload = function () {\n _this.read(xhr.response);\n };\n\n xhr.onloadend = function () {\n _this.reloading = false;\n _this.xhr = null;\n }; // Bust cache when there is a \"crossOrigin\" property to avoid browser cache error\n\n\n if (options.checkCrossOrigin && isCrossOriginURL(url) && element.crossOrigin) {\n url = addTimestamp(url);\n }\n\n xhr.open('GET', url);\n xhr.responseType = 'arraybuffer';\n xhr.withCredentials = element.crossOrigin === 'use-credentials';\n xhr.send();\n }\n }, {\n key: \"read\",\n value: function read(arrayBuffer) {\n var options = this.options,\n imageData = this.imageData;\n var orientation = resetAndGetOrientation(arrayBuffer);\n var rotate = 0;\n var scaleX = 1;\n var scaleY = 1;\n\n if (orientation > 1) {\n // Generate a new Data URL with the orientation value set to 1\n // as some iOS browsers will render image with its orientation\n this.url = arrayBufferToDataURL(arrayBuffer, MIME_TYPE_JPEG);\n\n var _parseOrientation = parseOrientation(orientation);\n\n rotate = _parseOrientation.rotate;\n scaleX = _parseOrientation.scaleX;\n scaleY = _parseOrientation.scaleY;\n }\n\n if (options.rotatable) {\n imageData.rotate = rotate;\n }\n\n if (options.scalable) {\n imageData.scaleX = scaleX;\n imageData.scaleY = scaleY;\n }\n\n this.clone();\n }\n }, {\n key: \"clone\",\n value: function clone() {\n var element = this.element,\n url = this.url;\n var crossOrigin;\n var crossOriginUrl;\n\n if (this.options.checkCrossOrigin && isCrossOriginURL(url)) {\n crossOrigin = element.crossOrigin;\n\n if (crossOrigin) {\n crossOriginUrl = url;\n } else {\n crossOrigin = 'anonymous'; // Bust cache when there is not a \"crossOrigin\" property\n\n crossOriginUrl = addTimestamp(url);\n }\n }\n\n this.crossOrigin = crossOrigin;\n this.crossOriginUrl = crossOriginUrl;\n var image = document.createElement('img');\n\n if (crossOrigin) {\n image.crossOrigin = crossOrigin;\n }\n\n image.src = crossOriginUrl || url;\n this.image = image;\n image.onload = this.start.bind(this);\n image.onerror = this.stop.bind(this);\n addClass(image, CLASS_HIDE);\n element.parentNode.insertBefore(image, element.nextSibling);\n }\n }, {\n key: \"start\",\n value: function start() {\n var _this2 = this;\n\n var image = this.isImg ? this.element : this.image;\n image.onload = null;\n image.onerror = null;\n this.sizing = true;\n var IS_SAFARI = WINDOW.navigator && /(Macintosh|iPhone|iPod|iPad).*AppleWebKit/i.test(WINDOW.navigator.userAgent);\n\n var done = function done(naturalWidth, naturalHeight) {\n assign(_this2.imageData, {\n naturalWidth: naturalWidth,\n naturalHeight: naturalHeight,\n aspectRatio: naturalWidth / naturalHeight\n });\n _this2.sizing = false;\n _this2.sized = true;\n\n _this2.build();\n }; // Modern browsers (except Safari)\n\n\n if (image.naturalWidth && !IS_SAFARI) {\n done(image.naturalWidth, image.naturalHeight);\n return;\n }\n\n var sizingImage = document.createElement('img');\n var body = document.body || document.documentElement;\n this.sizingImage = sizingImage;\n\n sizingImage.onload = function () {\n done(sizingImage.width, sizingImage.height);\n\n if (!IS_SAFARI) {\n body.removeChild(sizingImage);\n }\n };\n\n sizingImage.src = image.src; // iOS Safari will convert the image automatically\n // with its orientation once append it into DOM (#279)\n\n if (!IS_SAFARI) {\n sizingImage.style.cssText = 'left:0;' + 'max-height:none!important;' + 'max-width:none!important;' + 'min-height:0!important;' + 'min-width:0!important;' + 'opacity:0;' + 'position:absolute;' + 'top:0;' + 'z-index:-1;';\n body.appendChild(sizingImage);\n }\n }\n }, {\n key: \"stop\",\n value: function stop() {\n var image = this.image;\n image.onload = null;\n image.onerror = null;\n image.parentNode.removeChild(image);\n this.image = null;\n }\n }, {\n key: \"build\",\n value: function build() {\n if (!this.sized || this.ready) {\n return;\n }\n\n var element = this.element,\n options = this.options,\n image = this.image; // Create cropper elements\n\n var container = element.parentNode;\n var template = document.createElement('div');\n template.innerHTML = TEMPLATE;\n var cropper = template.querySelector(\".\".concat(NAMESPACE, \"-container\"));\n var canvas = cropper.querySelector(\".\".concat(NAMESPACE, \"-canvas\"));\n var dragBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-drag-box\"));\n var cropBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-crop-box\"));\n var face = cropBox.querySelector(\".\".concat(NAMESPACE, \"-face\"));\n this.container = container;\n this.cropper = cropper;\n this.canvas = canvas;\n this.dragBox = dragBox;\n this.cropBox = cropBox;\n this.viewBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-view-box\"));\n this.face = face;\n canvas.appendChild(image); // Hide the original image\n\n addClass(element, CLASS_HIDDEN); // Inserts the cropper after to the current image\n\n container.insertBefore(cropper, element.nextSibling); // Show the image if is hidden\n\n if (!this.isImg) {\n removeClass(image, CLASS_HIDE);\n }\n\n this.initPreview();\n this.bind();\n options.initialAspectRatio = Math.max(0, options.initialAspectRatio) || NaN;\n options.aspectRatio = Math.max(0, options.aspectRatio) || NaN;\n options.viewMode = Math.max(0, Math.min(3, Math.round(options.viewMode))) || 0;\n addClass(cropBox, CLASS_HIDDEN);\n\n if (!options.guides) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-dashed\")), CLASS_HIDDEN);\n }\n\n if (!options.center) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-center\")), CLASS_HIDDEN);\n }\n\n if (options.background) {\n addClass(cropper, \"\".concat(NAMESPACE, \"-bg\"));\n }\n\n if (!options.highlight) {\n addClass(face, CLASS_INVISIBLE);\n }\n\n if (options.cropBoxMovable) {\n addClass(face, CLASS_MOVE);\n setData(face, DATA_ACTION, ACTION_ALL);\n }\n\n if (!options.cropBoxResizable) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-line\")), CLASS_HIDDEN);\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-point\")), CLASS_HIDDEN);\n }\n\n this.render();\n this.ready = true;\n this.setDragMode(options.dragMode);\n\n if (options.autoCrop) {\n this.crop();\n }\n\n this.setData(options.data);\n\n if (isFunction(options.ready)) {\n addListener(element, EVENT_READY, options.ready, {\n once: true\n });\n }\n\n dispatchEvent(element, EVENT_READY);\n }\n }, {\n key: \"unbuild\",\n value: function unbuild() {\n if (!this.ready) {\n return;\n }\n\n this.ready = false;\n this.unbind();\n this.resetPreview();\n this.cropper.parentNode.removeChild(this.cropper);\n removeClass(this.element, CLASS_HIDDEN);\n }\n }, {\n key: \"uncreate\",\n value: function uncreate() {\n if (this.ready) {\n this.unbuild();\n this.ready = false;\n this.cropped = false;\n } else if (this.sizing) {\n this.sizingImage.onload = null;\n this.sizing = false;\n this.sized = false;\n } else if (this.reloading) {\n this.xhr.onabort = null;\n this.xhr.abort();\n } else if (this.image) {\n this.stop();\n }\n }\n /**\n * Get the no conflict cropper class.\n * @returns {Cropper} The cropper class.\n */\n\n }], [{\n key: \"noConflict\",\n value: function noConflict() {\n window.Cropper = AnotherCropper;\n return Cropper;\n }\n /**\n * Change the default options.\n * @param {Object} options - The new default options.\n */\n\n }, {\n key: \"setDefaults\",\n value: function setDefaults(options) {\n assign(DEFAULTS, isPlainObject(options) && options);\n }\n }]);\n\n return Cropper;\n}();\n\nassign(Cropper.prototype, render, preview, events, handlers, change, methods);\n\nexport default Cropper;\n","const LANGUAGES_LIST = {\n aa: {\n name: 'Afar',\n nativeName: 'Afaraf',\n },\n ab: {\n name: 'Abkhaz',\n nativeName: 'аҧсуа бызшәа',\n },\n ae: {\n name: 'Avestan',\n nativeName: 'avesta',\n },\n af: {\n name: 'Afrikaans',\n nativeName: 'Afrikaans',\n },\n ak: {\n name: 'Akan',\n nativeName: 'Akan',\n },\n am: {\n name: 'Amharic',\n nativeName: 'አማርኛ',\n },\n an: {\n name: 'Aragonese',\n nativeName: 'aragonés',\n },\n ar: {\n name: 'Arabic',\n nativeName: 'اللغة العربية',\n },\n as: {\n name: 'Assamese',\n nativeName: 'অসমীয়া',\n },\n av: {\n name: 'Avaric',\n nativeName: 'авар мацӀ',\n },\n ay: {\n name: 'Aymara',\n nativeName: 'aymar aru',\n },\n az: {\n name: 'Azerbaijani',\n nativeName: 'azərbaycan dili',\n },\n ba: {\n name: 'Bashkir',\n nativeName: 'башҡорт теле',\n },\n be: {\n name: 'Belarusian',\n nativeName: 'беларуская мова',\n },\n bg: {\n name: 'Bulgarian',\n nativeName: 'български език',\n },\n bh: {\n name: 'Bihari',\n nativeName: 'भोजपुरी',\n },\n bi: {\n name: 'Bislama',\n nativeName: 'Bislama',\n },\n bm: {\n name: 'Bambara',\n nativeName: 'bamanankan',\n },\n bn: {\n name: 'Bengali',\n nativeName: 'বাংলা',\n },\n bo: {\n name: 'Tibetan Standard',\n nativeName: 'བོད་ཡིག',\n },\n br: {\n name: 'Breton',\n nativeName: 'brezhoneg',\n },\n bs: {\n name: 'Bosnian',\n nativeName: 'bosanski jezik',\n },\n ca: {\n name: 'Catalan',\n nativeName: 'català',\n },\n ce: {\n name: 'Chechen',\n nativeName: 'нохчийн мотт',\n },\n ch: {\n name: 'Chamorro',\n nativeName: 'Chamoru',\n },\n co: {\n name: 'Corsican',\n nativeName: 'corsu',\n },\n cr: {\n name: 'Cree',\n nativeName: 'ᓀᐦᐃᔭᐍᐏᐣ',\n },\n cs: {\n name: 'Czech',\n nativeName: 'čeština',\n },\n cu: {\n name: 'Old Church Slavonic',\n nativeName: 'ѩзыкъ словѣньскъ',\n },\n cv: {\n name: 'Chuvash',\n nativeName: 'чӑваш чӗлхи',\n },\n cy: {\n name: 'Welsh',\n nativeName: 'Cymraeg',\n },\n da: {\n name: 'Danish',\n nativeName: 'dansk',\n },\n de: {\n name: 'German',\n nativeName: 'Deutsch',\n },\n dv: {\n name: 'Divehi',\n nativeName: 'Dhivehi',\n },\n dz: {\n name: 'Dzongkha',\n nativeName: 'རྫོང་ཁ',\n },\n ee: {\n name: 'Ewe',\n nativeName: 'Eʋegbe',\n },\n el: {\n name: 'Greek',\n nativeName: 'ελληνικά',\n },\n en: {\n name: 'English',\n nativeName: 'English',\n },\n eo: {\n name: 'Esperanto',\n nativeName: 'Esperanto',\n },\n es: {\n name: 'Spanish',\n nativeName: 'Español',\n },\n et: {\n name: 'Estonian',\n nativeName: 'eesti',\n },\n eu: {\n name: 'Basque',\n nativeName: 'euskara',\n },\n fa: {\n name: 'Persian',\n nativeName: 'فارسی',\n },\n ff: {\n name: 'Fula',\n nativeName: 'Fulfulde',\n },\n fi: {\n name: 'Finnish',\n nativeName: 'suomi',\n },\n fj: {\n name: 'Fijian',\n nativeName: 'Vakaviti',\n },\n fo: {\n name: 'Faroese',\n nativeName: 'føroyskt',\n },\n fr: {\n name: 'French',\n nativeName: 'Français',\n },\n fy: {\n name: 'Western Frisian',\n nativeName: 'Frysk',\n },\n ga: {\n name: 'Irish',\n nativeName: 'Gaeilge',\n },\n gd: {\n name: 'Scottish Gaelic',\n nativeName: 'Gàidhlig',\n },\n gl: {\n name: 'Galician',\n nativeName: 'galego',\n },\n gn: {\n name: 'Guaraní',\n nativeName: \"Avañe'ẽ\",\n },\n gu: {\n name: 'Gujarati',\n nativeName: 'ગુજરાતી',\n },\n gv: {\n name: 'Manx',\n nativeName: 'Gaelg',\n },\n ha: {\n name: 'Hausa',\n nativeName: 'هَوُسَ',\n },\n he: {\n name: 'Hebrew',\n nativeName: 'עברית',\n },\n hi: {\n name: 'Hindi',\n nativeName: 'हिन्दी',\n },\n ho: {\n name: 'Hiri Motu',\n nativeName: 'Hiri Motu',\n },\n hr: {\n name: 'Croatian',\n nativeName: 'hrvatski jezik',\n },\n ht: {\n name: 'Haitian',\n nativeName: 'Kreyòl ayisyen',\n },\n hu: {\n name: 'Hungarian',\n nativeName: 'magyar',\n },\n hy: {\n name: 'Armenian',\n nativeName: 'Հայերեն',\n },\n hz: {\n name: 'Herero',\n nativeName: 'Otjiherero',\n },\n ia: {\n name: 'Interlingua',\n nativeName: 'Interlingua',\n },\n id: {\n name: 'Indonesian',\n nativeName: 'Indonesian',\n },\n ie: {\n name: 'Interlingue',\n nativeName: 'Interlingue',\n },\n ig: {\n name: 'Igbo',\n nativeName: 'Asụsụ Igbo',\n },\n ii: {\n name: 'Nuosu',\n nativeName: 'ꆈꌠ꒿ Nuosuhxop',\n },\n ik: {\n name: 'Inupiaq',\n nativeName: 'Iñupiaq',\n },\n io: {\n name: 'Ido',\n nativeName: 'Ido',\n },\n is: {\n name: 'Icelandic',\n nativeName: 'Íslenska',\n },\n it: {\n name: 'Italian',\n nativeName: 'Italiano',\n },\n iu: {\n name: 'Inuktitut',\n nativeName: 'ᐃᓄᒃᑎᑐᑦ',\n },\n ja: {\n name: 'Japanese',\n nativeName: '日本語',\n },\n jv: {\n name: 'Javanese',\n nativeName: 'basa Jawa',\n },\n ka: {\n name: 'Georgian',\n nativeName: 'ქართული',\n },\n kg: {\n name: 'Kongo',\n nativeName: 'Kikongo',\n },\n ki: {\n name: 'Kikuyu',\n nativeName: 'Gĩkũyũ',\n },\n kj: {\n name: 'Kwanyama',\n nativeName: 'Kuanyama',\n },\n kk: {\n name: 'Kazakh',\n nativeName: 'қазақ тілі',\n },\n kl: {\n name: 'Kalaallisut',\n nativeName: 'kalaallisut',\n },\n km: {\n name: 'Khmer',\n nativeName: 'ខេមរភាសា',\n },\n kn: {\n name: 'Kannada',\n nativeName: 'ಕನ್ನಡ',\n },\n ko: {\n name: 'Korean',\n nativeName: '한국어',\n },\n kr: {\n name: 'Kanuri',\n nativeName: 'Kanuri',\n },\n ks: {\n name: 'Kashmiri',\n nativeName: 'कश्मीरी',\n },\n ku: {\n name: 'Kurdish',\n nativeName: 'Kurdî',\n },\n kv: {\n name: 'Komi',\n nativeName: 'коми кыв',\n },\n kw: {\n name: 'Cornish',\n nativeName: 'Kernewek',\n },\n ky: {\n name: 'Kyrgyz',\n nativeName: 'Кыргызча',\n },\n la: {\n name: 'Latin',\n nativeName: 'latine',\n },\n lb: {\n name: 'Luxembourgish',\n nativeName: 'Lëtzebuergesch',\n },\n lg: {\n name: 'Ganda',\n nativeName: 'Luganda',\n },\n li: {\n name: 'Limburgish',\n nativeName: 'Limburgs',\n },\n ln: {\n name: 'Lingala',\n nativeName: 'Lingála',\n },\n lo: {\n name: 'Lao',\n nativeName: 'ພາສາ',\n },\n lt: {\n name: 'Lithuanian',\n nativeName: 'lietuvių kalba',\n },\n lu: {\n name: 'Luba-Katanga',\n nativeName: 'Tshiluba',\n },\n lv: {\n name: 'Latvian',\n nativeName: 'latviešu valoda',\n },\n mg: {\n name: 'Malagasy',\n nativeName: 'fiteny malagasy',\n },\n mh: {\n name: 'Marshallese',\n nativeName: 'Kajin M̧ajeļ',\n },\n mi: {\n name: 'Māori',\n nativeName: 'te reo Māori',\n },\n mk: {\n name: 'Macedonian',\n nativeName: 'македонски јазик',\n },\n ml: {\n name: 'Malayalam',\n nativeName: 'മലയാളം',\n },\n mn: {\n name: 'Mongolian',\n nativeName: 'Монгол хэл',\n },\n mr: {\n name: 'Marathi',\n nativeName: 'मराठी',\n },\n ms: {\n name: 'Malay',\n nativeName: 'هاس ملايو‎',\n },\n mt: {\n name: 'Maltese',\n nativeName: 'Malti',\n },\n my: {\n name: 'Burmese',\n nativeName: 'ဗမာစာ',\n },\n na: {\n name: 'Nauru',\n nativeName: 'Ekakairũ Naoero',\n },\n nb: {\n name: 'Norwegian Bokmål',\n nativeName: 'Norsk bokmål',\n },\n nd: {\n name: 'Northern Ndebele',\n nativeName: 'isiNdebele',\n },\n ne: {\n name: 'Nepali',\n nativeName: 'नेपाली',\n },\n ng: {\n name: 'Ndonga',\n nativeName: 'Owambo',\n },\n nl: {\n name: 'Dutch',\n nativeName: 'Nederlands',\n },\n nn: {\n name: 'Norwegian Nynorsk',\n nativeName: 'Norsk nynorsk',\n },\n no: {\n name: 'Norwegian',\n nativeName: 'Norsk',\n },\n nr: {\n name: 'Southern Ndebele',\n nativeName: 'isiNdebele',\n },\n nv: {\n name: 'Navajo',\n nativeName: 'Diné bizaad',\n },\n ny: {\n name: 'Chichewa',\n nativeName: 'chiCheŵa',\n },\n oc: {\n name: 'Occitan',\n nativeName: 'occitan',\n },\n oj: {\n name: 'Ojibwe',\n nativeName: 'ᐊᓂᔑᓈᐯᒧᐎᓐ',\n },\n om: {\n name: 'Oromo',\n nativeName: 'Afaan Oromoo',\n },\n or: {\n name: 'Oriya',\n nativeName: 'ଓଡ଼ିଆ',\n },\n os: {\n name: 'Ossetian',\n nativeName: 'ирон æвзаг',\n },\n pa: {\n name: 'Panjabi',\n nativeName: 'ਪੰਜਾਬੀ',\n },\n pi: {\n name: 'Pāli',\n nativeName: 'पाऴि',\n },\n pl: {\n name: 'Polish',\n nativeName: 'język polski',\n },\n ps: {\n name: 'Pashto',\n nativeName: 'پښتو',\n },\n pt: {\n name: 'Portuguese',\n nativeName: 'Português',\n },\n qu: {\n name: 'Quechua',\n nativeName: 'Runa Simi',\n },\n rm: {\n name: 'Romansh',\n nativeName: 'rumantsch grischun',\n },\n rn: {\n name: 'Kirundi',\n nativeName: 'Ikirundi',\n },\n ro: {\n name: 'Romanian',\n nativeName: 'limba română',\n },\n ru: {\n name: 'Russian',\n nativeName: 'Русский',\n },\n rw: {\n name: 'Kinyarwanda',\n nativeName: 'Ikinyarwanda',\n },\n sa: {\n name: 'Sanskrit',\n nativeName: 'संस्कृतम्',\n },\n sc: {\n name: 'Sardinian',\n nativeName: 'sardu',\n },\n sd: {\n name: 'Sindhi',\n nativeName: 'सिन्धी',\n },\n se: {\n name: 'Northern Sami',\n nativeName: 'Davvisámegiella',\n },\n sg: {\n name: 'Sango',\n nativeName: 'yângâ tî sängö',\n },\n si: {\n name: 'Sinhala',\n nativeName: 'සිංහල',\n },\n sk: {\n name: 'Slovak',\n nativeName: 'slovenčina',\n },\n sl: {\n name: 'Slovene',\n nativeName: 'slovenski jezik',\n },\n sm: {\n name: 'Samoan',\n nativeName: \"gagana fa'a Samoa\",\n },\n sn: {\n name: 'Shona',\n nativeName: 'chiShona',\n },\n so: {\n name: 'Somali',\n nativeName: 'Soomaaliga',\n },\n sq: {\n name: 'Albanian',\n nativeName: 'Shqip',\n },\n sr: {\n name: 'Serbian',\n nativeName: 'српски језик',\n },\n ss: {\n name: 'Swati',\n nativeName: 'SiSwati',\n },\n st: {\n name: 'Southern Sotho',\n nativeName: 'Sesotho',\n },\n su: {\n name: 'Sundanese',\n nativeName: 'Basa Sunda',\n },\n sv: {\n name: 'Swedish',\n nativeName: 'svenska',\n },\n sw: {\n name: 'Swahili',\n nativeName: 'Kiswahili',\n },\n ta: {\n name: 'Tamil',\n nativeName: 'தமிழ்',\n },\n te: {\n name: 'Telugu',\n nativeName: 'తెలుగు',\n },\n tg: {\n name: 'Tajik',\n nativeName: 'тоҷикӣ',\n },\n th: {\n name: 'Thai',\n nativeName: 'ไทย',\n },\n ti: {\n name: 'Tigrinya',\n nativeName: 'ትግርኛ',\n },\n tk: {\n name: 'Turkmen',\n nativeName: 'Türkmen',\n },\n tl: {\n name: 'Tagalog',\n nativeName: 'Wikang Tagalog',\n },\n tn: {\n name: 'Tswana',\n nativeName: 'Setswana',\n },\n to: {\n name: 'Tonga',\n nativeName: 'faka Tonga',\n },\n tr: {\n name: 'Turkish',\n nativeName: 'Türkçe',\n },\n ts: {\n name: 'Tsonga',\n nativeName: 'Xitsonga',\n },\n tt: {\n name: 'Tatar',\n nativeName: 'татар теле',\n },\n tw: {\n name: 'Twi',\n nativeName: 'Twi',\n },\n ty: {\n name: 'Tahitian',\n nativeName: 'Reo Tahiti',\n },\n ug: {\n name: 'Uyghur',\n nativeName: 'ئۇيغۇرچە‎',\n },\n uk: {\n name: 'Ukrainian',\n nativeName: 'Українська',\n },\n ur: {\n name: 'Urdu',\n nativeName: 'اردو',\n },\n uz: {\n name: 'Uzbek',\n nativeName: 'Ўзбек',\n },\n ve: {\n name: 'Venda',\n nativeName: 'Tshivenḓa',\n },\n vi: {\n name: 'Vietnamese',\n nativeName: 'Tiếng Việt',\n },\n vo: {\n name: 'Volapük',\n nativeName: 'Volapük',\n },\n wa: {\n name: 'Walloon',\n nativeName: 'walon',\n },\n wo: {\n name: 'Wolof',\n nativeName: 'Wollof',\n },\n xh: {\n name: 'Xhosa',\n nativeName: 'isiXhosa',\n },\n yi: {\n name: 'Yiddish',\n nativeName: 'ייִדיש',\n },\n yo: {\n name: 'Yoruba',\n nativeName: 'Yorùbá',\n },\n za: {\n name: 'Zhuang',\n nativeName: 'Saɯ cueŋƅ',\n },\n zh: {\n name: 'Chinese',\n nativeName: '中文',\n },\n zu: {\n name: 'Zulu',\n nativeName: 'isiZulu',\n },\n};\n\nexport default LANGUAGES_LIST;\n","import LANGUAGES_LIST from './data';\n\nexport default class ISO6391 {\n static getLanguages(codes = []) {\n return codes.map(code => ({\n code,\n name: ISO6391.getName(code),\n nativeName: ISO6391.getNativeName(code),\n }));\n }\n\n static getName(code) {\n return ISO6391.validate(code) ? LANGUAGES_LIST[code].name : '';\n }\n\n static getAllNames() {\n return Object.values(LANGUAGES_LIST).map(l => l.name);\n }\n\n static getNativeName(code) {\n return ISO6391.validate(code) ? LANGUAGES_LIST[code].nativeName : '';\n }\n\n static getAllNativeNames() {\n return Object.values(LANGUAGES_LIST).map(l => l.nativeName);\n }\n\n static getCode(name) {\n const code = Object.keys(LANGUAGES_LIST).find(code => {\n const language = LANGUAGES_LIST[code];\n\n return (\n language.name.toLowerCase() === name.toLowerCase() ||\n language.nativeName.toLowerCase() === name.toLowerCase()\n );\n });\n return code || '';\n }\n\n static getAllCodes() {\n return Object.keys(LANGUAGES_LIST);\n }\n\n static validate(code) {\n return LANGUAGES_LIST[code] !== undefined;\n }\n}\n"],"sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/30.064c236fa83ac21c252f.js b/priv/static/static/js/30.064c236fa83ac21c252f.js new file mode 100644 index 000000000..40d81fbfd --- /dev/null +++ b/priv/static/static/js/30.064c236fa83ac21c252f.js @@ -0,0 +1,2 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[30],{623:function(e){e.exports=JSON.parse('{"general":{"dismiss":"Закрити","close":"Закрити","verify":"Перевірити","confirm":"Підтвердити","enable":"Увімкнути","disable":"Вимкнути","cancel":"Скасувати","show_less":"Показати менше","show_more":"Показати більше","optional":"необов\'язково","retry":"Спробуйте ще раз","error_retry":"Будь ласка, спробуйте ще раз","generic_error":"Виникла помилка","loading":"Завантаження…","more":"Більше","submit":"Відправити","apply":"Застосувати","peek":"Глянути","role":{"moderator":"Модератор","admin":"Адміністратор"},"flash_content":"Натисніть для перегляду змісту Flash за допомогою Ruffle (експериментально, може не працювати).","flash_security":"Ця функція може становити ризик, оскільки Flash-вміст все ще є потенційно небезпечним.","flash_fail":"Не вдалося завантажити Flash-вміст, докладнішу інформацію дивись у консолі."},"finder":{"error_fetching_user":"Користувача не знайдено","find_user":"Знайти користувача"},"features_panel":{"gopher":"Gopher","pleroma_chat_messages":"Чати","chat":"Оголошення","who_to_follow":"Кого відстежувати","title":"Особливості","scope_options":"Параметри обсягу","media_proxy":"Посередник медіа-даних","text_limit":"Ліміт символів","upload_limit":"Обмеження завантажень"},"exporter":{"processing":"Опрацьовую, скоро ви зможете завантажити файл","export":"Експорт"},"domain_mute_card":{"unmute_progress":"Вмикаю…","unmute":"Вимкнути заглушення","mute_progress":"Вимикаю…","mute":"Ігнорувати"},"shoutbox":{"title":"Оголошення"},"about":{"staff":"Адміністрація","mrf":{"simple":{"media_nsfw_desc":"Даний інстанс примусово позначає медіа в наступних інстансах як дратівливий:","media_nsfw":"Примусове визначення медіа як дратівливого","media_removal_desc":"Поточний інстанс видаляє медіа з дописів на перелічених інстансах:","media_removal":"Видалення медіа","ftl_removal_desc":"Цей інстанс видаляє перелічені інстанси з Федеративної стрічки:","ftl_removal":"Видалення зі стрічки Федеративної мережі","quarantine_desc":"Поточний інстанс надсилатиме тільки публічні дописи наступним інстансам:","quarantine":"Карантин","reject_desc":"Поточний інстанс не прийматиме повідомлення з перелічених інстансів:","accept":"Прийняти","reject":"Відхилити","accept_desc":"Поточний інстанс приймає повідомлення тільки з перелічених інстансів:","simple_policies":"Правила поточного інстансу"},"mrf_policies_desc":"Правила MRF розповсюджуються на даний інстанс. Наступні правила активні:","mrf_policies":"Активувати правила MRF (модуль переписування повідомлень)","keyword":{"is_replaced_by":"→","replace":"Замінити","reject":"Відхилити","ftl_removal":"Прибрати з федеративної стрічки","keyword_policies":"Політика щодо ключових слів"},"federation":"Федерація"}},"login":{"hint":"Увійдіть, щоб доєднатися до дискусії","username":"Ім\'я користувача","register":"Зареєструватись","password":"Пароль","logout":"Вийти","description":"Увійти за допомогою OAuth","login":"Увійти","recovery_code":"Код відновлення","enter_recovery_code":"Введіть код відновлення","authentication_code":"Код автентифікації","heading":{"recovery":"Двофакторне відновлення","totp":"Двофакторна автентифікація"},"enter_two_factor_code":"Введіть двофакторний код автентифікації","placeholder":"напр. stepan"},"importer":{"error":"Під час імпортування файлу сталася помилка.","success":"Імпортовано успішно.","submit":"Відправити"},"image_cropper":{"cancel":"Відмінити","save_without_cropping":"Зберегти не обрізаючи","crop_picture":"Обрізати малюнок","save":"Зберегти"},"polls":{"expired":"Опитування закінчилось {0} тому","expires_in":"Опитування закінчується через {0}","expiry":"Термін опитування","multiple_choices":"Декілька варіантів","single_choice":"Один варіант","add_option":"Додати опцію","type":"Тип опитування","vote":"Проголосувати","votes":"голосів","option":"Відповідь","add_poll":"Додати опитування","not_enough_options":"Замало унікальних варіантів в опитуванні","people_voted_count":"{count} особа проголосувала | {count} осіб проголосувало","votes_count":"{count} голос | {count} голосів"},"notifications":{"reacted_with":"додав реакцію: {0}","migrated_to":"мігрував на","no_more_notifications":"Немає більше сповіщень","repeated_you":"поширив(-ла) ваш допис","read":"Прочитано!","notifications":"Сповіщення","load_older":"Завантажити давніші сповіщення","follow_request":"хоче підписатись на вас","followed_you":"підписався(-лась) на вас","favorited_you":"вподобав(-ла) ваш допис","broken_favorite":"Невідомий допис, шукаю його…","error":"Помилка при оновленні сповіщень: {0}"},"nav":{"chats":"Чати","timelines":"Стрічки","twkn":"Уся відома мережа","about":"Інформація","preferences":"Налаштування","friend_requests":"Запити послідовників","who_to_follow":"Кого відстежувати","search":"Пошук","user_search":"Пошук користувача","bookmarks":"Закладки","timeline":"Домашня стрічка","public_tl":"Публічна стрічка","dms":"Приватні повідомлення","interactions":"Взаємодії","mentions":"Згадування","back":"Назад","administration":"Адміністрування","home_timeline":"Домашня стрічка"},"media_modal":{"next":"Наступна","previous":"Попередня"},"password_reset":{"instruction":"Введіть свою адресу електронної пошти або ім’я користувача. Ми надішлемо вам посилання для скидання пароля.","placeholder":"Ваша електронна адреса або ім\'я користувача","check_email":"Перевірте електронну пошту на наявність посилання для скидання пароля.","return_home":"Повернутися на головну сторінку","too_many_requests":"Ви досягли ліміту спроб, спробуйте ще раз пізніше.","password_reset_required_but_mailer_is_disabled":"Ви повинні скинути свій пароль, але скидання пароля вимкнено. Зверніться до адміністратора інстансу.","password_reset_disabled":"Скидання пароля вимкнено. Зверніться до адміністратора інстансу.","password_reset_required":"Для входу потрібно скинути пароль.","password_reset":"Відновити пароль","forgot_password":"Забули пароль?"},"chats":{"you":"Ви:","message_user":"Повідомлення для {nickname}","delete":"Видалити","chats":"Чати","new":"Новий чат","empty_message_error":"Не вдається опублікувати порожнє повідомлення","more":"Більше","delete_confirm":"Ви дійсно хочете видалити це повідомлення?","error_loading_chat":"Під час завантаження чату сталася помилка.","error_sending_message":"Під час надсилання повідомлення сталася помилка.","empty_chat_list_placeholder":"У вас ще немає чатів. Почніть новий чат!"},"file_type":{"audio":"Аудіо","video":"Відео","image":"Зображення","file":"Файл"},"display_date":{"today":"Сьогодні"},"interactions":{"load_older":"Завантажити давніші взаємодії","follows":"Нові підписки","favs_repeats":"Поширення та вподобайки","moves":"Міграції користувачів"},"errors":{"storage_unavailable":"Pleroma не змогла отримати доступ до сховища браузеру. Ваша сесія та налаштування не будуть збережені, це може спричинити непередбачувані проблеми. Спробуйте увімкнути cookie."},"emoji":{"stickers":"Стікери","custom":"Користувацькі емодзі","search_emoji":"Пошук емодзі","keep_open":"Тримати панель відкритою","add_emoji":"Додати емодзі","emoji":"Емодзі","load_all":"Всі {emojiAmount} эмодзі завантажуються","load_all_hint":"Завантажені перші {saneAmount} емодзі, завантаження всіх емодзі може призвести до проблем з продуктивністю.","unicode":"Стандартні емодзі"},"post_status":{"content_type":{"text/bbcode":"BBCode","text/markdown":"Markdown","text/html":"HTML","text/plain":"Текстові дані"},"attachments_sensitive":"Позначити вкладення як чутливі","account_not_locked_warning_link":"замкнена","account_not_locked_warning":"Ваша обліковка не {0}. Будь-хто може відстежувати вас для перегляду дописів тільки для підписників.","new_status":"Створити допис","direct_warning_to_first_only":"Цей допис побачать лише користувачі, що були згадані на початку повідомлення.","direct_warning_to_all":"Цей допис побачать всі згадані користувачі.","default":"Що нового?","content_warning":"Тема (необов\'язково)","preview":"Попередній перегляд","posting":"Відправляється","empty_status_error":"Не можу опублікувати пустий статус без вкладень","scope":{"unlisted":"Непублічний - цей допис буде відсутній у публічних стрічках","public":"Публічний - цей допис побачать усі","private":"Для читачів - цей допис побачать лише ваші читачі","direct":"Приватний - цей допис побачать лише згадані користувачі"},"scope_notice":{"unlisted":"Цей допис не буде видно в публічній стрічці та усій відомій мережі","private":"Цей допис побачать лише ваші підписники","public":"Цей допис бачитимуть усі"},"preview_empty":"Пустий","media_description_error":"Не вдалось оновити медіа, спробуйте ще раз","media_description":"Опис медіа","post":"Опублікувати"},"settings":{"blocks_imported":"Блокування імпортовані! Їх обробка триватиме певний час.","block_import_error":"Помилка імпортування блокувань","block_import":"Імпорт блокувань","block_export_button":"Експорт блокувань у файл CSV","block_export":"Експорт блокувань","bio":"Про Вас","background":"Обкладинка","app_name":"Назва програми","follow_export":"Експортувати відстежуваних","filtering_explanation":"Усі статуси з цими словами будуть приховані, один на рядок","filtering":"Фільтрування","export_theme":"Зберегти переднабір","avatar_size_instruction":"Рекомендований мінімальний розмір для зображень аватара становить 150x150 пікселів.","delete_account_instructions":"Введіть ваш пароль в поле нижче, аби підтвердити видалення облікового запису.","delete_account_error":"Під час видалення вашого облікового запису виникла проблема. Якщо це трапляється постійно, будь ласка, зверніться до адміністратора вашого сервера.","delete_account_description":"Остаточно видалити ваш обліковий запис та усі ваші повідомлення.","delete_account":"Видалити обліковий запис","default_vis":"Обсяг видимості за замовчуванням","data_import_export_tab":"Імпорт/експорт даних","current_password":"Поточний пароль","confirm_new_password":"Підтвердіть новий пароль","composing":"Складання відповіді","collapse_subject":"Згорнути дописи з темами","changed_password":"Пароль успішно змінено!","change_password_error":"Не вдалося змінити пароль.","change_password":"Змінити пароль","cRed":"Червоний (Скасувати)","cGreen":"Зелений (Поширити)","cOrange":"Жовтогарячий (Вподобайки)","cBlue":"Блакитний (Відповісти, читати)","btnRadius":"Кнопки","blocks_tab":"Блокування","avatarRadius":"Аватарки","avatarAltRadius":"Аватарки у сповіщеннях","avatar":"Аватар","attachments":"Вкладення","attachmentRadius":"Вкладення","general":"Загальні","foreground":"Передній план","follows_imported":"Відстежуваних імпортовано! Їхня обробка потребує часу.","follow_import_error":"Помилка імпортування відстежуваних","follow_import":"Імпортувати відстежуваних","follow_export_button":"Експортувати відстежуваних до csv файлу","lock_account_description":"Обмежте свій обліковий запис лише схваленими читачами","links":"Посилання","limited_availability":"Недоступно у вашому браузері","invalid_theme_imported":"Вибраний файл не є темою Pleroma. У вашу тему не внесено жодних змін.","interfaceLanguage":"Мова оболонки","interface":"Оболонка","instance_default_simple":"(за замовчуванням)","instance_default":"(за замовчуванням: {value})","checkboxRadius":"Прапорці","inputRadius":"Поля вводу","import_theme":"Завантажити переднабір","import_followers_from_a_csv_file":"Імпортувати відстежуваних з csv файлу","import_blocks_from_a_csv_file":"Імпортувати заблокованих з csv файлу","hide_filtered_statuses":"Сховати відфільтровані статуси","hide_user_stats":"Приховувати статистику користувачів (напр. кількість відстежувачів)","hide_post_stats":"Приховувати статистику дописів (напр. кількість вподобаних)","use_one_click_nsfw":"Відкривати NSFW вкладення одним кліком миші","preload_images":"Передзавантажувати світлини","hide_isp":"Сховати панель з особливостями сервера","max_thumbnails":"Максимальна кількість мініатюр на повідомлення","hide_muted_posts":"Приховати повідомлення приглушених користувачів","hide_attachments_in_tl":"Приховувати вкладення у стрічці","hide_attachments_in_convo":"Приховувати вкладення у розмовах","mutes_tab":"Заглушені","loop_video_silent_only":"Зациклити відео без звуку (напр. Mastodon \\"gifs\\")","loop_video":"Зациклити відео","mfa":{"verify":{"desc":"Щоб увімкнути двофакторну автентифікацію, введіть код з вашого застосунку для двофакторної автентифікації:"},"scan":{"desc":"Відскануйте цей QR-код за допомогою програми двофакторної автентифікації або введіть текстовий ключ:","title":"Сканування","secret_code":"Ключ"},"authentication_methods":"Методи автентифікації","recovery_codes_warning":"Запишіть ці коди і тримайте в безпечному місці - інакше ви їх ніколи не побачите. Якщо ви втратите доступ до OTP додатку - без резервних кодів ви не зможете отримати доступ до свого облікового запису.","waiting_a_recovery_codes":"Отримую резервні коди…","recovery_codes":"Резервні коди.","warning_of_generate_new_codes":"Після отримання нових резервних кодів, старі перестануть працювати.","generate_new_recovery_codes":"Згенерувати нові резервні коди","title":"Двофакторна автентифікація","confirm_and_enable":"Підтвердити та увімкнути OTP","wait_pre_setup_otp":"попереднє налаштування OTP","setup_otp":"Налаштування OTP","otp":"OTP"},"enter_current_password_to_confirm":"Введіть свій поточний пароль","security":"Безпека","domain_mutes":"Домени","discoverable":"Дозволити виявлення цього облікового запису в результатах пошуку та інших службах","mutes_and_blocks":"Заглушення та блокування","changed_email":"Email успішно змінено!","change_email_error":"Сталася помилка під час зміни email.","change_email":"Змінити email","bot":"Це обліковий запис бота","import_mutes_from_a_csv_file":"Імпорт заглушених з csv файлу","mutes_imported":"Заглушені імпортовані! Їх обробка триватиме певний час.","mute_export_button":"Експорт заглушених у csv файл","mute_import_error":"Під час імпорту заглушених сталася помилка","mute_import":"Імпорт ігнорувань","mute_export":"Експорт ігнорувань","new_password":"Новий пароль","new_email":"Нова ел. пошта","name_bio":"Особисті дані","set_new_profile_banner":"Встановити новий банер","set_new_avatar":"Встановити новий аватар","security_tab":"Безпека","saving_ok":"Налаштування збережені","saving_err":"Помилка при збереженні налаштувань","reply_visibility_self":"Показувати лише адресовані мені відповіді","reply_visibility_following":"Показувати відповіді адресовані лише мені або користувачам, яких я читаю","reply_visibility_all":"Показати всі відповіді","replies_in_timeline":"Відповіді в стрічці","profile_tab":"Профіль","profile_banner":"Банер профілю","profile_background":"Обкладинка профілю","revoke_token":"Відкликати","oauth_tokens":"OAuth ключі","token":"Ключ","refresh_token":"Оновити ключ","valid_until":"Діє до","use_contain_fit":"Не обрізати краї мініатюр","name":"Ім\'я","profile_fields":{"value":"Зміст","name":"Назва","add_field":"Додати поле","label":"Метадані профілю"},"play_videos_in_modal":"Відтворювати відео у спливаючій рамці","accent":"Акцент","chatMessageRadius":"Повідомлення в бесіді","notification_mutes":"Щоб перестати отримувати сповіщення від певного користувача, заглушіть його.","user_mutes":"Користувачі","no_mutes":"Заглушені відсутні","emoji_reactions_on_timeline":"Показувати реакції емоджі на стрічці","pad_emoji":"Автоматично додавати простір з обидвох сторін емоджі","allow_following_move":"Дозволити автостеження при переміщенні на інший інстанс","set_new_profile_background":"Встановити нову обкладинку профілю","radii_help":"Радіус заокруглення кутів інтерфейсу (в пікселях)","presets":"Переднабір","show_moderator_badge":"Показувати значок модератора в моєму профілі","show_admin_badge":"Показувати значок адміністратора в моєму профілі","hide_followers_description":"Не показувати хто підписаний на мене","hide_follows_description":"Не показувати на кого я підписаний","no_rich_text_description":"Видалення всього форматування тексту з усіх дописів","notification_visibility_emoji_reactions":"Реакції","notification_visibility_moves":"Міграція користувача","notification_visibility_repeats":"Поширення допису","notification_visibility_mentions":"Згадування","notification_visibility_likes":"Вподобайки","notification_visibility_follows":"Нові підписки","notification_visibility":"Отримувати сповіщення про наступні події","settings":"Налаштування","panelRadius":"Панелі","text":"Текст","tooltipRadius":"Підказки/попередження","values":{"true":"так","false":"ні"},"user_settings":"Користувацькі налаштування","upload_a_photo":"Завантажити фото","theme":"Тема","style":{"switcher":{"keep_fonts":"Залишити шрифти","keep_roundness":"Залишити скруглення","keep_opacity":"Залишити прозорості","keep_shadows":"Залишити тіні","keep_color":"Залишити кольори","use_source":"Нова версія","use_snapshot":"Стара версія","load_theme":"Завантажити тему","reset":"Скинути","clear_all":"Очистити все","help":{"older_version_imported":"Імпортований файл було створено в старішій версії FE.","future_version_imported":"Імпортований файл було створено в новішій версії FE.","v2_imported":"Файл, який ви імпортували, був створений для старішої версії інтерфейсу Pleroma. Ми намагаємось покращити сумісність, але все одно можуть бути розбіжності.","upgraded_from_v2":"PleromaFE було оновлено, тема може дещо відрізнятися від тієї, яку ви пам’ятаєте.","snapshot_source_mismatch":"Конфлікт версій: Швидше за все, FE повернуто до попередньої версії та оновлено знову, якщо ви змінили тему за допомогою старішої версії FE, швидше за все, ви хочете використовувати стару версію, інакше використовуйте нову версію.","migration_napshot_gone":"З якоїсь причини знімок зник, деякі речі можуть бути не такими, як ви пам’ятаєте.","migration_snapshot_ok":"Для безпеки, знімок теми завантажено. Ви можете спробувати завантажити дані теми.","fe_downgraded":"Версію PleromaFE змінено на старшу.","fe_upgraded":"Двигун теми PleromaFE оновлено.","snapshot_missing":"У файлі немає жодного знімка теми, тому він може виглядати інакше, ніж передбачалося спочатку.","snapshot_present":"Знімок теми завантажено, тому всі значення було перезаписано. Натомість ви можете завантажити правильні дані теми."},"keep_as_is":"Залишити як є","clear_opacity":"Очистити прозорість","save_load_hint":"Параметри \\"Зберегти\\" зберігають поточні параметри під час вибору або завантаження тем, вони також зберігають зазначені параметри під час експорту теми. Коли всі прапорці знято, експортування теми збереже все."},"common":{"color":"Колір","contrast":{"context":{"text":"для тексту","18pt":"для великого (18pt+) тексту"},"level":{"bad":"Не відповідає жодним вимогам щодо доступності","aaa":"відповідає вимогам рівня ААA (рекомендований)","aa":"відповідає вимогам рівня АА (мінімальний)"},"hint":"Рівень контрасту: {ratio}, {level} {context}"},"opacity":"Прозорість"},"preview":{"mono":"змісту","text":"Трохи більше {0} та {1}","button":"Кнопка","error":"Приклад помилки","content":"Зміст","header":"Попередній перегляд","link":"невеличке посилання","header_faint":"Це нормально","input":"Що нового?","checkbox":"Я переглянув умови використання","fine_print":"Прочитайте наш {0} аби нічого нового не дізнатись!","faint_link":"корисний підручник"},"shadows":{"components":{"button":"Кнопка","input":"Поле вводу","panel":"Панель","panelHeader":"Заголовок панелі","avatarStatus":"Аватар користувача (в стрічці)","avatar":"Аватар користувача (профіль)","buttonPressedHover":"Кнопка (натиснута + наведений курсор)","buttonPressed":"Кнопка (натиснута)","buttonHover":"Кнопка (при наведенні)","popup":"Спливаючі вікна та підказки","topBar":"Верхня панель"},"component":"Компонент","filter_hint":{"inset_classic":"Тіні спрямовані всередину використовуватимуть {0}","spread_zero":"Тіні з поширенням > 0 відображатимуться так, ніби було встановлено нуль","avatar_inset":"Зауважте, що використання як вставних, так і невставних тіней на аватарах може привести до непередбачуваних результатів із прозорими аватарами.","drop_shadow_syntax":"{0} не підтримує параметр {1} та ключове слово {2}.","always_drop_shadow":"Увага! Ця тінь завжди використовує {0}, якщо підтримується браузером."},"inset":"Всередину","blur":"Розмиття","shadow_id":"Тінь №{value}","override":"Перевизначити","_tab_label":"Тінь і підсвічування","hintV3":"Для тіней ви також можете використовувати позначення {0} для використання іншого кольорового слота.","spread":"Розмах"},"fonts":{"components":{"input":"Поля вводу","interface":"Інтерфейс","postCode":"Моноширинний текст в дописі (форматований текст)","post":"Текст допису"},"_tab_label":"Шрифти","size":"Розмір (в пікселях)","custom":"Нестандартний","weight":"Товщина","family":"Назва шрифту","help":"Виберіть шрифт для елементів інтерфейсу. Для \\"нестандартного\\" потрібно ввести точну назву шрифту, так як вона відображається в системі."},"advanced_colors":{"alert_warning":"Попередження","underlay":"Тло","inputs":"Поля входу","buttons":"Кнопки","borders":"Кордони","top_bar":"Верхня панель","panel_header":"Заголовок панелі","badge_notification":"Сповіщення","popover":"Підказки, меню, поповери","badge":"Тло значків","post":"Дописи/Дані користувачів","alert_neutral":"Нейтральний","alert_error":"Помилки","alert":"Фон сповіщень","_tab_label":"Додатково","selectedPost":"Вибраний допис","highlight":"Виділені елементи","poll":"Діаграма опитування","icons":"Іконки","faint_text":"Затемнений текст","chat":{"border":"Кайма","outgoing":"Вихідні повідомлення","incoming":"Вхідні повідомлення"},"toggled":"Переключено","disabled":"Вимкнено","selectedMenu":"Вибраний пункт меню","tabs":"Вкладки","pressed":"Натиснуто","wallpaper":"Шпалери"},"common_colors":{"rgbo":"Піктограми, акценти, значки","foreground_hint":"Перегляньте вкладку \\"Додатково\\" для більшого контролю","main":"Загальні кольори","_tab_label":"Загальні"},"radii":{"_tab_label":"Скруглення"}},"enable_web_push_notifications":"Увімкнути web push-сповіщення","notifications":"Сповіщення","fun":"Розваги","notification_setting_privacy":"Приватність","notification_setting_filters":"Фільтри","reset_avatar":"Скинути аватар","reset_profile_background":"Скинути обкладинку профілю","reset_avatar_confirm":"Ви дійсно хочете скинути аватар?","reset_profile_banner":"Скинули банер профілю","hide_follows_count_description":"Не показувати кількість підписників","reset_banner_confirm":"Ви дійсно хочете скинути банер?","reset_background_confirm":"Ви дійсно хочете скинути обкладинку?","subject_line_behavior":"Вигляд теми при відповіді","subject_input_always_show":"Завжди показувати поле для вводу теми","minimal_scopes_mode":"Мінімізувати набір варіантів осягу для допису","scope_copy":"Копіювати осяг при відповіді (завжди ввімкнено для особистих повідомлень)","search_user_to_mute":"Шукайте кого ви хочете заглушити","search_user_to_block":"Шукайте кого ви хочете заблокувати","autohide_floating_post_button":"Автоматично ховати кнопку \\"Новий допис\\" (в мобільній версії)","pause_on_unfocused":"Призупинити трансляцію, коли вкладка неактивна","hide_followers_count_description":"Не показувати кількість моїх підписників","notification_blocks":"Блокування користувача зупиняє всі сповіщення від нього, а також скасовує його відстеження.","notification_setting_hide_notification_contents":"Ховати відправника та вміст push-сповіщень","notification_setting_block_from_strangers":"Блокувати сповіщення від користувачів за якими ви не слідкуєте","type_domains_to_mute":"Пошук доменів для заглушення","nsfw_clickthrough":"Увімкнути приховування NSFW медіа","greentext":"Мемний текст","virtual_scrolling":"Оптимізувати оновлення стрічки","theme_help_v2_2":"Піктограми під деякими записами є показниками контрасту між фоном та текстом. Коли ви наведете на них курсор, ви отримаєте детальну інформацію. Пам\'ятайте, якщо ви використовуєте прозорість, індикатори показують найгірший варіант.","theme_help_v2_1":"Ви також можете замінити кольори та видимість окремих компонентів, перемикаючи прапорці, використовуйте \\"Очистити все\\", щоб видалити всі заміни.","theme_help":"Використовувати шістнадцяткові коди кольору (#rrggbb) щоб редагувати тему.","no_blocks":"Блокування відсутні","subject_line_mastodon":"Як в mastodon: просто скопіювати","subject_line_email":"Як в email: \\"re: тема\\"","useStreamingApiWarning":"(Не рекомендується, експериментально, повідомлення можуть зникати)","useStreamingApi":"Отримувати повідомлення та сповіщення в режимі реального часу","streaming":"Ввімкнути автоматичне завантаження нових повідомлень при прокручуванні вгору","stop_gifs":"Відтворювати GIF анімації тільки при наведенні","post_status_content_type":"Тип вмісту допису","subject_line_noop":"Не копіювати","version":{"frontend_version":"Версія фронтенду","backend_version":"Версія бекенду","title":"Версія"},"hide_wallpaper":"Сховати шпалери екземпляру","more_settings":"Більше налаштувань","sensitive_by_default":"Визначати допис як дратівливий за замовчуванням","reply_visibility_self_short":"Показувати відповіді лише мені","reply_visibility_following_short":"Показувати відповіді тим, на кого я підписаний","hide_all_muted_posts":"Приховати приглушені повідомлення","hide_media_previews":"Приховати попередній перегляд медіа","word_filter":"Фільтр слів","setting_changed":"Конфігурація відрізняється від типової","save":"Зберегти зміни","file_export_import":{"errors":{"file_slightly_new":"Другорядна версія файлу відрізняється, деякі налаштування можуть бути не прийняті","file_too_old":"Несумісна основна версія: {fileMajor}, версія файлу занадто стара і не підтримується (мінімальна версія налаштувань {feMajor})","file_too_new":"Несумісна основна версія: {fileMajor}, ця версія PleromaFE ({feMajor}) занадто стара для його обробки","invalid_file":"Вибраний файл не є резервною копією налаштувань Pleroma. Ніяких змін не було зроблено."},"restore_settings":"Відновити налаштування з файлу","backup_settings_theme":"Резервне копіювання налаштувань та теми у файл","backup_settings":"Резервне копіювання налаштувань у файл","backup_restore":"Резервне копіювання налаштувань"},"right_sidebar":"Показувати бокову панель справа","hide_shoutbox":"Приховати оголошення інстансу"},"selectable_list":{"select_all":"Вибрати все"},"remote_user_resolver":{"error":"Не знайдено.","searching_for":"Шукаю","remote_user_resolver":"Пошукова система для віддалених користувачів"},"registration":{"validations":{"password_confirmation_match":"пароль та підтвердження паролю мають бути однаковими","password_confirmation_required":"не може бути порожнім","password_required":"не може бути порожнім","email_required":"не може бути порожнім","fullname_required":"не може бути порожнім","username_required":"не може бути порожнім"},"bio_placeholder":"напр.\\nНаш народ завжди прагне волі для себе і бажає її для інших народів. Він боровся і бореться за правду і справедливість. Ми хочемо жити у згоді і взаємному шануванні з усіми народами доброї волі. Такі самі права визнаємо за іншими народами, за які боремося для себе.","fullname_placeholder":"напр. Степан Бандера","username_placeholder":"напр. stepan","new_captcha":"Натисніть на зображення, щоб оновити код, якщо він нерозбірливий","token":"Ключ запрошення","registration":"Реєстрація","password_confirm":"Підтвердження паролю","fullname":"Відображене ім\'я","email":"Ел. пошта","bio":"Про себе","captcha":"CAPTCHA","register":"Зареєструватися","reason_placeholder":"Цей інстанс обробляє запити на реєстрацію вручну.\\nРозкажіть адміністрації чому ви хочете зареєструватися.","reason":"Причина реєстрації"},"who_to_follow":{"who_to_follow":"На кого підписатися","more":"Більше"},"tool_tip":{"repeat":"Поширити","reply":"Відповісти","add_reaction":"Додати реакцію","user_settings":"Налаштування користувача","favorite":"Подобається","reject_follow_request":"Відхилити запит на підписку","accept_follow_request":"Прийняти запит на підписку","media_upload":"Завантажити медіа","bookmark":"Додати до закладок"},"upload":{"error":{"base":"Збій при завантаженні.","file_too_big":"Файл завеликий [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]","default":"Спробуйте ще раз пізніше","message":"Помилка завантаження: {0}"},"file_size_units":{"TiB":"ТіБ","GiB":"ГіБ","MiB":"МіБ","KiB":"КіБ","B":"Б"}},"time":{"weeks_short":"{0}тижд.","week_short":"{0}тижд.","years_short":"{0}р","year_short":"{0}р","years":"{0} роки","year":"{0} рік","weeks":"{0} тижнів","week":"{0} тиждень","second_short":"{0}с","second":"{0} секунда","now_short":"щойно","now":"щойно","months_short":"{0}міс.","month_short":"{0}міс.","months":"{0} місяці","month":"{0} місяць","minutes_short":"{0}хв","hours_short":"{0}год","hour_short":"{0}год","day_short":"{0}д","minute_short":"{0}хв","minutes":"{0} хвилини","minute":"{0} хвилина","in_past":"{0} тому","hours":"{0} години","hour":"{0} година","days_short":"{0}д","days":"{0} дні","day":"{0} день","seconds_short":"{0}с","seconds":"{0} секунди","in_future":"через {0}"},"search":{"no_results":"Немає результатів","hashtags":"Хештеги","people":"Люди","people_talking":"{count} людей говорять про це","person_talking":"{count} особа говорить про це"},"user_card":{"statuses":"Дописи","message":"Повідомлення","follow":"Підписатись","follow_unfollow":"Відписатись","follow_sent":"Запит відправлено!","blocked":"Заблоковано!","admin_menu":{"activate_account":"Активувати обліковий запис","deactivate_account":"Деактивувати обліковий запис","delete_account":"Видалити обліковий запис","moderation":"Модерація","delete_user_confirmation":"Ви абсолютно впевнені? Цю дію неможливо буде скасовувати.","delete_user":"Видалити обліковий запис","strip_media":"Вилучити медіа з дописів користувача","force_nsfw":"Позначити всі дописи як NSFW","disable_any_subscription":"Взагалі заборонити підписку на користувача","disable_remote_subscription":"Заборонити підписуватись на користувачів з віддалених інстансів","sandbox":"Показувати дописи лише підписникам","force_unlisted":"Не показувати дописи в стрічці","revoke_moderator":"Позбавити прав модератора","grant_moderator":"Надати права модератора","revoke_admin":"Позбавити прав адміністратора","grant_admin":"Надати права адміністратора","quarantine":"Не розповсюджувати дописи на інших інстансах"},"deny":"Відмовити","block":"Заблокувати","approve":"Схвалити","mention":"Згадати","unsubscribe":"Відписатись","subscribe":"Підписатись","report":"Поскаржитись","per_day":"на день","favorites":"Вподобання","media":"Медіа","show_repeats":"Показати поширення","hide_repeats":"Приховати поширення","its_you":"Це ти!","follows_you":"Підписаний на вас!","followers":"Підписники","followees":"Підписаний(-а)","follow_progress":"Запитую…","mute_progress":"Глушимо…","unmute_progress":"Знімаємо глушення…","unmute":"Зняти глушення","hidden":"Приховано","following":"Підписаний!","block_progress":"Блокуємо…","unblock_progress":"Розблоковуємо…","unblock":"Розблокувати","remote_follow":"Підписатись","muted":"Заглушений","mute":"Заглушити","highlight":{"side":"Смужка ліворуч","striped":"Смугастий фон","solid":"Суцільний фон","disabled":"Не виділяти"},"bot":"Бот","edit_profile":"Редагувати профіль"},"status":{"copy_link":"Скопіювати посилання на допис","status_unavailable":"Допис недоступний","replies_list":"Відповіді:","delete_confirm":"Ви дійсно хочете видалити цей допис?","delete":"Видалити допис","pin":"Закріпити в профілі","status_deleted":"Цей допис був видалений","favorites":"Вподобане","hide_content":"Сховати вміст","show_content":"Показати вміст","hide_full_subject":"Сховати всю тему","show_full_subject":"Показати всю тему","thread_muted_and_words":", має слова:","mute_conversation":"Заглушити розмову","reply_to":"Відповідь","unbookmark":"Видалити із закладок","bookmark":"Додати до закладок","pinned":"Закріплено","unpin":"Відкріпити від профілю","repeats":"Поширення","nsfw":"Дратівливий вміст","thread_muted":"Нитка заглушена","unmute_conversation":"Припинити глушити розмову","external_source":"Зовнішнє джерело","expand":"Розгорнути"},"timeline":{"no_more_statuses":"Більше немає дописів","up_to_date":"Оновлено","reload":"Оновити","show_new":"Показати нові","load_older":"Завантажити давніші дописи","error":"Помилка завантаження стрічки: {0}","collapse":"Згорнути","conversation":"Розмова","no_statuses":"Ніяких статусів","repeated":"поширив(-ла)","no_retweet_hint":"Запис, позначено як \\"тільки для підписників\\" або \\"особисте\\" і тому не може бути поширений","socket_broke":"Втрачено з\'єднання у реальному часі: код {0}","socket_reconnected":"Встановлено з\'єднання у реальному часі"},"user_reporting":{"submit":"Відправити","forward_to":"Переслати до {0}","forward_description":"Цей обліковий запис належить іншому інстансу. Відправити їм копію скарги?","additional_comments":"Додаткове пояснення","add_comment_description":"Скарга буде надіслана модераторам вашого інстансу. Нижче Ви можете додати пояснення чому ви вирішили поскаржитись на цей обліковий запис:","title":"Поскаржитись на {0}","generic_error":"Виникла помилка під час обробки вашого запиту."},"user_profile":{"profile_loading_error":"Вибачте, під час завантаження цього профілю виникла помилка.","profile_does_not_exist":"Вибачте, цей профіль більше не існує.","timeline_title":"Стрічка користувача"}}')}}]); +//# sourceMappingURL=30.064c236fa83ac21c252f.js.map \ No newline at end of file diff --git a/priv/static/static/js/30.064c236fa83ac21c252f.js.map b/priv/static/static/js/30.064c236fa83ac21c252f.js.map new file mode 100644 index 000000000..4d0d88ca9 --- /dev/null +++ b/priv/static/static/js/30.064c236fa83ac21c252f.js.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/30.064c236fa83ac21c252f.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/30.d29cd76b0781bb654f87.js b/priv/static/static/js/30.d29cd76b0781bb654f87.js deleted file mode 100644 index f681595c7..000000000 --- a/priv/static/static/js/30.d29cd76b0781bb654f87.js +++ /dev/null @@ -1,2 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[30],{610:function(e){e.exports=JSON.parse('{"general":{"dismiss":"Закрити","close":"Закрити","verify":"Перевірити","confirm":"Підтвердити","enable":"Увімкнути","disable":"Вимкнути","cancel":"Скасувати","show_less":"Показати менше","show_more":"Показати більше","optional":"необов\'язково","retry":"Спробуйте ще раз","error_retry":"Будь ласка, спробуйте ще раз","generic_error":"Виникла помилка","loading":"Завантаження…","more":"Більше","submit":"Відправити","apply":"Застосувати","peek":"Глянути","role":{"moderator":"Модератор","admin":"Адміністратор"}},"finder":{"error_fetching_user":"Користувача не знайдено","find_user":"Знайти користувача"},"features_panel":{"gopher":"Gopher","pleroma_chat_messages":"Чати","chat":"Оголошення","who_to_follow":"Кого відстежувати","title":"Особливості","scope_options":"Параметри обсягу","media_proxy":"Посередник медіа-даних","text_limit":"Ліміт символів","upload_limit":"Обмеження завантажень"},"exporter":{"processing":"Опрацьовую, скоро ви зможете завантажити файл","export":"Експорт"},"domain_mute_card":{"unmute_progress":"Вмикаю…","unmute":"Вимкнути заглушення","mute_progress":"Вимикаю…","mute":"Ігнорувати"},"shoutbox":{"title":"Оголошення"},"about":{"staff":"Адміністрація","mrf":{"simple":{"media_nsfw_desc":"Даний інстанс примусово позначає медіа в наступних інстансах як дратівливий:","media_nsfw":"Примусове визначення медіа як дратівливого","media_removal_desc":"Поточний інстанс видаляє медіа з дописів на перелічених інстансах:","media_removal":"Видалення медіа","ftl_removal_desc":"Цей інстанс видаляє перелічені інстанси з Федеративної стрічки:","ftl_removal":"Видалення зі стрічки Федеративної мережі","quarantine_desc":"Поточний інстанс надсилатиме тільки публічні дописи наступним інстансам:","quarantine":"Карантин","reject_desc":"Поточний інстанс не прийматиме повідомлення з перелічених інстансів:","accept":"Прийняти","reject":"Відхилити","accept_desc":"Поточний інстанс приймає повідомлення тільки з перелічених інстансів:","simple_policies":"Правила поточного інстансу"},"mrf_policies_desc":"Правила MRF розповсюджуються на даний інстанс. Наступні правила активні:","mrf_policies":"Активувати правила MRF (модуль переписування повідомлень)","keyword":{"is_replaced_by":"→","replace":"Замінити","reject":"Відхилити","ftl_removal":"Прибрати з федеративної стрічки","keyword_policies":"Політика щодо ключових слів"},"federation":"Федерація"}},"login":{"hint":"Увійдіть, щоб доєднатися до дискусії","username":"Ім\'я користувача","register":"Зареєструватись","password":"Пароль","logout":"Вийти","description":"Увійти за допомогою OAuth","login":"Увійти","recovery_code":"Код відновлення","enter_recovery_code":"Введіть код відновлення","authentication_code":"Код автентифікації","heading":{"recovery":"Двофакторне відновлення","totp":"Двофакторна автентифікація"},"enter_two_factor_code":"Введіть двофакторний код автентифікації","placeholder":"напр. stepan"},"importer":{"error":"Під час імпортування файлу сталася помилка.","success":"Імпортовано успішно.","submit":"Відправити"},"image_cropper":{"cancel":"Відмінити","save_without_cropping":"Зберегти не обрізаючи","crop_picture":"Обрізати малюнок","save":"Зберегти"},"polls":{"expired":"Опитування закінчилось {0} тому","expires_in":"Опитування закінчується через {0}","expiry":"Термін опитування","multiple_choices":"Декілька варіантів","single_choice":"Один варіант","add_option":"Додати опцію","type":"Тип опитування","vote":"Проголосувати","votes":"голосів","option":"Відповідь","add_poll":"Додати опитування","not_enough_options":"Замало унікальних варіантів в опитуванні","people_voted_count":"{count} особа проголосувала | {count} осіб проголосувало","votes_count":"{count} голос | {count} голосів"},"notifications":{"reacted_with":"додав реакцію: {0}","migrated_to":"мігрував на","no_more_notifications":"Немає більше сповіщень","repeated_you":"поширив(-ла) ваш допис","read":"Прочитано!","notifications":"Сповіщення","load_older":"Завантажити давніші сповіщення","follow_request":"хоче підписатись на вас","followed_you":"підписався(-лась) на вас","favorited_you":"вподобав(-ла) ваш допис","broken_favorite":"Невідомий допис, шукаю його…","error":"Помилка при оновленні сповіщень: {0}"},"nav":{"chats":"Чати","timelines":"Стрічки","twkn":"Уся відома мережа","about":"Інформація","preferences":"Налаштування","friend_requests":"Запити послідовників","who_to_follow":"Кого відстежувати","search":"Пошук","user_search":"Пошук користувача","bookmarks":"Закладки","timeline":"Домашня стрічка","public_tl":"Публічна стрічка","dms":"Приватні повідомлення","interactions":"Взаємодії","mentions":"Згадування","back":"Назад","administration":"Адміністрування","home_timeline":"Домашня стрічка"},"media_modal":{"next":"Наступна","previous":"Попередня"},"password_reset":{"instruction":"Введіть свою адресу електронної пошти або ім’я користувача. Ми надішлемо вам посилання для скидання пароля.","placeholder":"Ваша електронна адреса або ім\'я користувача","check_email":"Перевірте електронну пошту на наявність посилання для скидання пароля.","return_home":"Повернутися на головну сторінку","too_many_requests":"Ви досягли ліміту спроб, спробуйте ще раз пізніше.","password_reset_required_but_mailer_is_disabled":"Ви повинні скинути свій пароль, але скидання пароля вимкнено. Зверніться до адміністратора інстансу.","password_reset_disabled":"Скидання пароля вимкнено. Зверніться до адміністратора інстансу.","password_reset_required":"Для входу потрібно скинути пароль.","password_reset":"Відновити пароль","forgot_password":"Забули пароль?"},"chats":{"you":"Ви:","message_user":"Повідомлення для {nickname}","delete":"Видалити","chats":"Чати","new":"Новий чат","empty_message_error":"Не вдається опублікувати порожнє повідомлення","more":"Більше","delete_confirm":"Ви дійсно хочете видалити це повідомлення?","error_loading_chat":"Під час завантаження чату сталася помилка.","error_sending_message":"Під час надсилання повідомлення сталася помилка.","empty_chat_list_placeholder":"У вас ще немає чатів. Почніть новий чат!"},"file_type":{"audio":"Аудіо","video":"Відео","image":"Зображення","file":"Файл"},"display_date":{"today":"Сьогодні"},"interactions":{"load_older":"Завантажити давніші взаємодії","follows":"Нові підписки","favs_repeats":"Поширення та вподобайки","moves":"Міграції користувачів"},"errors":{"storage_unavailable":"Pleroma не змогла отримати доступ до сховища браузеру. Ваша сесія та налаштування не будуть збережені, це може спричинити непередбачувані проблеми. Спробуйте увімкнути cookie."},"emoji":{"stickers":"Стікери","custom":"Користувацькі емодзі","search_emoji":"Пошук емодзі","keep_open":"Тримати панель відкритою","add_emoji":"Додати емодзі","emoji":"Емодзі","load_all":"Всі {emojiAmount} эмодзі завантажуються","load_all_hint":"Завантажені перші {saneAmount} емодзі, завантаження всіх емодзі може призвести до проблем з продуктивністю.","unicode":"Стандартні емодзі"},"post_status":{"content_type":{"text/bbcode":"BBCode","text/markdown":"Markdown","text/html":"HTML","text/plain":"Текстові дані"},"attachments_sensitive":"Позначити вкладення як чутливі","account_not_locked_warning_link":"замкнена","account_not_locked_warning":"Ваша обліковка не {0}. Будь-хто може відстежувати вас для перегляду дописів тільки для підписників.","new_status":"Створити допис","direct_warning_to_first_only":"Цей допис побачать лише користувачі, що були згадані на початку повідомлення.","direct_warning_to_all":"Цей допис побачать всі згадані користувачі.","default":"Що нового?","content_warning":"Тема (необов\'язково)","preview":"Попередній перегляд","posting":"Відправляється","empty_status_error":"Не можу опублікувати пустий статус без вкладень","scope":{"unlisted":"Непублічний - цей допис буде відсутній у публічних стрічках","public":"Публічний - цей допис побачать усі","private":"Для читачів - цей допис побачать лише ваші читачі","direct":"Приватний - цей допис побачать лише згадані користувачі"},"scope_notice":{"unlisted":"Цей допис не буде видно в публічній стрічці та усій відомій мережі","private":"Цей допис побачать лише ваші підписники","public":"Цей допис бачитимуть усі"},"preview_empty":"Пустий","media_description_error":"Не вдалось оновити медіа, спробуйте ще раз","media_description":"Опис медіа","post":"Опублікувати"},"settings":{"blocks_imported":"Блокування імпортовані! Їх обробка триватиме певний час.","block_import_error":"Помилка імпортування блокувань","block_import":"Імпорт блокувань","block_export_button":"Експорт блокувань у файл CSV","block_export":"Експорт блокувань","bio":"Про Вас","background":"Обкладинка","app_name":"Назва програми","follow_export":"Експортувати відстежуваних","filtering_explanation":"Усі статуси з цими словами будуть приховані, один на рядок","filtering":"Фільтрування","export_theme":"Зберегти переднабір","avatar_size_instruction":"Рекомендований мінімальний розмір для зображень аватара становить 150x150 пікселів.","delete_account_instructions":"Введіть ваш пароль в поле нижче, аби підтвердити видалення облікового запису.","delete_account_error":"Під час видалення вашого облікового запису виникла проблема. Якщо це трапляється постійно, будь ласка, зверніться до адміністратора вашого сервера.","delete_account_description":"Остаточно видалити ваш обліковий запис та усі ваші повідомлення.","delete_account":"Видалити обліковий запис","default_vis":"Обсяг видимості за замовчуванням","data_import_export_tab":"Імпорт/експорт даних","current_password":"Поточний пароль","confirm_new_password":"Підтвердіть новий пароль","composing":"Складання відповіді","collapse_subject":"Згорнути дописи з темами","changed_password":"Пароль успішно змінено!","change_password_error":"Не вдалося змінити пароль.","change_password":"Змінити пароль","cRed":"Червоний (Скасувати)","cGreen":"Зелений (Поширити)","cOrange":"Жовтогарячий (Вподобайки)","cBlue":"Блакитний (Відповісти, читати)","btnRadius":"Кнопки","blocks_tab":"Блокування","avatarRadius":"Аватарки","avatarAltRadius":"Аватарки у сповіщеннях","avatar":"Аватар","attachments":"Вкладення","attachmentRadius":"Вкладення","general":"Загальні","foreground":"Передній план","follows_imported":"Відстежуваних імпортовано! Їхня обробка потребує часу.","follow_import_error":"Помилка імпортування відстежуваних","follow_import":"Імпортувати відстежуваних","follow_export_button":"Експортувати відстежуваних до csv файлу","lock_account_description":"Обмежте свій обліковий запис лише схваленими читачами","links":"Посилання","limited_availability":"Недоступно у вашому браузері","invalid_theme_imported":"Вибраний файл не є темою Pleroma. У вашу тему не внесено жодних змін.","interfaceLanguage":"Мова оболонки","interface":"Оболонка","instance_default_simple":"(за замовчуванням)","instance_default":"(за замовчуванням: {value})","checkboxRadius":"Прапорці","inputRadius":"Поля вводу","import_theme":"Завантажити переднабір","import_followers_from_a_csv_file":"Імпортувати відстежуваних з csv файлу","import_blocks_from_a_csv_file":"Імпортувати заблокованих з csv файлу","hide_filtered_statuses":"Сховати відфільтровані статуси","hide_user_stats":"Приховувати статистику користувачів (напр. кількість відстежувачів)","hide_post_stats":"Приховувати статистику дописів (напр. кількість вподобаних)","use_one_click_nsfw":"Відкривати NSFW вкладення одним кліком миші","preload_images":"Передзавантажувати світлини","hide_isp":"Сховати панель з особливостями сервера","max_thumbnails":"Максимальна кількість мініатюр на повідомлення","hide_muted_posts":"Приховати повідомлення приглушених користувачів","hide_attachments_in_tl":"Приховувати вкладення у стрічці","hide_attachments_in_convo":"Приховувати вкладення у розмовах","mutes_tab":"Заглушені","loop_video_silent_only":"Зациклити відео без звуку (напр. Mastodon \\"gifs\\")","loop_video":"Зациклити відео","mfa":{"verify":{"desc":"Щоб увімкнути двофакторну автентифікацію, введіть код з вашого застосунку для двофакторної автентифікації:"},"scan":{"desc":"Відскануйте цей QR-код за допомогою програми двофакторної автентифікації або введіть текстовий ключ:","title":"Сканування","secret_code":"Ключ"},"authentication_methods":"Методи автентифікації","recovery_codes_warning":"Запишіть ці коди і тримайте в безпечному місці - інакше ви їх ніколи не побачите. Якщо ви втратите доступ до OTP додатку - без резервних кодів ви не зможете отримати доступ до свого облікового запису.","waiting_a_recovery_codes":"Отримую резервні коди…","recovery_codes":"Резервні коди.","warning_of_generate_new_codes":"Після отримання нових резервних кодів, старі перестануть працювати.","generate_new_recovery_codes":"Згенерувати нові резервні коди","title":"Двофакторна автентифікація","confirm_and_enable":"Підтвердити та увімкнути OTP","wait_pre_setup_otp":"попереднє налаштування OTP","setup_otp":"Налаштування OTP","otp":"OTP"},"enter_current_password_to_confirm":"Введіть свій поточний пароль","security":"Безпека","domain_mutes":"Домени","discoverable":"Дозволити виявлення цього облікового запису в результатах пошуку та інших службах","mutes_and_blocks":"Заглушення та блокування","changed_email":"Email успішно змінено!","change_email_error":"Сталася помилка під час зміни email.","change_email":"Змінити email","bot":"Це обліковий запис бота","import_mutes_from_a_csv_file":"Імпорт заглушених з csv файлу","mutes_imported":"Заглушені імпортовані! Їх обробка триватиме певний час.","mute_export_button":"Експорт заглушених у csv файл","mute_import_error":"Під час імпорту заглушених сталася помилка","mute_import":"Імпорт ігнорувань","mute_export":"Експорт ігнорувань","new_password":"Новий пароль","new_email":"Нова ел. пошта","name_bio":"Особисті дані","set_new_profile_banner":"Встановити новий банер","set_new_avatar":"Встановити новий аватар","security_tab":"Безпека","saving_ok":"Налаштування збережені","saving_err":"Помилка при збереженні налаштувань","reply_visibility_self":"Показувати лише адресовані мені відповіді","reply_visibility_following":"Показувати відповіді адресовані лише мені або користувачам, яких я читаю","reply_visibility_all":"Показати всі відповіді","replies_in_timeline":"Відповіді в стрічці","profile_tab":"Профіль","profile_banner":"Банер профілю","profile_background":"Обкладинка профілю","revoke_token":"Відкликати","oauth_tokens":"OAuth ключі","token":"Ключ","refresh_token":"Оновити ключ","valid_until":"Діє до","use_contain_fit":"Не обрізати краї мініатюр","name":"Ім\'я","profile_fields":{"value":"Зміст","name":"Назва","add_field":"Додати поле","label":"Метадані профілю"},"play_videos_in_modal":"Відтворювати відео у спливаючій рамці","accent":"Акцент","chatMessageRadius":"Повідомлення в бесіді","notification_mutes":"Щоб перестати отримувати сповіщення від певного користувача, заглушіть його.","user_mutes":"Користувачі","no_mutes":"Заглушені відсутні","emoji_reactions_on_timeline":"Показувати реакції емоджі на стрічці","pad_emoji":"Автоматично додавати простір з обидвох сторін емоджі","allow_following_move":"Дозволити автостеження при переміщенні на інший інстанс","set_new_profile_background":"Встановити нову обкладинку профілю","radii_help":"Радіус заокруглення кутів інтерфейсу (в пікселях)","presets":"Переднабір","show_moderator_badge":"Показувати значок модератора в моєму профілі","show_admin_badge":"Показувати значок адміністратора в моєму профілі","hide_followers_description":"Не показувати хто підписаний на мене","hide_follows_description":"Не показувати на кого я підписаний","no_rich_text_description":"Видалення всього форматування тексту з усіх дописів","notification_visibility_emoji_reactions":"Реакції","notification_visibility_moves":"Міграція користувача","notification_visibility_repeats":"Поширення допису","notification_visibility_mentions":"Згадування","notification_visibility_likes":"Вподобайки","notification_visibility_follows":"Нові підписки","notification_visibility":"Отримувати сповіщення про наступні події","settings":"Налаштування","panelRadius":"Панелі","text":"Текст","tooltipRadius":"Підказки/попередження","values":{"true":"так","false":"ні"},"user_settings":"Користувацькі налаштування","upload_a_photo":"Завантажити фото","theme":"Тема","style":{"switcher":{"keep_fonts":"Залишити шрифти","keep_roundness":"Залишити скруглення","keep_opacity":"Залишити прозорості","keep_shadows":"Залишити тіні","keep_color":"Залишити кольори","use_source":"Нова версія","use_snapshot":"Стара версія","load_theme":"Завантажити тему","reset":"Скинути","clear_all":"Очистити все","help":{"older_version_imported":"Імпортований файл було створено в старішій версії FE.","future_version_imported":"Імпортований файл було створено в новішій версії FE.","v2_imported":"Файл, який ви імпортували, був створений для старішої версії інтерфейсу Pleroma. Ми намагаємось покращити сумісність, але все одно можуть бути розбіжності.","upgraded_from_v2":"PleromaFE було оновлено, тема може дещо відрізнятися від тієї, яку ви пам’ятаєте.","snapshot_source_mismatch":"Конфлікт версій: Швидше за все, FE повернуто до попередньої версії та оновлено знову, якщо ви змінили тему за допомогою старішої версії FE, швидше за все, ви хочете використовувати стару версію, інакше використовуйте нову версію.","migration_napshot_gone":"З якоїсь причини знімок зник, деякі речі можуть бути не такими, як ви пам’ятаєте.","migration_snapshot_ok":"Для безпеки, знімок теми завантажено. Ви можете спробувати завантажити дані теми.","fe_downgraded":"Версію PleromaFE змінено на старшу.","fe_upgraded":"Двигун теми PleromaFE оновлено.","snapshot_missing":"У файлі немає жодного знімка теми, тому він може виглядати інакше, ніж передбачалося спочатку.","snapshot_present":"Знімок теми завантажено, тому всі значення було перезаписано. Натомість ви можете завантажити правильні дані теми."},"keep_as_is":"Залишити як є","clear_opacity":"Очистити прозорість","save_load_hint":"Параметри \\"Зберегти\\" зберігають поточні параметри під час вибору або завантаження тем, вони також зберігають зазначені параметри під час експорту теми. Коли всі прапорці знято, експортування теми збереже все."},"common":{"color":"Колір","contrast":{"context":{"text":"для тексту","18pt":"для великого (18pt+) тексту"},"level":{"bad":"Не відповідає жодним вимогам щодо доступності","aaa":"відповідає вимогам рівня ААA (рекомендований)","aa":"відповідає вимогам рівня АА (мінімальний)"},"hint":"Рівень контрасту: {ratio}, {level} {context}"},"opacity":"Прозорість"},"preview":{"mono":"змісту","text":"Трохи більше {0} та {1}","button":"Кнопка","error":"Приклад помилки","content":"Зміст","header":"Попередній перегляд","link":"невеличке посилання","header_faint":"Це нормально","input":"Що нового?","checkbox":"Я переглянув умови використання","fine_print":"Прочитайте наш {0} аби нічого нового не дізнатись!","faint_link":"корисний підручник"},"shadows":{"components":{"button":"Кнопка","input":"Поле вводу","panel":"Панель","panelHeader":"Заголовок панелі","avatarStatus":"Аватар користувача (в стрічці)","avatar":"Аватар користувача (профіль)","buttonPressedHover":"Кнопка (натиснута + наведений курсор)","buttonPressed":"Кнопка (натиснута)","buttonHover":"Кнопка (при наведенні)","popup":"Спливаючі вікна та підказки","topBar":"Верхня панель"},"component":"Компонент","filter_hint":{"inset_classic":"Тіні спрямовані всередину використовуватимуть {0}","spread_zero":"Тіні з поширенням > 0 відображатимуться так, ніби було встановлено нуль","avatar_inset":"Зауважте, що використання як вставних, так і невставних тіней на аватарах може привести до непередбачуваних результатів із прозорими аватарами.","drop_shadow_syntax":"{0} не підтримує параметр {1} та ключове слово {2}.","always_drop_shadow":"Увага! Ця тінь завжди використовує {0}, якщо підтримується браузером."},"inset":"Всередину","blur":"Розмиття","shadow_id":"Тінь №{value}","override":"Перевизначити","_tab_label":"Тінь і підсвічування","hintV3":"Для тіней ви також можете використовувати позначення {0} для використання іншого кольорового слота.","spread":"Розмах"},"fonts":{"components":{"input":"Поля вводу","interface":"Інтерфейс","postCode":"Моноширинний текст в дописі (форматований текст)","post":"Текст допису"},"_tab_label":"Шрифти","size":"Розмір (в пікселях)","custom":"Нестандартний","weight":"Товщина","family":"Назва шрифту","help":"Виберіть шрифт для елементів інтерфейсу. Для \\"нестандартного\\" потрібно ввести точну назву шрифту, так як вона відображається в системі."},"advanced_colors":{"alert_warning":"Попередження","underlay":"Тло","inputs":"Поля входу","buttons":"Кнопки","borders":"Кордони","top_bar":"Верхня панель","panel_header":"Заголовок панелі","badge_notification":"Сповіщення","popover":"Підказки, меню, поповери","badge":"Тло значків","post":"Дописи/Дані користувачів","alert_neutral":"Нейтральний","alert_error":"Помилки","alert":"Фон сповіщень","_tab_label":"Додатково","selectedPost":"Вибраний допис","highlight":"Виділені елементи","poll":"Діаграма опитування","icons":"Іконки","faint_text":"Затемнений текст","chat":{"border":"Кайма","outgoing":"Вихідні повідомлення","incoming":"Вхідні повідомлення"},"toggled":"Переключено","disabled":"Вимкнено","selectedMenu":"Вибраний пункт меню","tabs":"Вкладки","pressed":"Натиснуто","wallpaper":"Шпалери"},"common_colors":{"rgbo":"Піктограми, акценти, значки","foreground_hint":"Перегляньте вкладку \\"Додатково\\" для більшого контролю","main":"Загальні кольори","_tab_label":"Загальні"},"radii":{"_tab_label":"Скруглення"}},"enable_web_push_notifications":"Увімкнути web push-сповіщення","notifications":"Сповіщення","fun":"Розваги","notification_setting_privacy":"Приватність","notification_setting_filters":"Фільтри","reset_avatar":"Скинути аватар","reset_profile_background":"Скинути обкладинку профілю","reset_avatar_confirm":"Ви дійсно хочете скинути аватар?","reset_profile_banner":"Скинули банер профілю","hide_follows_count_description":"Не показувати кількість підписників","reset_banner_confirm":"Ви дійсно хочете скинути банер?","reset_background_confirm":"Ви дійсно хочете скинути обкладинку?","subject_line_behavior":"Вигляд теми при відповіді","subject_input_always_show":"Завжди показувати поле для вводу теми","minimal_scopes_mode":"Мінімізувати набір варіантів осягу для допису","scope_copy":"Копіювати осяг при відповіді (завжди ввімкнено для особистих повідомлень)","search_user_to_mute":"Шукайте кого ви хочете заглушити","search_user_to_block":"Шукайте кого ви хочете заблокувати","autohide_floating_post_button":"Автоматично ховати кнопку \\"Новий допис\\" (в мобільній версії)","pause_on_unfocused":"Призупинити трансляцію, коли вкладка неактивна","hide_followers_count_description":"Не показувати кількість моїх підписників","notification_blocks":"Блокування користувача зупиняє всі сповіщення від нього, а також скасовує його відстеження.","notification_setting_hide_notification_contents":"Ховати відправника та вміст push-сповіщень","notification_setting_block_from_strangers":"Блокувати сповіщення від користувачів за якими ви не слідкуєте","type_domains_to_mute":"Пошук доменів для заглушення","nsfw_clickthrough":"Увімкнути приховування NSFW медіа","greentext":"Мемний текст","virtual_scrolling":"Оптимізувати оновлення стрічки","theme_help_v2_2":"Піктограми під деякими записами є показниками контрасту між фоном та текстом. Коли ви наведете на них курсор, ви отримаєте детальну інформацію. Пам\'ятайте, якщо ви використовуєте прозорість, індикатори показують найгірший варіант.","theme_help_v2_1":"Ви також можете замінити кольори та видимість окремих компонентів, перемикаючи прапорці, використовуйте \\"Очистити все\\", щоб видалити всі заміни.","theme_help":"Використовувати шістнадцяткові коди кольору (#rrggbb) щоб редагувати тему.","no_blocks":"Блокування відсутні","subject_line_mastodon":"Як в mastodon: просто скопіювати","subject_line_email":"Як в email: \\"re: тема\\"","useStreamingApiWarning":"(Не рекомендується, експериментально, повідомлення можуть зникати)","useStreamingApi":"Отримувати повідомлення та сповіщення в режимі реального часу","streaming":"Ввімкнути автоматичне завантаження нових повідомлень при прокручуванні вгору","stop_gifs":"Відтворювати GIF анімації тільки при наведенні","post_status_content_type":"Тип вмісту допису","subject_line_noop":"Не копіювати","version":{"frontend_version":"Версія фронтенду","backend_version":"Версія бекенду","title":"Версія"},"hide_wallpaper":"Сховати шпалери екземпляру","more_settings":"Більше налаштувань","sensitive_by_default":"Визначати допис як дратівливий за замовчуванням","reply_visibility_self_short":"Показувати відповіді лише мені","reply_visibility_following_short":"Показувати відповіді тим, на кого я підписаний","hide_all_muted_posts":"Приховати приглушені повідомлення","hide_media_previews":"Приховати попередній перегляд медіа","word_filter":"Фільтр слів","setting_changed":"Конфігурація відрізняється від типової","save":"Зберегти зміни","file_export_import":{"errors":{"file_slightly_new":"Другорядна версія файлу відрізняється, деякі налаштування можуть бути не прийняті","file_too_old":"Несумісна основна версія: {fileMajor}, версія файлу занадто стара і не підтримується (мінімальна версія налаштувань {feMajor})","file_too_new":"Несумісна основна версія: {fileMajor}, ця версія PleromaFE ({feMajor}) занадто стара для його обробки","invalid_file":"Вибраний файл не є резервною копією налаштувань Pleroma. Ніяких змін не було зроблено."},"restore_settings":"Відновити налаштування з файлу","backup_settings_theme":"Резервне копіювання налаштувань та теми у файл","backup_settings":"Резервне копіювання налаштувань у файл","backup_restore":"Резервне копіювання налаштувань"}},"selectable_list":{"select_all":"Вибрати все"},"remote_user_resolver":{"error":"Не знайдено.","searching_for":"Шукаю","remote_user_resolver":"Пошукова система для віддалених користувачів"},"registration":{"validations":{"password_confirmation_match":"пароль та підтвердження паролю мають бути однаковими","password_confirmation_required":"не може бути порожнім","password_required":"не може бути порожнім","email_required":"не може бути порожнім","fullname_required":"не може бути порожнім","username_required":"не може бути порожнім"},"bio_placeholder":"напр.\\nНаш народ завжди прагне волі для себе і бажає її для інших народів. Він боровся і бореться за правду і справедливість. Ми хочемо жити у згоді і взаємному шануванні з усіми народами доброї волі. Такі самі права визнаємо за іншими народами, за які боремося для себе.","fullname_placeholder":"напр. Степан Бандера","username_placeholder":"напр. stepan","new_captcha":"Натисніть на зображення, щоб оновити код, якщо він нерозбірливий","token":"Ключ запрошення","registration":"Реєстрація","password_confirm":"Підтвердження паролю","fullname":"Відображене ім\'я","email":"Ел. пошта","bio":"Про себе","captcha":"CAPTCHA","register":"Зареєструватися","reason_placeholder":"Цей інстанс обробляє запити на реєстрацію вручну.\\nРозкажіть адміністрації чому ви хочете зареєструватися.","reason":"Причина реєстрації"},"who_to_follow":{"who_to_follow":"На кого підписатися","more":"Більше"},"tool_tip":{"repeat":"Поширити","reply":"Відповісти","add_reaction":"Додати реакцію","user_settings":"Налаштування користувача","favorite":"Подобається","reject_follow_request":"Відхилити запит на підписку","accept_follow_request":"Прийняти запит на підписку","media_upload":"Завантажити медіа","bookmark":"Додати до закладок"},"upload":{"error":{"base":"Збій при завантаженні.","file_too_big":"Файл завеликий [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]","default":"Спробуйте ще раз пізніше","message":"Помилка завантаження: {0}"},"file_size_units":{"TiB":"ТіБ","GiB":"ГіБ","MiB":"МіБ","KiB":"КіБ","B":"Б"}},"time":{"weeks_short":"{0}тижд.","week_short":"{0}тижд.","years_short":"{0}р","year_short":"{0}р","years":"{0} роки","year":"{0} рік","weeks":"{0} тижнів","week":"{0} тиждень","second_short":"{0}с","second":"{0} секунда","now_short":"щойно","now":"щойно","months_short":"{0}міс.","month_short":"{0}міс.","months":"{0} місяці","month":"{0} місяць","minutes_short":"{0}хв","hours_short":"{0}год","hour_short":"{0}год","day_short":"{0}д","minute_short":"{0}хв","minutes":"{0} хвилини","minute":"{0} хвилина","in_past":"{0} тому","hours":"{0} години","hour":"{0} година","days_short":"{0}д","days":"{0} дні","day":"{0} день","seconds_short":"{0}с","seconds":"{0} секунди","in_future":"через {0}"},"search":{"no_results":"Немає результатів","hashtags":"Хештеги","people":"Люди","people_talking":"{count} людей говорять про це","person_talking":"{count} особа говорить про це"},"user_card":{"statuses":"Дописи","message":"Повідомлення","follow":"Підписатись","follow_unfollow":"Відписатись","follow_again":"Відправити запит знову?","follow_sent":"Запит відправлено!","blocked":"Заблоковано!","admin_menu":{"activate_account":"Активувати обліковий запис","deactivate_account":"Деактивувати обліковий запис","delete_account":"Видалити обліковий запис","moderation":"Модерація","delete_user_confirmation":"Ви абсолютно впевнені? Цю дію неможливо буде скасовувати.","delete_user":"Видалити обліковий запис","strip_media":"Вилучити медіа з дописів користувача","force_nsfw":"Позначити всі дописи як NSFW","disable_any_subscription":"Взагалі заборонити підписку на користувача","disable_remote_subscription":"Заборонити підписуватись на користувачів з віддалених інстансів","sandbox":"Показувати дописи лише підписникам","force_unlisted":"Не показувати дописи в стрічці","revoke_moderator":"Позбавити прав модератора","grant_moderator":"Надати права модератора","revoke_admin":"Позбавити прав адміністратора","grant_admin":"Надати права адміністратора","quarantine":"Не розповсюджувати дописи на інших інстансах"},"deny":"Відмовити","block":"Заблокувати","approve":"Схвалити","mention":"Згадати","unsubscribe":"Відписатись","subscribe":"Підписатись","report":"Поскаржитись","per_day":"на день","favorites":"Вподобання","media":"Медіа","show_repeats":"Показати поширення","hide_repeats":"Приховати поширення","its_you":"Це ти!","follows_you":"Підписаний на вас!","followers":"Підписники","followees":"Підписаний(-а)","follow_progress":"Запитую…","mute_progress":"Глушимо…","unmute_progress":"Знімаємо глушення…","unmute":"Зняти глушення","hidden":"Приховано","following":"Підписаний!","block_progress":"Блокуємо…","unblock_progress":"Розблоковуємо…","unblock":"Розблокувати","remote_follow":"Підписатись","muted":"Заглушений","mute":"Заглушити","highlight":{"side":"Смужка ліворуч","striped":"Смугастий фон","solid":"Суцільний фон","disabled":"Не виділяти"},"bot":"Бот"},"status":{"copy_link":"Скопіювати посилання на допис","status_unavailable":"Допис недоступний","replies_list":"Відповіді:","delete_confirm":"Ви дійсно хочете видалити цей допис?","delete":"Видалити допис","pin":"Закріпити в профілі","status_deleted":"Цей допис був видалений","favorites":"Вподобане","hide_content":"Сховати вміст","show_content":"Показати вміст","hide_full_subject":"Сховати всю тему","show_full_subject":"Показати всю тему","thread_muted_and_words":", має слова:","mute_conversation":"Заглушити розмову","reply_to":"Відповідь","unbookmark":"Видалити із закладок","bookmark":"Додати до закладок","pinned":"Закріплено","unpin":"Відкріпити від профілю","repeats":"Поширення","nsfw":"Дратівливий вміст","thread_muted":"Нитка заглушена","unmute_conversation":"Припинити глушити розмову","external_source":"Зовнішнє джерело","expand":"Розгорнути"},"timeline":{"no_more_statuses":"Більше немає дописів","up_to_date":"Оновлено","reload":"Оновити","show_new":"Показати нові","load_older":"Завантажити давніші дописи","error":"Помилка завантаження стрічки: {0}","collapse":"Згорнути","conversation":"Розмова","no_statuses":"Ніяких статусів","repeated":"поширив(-ла)","no_retweet_hint":"Запис, позначено як \\"тільки для підписників\\" або \\"особисте\\" і тому не може бути поширений","socket_broke":"Втрачено з\'єднання у реальному часі: код {0}","socket_reconnected":"Встановлено з\'єднання у реальному часі"},"user_reporting":{"submit":"Відправити","forward_to":"Переслати до {0}","forward_description":"Цей обліковий запис належить іншому інстансу. Відправити їм копію скарги?","additional_comments":"Додаткове пояснення","add_comment_description":"Скарга буде надіслана модераторам вашого інстансу. Нижче Ви можете додати пояснення чому ви вирішили поскаржитись на цей обліковий запис:","title":"Поскаржитись на {0}","generic_error":"Виникла помилка під час обробки вашого запиту."},"user_profile":{"profile_loading_error":"Вибачте, під час завантаження цього профілю виникла помилка.","profile_does_not_exist":"Вибачте, цей профіль більше не існує.","timeline_title":"Стрічка користувача"}}')}}]); -//# sourceMappingURL=30.d29cd76b0781bb654f87.js.map \ No newline at end of file diff --git a/priv/static/static/js/30.d29cd76b0781bb654f87.js.map b/priv/static/static/js/30.d29cd76b0781bb654f87.js.map deleted file mode 100644 index dbf01dc8d..000000000 --- a/priv/static/static/js/30.d29cd76b0781bb654f87.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/30.d29cd76b0781bb654f87.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/31.15b545bb42e21d39c678.js b/priv/static/static/js/31.15b545bb42e21d39c678.js deleted file mode 100644 index 3c5d8089e..000000000 --- a/priv/static/static/js/31.15b545bb42e21d39c678.js +++ /dev/null @@ -1,2 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[31],{611:function(e){e.exports=JSON.parse('{"chat":{"title":"聊天"},"exporter":{"export":"导出","processing":"正在处理,稍后会提示您下载文件"},"features_panel":{"chat":"聊天","gopher":"Gopher","media_proxy":"媒体代理","scope_options":"可见范围设置","text_limit":"文字数量限制","title":"功能","who_to_follow":"推荐关注","pleroma_chat_messages":"Pleroma 聊天","upload_limit":"上传限制"},"finder":{"error_fetching_user":"获取用户时发生错误","find_user":"寻找用户"},"general":{"apply":"应用","submit":"提交","more":"更多","generic_error":"发生了一个错误","optional":"可选","show_more":"展开","show_less":"收起","cancel":"取消","disable":"禁用","enable":"启用","confirm":"确认","verify":"验证","dismiss":"忽略","peek":"预览","close":"关闭","retry":"重试","error_retry":"请重试","loading":"载入中…","role":{"moderator":"监察员","admin":"管理员"}},"image_cropper":{"crop_picture":"裁剪图片","save":"保存","save_without_cropping":"保存未经裁剪的图片","cancel":"取消"},"importer":{"submit":"提交","success":"导入成功。","error":"导入此文件时出现一个错误。"},"login":{"login":"登录","description":"用 OAuth 登录","logout":"登出","password":"密码","placeholder":"例如:lain","register":"注册","username":"用户名","hint":"登录后加入讨论","authentication_code":"验证码","enter_recovery_code":"输入一个恢复码","enter_two_factor_code":"输入一个双重因素验证码","recovery_code":"恢复码","heading":{"totp":"双重因素验证","recovery":"双重因素恢复"}},"media_modal":{"previous":"往前","next":"往后"},"nav":{"about":"关于","back":"后退","chat":"本站聊天","friend_requests":"关注请求","mentions":"提及","interactions":"互动","dms":"私信","public_tl":"公共时间线","timeline":"时间线","twkn":"已知网络","user_search":"用户搜索","search":"搜索","who_to_follow":"推荐关注","preferences":"偏好设置","administration":"管理员","chats":"聊天","timelines":"时间线","bookmarks":"书签","home_timeline":"主页时间线"},"notifications":{"broken_favorite":"未知的状态,正在搜索中…","favorited_you":"喜欢了你的状态","followed_you":"关注了你","load_older":"加载更早的通知","notifications":"通知","read":"已阅!","repeated_you":"转发了你的状态","no_more_notifications":"没有更多的通知","reacted_with":"作出了 {0} 的反应","migrated_to":"迁移到了","follow_request":"想要关注你","error":"取得通知时发生错误:{0}"},"polls":{"add_poll":"增加投票","add_option":"增加选项","option":"选项","votes":"投票","vote":"投票","type":"投票类型","single_choice":"单选","multiple_choices":"多选","expiry":"投票期限","expires_in":"投票于 {0} 后结束","expired":"投票 {0} 前已结束","not_enough_options":"投票的选项太少","votes_count":"{count} 票 | {count} 票","people_voted_count":"{count} 人已投票 | {count} 人已投票"},"stickers":{"add_sticker":"添加贴纸"},"interactions":{"favs_repeats":"转发和喜欢","follows":"新的关注者","load_older":"加载更早的互动","moves":"用户迁移"},"post_status":{"new_status":"发布新状态","account_not_locked_warning":"你的帐号没有 {0}。任何人都可以关注你并浏览你的上锁内容。","account_not_locked_warning_link":"上锁","attachments_sensitive":"标记附件为敏感内容","content_type":{"text/plain":"纯文本","text/html":"HTML","text/markdown":"Markdown","text/bbcode":"BBCode"},"content_warning":"主题(可选)","default":"刚刚抵达上海。","direct_warning_to_all":"本条内容只有被提及的用户能够看到。","direct_warning_to_first_only":"本条内容只有被在消息开始处提及的用户能够看到。","posting":"发送中","scope_notice":{"public":"本条内容可以被所有人看到","private":"关注你的人才能看到本条内容","unlisted":"本条内容既不在公共时间线,也不会在所有已知网络上可见"},"scope":{"direct":"私信 - 只发送给被提及的用户","private":"仅关注者 - 只有关注了你的人能看到","public":"公共 - 发送到公共时间轴","unlisted":"不公开 - 不会发送到公共时间轴"},"preview_empty":"空的","preview":"预览","media_description":"媒体描述","media_description_error":"更新媒体失败,请重试","empty_status_error":"不能发布没有内容、没有附件的发文","post":"发送"},"registration":{"bio":"简介","email":"电子邮箱","fullname":"显示名称","password_confirm":"确认密码","registration":"注册","token":"邀请码","captcha":"CAPTCHA","new_captcha":"点击图片获取新的验证码","username_placeholder":"例如:lain","fullname_placeholder":"例如:岩仓玲音","bio_placeholder":"例如:\\n你好,我是玲音。\\n我是一个住在日本郊区的动画少女。你可能在 Wired 见过我。","validations":{"username_required":"不能留空","fullname_required":"不能留空","email_required":"不能留空","password_required":"不能留空","password_confirmation_required":"不能留空","password_confirmation_match":"密码不一致"},"reason_placeholder":"此实例的注册需要手动批准。\\n请让管理员知道您为什么想要注册。","reason":"注册理由","register":"注册"},"selectable_list":{"select_all":"选择全部"},"settings":{"app_name":"App 名称","security":"安全","enter_current_password_to_confirm":"输入您当前的密码来确认您的身份","mfa":{"otp":"OTP","setup_otp":"设置 OTP","wait_pre_setup_otp":"预设 OTP","confirm_and_enable":"确认并启用 OTP","title":"双因素验证","generate_new_recovery_codes":"生成新的恢复码","warning_of_generate_new_codes":"当您生成新的恢复码时,您旧的恢复码将会失效。","recovery_codes":"恢复码。","waiting_a_recovery_codes":"正在接收备份码…","recovery_codes_warning":"抄写这些号码,或者将其保存在安全的地方。这些号码不会再次显示。如果您无法访问您的 2FA app,也丢失了您的恢复码,您就再也无法登录您的账号了。","authentication_methods":"身份验证方法","scan":{"title":"扫一下","desc":"使用您的双因素验证 app,扫描这个二维码,或者输入这些文字密钥:","secret_code":"密钥"},"verify":{"desc":"要启用双因素验证,请输入您的双因素验证 app 里的数字:"}},"attachmentRadius":"附件","attachments":"附件","avatar":"头像","avatarAltRadius":"头像(通知)","avatarRadius":"头像","background":"背景","bio":"简介","block_export":"屏蔽名单导出","block_export_button":"导出你的屏蔽名单到一个 csv 文件","block_import":"屏蔽名单导入","block_import_error":"导入屏蔽名单出错","blocks_imported":"屏蔽名单导入成功!需要一点时间来处理。","blocks_tab":"屏蔽","btnRadius":"按钮","cBlue":"蓝色(回复,关注)","cGreen":"绿色(转发)","cOrange":"橙色(喜欢)","cRed":"红色(取消)","change_password":"修改密码","change_password_error":"修改密码的时候出了点问题。","changed_password":"成功修改了密码!","collapse_subject":"折叠带主题的内容","composing":"写作","confirm_new_password":"确认新密码","current_avatar":"当前头像","current_password":"当前密码","current_profile_banner":"您当前的横幅图片","data_import_export_tab":"数据导入/导出","default_vis":"默认可见范围","delete_account":"删除账户","delete_account_description":"永久删除你的帐号和所有数据。","delete_account_error":"删除账户时发生错误,如果一直删除不了,请联系实例管理员。","delete_account_instructions":"在下面输入您的密码来确认删除账户。","avatar_size_instruction":"推荐的头像图片最小尺寸为 150x150 像素。","export_theme":"导出预置主题","filtering":"过滤器","filtering_explanation":"所有包含以下词汇的内容都会被隐藏,一行一个","follow_export":"导出关注","follow_export_button":"将关注导出成 csv 文件","follow_import":"导入关注","follow_import_error":"导入关注时错误","follows_imported":"关注已导入!尚需要一些时间来处理。","foreground":"前景","general":"通用","hide_attachments_in_convo":"在对话中隐藏附件","hide_attachments_in_tl":"在时间线上隐藏附件","hide_muted_posts":"不显示被隐藏的用户的帖子","max_thumbnails":"每个帖子最多能显示的缩略图数量","hide_isp":"隐藏实例独有的面板","preload_images":"预载图片","use_one_click_nsfw":"点击一次以打开工作场所不适宜(NSFW)的附件","hide_post_stats":"隐藏帖子的统计数据(例如:喜欢的次数)","hide_user_stats":"隐藏用户的统计数据(例如:关注者的数量)","hide_filtered_statuses":"隐藏过滤的状态","import_blocks_from_a_csv_file":"从 csv 文件中导入拉黑名单","import_followers_from_a_csv_file":"从 csv 文件中导入关注","import_theme":"导入预置主题","inputRadius":"输入框","checkboxRadius":"复选框","instance_default":"(默认:{value})","instance_default_simple":"(默认)","interface":"界面","interfaceLanguage":"界面语言","invalid_theme_imported":"您所选择的主题文件不被 Pleroma 支持,因此主题未被修改。","limited_availability":"在您的浏览器中无法使用","links":"链接","lock_account_description":"您需要手动审核关注请求","loop_video":"循环视频","loop_video_silent_only":"只循环没有声音的视频(例如:Mastodon 里的“GIF”)","mutes_tab":"隐藏","play_videos_in_modal":"在弹出框内播放视频","use_contain_fit":"生成缩略图时不要裁剪附件","name":"名字","name_bio":"名字及简介","new_password":"新密码","notification_visibility":"要显示的通知类型","notification_visibility_follows":"关注","notification_visibility_likes":"喜欢","notification_visibility_mentions":"提及","notification_visibility_repeats":"转发","no_rich_text_description":"不显示富文本格式","no_blocks":"没有屏蔽","no_mutes":"没有隐藏","hide_follows_description":"不要显示我所关注的人","hide_followers_description":"不要显示关注我的人","show_admin_badge":"在我的个人资料中显示“管理员”徽章","show_moderator_badge":"在我的个人资料中显示“监察员”徽章","nsfw_clickthrough":"将不和谐附件和链接预览隐藏,点击才会显示","oauth_tokens":"OAuth令牌","token":"令牌","refresh_token":"刷新令牌","valid_until":"有效期至","revoke_token":"撤消","panelRadius":"面板","pause_on_unfocused":"在离开页面时暂停时间线推送","presets":"预置","profile_background":"个人背景图","profile_banner":"横幅图片","profile_tab":"个人资料","radii_help":"设置界面边缘的圆角 (单位:像素)","replies_in_timeline":"时间线中的回复","reply_visibility_all":"显示所有回复","reply_visibility_following":"只显示发送给我的回复/发送给我关注的用户的回复","reply_visibility_self":"只显示发送给我的回复","autohide_floating_post_button":"自动隐藏新帖子的按钮(移动设备)","saving_err":"保存设置时发生错误","saving_ok":"设置已保存","search_user_to_block":"搜索你想屏蔽的用户","search_user_to_mute":"搜索你想要隐藏的用户","security_tab":"安全","scope_copy":"回复时复制可见范围(私信中永远会复制)","minimal_scopes_mode":"使发文可见范围的选项最少化","set_new_avatar":"设置新头像","set_new_profile_background":"设置新的个人资料背景","set_new_profile_banner":"设置新的横幅图片","settings":"设置","subject_input_always_show":"总是显示主题框","subject_line_behavior":"回复时复制主题","subject_line_email":"类似电子邮件: \\"re: 主题\\"","subject_line_mastodon":"类似 mastodon: 与原主题相同","subject_line_noop":"不要复制","post_status_content_type":"发文状态内容类型","stop_gifs":"鼠标悬停时播放GIF","streaming":"滚动到顶部时自动推送新内容","text":"文本","theme":"主题","theme_help":"使用十六进制代码(#rrggbb)来设置主题颜色。","theme_help_v2_1":"您也可以通过选中复选框来覆盖某些组件的颜色和透明度。使用“清除所有”按钮来清除所有覆盖设置。","theme_help_v2_2":"某些条目下的图标是背景或文本对比指示器,鼠标悬停可以获取详细信息。请记住,使用透明度来显示最差的情况。","tooltipRadius":"提醒","upload_a_photo":"上传照片","user_settings":"用户设置","values":{"false":"否","true":"是"},"notifications":"通知","notification_mutes":"要停止收到某个指定的用户的通知,请使用隐藏功能。","notification_blocks":"屏蔽一个用户会停止接收来自该用户的所有通知,并且会取消对该用户的关注。","enable_web_push_notifications":"启用 web 推送通知","style":{"switcher":{"keep_color":"保留颜色","keep_shadows":"保留阴影","keep_opacity":"保留透明度","keep_roundness":"保留圆角","keep_fonts":"保留字体","save_load_hint":"\\"保留\\" 选项在选择或加载主题时保留当前设置的选项,在导出主题时还会存储上述选项。当所有复选框未设置时,导出主题将保存所有内容。","reset":"重置","clear_all":"清除全部","clear_opacity":"清除透明度","load_theme":"加载主题","help":{"upgraded_from_v2":"PleromaFE 已升级,主题会与您记忆中的不太一样。","older_version_imported":"您导入的文件来自旧版本的 FE。","future_version_imported":"您导入的文件来自更高版本的 FE。","v2_imported":"您导入的文件是旧版 FE 的。我们尽可能保持兼容性,但还是可能出现不一致的情况。","snapshot_source_mismatch":"版本冲突:很有可能是 FE 版本回滚后再次升级了,如果您使用旧版本的 FE 更改了主题那么您可能需要使用旧版本,否则请使用新版本。","migration_napshot_gone":"不知出于何种原因,主题快照缺失了,一些地方可能与您印象中的不符。","migration_snapshot_ok":"为保万无一失,加载了主题快照。您可以试着加载主题数据。","fe_downgraded":"PleromaFE 的版本回滚了。","fe_upgraded":"PleromaFE 的主题引擎随着版本更新升级了。","snapshot_missing":"在文件中没有主题快照,所以网站外观可能会与原来预想的不同。","snapshot_present":"主题快照已加载,因此所有的值均被覆盖。您可以改为加载主题的实际数据。"},"use_source":"新版本","use_snapshot":"老版本","keep_as_is":"保持原状"},"common":{"color":"颜色","opacity":"透明度","contrast":{"hint":"对比度是 {ratio}, 它 {level} {context}","level":{"aa":"符合 AA 等级准则(最低)","aaa":"符合 AAA 等级准则(推荐)","bad":"不符合任何辅助功能指南"},"context":{"18pt":"大字文本 (18pt+)","text":"文本"}}},"common_colors":{"_tab_label":"常规","main":"常用颜色","foreground_hint":"点击”高级“ 标签进行细致的控制","rgbo":"图标,强调,徽章"},"advanced_colors":{"_tab_label":"高级","alert":"提醒或警告背景色","alert_error":"错误","badge":"徽章背景","badge_notification":"通知","panel_header":"面板标题","top_bar":"顶栏","borders":"边框","buttons":"按钮","inputs":"输入框","faint_text":"灰度文字","chat":{"border":"边框","outgoing":"发出的","incoming":"收到的"},"disabled":"禁用的","pressed":"压下的","highlight":"强调元素","selectedMenu":"选中的菜单项","selectedPost":"选中的发布内容","icons":"图标","poll":"投票统计图","popover":"提示框,菜单,弹出框","post":"发布内容/用户简介","alert_neutral":"中性","alert_warning":"警告","tabs":"标签页","underlay":"底衬","toggled":"按下的","wallpaper":"壁纸"},"radii":{"_tab_label":"圆角"},"shadows":{"_tab_label":"阴影和照明","component":"组件","override":"覆盖","shadow_id":"阴影 #{value}","blur":"模糊","spread":"扩散","inset":"内阴影","hint":"对于阴影你还可以使用 --variable 作为颜色值来使用 CSS3 变量。请注意,这种情况下,透明设置将不起作用。","filter_hint":{"always_drop_shadow":"警告,此阴影设置会总是使用 {0} ,如果浏览器支持的话。","drop_shadow_syntax":"{0} 不支持参数 {1} 和关键词 {2} 。","avatar_inset":"请注意组合两个内部和非内部的阴影到头像上,在透明头像上可能会有意料之外的效果。","spread_zero":"阴影的扩散 > 0 会同设置成零一样","inset_classic":"内阴影会使用 {0}"},"components":{"panel":"面板","panelHeader":"面板标题","topBar":"顶栏","avatar":"用户头像(在个人资料栏)","avatarStatus":"用户头像(在帖子显示栏)","popup":"弹窗与工具提示","button":"按钮","buttonHover":"按钮(悬停)","buttonPressed":"按钮(压下)","buttonPressedHover":"按钮(压下和悬停)","input":"输入框"},"hintV3":"对于阴影,您还可以使用 {0} 表示法来使用其它颜色插槽。"},"fonts":{"_tab_label":"字体","help":"为用户界面的元素选择字体。若选择 “自选”,您必须输入与系统显示完全一致的字体名称。","components":{"interface":"界面","input":"输入框","post":"发帖文字","postCode":"帖子中使用等间距文字(富文本)"},"family":"字体名称","size":"大小 (in px)","weight":"字重 (粗体)","custom":"自选"},"preview":{"header":"预览","content":"内容","error":"错误示例","button":"按钮","text":"有堆 {0} 和 {1}","mono":"monospace 内容","input":"刚刚抵达上海。","faint_link":"帮助手册","fine_print":"阅读我们的 {0} ,然而什么也学不到!","header_faint":"这很正常","checkbox":"我已经浏览了条款及细则","link":"一个棒棒的小小链接"}},"version":{"title":"版本","backend_version":"后端版本","frontend_version":"前端版本"},"notification_setting_filters":"过滤器","domain_mutes":"域名","changed_email":"邮箱修改成功!","change_email_error":"修改您的电子邮箱时发生错误。","change_email":"修改电子邮箱","allow_following_move":"正在关注的账号迁移时自动重新关注","notification_setting_privacy_option":"在通知推送中隐藏发送者和内容","notification_setting_privacy":"隐私","hide_follows_count_description":"不显示关注数","notification_visibility_emoji_reactions":"互动","notification_visibility_moves":"用户迁移","new_email":"新邮箱","emoji_reactions_on_timeline":"在时间线上显示表情符号互动","notification_setting_hide_notification_contents":"隐藏推送通知中的发送者与内容信息","notification_setting_block_from_strangers":"屏蔽来自你没有关注的用户的通知","type_domains_to_mute":"搜索需要隐藏的域名","useStreamingApi":"实时接收帖子和通知","user_mutes":"用户","reset_background_confirm":"您确定要重置背景图吗?","reset_banner_confirm":"您确定要重置横幅图片吗?","reset_avatar_confirm":"您确定要重置头像吗?","reset_profile_banner":"重置横幅图片","reset_profile_background":"重置个人背景图","reset_avatar":"重置头像","hide_followers_count_description":"不显示关注者数量","profile_fields":{"value":"内容","name":"标签","add_field":"添加字段","label":"个人资料元数据"},"accent":"强调色","pad_emoji":"从表情符号选择器插入表情符号时,在表情两侧插入空格","discoverable":"允许通过搜索检索等服务找到此账号","mutes_and_blocks":"隐藏与屏蔽","bot":"这是一个机器人账号","fun":"趣味","useStreamingApiWarning":"(不推荐使用,试验性,已知会跳过一些帖子)","chatMessageRadius":"聊天消息","greentext":"Meme 箭头","virtual_scrolling":"优化时间线渲染","import_mutes_from_a_csv_file":"从 csv 文件导入隐藏名单","mutes_imported":"隐藏名单导入成功!处理它们将需要一段时间。","mute_import_error":"导入隐藏名单出错","mute_import":"隐藏名单导入","mute_export_button":"导出你的隐藏名单到一个 csv 文件","mute_export":"隐藏名单导出","hide_wallpaper":"隐藏实例壁纸","setting_changed":"与默认设置不同","more_settings":"更多设置","sensitive_by_default":"默认标记发文为敏感内容","reply_visibility_self_short":"只显示对我本人的回复","reply_visibility_following_short":"显示对我关注的人的回复","hide_all_muted_posts":"不显示已隐藏的发文","hide_media_previews":"隐藏媒体预览","word_filter":"词语过滤","save":"保存更改","file_export_import":{"errors":{"file_slightly_new":"文件的小版本不同,有些设置可能无法加载","file_too_old":"不兼容的主版本:{fileMajor},文件版本过旧,不受支持(最小设置版本 {feMajor})","file_too_new":"不兼容的主版本:{fileMajor},此 PleromaFE(设置版本 {feMajor})过旧,无法处理","invalid_file":"所选文件不是受支持的 Pleroma 设置备份。没有进行任何更改。"},"restore_settings":"从文件恢复设置","backup_settings_theme":"备份设置和主题到文件","backup_settings":"备份设置到文件","backup_restore":"设置备份"}},"time":{"day":"{0} 天","days":"{0} 天","day_short":"{0}d","days_short":"{0}d","hour":"{0} 小时","hours":"{0} 小时","hour_short":"{0}h","hours_short":"{0}h","in_future":"还有 {0}","in_past":"{0} 之前","minute":"{0} 分钟","minutes":"{0} 分钟","minute_short":"{0}min","minutes_short":"{0}min","month":"{0} 月","months":"{0} 月","month_short":"{0}mo","months_short":"{0}mo","now":"刚刚","now_short":"刚刚","second":"{0} 秒","seconds":"{0} 秒","second_short":"{0}s","seconds_short":"{0}s","week":"{0} 周","weeks":"{0} 周","week_short":"{0}w","weeks_short":"{0}w","year":"{0} 年","years":"{0} 年","year_short":"{0}y","years_short":"{0}y"},"timeline":{"collapse":"折叠","conversation":"对话","error_fetching":"获取更新时发生错误","load_older":"加载更早的状态","no_retweet_hint":"这条内容仅关注者可见,或者是私信,因此不能转发","repeated":"转发了","show_new":"显示新内容","up_to_date":"已是最新","no_more_statuses":"没有更多的状态","no_statuses":"没有状态更新","reload":"重新载入","error":"取得时间轴时发生错误:{0}","socket_broke":"丢失实时连接:CloseEvent code {0}","socket_reconnected":"已建立实时连接"},"status":{"favorites":"喜欢","repeats":"转发","delete":"删除状态","pin":"在个人资料置顶","unpin":"取消在个人资料置顶","pinned":"置顶","delete_confirm":"你真的想要删除这条状态吗?","reply_to":"回复","replies_list":"回复:","mute_conversation":"隐藏对话","unmute_conversation":"对话取消隐藏","hide_content":"隐藏内容","show_content":"显示内容","hide_full_subject":"隐藏此部分标题","show_full_subject":"显示全部标题","thread_muted":"此系列消息已被隐藏","copy_link":"复制状态链接","status_unavailable":"状态不可取得","unbookmark":"取消书签","bookmark":"书签","thread_muted_and_words":",含有过滤词:","status_deleted":"该状态已被删除","nsfw":"NSFW","external_source":"外部来源","expand":"展开"},"user_card":{"approve":"核准","block":"屏蔽","blocked":"已屏蔽!","deny":"拒绝","favorites":"喜欢","follow":"关注","follow_sent":"请求已发送!","follow_progress":"请求中…","follow_again":"再次发送请求?","follow_unfollow":"取消关注","followees":"正在关注","followers":"关注者","following":"正在关注!","follows_you":"关注了你!","its_you":"就是你!","media":"媒体","mute":"隐藏","muted":"已隐藏","per_day":"每天","remote_follow":"跨站关注","report":"报告","statuses":"状态","subscribe":"订阅","unsubscribe":"退订","unblock":"取消屏蔽","unblock_progress":"正在取消屏蔽…","block_progress":"正在屏蔽…","unmute":"取消隐藏","unmute_progress":"取消隐藏中…","mute_progress":"隐藏中…","admin_menu":{"moderation":"仲裁","grant_admin":"赋予管理权限","revoke_admin":"撤销管理权限","grant_moderator":"赋予监察员权限","revoke_moderator":"撤销监察员权限","activate_account":"激活账号","deactivate_account":"关闭账号","delete_account":"删除账号","force_nsfw":"标记所有的帖子都是 - 工作场合不适","strip_media":"从帖子里删除媒体文件","force_unlisted":"强制帖子为不公开","sandbox":"强制帖子为只有关注者可看","disable_remote_subscription":"禁止从远程实例关注用户","disable_any_subscription":"完全禁止关注用户","quarantine":"从联合实例中禁止用户帖子","delete_user":"删除用户","delete_user_confirmation":"你确定吗?此操作无法撤销。"},"hidden":"已隐藏","show_repeats":"显示转发","hide_repeats":"隐藏转发","message":"消息","mention":"提及","bot":"机器人","highlight":{"side":"侧边条纹","striped":"条纹背景","solid":"单一颜色背景","disabled":"不突出显示"}},"user_profile":{"timeline_title":"用户时间线","profile_does_not_exist":"抱歉,此个人资料不存在。","profile_loading_error":"抱歉,载入个人资料时出错。"},"user_reporting":{"title":"报告 {0}","add_comment_description":"此报告会发送给您的实例监察员。您可以在下面提供更多详细信息解释报告的缘由:","additional_comments":"其它信息","forward_description":"这个账号来自另一个服务器。是否同时发送一份报告副本到那里?","forward_to":"转发 {0}","submit":"提交","generic_error":"当处理您的请求时,发生了一个错误。"},"who_to_follow":{"more":"更多","who_to_follow":"推荐关注"},"tool_tip":{"media_upload":"上传媒体","repeat":"转发","reply":"回复","favorite":"喜欢","user_settings":"用户设置","reject_follow_request":"拒绝关注请求","add_reaction":"添加互动","bookmark":"书签","accept_follow_request":"接受关注请求"},"upload":{"error":{"base":"上传不成功。","file_too_big":"文件太大了 [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]","default":"迟些再试","message":"上传错误:{0}"},"file_size_units":{"B":"B","KiB":"KiB","MiB":"MiB","GiB":"GiB","TiB":"TiB"}},"search":{"people":"人","hashtags":"话题标签","person_talking":"{count} 人正在讨论","people_talking":"{count} 人正在讨论","no_results":"没有搜索结果"},"password_reset":{"forgot_password":"忘记密码了?","password_reset":"重置密码","instruction":"输入您的电邮地址或者用户名,我们将发送一个链接到您的邮箱,用于重置密码。","placeholder":"您的电邮地址或者用户名","check_email":"检查您的邮箱,会有一个链接用于重置密码。","return_home":"回到首页","too_many_requests":"您达到了尝试次数的上限,请稍后再试。","password_reset_disabled":"密码重置已被禁用。请联系您的实例管理员。","password_reset_required_but_mailer_is_disabled":"您必须重置密码,但是密码重置被禁用了。请联系您所在实例的管理员。","password_reset_required":"您必须重置密码才能登陆。"},"remote_user_resolver":{"error":"未找到。","searching_for":"搜索","remote_user_resolver":"远程用户解析器"},"emoji":{"keep_open":"选择器保持打开","stickers":"贴纸","unicode":"Unicode 表情符号","custom":"自定义表情符号","add_emoji":"插入表情符号","search_emoji":"搜索表情符号","emoji":"表情符号","load_all":"加载所有表情符号(共 {emojiAmount} 个)","load_all_hint":"最先加载的 {saneAmount} 表情符号,加载全部表情符号可能会带来性能问题。"},"about":{"mrf":{"simple":{"quarantine_desc":"本实例向以下实例仅发送公开的帖子:","quarantine":"隔离","reject_desc":"本实例不会接收来自下列实例的消息:","reject":"拒绝","accept_desc":"本实例只接收来自下列实例的消息:","simple_policies":"对于特定实例的策略","accept":"接受","media_removal":"移除媒体","media_nsfw_desc":"本实例将来自以下实例的媒体内容强制设置为敏感内容:","media_nsfw":"强制设置媒体为敏感内容","media_removal_desc":"本实例移除来自以下实例的媒体内容:","ftl_removal_desc":"该实例在从“已知网络”时间线上移除了下列实例:","ftl_removal":"从“已知网络”时间线上移除"},"mrf_policies_desc":"MRF 策略会影响本实例的互通行为。以下策略已启用:","mrf_policies":"已启用的 MRF 策略","keyword":{"ftl_removal":"从“全部已知网络”时间线上移除","keyword_policies":"关键词策略","is_replaced_by":"→","replace":"替换","reject":"拒绝"},"federation":"联邦互通"},"staff":"管理人员"},"domain_mute_card":{"unmute_progress":"正在取消隐藏…","unmute":"取消隐藏","mute_progress":"隐藏中…","mute":"隐藏"},"errors":{"storage_unavailable":"Pleroma 无法访问浏览器储存。您的登陆以及本地设置将不会被保存,您也可能遇到未知问题。请尝试启用 cookies。"},"shoutbox":{"title":"留言板"},"display_date":{"today":"今天"},"file_type":{"file":"文件","image":"图片","video":"视频","audio":"音频"},"chats":{"empty_chat_list_placeholder":"您还没有任何聊天记录。开始聊天吧!","error_sending_message":"发送消息时出了点问题。","error_loading_chat":"加载聊天时出了点问题。","delete_confirm":"您确实要删除此消息吗?","more":"更多","empty_message_error":"无法发布空消息","new":"新聊天","chats":"聊天","delete":"删除","message_user":"发消息给 {nickname}","you":"你:"}}')}}]); -//# sourceMappingURL=31.15b545bb42e21d39c678.js.map \ No newline at end of file diff --git a/priv/static/static/js/31.15b545bb42e21d39c678.js.map b/priv/static/static/js/31.15b545bb42e21d39c678.js.map deleted file mode 100644 index b56a26768..000000000 --- a/priv/static/static/js/31.15b545bb42e21d39c678.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/31.15b545bb42e21d39c678.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/31.226f7a848d733df38095.js b/priv/static/static/js/31.226f7a848d733df38095.js new file mode 100644 index 000000000..48131f952 --- /dev/null +++ b/priv/static/static/js/31.226f7a848d733df38095.js @@ -0,0 +1,2 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[31],{624:function(e){e.exports=JSON.parse('{"chat":{"title":"聊天"},"exporter":{"export":"导出","processing":"正在处理,稍后会提示您下载文件"},"features_panel":{"chat":"聊天","gopher":"Gopher","media_proxy":"媒体代理","scope_options":"可见范围设置","text_limit":"文字数量限制","title":"功能","who_to_follow":"推荐关注","pleroma_chat_messages":"Pleroma 聊天","upload_limit":"上传限制"},"finder":{"error_fetching_user":"获取用户时发生错误","find_user":"寻找用户"},"general":{"apply":"应用","submit":"提交","more":"更多","generic_error":"发生了一个错误","optional":"可选","show_more":"展开","show_less":"收起","cancel":"取消","disable":"禁用","enable":"启用","confirm":"确认","verify":"验证","dismiss":"忽略","peek":"预览","close":"关闭","retry":"重试","error_retry":"请重试","loading":"载入中…","role":{"moderator":"监察员","admin":"管理员"},"flash_content":"点击以使用 Ruffle 显示 Flash 内容(实验性,可能无效)。","flash_security":"注意这可能有潜在的危险,因为 Flash 内容仍然是任意的代码。","flash_fail":"Flash 内容加载失败,请在控制台查看详情。"},"image_cropper":{"crop_picture":"裁剪图片","save":"保存","save_without_cropping":"保存未经裁剪的图片","cancel":"取消"},"importer":{"submit":"提交","success":"导入成功。","error":"导入此文件时出现一个错误。"},"login":{"login":"登录","description":"用 OAuth 登录","logout":"登出","password":"密码","placeholder":"例如:lain","register":"注册","username":"用户名","hint":"登录后加入讨论","authentication_code":"验证码","enter_recovery_code":"输入一个恢复码","enter_two_factor_code":"输入一个双重因素验证码","recovery_code":"恢复码","heading":{"totp":"双重因素验证","recovery":"双重因素恢复"}},"media_modal":{"previous":"往前","next":"往后"},"nav":{"about":"关于","back":"后退","chat":"本站聊天","friend_requests":"关注请求","mentions":"提及","interactions":"互动","dms":"私信","public_tl":"公共时间线","timeline":"时间线","twkn":"已知网络","user_search":"用户搜索","search":"搜索","who_to_follow":"推荐关注","preferences":"偏好设置","administration":"管理员","chats":"聊天","timelines":"时间线","bookmarks":"书签","home_timeline":"主页时间线"},"notifications":{"broken_favorite":"未知的状态,正在搜索中…","favorited_you":"喜欢了你的状态","followed_you":"关注了你","load_older":"加载更早的通知","notifications":"通知","read":"已阅!","repeated_you":"转发了你的状态","no_more_notifications":"没有更多的通知","reacted_with":"作出了 {0} 的反应","migrated_to":"迁移到了","follow_request":"想要关注你","error":"取得通知时发生错误:{0}"},"polls":{"add_poll":"增加投票","add_option":"增加选项","option":"选项","votes":"投票","vote":"投票","type":"投票类型","single_choice":"单选","multiple_choices":"多选","expiry":"投票期限","expires_in":"投票于 {0} 后结束","expired":"投票 {0} 前已结束","not_enough_options":"投票的选项太少","votes_count":"{count} 票 | {count} 票","people_voted_count":"{count} 人已投票 | {count} 人已投票"},"stickers":{"add_sticker":"添加贴纸"},"interactions":{"favs_repeats":"转发和喜欢","follows":"新的关注者","load_older":"加载更早的互动","moves":"用户迁移"},"post_status":{"new_status":"发布新状态","account_not_locked_warning":"你的帐号没有 {0}。任何人都可以关注你并浏览你的上锁内容。","account_not_locked_warning_link":"上锁","attachments_sensitive":"标记附件为敏感内容","content_type":{"text/plain":"纯文本","text/html":"HTML","text/markdown":"Markdown","text/bbcode":"BBCode"},"content_warning":"主题(可选)","default":"刚刚抵达上海。","direct_warning_to_all":"本条内容只有被提及的用户能够看到。","direct_warning_to_first_only":"本条内容只有被在消息开始处提及的用户能够看到。","posting":"发送中","scope_notice":{"public":"本条内容可以被所有人看到","private":"关注你的人才能看到本条内容","unlisted":"本条内容既不在公共时间线,也不会在所有已知网络上可见"},"scope":{"direct":"私信 - 只发送给被提及的用户","private":"仅关注者 - 只有关注了你的人能看到","public":"公共 - 发送到公共时间轴","unlisted":"不公开 - 不会发送到公共时间轴"},"preview_empty":"空的","preview":"预览","media_description":"媒体描述","media_description_error":"更新媒体失败,请重试","empty_status_error":"不能发布没有内容、没有附件的发文","post":"发送"},"registration":{"bio":"简介","email":"电子邮箱","fullname":"显示名称","password_confirm":"确认密码","registration":"注册","token":"邀请码","captcha":"CAPTCHA","new_captcha":"点击图片获取新的验证码","username_placeholder":"例如:lain","fullname_placeholder":"例如:岩仓玲音","bio_placeholder":"例如:\\n你好,我是玲音。\\n我是一个住在日本郊区的动画少女。你可能在 Wired 见过我。","validations":{"username_required":"不能留空","fullname_required":"不能留空","email_required":"不能留空","password_required":"不能留空","password_confirmation_required":"不能留空","password_confirmation_match":"密码不一致"},"reason_placeholder":"此实例的注册需要手动批准。\\n请让管理员知道您为什么想要注册。","reason":"注册理由","register":"注册"},"selectable_list":{"select_all":"选择全部"},"settings":{"app_name":"App 名称","security":"安全","enter_current_password_to_confirm":"输入您当前的密码来确认您的身份","mfa":{"otp":"OTP","setup_otp":"设置 OTP","wait_pre_setup_otp":"预设 OTP","confirm_and_enable":"确认并启用 OTP","title":"双因素验证","generate_new_recovery_codes":"生成新的恢复码","warning_of_generate_new_codes":"当您生成新的恢复码时,您旧的恢复码将会失效。","recovery_codes":"恢复码。","waiting_a_recovery_codes":"正在接收备份码…","recovery_codes_warning":"抄写这些号码,或者将其保存在安全的地方。这些号码不会再次显示。如果您无法访问您的 2FA app,也丢失了您的恢复码,您就再也无法登录您的账号了。","authentication_methods":"身份验证方法","scan":{"title":"扫一下","desc":"使用您的双因素验证 app,扫描这个二维码,或者输入这些文字密钥:","secret_code":"密钥"},"verify":{"desc":"要启用双因素验证,请输入您的双因素验证 app 里的数字:"}},"attachmentRadius":"附件","attachments":"附件","avatar":"头像","avatarAltRadius":"头像(通知)","avatarRadius":"头像","background":"背景","bio":"简介","block_export":"屏蔽名单导出","block_export_button":"导出你的屏蔽名单到一个 csv 文件","block_import":"屏蔽名单导入","block_import_error":"导入屏蔽名单出错","blocks_imported":"屏蔽名单导入成功!需要一点时间来处理。","blocks_tab":"屏蔽","btnRadius":"按钮","cBlue":"蓝色(回复,关注)","cGreen":"绿色(转发)","cOrange":"橙色(喜欢)","cRed":"红色(取消)","change_password":"修改密码","change_password_error":"修改密码的时候出了点问题。","changed_password":"成功修改了密码!","collapse_subject":"折叠带主题的内容","composing":"写作","confirm_new_password":"确认新密码","current_avatar":"当前头像","current_password":"当前密码","current_profile_banner":"您当前的横幅图片","data_import_export_tab":"数据导入/导出","default_vis":"默认可见范围","delete_account":"删除账户","delete_account_description":"永久删除你的帐号和所有数据。","delete_account_error":"删除账户时发生错误,如果一直删除不了,请联系实例管理员。","delete_account_instructions":"在下面输入您的密码来确认删除账户。","avatar_size_instruction":"推荐的头像图片最小尺寸为 150x150 像素。","export_theme":"导出预置主题","filtering":"过滤器","filtering_explanation":"所有包含以下词汇的内容都会被隐藏,一行一个","follow_export":"导出关注","follow_export_button":"将关注导出成 csv 文件","follow_import":"导入关注","follow_import_error":"导入关注时错误","follows_imported":"关注已导入!尚需要一些时间来处理。","foreground":"前景","general":"通用","hide_attachments_in_convo":"在对话中隐藏附件","hide_attachments_in_tl":"在时间线上隐藏附件","hide_muted_posts":"不显示被隐藏的用户的帖子","max_thumbnails":"每个帖子最多能显示的缩略图数量","hide_isp":"隐藏实例独有的面板","preload_images":"预载图片","use_one_click_nsfw":"点击一次以打开工作场所不适宜(NSFW)的附件","hide_post_stats":"隐藏帖子的统计数据(例如:喜欢的次数)","hide_user_stats":"隐藏用户的统计数据(例如:关注者的数量)","hide_filtered_statuses":"隐藏过滤的状态","import_blocks_from_a_csv_file":"从 csv 文件中导入拉黑名单","import_followers_from_a_csv_file":"从 csv 文件中导入关注","import_theme":"导入预置主题","inputRadius":"输入框","checkboxRadius":"复选框","instance_default":"(默认:{value})","instance_default_simple":"(默认)","interface":"界面","interfaceLanguage":"界面语言","invalid_theme_imported":"您所选择的主题文件不被 Pleroma 支持,因此主题未被修改。","limited_availability":"在您的浏览器中无法使用","links":"链接","lock_account_description":"您需要手动审核关注请求","loop_video":"循环视频","loop_video_silent_only":"只循环没有声音的视频(例如:Mastodon 里的“GIF”)","mutes_tab":"隐藏","play_videos_in_modal":"在弹出框内播放视频","use_contain_fit":"生成缩略图时不要裁剪附件","name":"名字","name_bio":"名字及简介","new_password":"新密码","notification_visibility":"要显示的通知类型","notification_visibility_follows":"关注","notification_visibility_likes":"喜欢","notification_visibility_mentions":"提及","notification_visibility_repeats":"转发","no_rich_text_description":"不显示富文本格式","no_blocks":"没有屏蔽","no_mutes":"没有隐藏","hide_follows_description":"不要显示我所关注的人","hide_followers_description":"不要显示关注我的人","show_admin_badge":"在我的个人资料中显示“管理员”徽章","show_moderator_badge":"在我的个人资料中显示“监察员”徽章","nsfw_clickthrough":"将不和谐附件和链接预览隐藏,点击才会显示","oauth_tokens":"OAuth令牌","token":"令牌","refresh_token":"刷新令牌","valid_until":"有效期至","revoke_token":"撤消","panelRadius":"面板","pause_on_unfocused":"在离开页面时暂停时间线推送","presets":"预置","profile_background":"个人背景图","profile_banner":"横幅图片","profile_tab":"个人资料","radii_help":"设置界面边缘的圆角 (单位:像素)","replies_in_timeline":"时间线中的回复","reply_visibility_all":"显示所有回复","reply_visibility_following":"只显示发送给我的回复/发送给我关注的用户的回复","reply_visibility_self":"只显示发送给我的回复","autohide_floating_post_button":"自动隐藏新帖子的按钮(移动设备)","saving_err":"保存设置时发生错误","saving_ok":"设置已保存","search_user_to_block":"搜索你想屏蔽的用户","search_user_to_mute":"搜索你想要隐藏的用户","security_tab":"安全","scope_copy":"回复时复制可见范围(私信中永远会复制)","minimal_scopes_mode":"使发文可见范围的选项最少化","set_new_avatar":"设置新头像","set_new_profile_background":"设置新的个人资料背景","set_new_profile_banner":"设置新的横幅图片","settings":"设置","subject_input_always_show":"总是显示主题框","subject_line_behavior":"回复时复制主题","subject_line_email":"类似电子邮件: \\"re: 主题\\"","subject_line_mastodon":"类似 mastodon: 与原主题相同","subject_line_noop":"不要复制","post_status_content_type":"发文状态内容类型","stop_gifs":"鼠标悬停时播放GIF","streaming":"滚动到顶部时自动推送新内容","text":"文本","theme":"主题","theme_help":"使用十六进制代码(#rrggbb)来设置主题颜色。","theme_help_v2_1":"您也可以通过选中复选框来覆盖某些组件的颜色和透明度。使用“清除所有”按钮来清除所有覆盖设置。","theme_help_v2_2":"某些条目下的图标是背景或文本对比指示器,鼠标悬停可以获取详细信息。请记住,使用透明度来显示最差的情况。","tooltipRadius":"提醒","upload_a_photo":"上传照片","user_settings":"用户设置","values":{"false":"否","true":"是"},"notifications":"通知","notification_mutes":"要停止收到某个指定的用户的通知,请使用隐藏功能。","notification_blocks":"屏蔽一个用户会停止接收来自该用户的所有通知,并且会取消对该用户的关注。","enable_web_push_notifications":"启用 web 推送通知","style":{"switcher":{"keep_color":"保留颜色","keep_shadows":"保留阴影","keep_opacity":"保留透明度","keep_roundness":"保留圆角","keep_fonts":"保留字体","save_load_hint":"\\"保留\\" 选项在选择或加载主题时保留当前设置的选项,在导出主题时还会存储上述选项。当所有复选框未设置时,导出主题将保存所有内容。","reset":"重置","clear_all":"清除全部","clear_opacity":"清除透明度","load_theme":"加载主题","help":{"upgraded_from_v2":"PleromaFE 已升级,主题会与您记忆中的不太一样。","older_version_imported":"您导入的文件来自旧版本的 FE。","future_version_imported":"您导入的文件来自更高版本的 FE。","v2_imported":"您导入的文件是旧版 FE 的。我们尽可能保持兼容性,但还是可能出现不一致的情况。","snapshot_source_mismatch":"版本冲突:很有可能是 FE 版本回滚后再次升级了,如果您使用旧版本的 FE 更改了主题那么您可能需要使用旧版本,否则请使用新版本。","migration_napshot_gone":"不知出于何种原因,主题快照缺失了,一些地方可能与您印象中的不符。","migration_snapshot_ok":"为保万无一失,加载了主题快照。您可以试着加载主题数据。","fe_downgraded":"PleromaFE 的版本回滚了。","fe_upgraded":"PleromaFE 的主题引擎随着版本更新升级了。","snapshot_missing":"在文件中没有主题快照,所以网站外观可能会与原来预想的不同。","snapshot_present":"主题快照已加载,因此所有的值均被覆盖。您可以改为加载主题的实际数据。"},"use_source":"新版本","use_snapshot":"老版本","keep_as_is":"保持原状"},"common":{"color":"颜色","opacity":"透明度","contrast":{"hint":"对比度是 {ratio}, 它 {level} {context}","level":{"aa":"符合 AA 等级准则(最低)","aaa":"符合 AAA 等级准则(推荐)","bad":"不符合任何辅助功能指南"},"context":{"18pt":"大字文本 (18pt+)","text":"文本"}}},"common_colors":{"_tab_label":"常规","main":"常用颜色","foreground_hint":"点击”高级“ 标签进行细致的控制","rgbo":"图标,强调,徽章"},"advanced_colors":{"_tab_label":"高级","alert":"提醒或警告背景色","alert_error":"错误","badge":"徽章背景","badge_notification":"通知","panel_header":"面板标题","top_bar":"顶栏","borders":"边框","buttons":"按钮","inputs":"输入框","faint_text":"灰度文字","chat":{"border":"边框","outgoing":"发出的","incoming":"收到的"},"disabled":"禁用的","pressed":"压下的","highlight":"强调元素","selectedMenu":"选中的菜单项","selectedPost":"选中的发布内容","icons":"图标","poll":"投票统计图","popover":"提示框,菜单,弹出框","post":"发布内容/用户简介","alert_neutral":"中性","alert_warning":"警告","tabs":"标签页","underlay":"底衬","toggled":"按下的","wallpaper":"壁纸"},"radii":{"_tab_label":"圆角"},"shadows":{"_tab_label":"阴影和照明","component":"组件","override":"覆盖","shadow_id":"阴影 #{value}","blur":"模糊","spread":"扩散","inset":"内阴影","hint":"对于阴影你还可以使用 --variable 作为颜色值来使用 CSS3 变量。请注意,这种情况下,透明设置将不起作用。","filter_hint":{"always_drop_shadow":"警告,此阴影设置会总是使用 {0} ,如果浏览器支持的话。","drop_shadow_syntax":"{0} 不支持参数 {1} 和关键词 {2} 。","avatar_inset":"请注意组合两个内部和非内部的阴影到头像上,在透明头像上可能会有意料之外的效果。","spread_zero":"阴影的扩散 > 0 会同设置成零一样","inset_classic":"内阴影会使用 {0}"},"components":{"panel":"面板","panelHeader":"面板标题","topBar":"顶栏","avatar":"用户头像(在个人资料栏)","avatarStatus":"用户头像(在帖子显示栏)","popup":"弹窗与工具提示","button":"按钮","buttonHover":"按钮(悬停)","buttonPressed":"按钮(压下)","buttonPressedHover":"按钮(压下和悬停)","input":"输入框"},"hintV3":"对于阴影,您还可以使用 {0} 表示法来使用其它颜色插槽。"},"fonts":{"_tab_label":"字体","help":"为用户界面的元素选择字体。若选择 “自选”,您必须输入与系统显示完全一致的字体名称。","components":{"interface":"界面","input":"输入框","post":"发帖文字","postCode":"帖子中使用等间距文字(富文本)"},"family":"字体名称","size":"大小 (in px)","weight":"字重 (粗体)","custom":"自选"},"preview":{"header":"预览","content":"内容","error":"错误示例","button":"按钮","text":"有堆 {0} 和 {1}","mono":"monospace 内容","input":"刚刚抵达上海。","faint_link":"帮助手册","fine_print":"阅读我们的 {0} ,然而什么也学不到!","header_faint":"这很正常","checkbox":"我已经浏览了条款及细则","link":"一个棒棒的小小链接"}},"version":{"title":"版本","backend_version":"后端版本","frontend_version":"前端版本"},"notification_setting_filters":"过滤器","domain_mutes":"域名","changed_email":"邮箱修改成功!","change_email_error":"修改您的电子邮箱时发生错误。","change_email":"修改电子邮箱","allow_following_move":"正在关注的账号迁移时自动重新关注","notification_setting_privacy_option":"在通知推送中隐藏发送者和内容","notification_setting_privacy":"隐私","hide_follows_count_description":"不显示关注数","notification_visibility_emoji_reactions":"互动","notification_visibility_moves":"用户迁移","new_email":"新邮箱","emoji_reactions_on_timeline":"在时间线上显示表情符号互动","notification_setting_hide_notification_contents":"隐藏推送通知中的发送者与内容信息","notification_setting_block_from_strangers":"屏蔽来自你没有关注的用户的通知","type_domains_to_mute":"搜索需要隐藏的域名","useStreamingApi":"实时接收帖子和通知","user_mutes":"用户","reset_background_confirm":"您确定要重置背景图吗?","reset_banner_confirm":"您确定要重置横幅图片吗?","reset_avatar_confirm":"您确定要重置头像吗?","reset_profile_banner":"重置横幅图片","reset_profile_background":"重置个人背景图","reset_avatar":"重置头像","hide_followers_count_description":"不显示关注者数量","profile_fields":{"value":"内容","name":"标签","add_field":"添加字段","label":"个人资料元数据"},"accent":"强调色","pad_emoji":"从表情符号选择器插入表情符号时,在表情两侧插入空格","discoverable":"允许通过搜索检索等服务找到此账号","mutes_and_blocks":"隐藏与屏蔽","bot":"这是一个机器人账号","fun":"趣味","useStreamingApiWarning":"(不推荐使用,试验性,已知会跳过一些帖子)","chatMessageRadius":"聊天消息","greentext":"Meme 箭头","virtual_scrolling":"优化时间线渲染","import_mutes_from_a_csv_file":"从 csv 文件导入隐藏名单","mutes_imported":"隐藏名单导入成功!处理它们将需要一段时间。","mute_import_error":"导入隐藏名单出错","mute_import":"隐藏名单导入","mute_export_button":"导出你的隐藏名单到一个 csv 文件","mute_export":"隐藏名单导出","hide_wallpaper":"隐藏实例壁纸","setting_changed":"与默认设置不同","more_settings":"更多设置","sensitive_by_default":"默认标记发文为敏感内容","reply_visibility_self_short":"只显示对我本人的回复","reply_visibility_following_short":"显示对我关注的人的回复","hide_all_muted_posts":"不显示已隐藏的发文","hide_media_previews":"隐藏媒体预览","word_filter":"词语过滤","save":"保存更改","file_export_import":{"errors":{"file_slightly_new":"文件的小版本不同,有些设置可能无法加载","file_too_old":"不兼容的主版本:{fileMajor},文件版本过旧,不受支持(最小设置版本 {feMajor})","file_too_new":"不兼容的主版本:{fileMajor},此 PleromaFE(设置版本 {feMajor})过旧,无法处理","invalid_file":"所选文件不是受支持的 Pleroma 设置备份。没有进行任何更改。"},"restore_settings":"从文件恢复设置","backup_settings_theme":"备份设置和主题到文件","backup_settings":"备份设置到文件","backup_restore":"设置备份"},"right_sidebar":"在右侧显示侧边栏","hide_shoutbox":"隐藏实例留言板"},"time":{"day":"{0} 天","days":"{0} 天","day_short":"{0}d","days_short":"{0}d","hour":"{0} 小时","hours":"{0} 小时","hour_short":"{0}h","hours_short":"{0}h","in_future":"还有 {0}","in_past":"{0} 之前","minute":"{0} 分钟","minutes":"{0} 分钟","minute_short":"{0}min","minutes_short":"{0}min","month":"{0} 月","months":"{0} 月","month_short":"{0}mo","months_short":"{0}mo","now":"刚刚","now_short":"刚刚","second":"{0} 秒","seconds":"{0} 秒","second_short":"{0}s","seconds_short":"{0}s","week":"{0} 周","weeks":"{0} 周","week_short":"{0}w","weeks_short":"{0}w","year":"{0} 年","years":"{0} 年","year_short":"{0}y","years_short":"{0}y"},"timeline":{"collapse":"折叠","conversation":"对话","error_fetching":"获取更新时发生错误","load_older":"加载更早的状态","no_retweet_hint":"这条内容仅关注者可见,或者是私信,因此不能转发","repeated":"转发了","show_new":"显示新内容","up_to_date":"已是最新","no_more_statuses":"没有更多的状态","no_statuses":"没有状态更新","reload":"重新载入","error":"取得时间轴时发生错误:{0}","socket_broke":"丢失实时连接:CloseEvent code {0}","socket_reconnected":"已建立实时连接"},"status":{"favorites":"喜欢","repeats":"转发","delete":"删除状态","pin":"在个人资料置顶","unpin":"取消在个人资料置顶","pinned":"置顶","delete_confirm":"你真的想要删除这条状态吗?","reply_to":"回复","replies_list":"回复:","mute_conversation":"隐藏对话","unmute_conversation":"对话取消隐藏","hide_content":"隐藏内容","show_content":"显示内容","hide_full_subject":"隐藏此部分标题","show_full_subject":"显示全部标题","thread_muted":"此系列消息已被隐藏","copy_link":"复制状态链接","status_unavailable":"状态不可取得","unbookmark":"取消书签","bookmark":"书签","thread_muted_and_words":",含有过滤词:","status_deleted":"该状态已被删除","nsfw":"NSFW","external_source":"外部来源","expand":"展开"},"user_card":{"approve":"核准","block":"屏蔽","blocked":"已屏蔽!","deny":"拒绝","favorites":"喜欢","follow":"关注","follow_sent":"请求已发送!","follow_progress":"请求中…","follow_unfollow":"取消关注","followees":"正在关注","followers":"关注者","following":"正在关注!","follows_you":"关注了你!","its_you":"就是你!","media":"媒体","mute":"隐藏","muted":"已隐藏","per_day":"每天","remote_follow":"跨站关注","report":"报告","statuses":"状态","subscribe":"订阅","unsubscribe":"退订","unblock":"取消屏蔽","unblock_progress":"正在取消屏蔽…","block_progress":"正在屏蔽…","unmute":"取消隐藏","unmute_progress":"取消隐藏中…","mute_progress":"隐藏中…","admin_menu":{"moderation":"仲裁","grant_admin":"赋予管理权限","revoke_admin":"撤销管理权限","grant_moderator":"赋予监察员权限","revoke_moderator":"撤销监察员权限","activate_account":"激活账号","deactivate_account":"关闭账号","delete_account":"删除账号","force_nsfw":"标记所有的帖子都是 - 工作场合不适","strip_media":"从帖子里删除媒体文件","force_unlisted":"强制帖子为不公开","sandbox":"强制帖子为只有关注者可看","disable_remote_subscription":"禁止从远程实例关注用户","disable_any_subscription":"完全禁止关注用户","quarantine":"从联合实例中禁止用户帖子","delete_user":"删除用户","delete_user_confirmation":"你确定吗?此操作无法撤销。"},"hidden":"已隐藏","show_repeats":"显示转发","hide_repeats":"隐藏转发","message":"消息","mention":"提及","bot":"机器人","highlight":{"side":"侧边条纹","striped":"条纹背景","solid":"单一颜色背景","disabled":"不突出显示"},"edit_profile":"编辑个人资料"},"user_profile":{"timeline_title":"用户时间线","profile_does_not_exist":"抱歉,此个人资料不存在。","profile_loading_error":"抱歉,载入个人资料时出错。"},"user_reporting":{"title":"报告 {0}","add_comment_description":"此报告会发送给您的实例监察员。您可以在下面提供更多详细信息解释报告的缘由:","additional_comments":"其它信息","forward_description":"这个账号来自另一个服务器。是否同时发送一份报告副本到那里?","forward_to":"转发 {0}","submit":"提交","generic_error":"当处理您的请求时,发生了一个错误。"},"who_to_follow":{"more":"更多","who_to_follow":"推荐关注"},"tool_tip":{"media_upload":"上传媒体","repeat":"转发","reply":"回复","favorite":"喜欢","user_settings":"用户设置","reject_follow_request":"拒绝关注请求","add_reaction":"添加互动","bookmark":"书签","accept_follow_request":"接受关注请求"},"upload":{"error":{"base":"上传不成功。","file_too_big":"文件太大了 [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]","default":"迟些再试","message":"上传错误:{0}"},"file_size_units":{"B":"B","KiB":"KiB","MiB":"MiB","GiB":"GiB","TiB":"TiB"}},"search":{"people":"人","hashtags":"话题标签","person_talking":"{count} 人正在讨论","people_talking":"{count} 人正在讨论","no_results":"没有搜索结果"},"password_reset":{"forgot_password":"忘记密码了?","password_reset":"重置密码","instruction":"输入您的电邮地址或者用户名,我们将发送一个链接到您的邮箱,用于重置密码。","placeholder":"您的电邮地址或者用户名","check_email":"检查您的邮箱,会有一个链接用于重置密码。","return_home":"回到首页","too_many_requests":"您达到了尝试次数的上限,请稍后再试。","password_reset_disabled":"密码重置已被禁用。请联系您的实例管理员。","password_reset_required_but_mailer_is_disabled":"您必须重置密码,但是密码重置被禁用了。请联系您所在实例的管理员。","password_reset_required":"您必须重置密码才能登陆。"},"remote_user_resolver":{"error":"未找到。","searching_for":"搜索","remote_user_resolver":"远程用户解析器"},"emoji":{"keep_open":"选择器保持打开","stickers":"贴纸","unicode":"Unicode 表情符号","custom":"自定义表情符号","add_emoji":"插入表情符号","search_emoji":"搜索表情符号","emoji":"表情符号","load_all":"加载所有表情符号(共 {emojiAmount} 个)","load_all_hint":"最先加载的 {saneAmount} 表情符号,加载全部表情符号可能会带来性能问题。"},"about":{"mrf":{"simple":{"quarantine_desc":"本实例向以下实例仅发送公开的帖子:","quarantine":"隔离","reject_desc":"本实例不会接收来自下列实例的消息:","reject":"拒绝","accept_desc":"本实例只接收来自下列实例的消息:","simple_policies":"对于特定实例的策略","accept":"接受","media_removal":"移除媒体","media_nsfw_desc":"本实例将来自以下实例的媒体内容强制设置为敏感内容:","media_nsfw":"强制设置媒体为敏感内容","media_removal_desc":"本实例移除来自以下实例的媒体内容:","ftl_removal_desc":"该实例在从“已知网络”时间线上移除了下列实例:","ftl_removal":"从“已知网络”时间线上移除"},"mrf_policies_desc":"MRF 策略会影响本实例的互通行为。以下策略已启用:","mrf_policies":"已启用的 MRF 策略","keyword":{"ftl_removal":"从“全部已知网络”时间线上移除","keyword_policies":"关键词策略","is_replaced_by":"→","replace":"替换","reject":"拒绝"},"federation":"联邦互通"},"staff":"管理人员"},"domain_mute_card":{"unmute_progress":"正在取消隐藏…","unmute":"取消隐藏","mute_progress":"隐藏中…","mute":"隐藏"},"errors":{"storage_unavailable":"Pleroma 无法访问浏览器储存。您的登陆以及本地设置将不会被保存,您也可能遇到未知问题。请尝试启用 cookies。"},"shoutbox":{"title":"留言板"},"display_date":{"today":"今天"},"file_type":{"file":"文件","image":"图片","video":"视频","audio":"音频"},"chats":{"empty_chat_list_placeholder":"您还没有任何聊天记录。开始聊天吧!","error_sending_message":"发送消息时出了点问题。","error_loading_chat":"加载聊天时出了点问题。","delete_confirm":"您确实要删除此消息吗?","more":"更多","empty_message_error":"无法发布空消息","new":"新聊天","chats":"聊天","delete":"删除","message_user":"发消息给 {nickname}","you":"你:"}}')}}]); +//# sourceMappingURL=31.226f7a848d733df38095.js.map \ No newline at end of file diff --git a/priv/static/static/js/31.226f7a848d733df38095.js.map b/priv/static/static/js/31.226f7a848d733df38095.js.map new file mode 100644 index 000000000..3d85d770f --- /dev/null +++ b/priv/static/static/js/31.226f7a848d733df38095.js.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/31.226f7a848d733df38095.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/32.19ca50edbb4d711838dc.js b/priv/static/static/js/32.19ca50edbb4d711838dc.js new file mode 100644 index 000000000..81bd5064f --- /dev/null +++ b/priv/static/static/js/32.19ca50edbb4d711838dc.js @@ -0,0 +1,2 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[32],{625:function(e){e.exports=JSON.parse('{"emoji":{"unicode":"統一碼繪文字","custom":"自定義繪文字","add_emoji":"插入繪文字","search_emoji":"搜索繪文字","keep_open":"選擇器保持打開","emoji":"繪文字","stickers":"貼紙","load_all":"加載所有繪文字(共 {emojiAmount} 個)","load_all_hint":"最先加載的 {saneAmount} ,加載全部繪文字可能會帶來性能問題。"},"polls":{"not_enough_options":"投票的選項太少","expired":"投票 {0} 前已結束","expires_in":"投票於 {0} 內結束","expiry":"投票期限","multiple_choices":"多選","single_choice":"單選","type":"問卷類型","vote":"投票","votes":"票","option":"選項","add_option":"增加選項","add_poll":"增加投票","votes_count":"{count} 票 | {count} 票","people_voted_count":"{count} 人已投票 | {count} 人已投票"},"notifications":{"reacted_with":"作出了 {0} 的反應","migrated_to":"遷移到","no_more_notifications":"沒有更多的通知","repeated_you":"轉發了你的發文","read":"已閱!","notifications":"通知","load_older":"載入更早的通知","follow_request":"想要關注你","followed_you":"關注了你","favorited_you":"喜歡了你的發文","broken_favorite":"未知的狀態,正在搜索中…","error":"獲取通知錯誤:{0}"},"nav":{"chats":"聊天","timelines":"時間線","preferences":"偏好設置","who_to_follow":"推薦關注","search":"搜索","user_search":"用戶搜索","bookmarks":"書籤","twkn":"已知網絡","timeline":"時間線","public_tl":"公共時間線","dms":"私信","interactions":"互動","mentions":"提及","friend_requests":"關注請求","back":"後退","administration":"管理員","about":"關於","home_timeline":"家時間線"},"media_modal":{"next":"往後","previous":"往前"},"login":{"heading":{"recovery":"雙重因素恢復","totp":"雙重因素驗證"},"recovery_code":"恢復碼","enter_two_factor_code":"輸入一個雙重因素驗證碼","enter_recovery_code":"輸入一個恢復碼","authentication_code":"驗證碼","hint":"登錄後加入討論","username":"用戶名","register":"註冊","placeholder":"例:鈴音","password":"密碼","logout":"登出","description":"用 OAuth 登入","login":"登入"},"importer":{"error":"導入此文件時出現一個錯誤。","success":"導入成功。","submit":"提交"},"image_cropper":{"cancel":"取消","save_without_cropping":"保存不裁剪","save":"保存","crop_picture":"裁剪圖片"},"general":{"peek":"窺視","close":"關閉","verify":"驗證","confirm":"確認","enable":"啟用","disable":"禁用","cancel":"取消","dismiss":"忽略","show_less":"收起","show_more":"展開","optional":"可選","retry":"再試","error_retry":"請再試","generic_error":"發生一個錯誤","loading":"載入中…","more":"更多","submit":"提交","apply":"應用","role":{"moderator":"主持人","admin":"管理員"},"flash_content":"點擊以使用 Ruffle 顯示 Flash 內容(實驗性,可能無效)。","flash_security":"請注意,這可能有潜在的危險,因為Flash內容仍然是武斷的程式碼。","flash_fail":"無法加載flash內容,請參閱控制台瞭解詳細資訊。"},"finder":{"find_user":"尋找用戶","error_fetching_user":"獲取用戶時發生錯誤"},"features_panel":{"who_to_follow":"推薦關注","title":"特色","text_limit":"文字數量限制","scope_options":"可見範圍設置","media_proxy":"媒體代理","pleroma_chat_messages":"Pleroma 聊天","chat":"聊天","gopher":"Gopher","upload_limit":"上傳限制"},"exporter":{"processing":"正在處理,稍後會提示您下載文件","export":"導出"},"domain_mute_card":{"unmute_progress":"取消靜音中…","unmute":"取消靜音","mute_progress":"靜音中…","mute":"靜音"},"shoutbox":{"title":"留言板"},"about":{"staff":"職員","mrf":{"simple":{"media_nsfw_desc":"這個實例強迫以下實例的帖子媒體設定為敏感:","media_nsfw":"媒體強制設定為敏感","media_removal_desc":"這個實例移除以下實例的帖子媒體:","media_removal":"移除媒體","ftl_removal_desc":"這個實例在所有已知網絡中移除下列實例:","ftl_removal":"從所有已知網路中移除","quarantine_desc":"本實例只會把公開發文發送到下列實例:","quarantine":"隔離","reject_desc":"本實例不會接收來自下列實例的消息:","reject":"拒絕","accept_desc":"本實例只接收來自下列實例的消息:","simple_policies":"站規","accept":"接受"},"mrf_policies_desc":"MRF 策略會影響本實例的互通行為。以下策略已啟用:","keyword":{"ftl_removal":"從“全部已知網絡”時間線上移除","replace":"取代","reject":"拒絕","is_replaced_by":"→","keyword_policies":"關鍵字政策"},"mrf_policies":"已啟用的MRF政策","federation":"聯邦"}},"settings":{"style":{"common":{"color":"顏色","contrast":{"context":{"18pt":"大字文本 (18pt+)","text":"文本"},"level":{"aaa":"符合 AAA 等級準則(推薦)","aa":"符合 AA 等級準則(最低)","bad":"不符合任何輔助功能指南"},"hint":"對比度是 {ratio}, 它 {level} {context}"},"opacity":"透明度"},"advanced_colors":{"faint_text":"灰度文字","alert_error":"錯誤","badge_notification":"通知","alert":"提醒或警告背景色","_tab_label":"高级","alert_warning":"警告","alert_neutral":"中性","post":"帖子/用戶簡介","badge":"徽章背景","popover":"提示框,菜單,彈出框","panel_header":"面板標題","top_bar":"頂欄","borders":"邊框","buttons":"按鈕","inputs":"輸入框","underlay":"底襯","poll":"投票統計圖","icons":"圖標","highlight":"強調元素","pressed":"按下","selectedPost":"選中的帖子","selectedMenu":"選中的菜單項","disabled":"關閉","toggled":"切換","tabs":"標籤","chat":{"incoming":"收到","outgoing":"發出","border":"邊框"},"wallpaper":"桌布"},"preview":{"header_faint":"這很正常","header":"預覽","content":"內容","error":"例子錯誤","button":"按鈕","text":"有堆 {0} 和 {1}","mono":"內容","input":"剛剛抵達洛杉磯.","faint_link":"有用的手冊","fine_print":"閱讀我們的 {0} ,然而什麼有用的也學不到!","checkbox":"我已經瀏覽了條款及細則","link":"一個很好的小鏈接"},"shadows":{"override":"覆寫","_tab_label":"陰影和燈光","component":"組件","shadow_id":"陰影 #{value}","blur":"模糊","spread":"擴散","inset":"插圖","hintV3":"對於陰影,您還可以使用{0}表示法來使用其他顏色插槽。","filter_hint":{"always_drop_shadow":"警告,此陰影設置會總是使用 {0} ,如果瀏覽器支持的話。","drop_shadow_syntax":"{0} 不支持參數 {1} 和關鍵詞 {2} 。","avatar_inset":"請注意組合兩個內部和非內部的陰影到頭像上,在透明頭像上可能會有意料之外的效果。","spread_zero":"陰影的擴散 > 0 會同設置成零一樣","inset_classic":"插入內部的陰影會使用 {0}"},"components":{"panel":"面板","panelHeader":"面板標題","topBar":"頂欄","avatar":"用戶頭像(在個人資料欄)","avatarStatus":"用戶頭像(在帖子顯示欄)","popup":"彈窗和工具提示","button":"按鈕","buttonHover":"按鈕(懸停)","buttonPressed":"按鈕(按下)","buttonPressedHover":"按鈕(按下和懸停)","input":"輸入框"}},"switcher":{"use_snapshot":"舊版","load_theme":"載入主題","keep_color":"保留顏色","keep_shadows":"保留陰影","keep_opacity":"保留透明度","keep_roundness":"保留圓角","help":{"migration_napshot_gone":"不知出於何種原因,主題快照缺失了,一些地方可能與您印象中的不符。","snapshot_source_mismatch":"版本衝突:很有可能是 FE 版本回滾後再次升級了,如果您使用舊版本的 FE 更改了主題那麼您可能需要使用舊版本,否則請使用新版本。","future_version_imported":"您導入的文件來自更高版本的 FE。","older_version_imported":"您導入的文件來自舊版本的 FE。","snapshot_missing":"在文件中沒有主題快照,所以網站外觀可能會與原來預想的不同。","fe_upgraded":"PleromaFE 的主題引擎隨著版本更新升級了。","fe_downgraded":"PleromaFE 的版本回滾了。","upgraded_from_v2":"PleromaFE 已升級,主題會和你記憶中的不太一樣。","v2_imported":"您導入的文件是舊版 FE 的。我們儘可能保持兼容性,但還是可能出現不一致的情況。","snapshot_present":"載入快照已加載,因此所有值均被覆蓋。 您可以改為載入主題實際數據。","migration_snapshot_ok":"為保萬無一失,載入了主題快照。您可以試著載入主題數據。"},"use_source":"新版本","keep_as_is":"保持原狀","clear_opacity":"清除透明度","clear_all":"清除全部","reset":"重置","keep_fonts":"保留字體","save_load_hint":"\\"保留\\" 選項在選擇或載入主題時保留當前設置的選項,在導出主題時還會存儲上述選項。當所有複選框未設置時,導出主題將保存所有內容。"},"fonts":{"components":{"interface":"界面","input":"輸入框","post":"發帖文字","postCode":"帖子中使用等間距文字(富文本)"},"_tab_label":"字體","help":"給用戶界面的元素選擇字體。選擇 “自選”的你必須輸入確切的字體名稱。","family":"字體名稱","size":"大小 (像素)","weight":"字重 (粗體))","custom":"自選"},"common_colors":{"foreground_hint":"點擊”高級“ 標籤進行細緻的控制","main":"常用顏色","_tab_label":"共同","rgbo":"圖標,強調,徽章"},"radii":{"_tab_label":"圓角"}},"notification_setting_block_from_strangers":"屏蔽來自你沒有關注的用戶的通知","user_mutes":"用户","hide_followers_count_description":"不顯示關注者數量","no_rich_text_description":"不顯示富文本格式","notification_visibility_moves":"用戶遷移","notification_visibility_repeats":"轉發","notification_visibility_mentions":"提及","notification_visibility_likes":"喜歡","interfaceLanguage":"界面語言","instance_default":"(默認:{value})","inputRadius":"輸入框","import_theme":"導入預置主題","import_followers_from_a_csv_file":"從 csv 文件中導入關注","import_blocks_from_a_csv_file":"從 csv 文件中導入封鎖黑名單名單","hide_filtered_statuses":"隱藏過濾的發文","lock_account_description":"你需要手動審核關注請求","loop_video":"循環視頻","loop_video_silent_only":"只循環沒有聲音的視頻(例如:Mastodon 裡的“GIF”)","mutes_tab":"靜音","play_videos_in_modal":"在彈出框內播放視頻","profile_fields":{"add_field":"添加字段","name":"標籤","value":"內容","label":"個人資料元數據"},"use_contain_fit":"生成縮略圖時不要裁剪附件","notification_visibility":"要顯示的通知類型","notification_visibility_follows":"關注","new_email":"新電郵","subject_line_mastodon":"比如mastodon: copy as is","reset_background_confirm":"您確定要重置個人資料背景圖嗎?","reset_banner_confirm":"您確定要重置橫幅圖片嗎?","reset_avatar_confirm":"您確定要重置頭像嗎?","reset_profile_banner":"重置橫幅圖片","reset_profile_background":"重置個人資料背景圖","reset_avatar":"重置頭像","discoverable":"允許通過搜索檢索等服務找到此賬號","delete_account_error":"刪除賬戶時發生錯誤,如果一直刪除不了,請聯繫實例管理員。","composing":"寫作設置","chatMessageRadius":"聊天訊息","mfa":{"confirm_and_enable":"確認並啟用OTP","setup_otp":"設置OTP","otp":"OTP","wait_pre_setup_otp":"預設OTP","verify":{"desc":"要啟用雙因素驗證,請把你的雙因素驗證 app 裡的數字輸入:"},"scan":{"secret_code":"密鑰","desc":"使用你的雙因素驗證 app,掃瞄這個二維碼,或者輸入這些文字密鑰:","title":"掃瞄"},"authentication_methods":"身份驗證方法","recovery_codes_warning":"抄寫這些號碼,或者保存在安全的地方。這些號碼不會再次顯示。如果你無法訪問你的 2FA app,也丟失了你的恢復碼,你的賬號就再也無法登錄了。","waiting_a_recovery_codes":"正在接收備份碼…","recovery_codes":"恢復碼。","warning_of_generate_new_codes":"當你生成新的恢復碼時,你的舊恢復碼就失效了。","generate_new_recovery_codes":"生成新的恢復碼","title":"雙因素驗證"},"new_password":"新密碼","name_bio":"名字及簡介","name":"名字","domain_mutes":"域名","delete_account_instructions":"在下面輸入密碼,以確認刪除帳戶。","delete_account_description":"永久刪除你的帳號和所有數據。","delete_account":"刪除帳戶","default_vis":"默認可見性範圍","data_import_export_tab":"數據導入/導出","mutes_and_blocks":"靜音與封鎖","current_password":"當前密碼","confirm_new_password":"確認新密碼","collapse_subject":"摺疊帶標題的內容","checkboxRadius":"複選框","instance_default_simple":"(默認)","interface":"界面","invalid_theme_imported":"您所選擇的主題文件不被 Pleroma 支持,因此主題未被修改。","limited_availability":"在您的瀏覽器中無法使用","links":"鏈接","changed_password":"成功修改了密碼!","change_password_error":"修改密碼的時候出了點問題。","change_password":"修改密碼","changed_email":"郵箱修改成功!","bot":"這是一個機器人賬號","change_email":"修改電子郵箱","cRed":"紅色(取消)","cOrange":"橙色(收藏)","cGreen":"綠色(轉發)","cBlue":"藍色(回覆,關注)","btnRadius":"按鈕","notification_visibility_emoji_reactions":"互動","no_blocks":"沒有封鎖","no_mutes":"沒有靜音","hide_follows_description":"不要顯示我所關注的人","hide_followers_description":"不要顯示關注我的人","hide_follows_count_description":"不顯示關注數","nsfw_clickthrough":"將敏感附件和鏈接隱藏,點擊才能打開","valid_until":"有效期至","panelRadius":"面板","pause_on_unfocused":"在離開頁面時暫停時間線推送","notifications":"通知","notification_setting_filters":"過濾器","notification_setting_privacy":"隱私","notification_mutes":"要停止收到某個指定的用戶的通知,請使用靜音功能。","notification_blocks":"封鎖一個用戶會停掉所有他的通知,等同於取消關注。","enable_web_push_notifications":"啟用 web 推送通知","presets":"預置","profile_background":"配置文件背景圖","profile_banner":"橫幅圖片","profile_tab":"個人資料","radii_help":"設置界面邊緣的圓角 (單位:像素)","reply_visibility_all":"顯示所有回覆","autohide_floating_post_button":"自動隱藏新帖子的按鈕(移動設備)","saving_err":"保存設置時發生錯誤","saving_ok":"設置已保存","search_user_to_block":"搜索你想屏蔽的用戶","search_user_to_mute":"搜索你想要隱藏的用戶","security_tab":"安全","set_new_avatar":"設置新頭像","set_new_profile_background":"設置新的個人背景","set_new_profile_banner":"設置新的個人橫幅","settings":"設置","subject_input_always_show":"總是顯示主題框","subject_line_behavior":"回覆時複製主題","subject_line_email":"比如電郵: \\"re: 主題\\"","subject_line_noop":"不要複製","post_status_content_type":"發文內容類型","stop_gifs":"鼠標懸停時播放GIF","streaming":"開啟滾動到頂部時的自動推送","text":"文本","theme":"主題","theme_help":"使用十六進制代碼(#rrggbb)來設置主題顏色。","theme_help_v2_1":"你也可以通過切換複選框來覆蓋某些組件的顏色和透明。使用“清除所有”來清楚所有覆蓋設置。","theme_help_v2_2":"某些條目下的圖標是背景或文本對比指示器,鼠標懸停可以獲取詳細信息。請記住,使用透明度來顯示最差的情況。","tooltipRadius":"提醒","upload_a_photo":"上傳照片","user_settings":"用戶設置","values":{"false":"否","true":"是"},"avatar_size_instruction":"推薦的頭像圖片最小的尺寸是 150x150 像素。","emoji_reactions_on_timeline":"在時間線上顯示繪文字互動","export_theme":"導出預置主題","filtering":"過濾","filtering_explanation":"所有包含以下詞彙的內容都會被隱藏,一行一個","follow_export":"導出關注","follow_export_button":"將關注導出成 csv 文件","follow_import":"導入關注","follow_import_error":"導入關注時錯誤","follows_imported":"關注已導入!尚需要一些時間來處理。","hide_attachments_in_convo":"在對話中隱藏附件","hide_attachments_in_tl":"在時間線上隱藏附件","hide_muted_posts":"不顯示被靜音的用戶的帖子","max_thumbnails":"最多每個帖子所能顯示的縮略圖數量","hide_isp":"隱藏指定實例的面板","preload_images":"預載圖片","use_one_click_nsfw":"點擊一次以打開工作場所不適宜的附件","hide_post_stats":"隱藏帖子的統計數據(例如:收藏的次數)","hide_user_stats":"隱藏用戶的統計數據(例如:關注者的數量)","general":"通用","foreground":"前景","blocks_tab":"封鎖","blocks_imported":"封鎖黑名單導入成功!需要一點時間來處理。","block_import_error":"導入封鎖黑名單出錯","block_import":"封鎖黑名單導入","block_export_button":"導出你的封鎖黑名單到一個 csv 文件","block_export":"封鎖黑名單導出","bio":"簡介","background":"背景","avatarRadius":"頭像","avatarAltRadius":"頭像(通知)","avatar":"頭像","attachments":"附件","attachmentRadius":"附件","allow_following_move":"正在關注的賬號遷移時自動重新關注","enter_current_password_to_confirm":"輸入你當前密碼來確認你的身份","security":"安全","app_name":"App 名稱","change_email_error":"修改你的電子郵箱時發生錯誤。","type_domains_to_mute":"搜索需要隱藏的域名","pad_emoji":"從繪文字選擇器插入繪文字時,在繪文字兩側插入空格","useStreamingApi":"實時接收發佈以及通知","minimal_scopes_mode":"最小發文範圍","scope_copy":"回覆時的複製範圍(私信是總是複製的)","reply_visibility_self":"只顯示發送給我的回覆","reply_visibility_following":"只顯示發送給我的回覆/發送給我關注的用戶的回覆","replies_in_timeline":"時間線中的回覆","revoke_token":"撤消","show_admin_badge":"顯示管理徽章","accent":"強調色","greentext":"前文箭頭","show_moderator_badge":"顯示主持人徽章","oauth_tokens":"OAuth代幣","token":"代幣","refresh_token":"刷新token","useStreamingApiWarning":"(不推薦使用,實驗性的,已知跳過文章)","fun":"有趣","notification_setting_hide_notification_contents":"隱藏推送通知中的發送者與內容信息","version":{"title":"版本","backend_version":"後端版本","frontend_version":"前端版本"},"virtual_scrolling":"優化時間線渲染","import_mutes_from_a_csv_file":"從CSV文件導入靜音","mutes_imported":"靜音導入了!處理它們將需要一段時間。","mute_import":"靜音導入","mute_import_error":"導入靜音時出錯","mute_export_button":"將靜音導出到csv文件","mute_export":"靜音導出","hide_wallpaper":"隱藏實例桌布","reply_visibility_self_short":"只顯示對我本人的回复","reply_visibility_following_short":"顯示對我關注的人的回复","hide_all_muted_posts":"不顯示已隱藏的帖子","hide_media_previews":"隱藏媒體預覽","word_filter":"詞過濾","setting_changed":"與默認設置不同","more_settings":"更多設置","save":"保存更改","file_export_import":{"errors":{"invalid_file":"所選文件不是受支持的Pleroma設置備份。 沒有進行任何更改。","file_too_new":"不兼容的主版本:{fileMajor},此 PleromaFE(設置版本 {feMajor})過舊,無法處理","file_too_old":"不兼容的主版本:{fileMajor},文件版本過舊,不受支持(最小設置版本 {feMajor})","file_slightly_new":"檔案的小版本不同,有些設置可能無法載入"},"restore_settings":"從文件還原設置","backup_settings_theme":"備份設置和主題到文件","backup_settings":"備份設置到文件","backup_restore":"設定備份"},"sensitive_by_default":"默認標記發文為敏感內容","right_sidebar":"在右側顯示側邊欄","hide_shoutbox":"隱藏實例留言框"},"chats":{"more":"更多","delete_confirm":"您確實要刪除此消息嗎?","error_loading_chat":"加載聊天時出了點問題。","error_sending_message":"發送消息時出了點問題。","empty_chat_list_placeholder":"您還沒有任何聊天記錄。 開始新的聊天!","new":"新聊天","empty_message_error":"無法發布空消息","you":"你:","message_user":"發消息給 {nickname}","delete":"刪除","chats":"聊天"},"file_type":{"audio":"音頻","video":"視頻","image":"图片","file":"檔案"},"display_date":{"today":"今天"},"status":{"mute_conversation":"靜音對話","replies_list":"回覆:","reply_to":"回覆","pin":"在個人資料置頂","unpin":"取消在個人資料置頂","favorites":"喜歡","repeats":"轉發","delete":"刪除發文","pinned":"置頂","bookmark":"書籤","unbookmark":"取消書籤","delete_confirm":"你真的想要刪除這條發文嗎?","unmute_conversation":"對話取消靜音","status_unavailable":"發文不可取得","copy_link":"複製發文鏈接","thread_muted":"静音線程","show_full_subject":"顯示完整標題","thread_muted_and_words":",有这些字:","hide_full_subject":"隱藏完整標題","show_content":"顯示內容","hide_content":"隱藏內容","status_deleted":"該帖已被刪除","expand":"展开","external_source":"外部來源","nsfw":"工作不安全"},"time":{"hours":"{0} 時","days_short":"{0}天","day_short":"{0}天","days":"{0} 天","hour":"{0} 時","hour_short":"{0}時","hours_short":"{0}時","years_short":"{0} y","now":"剛剛","day":"{0} 天","in_future":"還有 {0}","in_past":"{0} 之前","minute":"{0} 分鐘","minute_short":"{0} 分","minutes_short":"{0} 分","minutes":"{0} 分鐘","month":"{0} 月","months":"{0} 月","month_short":"{0} 月","months_short":"{0} 月","now_short":"剛剛","second":"{0} 秒","seconds":"{0} 秒","second_short":"{0} 秒","seconds_short":"{0} 秒","week":"{0}周","weeks":"{0}周","week_short":"{0}周","weeks_short":"{0}周","year":"{0} 年","years":"{0} 年","year_short":"{0}年"},"post_status":{"media_description_error":"無法更新媒體,請重試","media_description":"媒體描述","scope":{"unlisted":"不公開 - 不會發送到公共時間軸","public":"公共 - 發送到公共時間軸","private":"僅關注者 - 只有關注了你的人能看到","direct":"私信 - 只發送給被提及的用戶"},"scope_notice":{"unlisted":"本條內容既不在公共時間線,也不會在所有已知網絡上可見","private":"關注你的人才能看到本條內容","public":"本條帖子可以被所有人看到"},"preview_empty":"空的","preview":"預覽","posting":"正在發送","direct_warning_to_first_only":"本條內容只有被在消息開始處提及的用戶能夠看到。","direct_warning_to_all":"本條內容只有被提及的用戶能夠看到。","account_not_locked_warning":"你的帳號沒有 {0}。任何人都可以關注你並瀏覽你的上鎖內容。","new_status":"發佈新發文","content_warning":"主題(可選)","content_type":{"text/bbcode":"BBCode","text/markdown":"Markdown","text/html":"HTML","text/plain":"純文本"},"attachments_sensitive":"標記附件為敏感內容","account_not_locked_warning_link":"上鎖","default":"剛剛抵達洛杉磯。","empty_status_error":"不能發布沒有內容,沒有附件的發文","post":"發送"},"errors":{"storage_unavailable":"Pleroma無法訪問瀏覽器存儲。您的登錄名或本地設置將不會保存,您可能會遇到意外問題。嘗試啟用Cookie。"},"timeline":{"error_fetching":"獲取更新時發生錯誤","conversation":"對話","no_retweet_hint":"這條內容僅關注者可見,或者是私信,因此不能轉發","collapse":"摺疊","load_older":"載入更早的發文","repeated":"已轉發","show_new":"顯示新內容","reload":"重新載入","up_to_date":"已是最新","no_more_statuses":"没有更多發文","no_statuses":"没有發文","error":"取得時間線時發生錯誤:{0}","socket_reconnected":"已建立實時連接","socket_broke":"丟失實時連接:CloseEvent代碼{0}"},"interactions":{"load_older":"載入更早的互動","moves":"用戶遷移","follows":"新的關注者","favs_repeats":"轉發和喜歡"},"selectable_list":{"select_all":"選擇全部"},"remote_user_resolver":{"error":"未找到。","searching_for":"搜索","remote_user_resolver":"遠程用戶解析器"},"registration":{"validations":{"password_confirmation_match":"不能和密碼一樣","password_confirmation_required":"不能留空","password_required":"不能留空","email_required":"不能留空","fullname_required":"不能留空","username_required":"不能留空"},"fullname":"顯示名稱","bio_placeholder":"例如:\\n你好,我是玲音。\\n我是一個住在日本郊區的動畫少女。你可能在 Wired 見過我。","fullname_placeholder":"例如:岩倉玲音","username_placeholder":"例如:lain","new_captcha":"點擊圖片獲取新的驗證碼","captcha":"CAPTCHA","token":"邀請碼","registration":"註冊","password_confirm":"確認密碼","email":"電子郵箱","bio":"簡介","reason_placeholder":"此實例的註冊需要手動批准。\\n請讓管理知道您為什麼想要註冊。","reason":"註冊理由","register":"註冊"},"user_card":{"its_you":"就是你!!","media":"媒體","per_day":"每天","remote_follow":"跨站關注","subscribe":"訂閱","mute_progress":"靜音中…","admin_menu":{"delete_account":"刪除賬號","delete_user":"刪除用戶","delete_user_confirmation":"你確認嗎?此操作無法撤銷。","moderation":"調停","grant_admin":"賦予管理權限","revoke_admin":"撤銷管理權限","grant_moderator":"賦予主持人權限","revoke_moderator":"撤銷主持人權限","activate_account":"啟用賬號","deactivate_account":"關閉賬號","force_nsfw":"標記所有的帖子都是工作場合不適","strip_media":"從帖子裡刪除媒體文件","force_unlisted":"強制帖子為不公開","sandbox":"強制帖子為只有關注者可看","disable_remote_subscription":"禁止從遠程實例關注用戶","disable_any_subscription":"完全禁止關注用戶","quarantine":"從聯合實例中禁止用戶帖子"},"approve":"批准","block":"封鎖","blocked":"已封鎖!","deny":"拒絕","favorites":"喜歡","follow":"關注","follow_sent":"請求已發送!","follow_progress":"請求中…","follow_unfollow":"取消關注","followees":"正在關注","followers":"關注者","following":"正在關注!","follows_you":"關注了你!","hidden":"已隱藏","mention":"提及","message":"消息","mute":"靜音","muted":"已靜音","report":"報告","statuses":"發文","unsubscribe":"退訂","unblock":"取消封鎖","unblock_progress":"取消封鎖中…","block_progress":"封鎖中…","unmute":"取消靜音","unmute_progress":"取消靜音中…","hide_repeats":"隱藏轉發","show_repeats":"顯示轉發","roles":{"moderator":"主持人","admin":"管理員"},"highlight":{"disabled":"無突出顯示","solid":"單色背景","striped":"條紋背景","side":"彩條"},"bot":"機器人","edit_profile":"編輯個人資料"},"user_profile":{"timeline_title":"用戶時間線","profile_does_not_exist":"抱歉,此個人資料不存在。","profile_loading_error":"抱歉,載入個人資料時出錯。"},"user_reporting":{"title":"報告 {0}","add_comment_description":"此報告會發送給你的實例管理員。你可以在下面提供更多詳細信息解釋報告的緣由:","forward_to":"轉發 {0}","submit":"提交","generic_error":"當處理你的請求時,發生了一個錯誤。","additional_comments":"其它評論","forward_description":"這個賬號是從另外一個服務器。同時發送一個報告到那裡?"},"who_to_follow":{"more":"更多","who_to_follow":"推薦關注"},"tool_tip":{"media_upload":"上傳多媒體","repeat":"轉發","favorite":"喜歡","add_reaction":"添加互動","reply":"回覆","user_settings":"用戶設置","accept_follow_request":"接受關注請求","reject_follow_request":"拒絕關注請求","bookmark":"書籤"},"upload":{"file_size_units":{"B":"B","KiB":"KiB","TiB":"TiB","MiB":"MiB","GiB":"GiB"},"error":{"base":"上傳失敗。","file_too_big":"文件太大[{filesize} {filesizeunit} / {allowedsize} {allowedsizeunit}]","default":"稍後再試","message":"上傳錯誤:{0}"}},"search":{"people":"人","hashtags":"標籤","person_talking":"{count} 人正在討論","people_talking":"{count} 人正在討論","no_results":"沒有搜索結果"},"password_reset":{"forgot_password":"忘記密碼了?","password_reset":"重置密碼","instruction":"輸入你的電郵地址或者用戶名,我們將發送一個鏈接到你的郵箱,用於重置密碼。","placeholder":"你的電郵地址或者用戶名","check_email":"檢查你的郵箱,會有一個鏈接用於重置密碼。","return_home":"回到首頁","too_many_requests":"你觸發了嘗試的限制,請稍後再試。","password_reset_disabled":"密碼重置已經被禁用。請聯繫你的實例管理員。","password_reset_required":"您必須重置密碼才能登陸。","password_reset_required_but_mailer_is_disabled":"您必須重置密碼,但是密碼重置被禁用了。請聯繫您所在實例的管理員。"}}')}}]); +//# sourceMappingURL=32.19ca50edbb4d711838dc.js.map \ No newline at end of file diff --git a/priv/static/static/js/32.19ca50edbb4d711838dc.js.map b/priv/static/static/js/32.19ca50edbb4d711838dc.js.map new file mode 100644 index 000000000..99ad6e050 --- /dev/null +++ b/priv/static/static/js/32.19ca50edbb4d711838dc.js.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/32.19ca50edbb4d711838dc.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/32.899035ede0115c5c0f99.js b/priv/static/static/js/32.899035ede0115c5c0f99.js deleted file mode 100644 index 6faf5ed33..000000000 --- a/priv/static/static/js/32.899035ede0115c5c0f99.js +++ /dev/null @@ -1,2 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[32],{612:function(e){e.exports=JSON.parse('{"emoji":{"unicode":"統一碼繪文字","custom":"自定義繪文字","add_emoji":"插入繪文字","search_emoji":"搜索繪文字","keep_open":"選擇器保持打開","emoji":"繪文字","stickers":"貼紙","load_all":"加載所有繪文字(共 {emojiAmount} 個)","load_all_hint":"最先加載的 {saneAmount} ,加載全部繪文字可能會帶來性能問題。"},"polls":{"not_enough_options":"投票的選項太少","expired":"投票 {0} 前已結束","expires_in":"投票於 {0} 內結束","expiry":"投票期限","multiple_choices":"多選","single_choice":"單選","type":"問卷類型","vote":"投票","votes":"票","option":"選項","add_option":"增加選項","add_poll":"增加投票","votes_count":"{count} 票 | {count} 票","people_voted_count":"{count} 人已投票 | {count} 人已投票"},"notifications":{"reacted_with":"作出了 {0} 的反應","migrated_to":"遷移到","no_more_notifications":"沒有更多的通知","repeated_you":"轉發了你的發文","read":"已閱!","notifications":"通知","load_older":"載入更早的通知","follow_request":"想要關注你","followed_you":"關注了你","favorited_you":"喜歡了你的發文","broken_favorite":"未知的狀態,正在搜索中…","error":"獲取通知錯誤:{0}"},"nav":{"chats":"聊天","timelines":"時間線","preferences":"偏好設置","who_to_follow":"推薦關注","search":"搜索","user_search":"用戶搜索","bookmarks":"書籤","twkn":"已知網絡","timeline":"時間線","public_tl":"公共時間線","dms":"私信","interactions":"互動","mentions":"提及","friend_requests":"關注請求","back":"後退","administration":"管理員","about":"關於","home_timeline":"家時間線"},"media_modal":{"next":"往後","previous":"往前"},"login":{"heading":{"recovery":"雙重因素恢復","totp":"雙重因素驗證"},"recovery_code":"恢復碼","enter_two_factor_code":"輸入一個雙重因素驗證碼","enter_recovery_code":"輸入一個恢復碼","authentication_code":"驗證碼","hint":"登錄後加入討論","username":"用戶名","register":"註冊","placeholder":"例:鈴音","password":"密碼","logout":"登出","description":"用 OAuth 登入","login":"登入"},"importer":{"error":"導入此文件時出現一個錯誤。","success":"導入成功。","submit":"提交"},"image_cropper":{"cancel":"取消","save_without_cropping":"保存不裁剪","save":"保存","crop_picture":"裁剪圖片"},"general":{"peek":"窺視","close":"關閉","verify":"驗證","confirm":"確認","enable":"啟用","disable":"禁用","cancel":"取消","dismiss":"忽略","show_less":"收起","show_more":"展開","optional":"可選","retry":"再試","error_retry":"請再試","generic_error":"發生一個錯誤","loading":"載入中…","more":"更多","submit":"提交","apply":"應用","role":{"moderator":"主持人","admin":"管理員"}},"finder":{"find_user":"尋找用戶","error_fetching_user":"獲取用戶時發生錯誤"},"features_panel":{"who_to_follow":"推薦關注","title":"特色","text_limit":"文字數量限制","scope_options":"可見範圍設置","media_proxy":"媒體代理","pleroma_chat_messages":"Pleroma 聊天","chat":"聊天","gopher":"Gopher","upload_limit":"上傳限制"},"exporter":{"processing":"正在處理,稍後會提示您下載文件","export":"導出"},"domain_mute_card":{"unmute_progress":"取消靜音中…","unmute":"取消靜音","mute_progress":"靜音中…","mute":"靜音"},"shoutbox":{"title":"留言板"},"about":{"staff":"職員","mrf":{"simple":{"media_nsfw_desc":"這個實例強迫以下實例的帖子媒體設定為敏感:","media_nsfw":"媒體強制設定為敏感","media_removal_desc":"這個實例移除以下實例的帖子媒體:","media_removal":"移除媒體","ftl_removal_desc":"這個實例在所有已知網絡中移除下列實例:","ftl_removal":"從所有已知網路中移除","quarantine_desc":"本實例只會把公開發文發送到下列實例:","quarantine":"隔離","reject_desc":"本實例不會接收來自下列實例的消息:","reject":"拒絕","accept_desc":"本實例只接收來自下列實例的消息:","simple_policies":"站規","accept":"接受"},"mrf_policies_desc":"MRF 策略會影響本實例的互通行為。以下策略已啟用:","keyword":{"ftl_removal":"從“全部已知網絡”時間線上移除","replace":"取代","reject":"拒絕","is_replaced_by":"→","keyword_policies":"關鍵字政策"},"mrf_policies":"已啟用的MRF政策","federation":"聯邦"}},"settings":{"style":{"common":{"color":"顏色","contrast":{"context":{"18pt":"大字文本 (18pt+)","text":"文本"},"level":{"aaa":"符合 AAA 等級準則(推薦)","aa":"符合 AA 等級準則(最低)","bad":"不符合任何輔助功能指南"},"hint":"對比度是 {ratio}, 它 {level} {context}"},"opacity":"透明度"},"advanced_colors":{"faint_text":"灰度文字","alert_error":"錯誤","badge_notification":"通知","alert":"提醒或警告背景色","_tab_label":"高级","alert_warning":"警告","alert_neutral":"中性","post":"帖子/用戶簡介","badge":"徽章背景","popover":"提示框,菜單,彈出框","panel_header":"面板標題","top_bar":"頂欄","borders":"邊框","buttons":"按鈕","inputs":"輸入框","underlay":"底襯","poll":"投票統計圖","icons":"圖標","highlight":"強調元素","pressed":"按下","selectedPost":"選中的帖子","selectedMenu":"選中的菜單項","disabled":"關閉","toggled":"切換","tabs":"標籤","chat":{"incoming":"收到","outgoing":"發出","border":"邊框"},"wallpaper":"桌布"},"preview":{"header_faint":"這很正常","header":"預覽","content":"內容","error":"例子錯誤","button":"按鈕","text":"有堆 {0} 和 {1}","mono":"內容","input":"剛剛抵達洛杉磯.","faint_link":"有用的手冊","fine_print":"閱讀我們的 {0} ,然而什麼有用的也學不到!","checkbox":"我已經瀏覽了條款及細則","link":"一個很好的小鏈接"},"shadows":{"override":"覆寫","_tab_label":"陰影和燈光","component":"組件","shadow_id":"陰影 #{value}","blur":"模糊","spread":"擴散","inset":"插圖","hintV3":"對於陰影,您還可以使用{0}表示法來使用其他顏色插槽。","filter_hint":{"always_drop_shadow":"警告,此陰影設置會總是使用 {0} ,如果瀏覽器支持的話。","drop_shadow_syntax":"{0} 不支持參數 {1} 和關鍵詞 {2} 。","avatar_inset":"請注意組合兩個內部和非內部的陰影到頭像上,在透明頭像上可能會有意料之外的效果。","spread_zero":"陰影的擴散 > 0 會同設置成零一樣","inset_classic":"插入內部的陰影會使用 {0}"},"components":{"panel":"面板","panelHeader":"面板標題","topBar":"頂欄","avatar":"用戶頭像(在個人資料欄)","avatarStatus":"用戶頭像(在帖子顯示欄)","popup":"彈窗和工具提示","button":"按鈕","buttonHover":"按鈕(懸停)","buttonPressed":"按鈕(按下)","buttonPressedHover":"按鈕(按下和懸停)","input":"輸入框"}},"switcher":{"use_snapshot":"舊版","load_theme":"載入主題","keep_color":"保留顏色","keep_shadows":"保留陰影","keep_opacity":"保留透明度","keep_roundness":"保留圓角","help":{"migration_napshot_gone":"不知出於何種原因,主題快照缺失了,一些地方可能與您印象中的不符。","snapshot_source_mismatch":"版本衝突:很有可能是 FE 版本回滾後再次升級了,如果您使用舊版本的 FE 更改了主題那麼您可能需要使用舊版本,否則請使用新版本。","future_version_imported":"您導入的文件來自更高版本的 FE。","older_version_imported":"您導入的文件來自舊版本的 FE。","snapshot_missing":"在文件中沒有主題快照,所以網站外觀可能會與原來預想的不同。","fe_upgraded":"PleromaFE 的主題引擎隨著版本更新升級了。","fe_downgraded":"PleromaFE 的版本回滾了。","upgraded_from_v2":"PleromaFE 已升級,主題會和你記憶中的不太一樣。","v2_imported":"您導入的文件是舊版 FE 的。我們儘可能保持兼容性,但還是可能出現不一致的情況。","snapshot_present":"載入快照已加載,因此所有值均被覆蓋。 您可以改為載入主題實際數據。","migration_snapshot_ok":"為保萬無一失,載入了主題快照。您可以試著載入主題數據。"},"use_source":"新版本","keep_as_is":"保持原狀","clear_opacity":"清除透明度","clear_all":"清除全部","reset":"重置","keep_fonts":"保留字體","save_load_hint":"\\"保留\\" 選項在選擇或載入主題時保留當前設置的選項,在導出主題時還會存儲上述選項。當所有複選框未設置時,導出主題將保存所有內容。"},"fonts":{"components":{"interface":"界面","input":"輸入框","post":"發帖文字","postCode":"帖子中使用等間距文字(富文本)"},"_tab_label":"字體","help":"給用戶界面的元素選擇字體。選擇 “自選”的你必須輸入確切的字體名稱。","family":"字體名稱","size":"大小 (像素)","weight":"字重 (粗體))","custom":"自選"},"common_colors":{"foreground_hint":"點擊”高級“ 標籤進行細緻的控制","main":"常用顏色","_tab_label":"共同","rgbo":"圖標,強調,徽章"},"radii":{"_tab_label":"圓角"}},"notification_setting_block_from_strangers":"屏蔽來自你沒有關注的用戶的通知","user_mutes":"用户","hide_followers_count_description":"不顯示關注者數量","no_rich_text_description":"不顯示富文本格式","notification_visibility_moves":"用戶遷移","notification_visibility_repeats":"轉發","notification_visibility_mentions":"提及","notification_visibility_likes":"喜歡","interfaceLanguage":"界面語言","instance_default":"(默認:{value})","inputRadius":"輸入框","import_theme":"導入預置主題","import_followers_from_a_csv_file":"從 csv 文件中導入關注","import_blocks_from_a_csv_file":"從 csv 文件中導入封鎖黑名單名單","hide_filtered_statuses":"隱藏過濾的發文","lock_account_description":"你需要手動審核關注請求","loop_video":"循環視頻","loop_video_silent_only":"只循環沒有聲音的視頻(例如:Mastodon 裡的“GIF”)","mutes_tab":"靜音","play_videos_in_modal":"在彈出框內播放視頻","profile_fields":{"add_field":"添加字段","name":"標籤","value":"內容","label":"個人資料元數據"},"use_contain_fit":"生成縮略圖時不要裁剪附件","notification_visibility":"要顯示的通知類型","notification_visibility_follows":"關注","new_email":"新電郵","subject_line_mastodon":"比如mastodon: copy as is","reset_background_confirm":"您確定要重置個人資料背景圖嗎?","reset_banner_confirm":"您確定要重置橫幅圖片嗎?","reset_avatar_confirm":"您確定要重置頭像嗎?","reset_profile_banner":"重置橫幅圖片","reset_profile_background":"重置個人資料背景圖","reset_avatar":"重置頭像","discoverable":"允許通過搜索檢索等服務找到此賬號","delete_account_error":"刪除賬戶時發生錯誤,如果一直刪除不了,請聯繫實例管理員。","composing":"寫作設置","chatMessageRadius":"聊天訊息","mfa":{"confirm_and_enable":"確認並啟用OTP","setup_otp":"設置OTP","otp":"OTP","wait_pre_setup_otp":"預設OTP","verify":{"desc":"要啟用雙因素驗證,請把你的雙因素驗證 app 裡的數字輸入:"},"scan":{"secret_code":"密鑰","desc":"使用你的雙因素驗證 app,掃瞄這個二維碼,或者輸入這些文字密鑰:","title":"掃瞄"},"authentication_methods":"身份驗證方法","recovery_codes_warning":"抄寫這些號碼,或者保存在安全的地方。這些號碼不會再次顯示。如果你無法訪問你的 2FA app,也丟失了你的恢復碼,你的賬號就再也無法登錄了。","waiting_a_recovery_codes":"正在接收備份碼…","recovery_codes":"恢復碼。","warning_of_generate_new_codes":"當你生成新的恢復碼時,你的舊恢復碼就失效了。","generate_new_recovery_codes":"生成新的恢復碼","title":"雙因素驗證"},"new_password":"新密碼","name_bio":"名字及簡介","name":"名字","domain_mutes":"域名","delete_account_instructions":"在下面輸入密碼,以確認刪除帳戶。","delete_account_description":"永久刪除你的帳號和所有數據。","delete_account":"刪除帳戶","default_vis":"默認可見性範圍","data_import_export_tab":"數據導入/導出","mutes_and_blocks":"靜音與封鎖","current_password":"當前密碼","confirm_new_password":"確認新密碼","collapse_subject":"摺疊帶標題的內容","checkboxRadius":"複選框","instance_default_simple":"(默認)","interface":"界面","invalid_theme_imported":"您所選擇的主題文件不被 Pleroma 支持,因此主題未被修改。","limited_availability":"在您的瀏覽器中無法使用","links":"鏈接","changed_password":"成功修改了密碼!","change_password_error":"修改密碼的時候出了點問題。","change_password":"修改密碼","changed_email":"郵箱修改成功!","bot":"這是一個機器人賬號","change_email":"修改電子郵箱","cRed":"紅色(取消)","cOrange":"橙色(收藏)","cGreen":"綠色(轉發)","cBlue":"藍色(回覆,關注)","btnRadius":"按鈕","notification_visibility_emoji_reactions":"互動","no_blocks":"沒有封鎖","no_mutes":"沒有靜音","hide_follows_description":"不要顯示我所關注的人","hide_followers_description":"不要顯示關注我的人","hide_follows_count_description":"不顯示關注數","nsfw_clickthrough":"將敏感附件和鏈接隱藏,點擊才能打開","valid_until":"有效期至","panelRadius":"面板","pause_on_unfocused":"在離開頁面時暫停時間線推送","notifications":"通知","notification_setting_filters":"過濾器","notification_setting_privacy":"隱私","notification_mutes":"要停止收到某個指定的用戶的通知,請使用靜音功能。","notification_blocks":"封鎖一個用戶會停掉所有他的通知,等同於取消關注。","enable_web_push_notifications":"啟用 web 推送通知","presets":"預置","profile_background":"配置文件背景圖","profile_banner":"橫幅圖片","profile_tab":"個人資料","radii_help":"設置界面邊緣的圓角 (單位:像素)","reply_visibility_all":"顯示所有回覆","autohide_floating_post_button":"自動隱藏新帖子的按鈕(移動設備)","saving_err":"保存設置時發生錯誤","saving_ok":"設置已保存","search_user_to_block":"搜索你想屏蔽的用戶","search_user_to_mute":"搜索你想要隱藏的用戶","security_tab":"安全","set_new_avatar":"設置新頭像","set_new_profile_background":"設置新的個人背景","set_new_profile_banner":"設置新的個人橫幅","settings":"設置","subject_input_always_show":"總是顯示主題框","subject_line_behavior":"回覆時複製主題","subject_line_email":"比如電郵: \\"re: 主題\\"","subject_line_noop":"不要複製","post_status_content_type":"發文內容類型","stop_gifs":"鼠標懸停時播放GIF","streaming":"開啟滾動到頂部時的自動推送","text":"文本","theme":"主題","theme_help":"使用十六進制代碼(#rrggbb)來設置主題顏色。","theme_help_v2_1":"你也可以通過切換複選框來覆蓋某些組件的顏色和透明。使用“清除所有”來清楚所有覆蓋設置。","theme_help_v2_2":"某些條目下的圖標是背景或文本對比指示器,鼠標懸停可以獲取詳細信息。請記住,使用透明度來顯示最差的情況。","tooltipRadius":"提醒","upload_a_photo":"上傳照片","user_settings":"用戶設置","values":{"false":"否","true":"是"},"avatar_size_instruction":"推薦的頭像圖片最小的尺寸是 150x150 像素。","emoji_reactions_on_timeline":"在時間線上顯示繪文字互動","export_theme":"導出預置主題","filtering":"過濾","filtering_explanation":"所有包含以下詞彙的內容都會被隱藏,一行一個","follow_export":"導出關注","follow_export_button":"將關注導出成 csv 文件","follow_import":"導入關注","follow_import_error":"導入關注時錯誤","follows_imported":"關注已導入!尚需要一些時間來處理。","hide_attachments_in_convo":"在對話中隱藏附件","hide_attachments_in_tl":"在時間線上隱藏附件","hide_muted_posts":"不顯示被靜音的用戶的帖子","max_thumbnails":"最多每個帖子所能顯示的縮略圖數量","hide_isp":"隱藏指定實例的面板","preload_images":"預載圖片","use_one_click_nsfw":"點擊一次以打開工作場所不適宜的附件","hide_post_stats":"隱藏帖子的統計數據(例如:收藏的次數)","hide_user_stats":"隱藏用戶的統計數據(例如:關注者的數量)","general":"通用","foreground":"前景","blocks_tab":"封鎖","blocks_imported":"封鎖黑名單導入成功!需要一點時間來處理。","block_import_error":"導入封鎖黑名單出錯","block_import":"封鎖黑名單導入","block_export_button":"導出你的封鎖黑名單到一個 csv 文件","block_export":"封鎖黑名單導出","bio":"簡介","background":"背景","avatarRadius":"頭像","avatarAltRadius":"頭像(通知)","avatar":"頭像","attachments":"附件","attachmentRadius":"附件","allow_following_move":"正在關注的賬號遷移時自動重新關注","enter_current_password_to_confirm":"輸入你當前密碼來確認你的身份","security":"安全","app_name":"App 名稱","change_email_error":"修改你的電子郵箱時發生錯誤。","type_domains_to_mute":"搜索需要隱藏的域名","pad_emoji":"從繪文字選擇器插入繪文字時,在繪文字兩側插入空格","useStreamingApi":"實時接收發佈以及通知","minimal_scopes_mode":"最小發文範圍","scope_copy":"回覆時的複製範圍(私信是總是複製的)","reply_visibility_self":"只顯示發送給我的回覆","reply_visibility_following":"只顯示發送給我的回覆/發送給我關注的用戶的回覆","replies_in_timeline":"時間線中的回覆","revoke_token":"撤消","show_admin_badge":"顯示管理徽章","accent":"強調色","greentext":"前文箭頭","show_moderator_badge":"顯示主持人徽章","oauth_tokens":"OAuth代幣","token":"代幣","refresh_token":"刷新token","useStreamingApiWarning":"(不推薦使用,實驗性的,已知跳過文章)","fun":"有趣","notification_setting_hide_notification_contents":"隱藏推送通知中的發送者與內容信息","version":{"title":"版本","backend_version":"後端版本","frontend_version":"前端版本"},"virtual_scrolling":"優化時間線渲染","import_mutes_from_a_csv_file":"從CSV文件導入靜音","mutes_imported":"靜音導入了!處理它們將需要一段時間。","mute_import":"靜音導入","mute_import_error":"導入靜音時出錯","mute_export_button":"將靜音導出到csv文件","mute_export":"靜音導出","hide_wallpaper":"隱藏實例桌布","reply_visibility_self_short":"只顯示對我本人的回复","reply_visibility_following_short":"顯示對我關注的人的回复","hide_all_muted_posts":"不顯示已隱藏的帖子","hide_media_previews":"隱藏媒體預覽","word_filter":"詞過濾","setting_changed":"與默認設置不同","more_settings":"更多設置","save":"保存更改","file_export_import":{"errors":{"invalid_file":"所選文件不是受支持的Pleroma設置備份。 沒有進行任何更改。","file_too_new":"不兼容的主版本:{fileMajor},此 PleromaFE(設置版本 {feMajor})過舊,無法處理","file_too_old":"不兼容的主版本:{fileMajor},文件版本過舊,不受支持(最小設置版本 {feMajor})","file_slightly_new":"檔案的小版本不同,有些設置可能無法載入"},"restore_settings":"從文件還原設置","backup_settings_theme":"備份設置和主題到文件","backup_settings":"備份設置到文件","backup_restore":"設定備份"},"sensitive_by_default":"默認標記發文為敏感內容"},"chats":{"more":"更多","delete_confirm":"您確實要刪除此消息嗎?","error_loading_chat":"加載聊天時出了點問題。","error_sending_message":"發送消息時出了點問題。","empty_chat_list_placeholder":"您還沒有任何聊天記錄。 開始新的聊天!","new":"新聊天","empty_message_error":"無法發布空消息","you":"你:","message_user":"發消息給 {nickname}","delete":"刪除","chats":"聊天"},"file_type":{"audio":"音頻","video":"視頻","image":"图片","file":"檔案"},"display_date":{"today":"今天"},"status":{"mute_conversation":"靜音對話","replies_list":"回覆:","reply_to":"回覆","pin":"在個人資料置頂","unpin":"取消在個人資料置頂","favorites":"喜歡","repeats":"轉發","delete":"刪除發文","pinned":"置頂","bookmark":"書籤","unbookmark":"取消書籤","delete_confirm":"你真的想要刪除這條發文嗎?","unmute_conversation":"對話取消靜音","status_unavailable":"發文不可取得","copy_link":"複製發文鏈接","thread_muted":"静音線程","show_full_subject":"顯示完整標題","thread_muted_and_words":",有这些字:","hide_full_subject":"隱藏完整標題","show_content":"顯示內容","hide_content":"隱藏內容","status_deleted":"該帖已被刪除","expand":"展开","external_source":"外部來源","nsfw":"工作不安全"},"time":{"hours":"{0} 時","days_short":"{0}天","day_short":"{0}天","days":"{0} 天","hour":"{0} 時","hour_short":"{0}時","hours_short":"{0}時","years_short":"{0} y","now":"剛剛","day":"{0} 天","in_future":"還有 {0}","in_past":"{0} 之前","minute":"{0} 分鐘","minute_short":"{0} 分","minutes_short":"{0} 分","minutes":"{0} 分鐘","month":"{0} 月","months":"{0} 月","month_short":"{0} 月","months_short":"{0} 月","now_short":"剛剛","second":"{0} 秒","seconds":"{0} 秒","second_short":"{0} 秒","seconds_short":"{0} 秒","week":"{0}周","weeks":"{0}周","week_short":"{0}周","weeks_short":"{0}周","year":"{0} 年","years":"{0} 年","year_short":"{0}年"},"post_status":{"media_description_error":"無法更新媒體,請重試","media_description":"媒體描述","scope":{"unlisted":"不公開 - 不會發送到公共時間軸","public":"公共 - 發送到公共時間軸","private":"僅關注者 - 只有關注了你的人能看到","direct":"私信 - 只發送給被提及的用戶"},"scope_notice":{"unlisted":"本條內容既不在公共時間線,也不會在所有已知網絡上可見","private":"關注你的人才能看到本條內容","public":"本條帖子可以被所有人看到"},"preview_empty":"空的","preview":"預覽","posting":"正在發送","direct_warning_to_first_only":"本條內容只有被在消息開始處提及的用戶能夠看到。","direct_warning_to_all":"本條內容只有被提及的用戶能夠看到。","account_not_locked_warning":"你的帳號沒有 {0}。任何人都可以關注你並瀏覽你的上鎖內容。","new_status":"發佈新發文","content_warning":"主題(可選)","content_type":{"text/bbcode":"BBCode","text/markdown":"Markdown","text/html":"HTML","text/plain":"純文本"},"attachments_sensitive":"標記附件為敏感內容","account_not_locked_warning_link":"上鎖","default":"剛剛抵達洛杉磯。","empty_status_error":"不能發布沒有內容,沒有附件的發文","post":"發送"},"errors":{"storage_unavailable":"Pleroma無法訪問瀏覽器存儲。您的登錄名或本地設置將不會保存,您可能會遇到意外問題。嘗試啟用Cookie。"},"timeline":{"error_fetching":"獲取更新時發生錯誤","conversation":"對話","no_retweet_hint":"這條內容僅關注者可見,或者是私信,因此不能轉發","collapse":"摺疊","load_older":"載入更早的發文","repeated":"已轉發","show_new":"顯示新內容","reload":"重新載入","up_to_date":"已是最新","no_more_statuses":"没有更多發文","no_statuses":"没有發文","error":"取得時間線時發生錯誤:{0}","socket_reconnected":"已建立實時連接","socket_broke":"丟失實時連接:CloseEvent代碼{0}"},"interactions":{"load_older":"載入更早的互動","moves":"用戶遷移","follows":"新的關注者","favs_repeats":"轉發和喜歡"},"selectable_list":{"select_all":"選擇全部"},"remote_user_resolver":{"error":"未找到。","searching_for":"搜索","remote_user_resolver":"遠程用戶解析器"},"registration":{"validations":{"password_confirmation_match":"不能和密碼一樣","password_confirmation_required":"不能留空","password_required":"不能留空","email_required":"不能留空","fullname_required":"不能留空","username_required":"不能留空"},"fullname":"顯示名稱","bio_placeholder":"例如:\\n你好,我是玲音。\\n我是一個住在日本郊區的動畫少女。你可能在 Wired 見過我。","fullname_placeholder":"例如:岩倉玲音","username_placeholder":"例如:lain","new_captcha":"點擊圖片獲取新的驗證碼","captcha":"CAPTCHA","token":"邀請碼","registration":"註冊","password_confirm":"確認密碼","email":"電子郵箱","bio":"簡介","reason_placeholder":"此實例的註冊需要手動批准。\\n請讓管理知道您為什麼想要註冊。","reason":"註冊理由","register":"註冊"},"user_card":{"its_you":"就是你!!","media":"媒體","per_day":"每天","remote_follow":"跨站關注","subscribe":"訂閱","mute_progress":"靜音中…","admin_menu":{"delete_account":"刪除賬號","delete_user":"刪除用戶","delete_user_confirmation":"你確認嗎?此操作無法撤銷。","moderation":"調停","grant_admin":"賦予管理權限","revoke_admin":"撤銷管理權限","grant_moderator":"賦予主持人權限","revoke_moderator":"撤銷主持人權限","activate_account":"啟用賬號","deactivate_account":"關閉賬號","force_nsfw":"標記所有的帖子都是工作場合不適","strip_media":"從帖子裡刪除媒體文件","force_unlisted":"強制帖子為不公開","sandbox":"強制帖子為只有關注者可看","disable_remote_subscription":"禁止從遠程實例關注用戶","disable_any_subscription":"完全禁止關注用戶","quarantine":"從聯合實例中禁止用戶帖子"},"approve":"批准","block":"封鎖","blocked":"已封鎖!","deny":"拒絕","favorites":"喜歡","follow":"關注","follow_sent":"請求已發送!","follow_progress":"請求中…","follow_again":"再次發送請求?","follow_unfollow":"取消關注","followees":"正在關注","followers":"關注者","following":"正在關注!","follows_you":"關注了你!","hidden":"已隱藏","mention":"提及","message":"消息","mute":"靜音","muted":"已靜音","report":"報告","statuses":"發文","unsubscribe":"退訂","unblock":"取消封鎖","unblock_progress":"取消封鎖中…","block_progress":"封鎖中…","unmute":"取消靜音","unmute_progress":"取消靜音中…","hide_repeats":"隱藏轉發","show_repeats":"顯示轉發","roles":{"moderator":"主持人","admin":"管理員"},"highlight":{"disabled":"無突出顯示","solid":"單色背景","striped":"條紋背景","side":"彩條"},"bot":"機器人"},"user_profile":{"timeline_title":"用戶時間線","profile_does_not_exist":"抱歉,此個人資料不存在。","profile_loading_error":"抱歉,載入個人資料時出錯。"},"user_reporting":{"title":"報告 {0}","add_comment_description":"此報告會發送給你的實例管理員。你可以在下面提供更多詳細信息解釋報告的緣由:","forward_to":"轉發 {0}","submit":"提交","generic_error":"當處理你的請求時,發生了一個錯誤。","additional_comments":"其它評論","forward_description":"這個賬號是從另外一個服務器。同時發送一個報告到那裡?"},"who_to_follow":{"more":"更多","who_to_follow":"推薦關注"},"tool_tip":{"media_upload":"上傳多媒體","repeat":"轉發","favorite":"喜歡","add_reaction":"添加互動","reply":"回覆","user_settings":"用戶設置","accept_follow_request":"接受關注請求","reject_follow_request":"拒絕關注請求","bookmark":"書籤"},"upload":{"file_size_units":{"B":"B","KiB":"KiB","TiB":"TiB","MiB":"MiB","GiB":"GiB"},"error":{"base":"上傳失敗。","file_too_big":"文件太大[{filesize} {filesizeunit} / {allowedsize} {allowedsizeunit}]","default":"稍後再試","message":"上傳錯誤:{0}"}},"search":{"people":"人","hashtags":"標籤","person_talking":"{count} 人正在討論","people_talking":"{count} 人正在討論","no_results":"沒有搜索結果"},"password_reset":{"forgot_password":"忘記密碼了?","password_reset":"重置密碼","instruction":"輸入你的電郵地址或者用戶名,我們將發送一個鏈接到你的郵箱,用於重置密碼。","placeholder":"你的電郵地址或者用戶名","check_email":"檢查你的郵箱,會有一個鏈接用於重置密碼。","return_home":"回到首頁","too_many_requests":"你觸發了嘗試的限制,請稍後再試。","password_reset_disabled":"密碼重置已經被禁用。請聯繫你的實例管理員。","password_reset_required":"您必須重置密碼才能登陸。","password_reset_required_but_mailer_is_disabled":"您必須重置密碼,但是密碼重置被禁用了。請聯繫您所在實例的管理員。"}}')}}]); -//# sourceMappingURL=32.899035ede0115c5c0f99.js.map \ No newline at end of file diff --git a/priv/static/static/js/32.899035ede0115c5c0f99.js.map b/priv/static/static/js/32.899035ede0115c5c0f99.js.map deleted file mode 100644 index 242f78de5..000000000 --- a/priv/static/static/js/32.899035ede0115c5c0f99.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/32.899035ede0115c5c0f99.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/4.564b2a8cbfe4d5e93949.js b/priv/static/static/js/4.7077bff64d63355b1635.js similarity index 77% rename from priv/static/static/js/4.564b2a8cbfe4d5e93949.js rename to priv/static/static/js/4.7077bff64d63355b1635.js index eb8241c90..cb97d3855 100644 --- a/priv/static/static/js/4.564b2a8cbfe4d5e93949.js +++ b/priv/static/static/js/4.7077bff64d63355b1635.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[4],{614:function(t,e,i){var c=i(615);"string"==typeof c&&(c=[[t.i,c,""]]),c.locals&&(t.exports=c.locals);(0,i(7).default)("cc6cdea4",c,!0,{})},615:function(t,e,i){(t.exports=i(6)(!1)).push([t.i,".sticker-picker{width:100%}.sticker-picker .contents{min-height:250px}.sticker-picker .contents .sticker-picker-content{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0 4px}.sticker-picker .contents .sticker-picker-content .sticker{display:-ms-flexbox;display:flex;-ms-flex:1 1 auto;flex:1 1 auto;margin:4px;width:56px;height:56px}.sticker-picker .contents .sticker-picker-content .sticker img{height:100%}.sticker-picker .contents .sticker-picker-content .sticker img:hover{filter:drop-shadow(0 0 5px var(--accent,#d8a070))}",""])},669:function(t,e,i){"use strict";i.r(e);var c=i(66),n={components:{TabSwitcher:i(150).a},data:function(){return{meta:{stickers:[]},path:""}},computed:{pack:function(){return this.$store.state.instance.stickers||[]}},methods:{clear:function(){this.meta={stickers:[]}},pick:function(t,e){var i=this,n=this.$store;fetch(t).then((function(t){t.blob().then((function(t){var a=new File([t],e,{mimetype:"image/png"}),r=new FormData;r.append("file",a),c.a.uploadMedia({store:n,formData:r}).then((function(t){i.$emit("uploaded",t),i.clear()}),(function(t){console.warn("Can't attach sticker"),console.warn(t),i.$emit("upload-failed","default")}))}))}))}}},a=i(0);var r=function(t){i(614)},s=Object(a.a)(n,(function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{staticClass:"sticker-picker"},[i("tab-switcher",{staticClass:"tab-switcher",attrs:{"render-only-focused":!0,"scrollable-tabs":""}},t._l(t.pack,(function(e){return i("div",{key:e.path,staticClass:"sticker-picker-content",attrs:{"image-tooltip":e.meta.title,image:e.path+e.meta.tabIcon}},t._l(e.meta.stickers,(function(c){return i("div",{key:c,staticClass:"sticker",on:{click:function(i){return i.stopPropagation(),i.preventDefault(),t.pick(e.path+c,e.meta.title)}}},[i("img",{attrs:{src:e.path+c}})])})),0)})),0)],1)}),[],!1,r,null,null);e.default=s.exports}}]); -//# sourceMappingURL=4.564b2a8cbfe4d5e93949.js.map \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[4],{627:function(t,e,i){var c=i(628);"string"==typeof c&&(c=[[t.i,c,""]]),c.locals&&(t.exports=c.locals);(0,i(6).default)("cc6cdea4",c,!0,{})},628:function(t,e,i){(t.exports=i(5)(!1)).push([t.i,".sticker-picker{width:100%}.sticker-picker .contents{min-height:250px}.sticker-picker .contents .sticker-picker-content{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0 4px}.sticker-picker .contents .sticker-picker-content .sticker{display:-ms-flexbox;display:flex;-ms-flex:1 1 auto;flex:1 1 auto;margin:4px;width:56px;height:56px}.sticker-picker .contents .sticker-picker-content .sticker img{height:100%}.sticker-picker .contents .sticker-picker-content .sticker img:hover{filter:drop-shadow(0 0 5px var(--accent,#d8a070))}",""])},682:function(t,e,i){"use strict";i.r(e);var c=i(69),n={components:{TabSwitcher:i(155).a},data:function(){return{meta:{stickers:[]},path:""}},computed:{pack:function(){return this.$store.state.instance.stickers||[]}},methods:{clear:function(){this.meta={stickers:[]}},pick:function(t,e){var i=this,n=this.$store;fetch(t).then((function(t){t.blob().then((function(t){var a=new File([t],e,{mimetype:"image/png"}),r=new FormData;r.append("file",a),c.a.uploadMedia({store:n,formData:r}).then((function(t){i.$emit("uploaded",t),i.clear()}),(function(t){console.warn("Can't attach sticker"),console.warn(t),i.$emit("upload-failed","default")}))}))}))}}},a=i(0);var r=function(t){i(627)},s=Object(a.a)(n,(function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{staticClass:"sticker-picker"},[i("tab-switcher",{staticClass:"tab-switcher",attrs:{"render-only-focused":!0,"scrollable-tabs":""}},t._l(t.pack,(function(e){return i("div",{key:e.path,staticClass:"sticker-picker-content",attrs:{"image-tooltip":e.meta.title,image:e.path+e.meta.tabIcon}},t._l(e.meta.stickers,(function(c){return i("div",{key:c,staticClass:"sticker",on:{click:function(i){return i.stopPropagation(),i.preventDefault(),t.pick(e.path+c,e.meta.title)}}},[i("img",{attrs:{src:e.path+c}})])})),0)})),0)],1)}),[],!1,r,null,null);e.default=s.exports}}]); +//# sourceMappingURL=4.7077bff64d63355b1635.js.map \ No newline at end of file diff --git a/priv/static/static/js/4.564b2a8cbfe4d5e93949.js.map b/priv/static/static/js/4.7077bff64d63355b1635.js.map similarity index 98% rename from priv/static/static/js/4.564b2a8cbfe4d5e93949.js.map rename to priv/static/static/js/4.7077bff64d63355b1635.js.map index 2a235dac2..83db836c8 100644 --- a/priv/static/static/js/4.564b2a8cbfe4d5e93949.js.map +++ b/priv/static/static/js/4.7077bff64d63355b1635.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///./src/components/sticker_picker/sticker_picker.vue?d6cd","webpack:///./src/components/sticker_picker/sticker_picker.vue?d5ea","webpack:///./src/components/sticker_picker/sticker_picker.js","webpack:///./src/components/sticker_picker/sticker_picker.vue","webpack:///./src/components/sticker_picker/sticker_picker.vue?7504"],"names":["content","module","i","locals","exports","add","default","push","StickerPicker","components","TabSwitcher","data","meta","stickers","path","computed","pack","this","$store","state","instance","methods","clear","pick","sticker","name","store","fetch","then","res","blob","file","File","mimetype","formData","FormData","append","statusPosterService","uploadMedia","fileData","$emit","error","console","warn","__vue_styles__","context","Component","_vm","_h","$createElement","_c","_self","staticClass","attrs","_l","stickerpack","key","title","tabIcon","on","$event","stopPropagation","preventDefault"],"mappings":"6EAGA,IAAIA,EAAU,EAAQ,KACA,iBAAZA,IAAsBA,EAAU,CAAC,CAACC,EAAOC,EAAIF,EAAS,MAC7DA,EAAQG,SAAQF,EAAOG,QAAUJ,EAAQG,SAG/BE,EADH,EAAQ,GAAkEC,SACnE,WAAYN,GAAS,EAAM,K,qBCRlCC,EAAOG,QAAU,EAAQ,EAAR,EAA4D,IAK/EG,KAAK,CAACN,EAAOC,EAAI,4iBAA6iB,M,oDC8CvjBM,EA/CO,CACpBC,WAAY,CACVC,Y,OAAAA,GAEFC,KAJoB,WAKlB,MAAO,CACLC,KAAM,CACJC,SAAU,IAEZC,KAAM,KAGVC,SAAU,CACRC,KADQ,WAEN,OAAOC,KAAKC,OAAOC,MAAMC,SAASP,UAAY,KAGlDQ,QAAS,CACPC,MADO,WAELL,KAAKL,KAAO,CACVC,SAAU,KAGdU,KANO,SAMDC,EAASC,GAAM,WACbC,EAAQT,KAAKC,OAEnBS,MAAMH,GACHI,MAAK,SAACC,GACLA,EAAIC,OAAOF,MAAK,SAACE,GACf,IAAIC,EAAO,IAAIC,KAAK,CAACF,GAAOL,EAAM,CAAEQ,SAAU,cAC1CC,EAAW,IAAIC,SACnBD,EAASE,OAAO,OAAQL,GACxBM,IAAoBC,YAAY,CAAEZ,QAAOQ,aACtCN,MAAK,SAACW,GACL,EAAKC,MAAM,WAAYD,GACvB,EAAKjB,WACJ,SAACmB,GACFC,QAAQC,KAAK,wBACbD,QAAQC,KAAKF,GACb,EAAKD,MAAM,gBAAiB,uB,OCnC5C,IAEII,EAVJ,SAAsBC,GACpB,EAAQ,MAeNC,EAAY,YACd,GCjBW,WAAa,IAAIC,EAAI9B,KAAS+B,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,YAAY,kBAAkB,CAACF,EAAG,eAAe,CAACE,YAAY,eAAeC,MAAM,CAAC,uBAAsB,EAAK,kBAAkB,KAAKN,EAAIO,GAAIP,EAAQ,MAAE,SAASQ,GAAa,OAAOL,EAAG,MAAM,CAACM,IAAID,EAAYzC,KAAKsC,YAAY,yBAAyBC,MAAM,CAAC,gBAAgBE,EAAY3C,KAAK6C,MAAM,MAAQF,EAAYzC,KAAOyC,EAAY3C,KAAK8C,UAAUX,EAAIO,GAAIC,EAAY3C,KAAa,UAAE,SAASY,GAAS,OAAO0B,EAAG,MAAM,CAACM,IAAIhC,EAAQ4B,YAAY,UAAUO,GAAG,CAAC,MAAQ,SAASC,GAAyD,OAAjDA,EAAOC,kBAAkBD,EAAOE,iBAAwBf,EAAIxB,KAAKgC,EAAYzC,KAAOU,EAAS+B,EAAY3C,KAAK6C,UAAU,CAACP,EAAG,MAAM,CAACG,MAAM,CAAC,IAAME,EAAYzC,KAAOU,UAAe,MAAK,IAAI,KACjvB,IDOY,EAahCoB,EAToB,KAEU,MAYjB,UAAAE,EAAiB","file":"static/js/4.564b2a8cbfe4d5e93949.js","sourcesContent":["// style-loader: Adds some css to the DOM by adding a \n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./list.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./list.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./list.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-c1790f52\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./list.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"list\"},[_vm._l((_vm.items),function(item){return _c('div',{key:_vm.getKey(item),staticClass:\"list-item\"},[_vm._t(\"item\",null,{\"item\":item})],2)}),_vm._v(\" \"),(_vm.items.length === 0 && !!_vm.$slots.empty)?_c('div',{staticClass:\"list-empty-content faint\"},[_vm._t(\"empty\")],2):_vm._e()],2)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","\n\n\n\n\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./checkbox.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./checkbox.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./checkbox.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-0631206a\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./checkbox.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('label',{staticClass:\"checkbox\",class:{ disabled: _vm.disabled, indeterminate: _vm.indeterminate }},[_c('input',{attrs:{\"type\":\"checkbox\",\"disabled\":_vm.disabled},domProps:{\"checked\":_vm.checked,\"indeterminate\":_vm.indeterminate},on:{\"change\":function($event){return _vm.$emit('change', $event.target.checked)}}}),_vm._v(\" \"),_c('i',{staticClass:\"checkbox-indicator\"}),_vm._v(\" \"),(!!_vm.$slots.default)?_c('span',{staticClass:\"label\"},[_vm._t(\"default\")],2):_vm._e()])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faChevronDown\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faChevronDown\n)\n\nexport default {\n model: {\n prop: 'value',\n event: 'change'\n },\n props: [\n 'value',\n 'disabled',\n 'unstyled',\n 'kind'\n ]\n}\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./select.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./select.js\"\nimport __vue_script__ from \"!!babel-loader!./select.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-07c8d34f\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./select.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('label',{staticClass:\"Select input\",class:{ disabled: _vm.disabled, unstyled: _vm.unstyled }},[_c('select',{attrs:{\"disabled\":_vm.disabled},domProps:{\"value\":_vm.value},on:{\"change\":function($event){return _vm.$emit('change', $event.target.value)}}},[_vm._t(\"default\")],2),_vm._v(\" \"),_c('FAIcon',{staticClass:\"select-down-icon\",attrs:{\"icon\":\"chevron-down\"}})],1)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import { map } from 'lodash'\nimport apiService from '../api/api.service.js'\n\nconst postStatus = ({\n store,\n status,\n spoilerText,\n visibility,\n sensitive,\n poll,\n media = [],\n inReplyToStatusId = undefined,\n contentType = 'text/plain',\n preview = false,\n idempotencyKey = ''\n}) => {\n const mediaIds = map(media, 'id')\n\n return apiService.postStatus({\n credentials: store.state.users.currentUser.credentials,\n status,\n spoilerText,\n visibility,\n sensitive,\n mediaIds,\n inReplyToStatusId,\n contentType,\n poll,\n preview,\n idempotencyKey\n })\n .then((data) => {\n if (!data.error && !preview) {\n store.dispatch('addNewStatuses', {\n statuses: [data],\n timeline: 'friends',\n showImmediately: true,\n noIdUpdate: true // To prevent missing notices on next pull.\n })\n }\n return data\n })\n .catch((err) => {\n return {\n error: err.message\n }\n })\n}\n\nconst uploadMedia = ({ store, formData }) => {\n const credentials = store.state.users.currentUser.credentials\n return apiService.uploadMedia({ credentials, formData })\n}\n\nconst setMediaDescription = ({ store, id, description }) => {\n const credentials = store.state.users.currentUser.credentials\n return apiService.setMediaDescription({ credentials, id, description })\n}\n\nconst statusPosterService = {\n postStatus,\n uploadMedia,\n setMediaDescription\n}\n\nexport default statusPosterService\n","// When contributing, please sort JSON before committing so it would be easier to see what's missing and what's being added compared to English and other languages. It's not obligatory, but just an advice.\n// To sort json use jq https://stedolan.github.io/jq and invoke it like `jq -S . xx.json > xx.sorted.json`, AFAIK, there's no inplace edit option like in sed\n// Also, when adding a new language to \"messages\" variable, please do it alphabetically by language code so that users can search or check their custom language easily.\n\n// For anyone contributing to old huge messages.js and in need to quickly convert it to JSON\n// sed command for converting currently formatted JS to JSON:\n// sed -i -e \"s/'//gm\" -e 's/\"/\\\\\"/gm' -re 's/^( +)(.+?): ((.+?))?(,?)(\\{?)$/\\1\"\\2\": \"\\4\"/gm' -e 's/\\\"\\{\\\"/{/g' -e 's/,\"$/\",/g' file.json\n// There's only problem that apostrophe character ' gets replaced by \\\\ so you have to fix it manually, sorry.\n\nconst loaders = {\n ar: () => import('./ar.json'),\n ca: () => import('./ca.json'),\n cs: () => import('./cs.json'),\n de: () => import('./de.json'),\n eo: () => import('./eo.json'),\n es: () => import('./es.json'),\n et: () => import('./et.json'),\n eu: () => import('./eu.json'),\n fi: () => import('./fi.json'),\n fr: () => import('./fr.json'),\n ga: () => import('./ga.json'),\n he: () => import('./he.json'),\n hu: () => import('./hu.json'),\n it: () => import('./it.json'),\n ja: () => import('./ja_pedantic.json'),\n ja_easy: () => import('./ja_easy.json'),\n ko: () => import('./ko.json'),\n nb: () => import('./nb.json'),\n nl: () => import('./nl.json'),\n oc: () => import('./oc.json'),\n pl: () => import('./pl.json'),\n pt: () => import('./pt.json'),\n ro: () => import('./ro.json'),\n ru: () => import('./ru.json'),\n te: () => import('./te.json'),\n uk: () => import('./uk.json'),\n zh: () => import('./zh.json'),\n zh_Hant: () => import('./zh_Hant.json')\n}\n\nconst messages = {\n languages: ['en', ...Object.keys(loaders)],\n default: {\n en: require('./en.json')\n },\n setLanguage: async (i18n, language) => {\n if (loaders[language]) {\n let messages = await loaders[language]()\n i18n.setLocaleMessage(language, messages)\n }\n i18n.locale = language\n }\n}\n\nexport default messages\n","const fileSizeFormat = (num) => {\n var exponent\n var unit\n var units = ['B', 'KiB', 'MiB', 'GiB', 'TiB']\n if (num < 1) {\n return num + ' ' + units[0]\n }\n\n exponent = Math.min(Math.floor(Math.log(num) / Math.log(1024)), units.length - 1)\n num = (num / Math.pow(1024, exponent)).toFixed(2) * 1\n unit = units[exponent]\n return { num: num, unit: unit }\n}\nconst fileSizeFormatService = {\n fileSizeFormat\n}\nexport default fileSizeFormatService\n","import MentionLink from 'src/components/mention_link/mention_link.vue'\nimport { mapGetters } from 'vuex'\n\nexport const MENTIONS_LIMIT = 5\n\nconst MentionsLine = {\n name: 'MentionsLine',\n props: {\n mentions: {\n required: true,\n type: Array\n }\n },\n data: () => ({ expanded: false }),\n components: {\n MentionLink\n },\n computed: {\n mentionsComputed () {\n return this.mentions.slice(0, MENTIONS_LIMIT)\n },\n extraMentions () {\n return this.mentions.slice(MENTIONS_LIMIT)\n },\n manyMentions () {\n return this.extraMentions.length > 0\n },\n ...mapGetters(['mergedConfig'])\n },\n methods: {\n toggleShowMore () {\n this.expanded = !this.expanded\n }\n }\n}\n\nexport default MentionsLine\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!./mentions_line.scss\")\n}\n/* script */\nexport * from \"!!babel-loader!./mentions_line.js\"\nimport __vue_script__ from \"!!babel-loader!./mentions_line.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-68e65af2\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./mentions_line.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{staticClass:\"MentionsLine\"},[_vm._l((_vm.mentionsComputed),function(mention){return _c('MentionLink',{key:mention.index,staticClass:\"mention-link\",attrs:{\"content\":mention.content,\"url\":mention.url,\"first-mention\":false}})}),(_vm.manyMentions)?_c('span',{staticClass:\"extraMentions\"},[(_vm.expanded)?_c('span',{staticClass:\"fullExtraMentions\"},_vm._l((_vm.extraMentions),function(mention){return _c('MentionLink',{key:mention.index,staticClass:\"mention-link\",attrs:{\"content\":mention.content,\"url\":mention.url,\"first-mention\":false}})}),1):_vm._e(),(!_vm.expanded)?_c('button',{staticClass:\"button-unstyled showMoreLess\",on:{\"click\":_vm.toggleShowMore}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('status.plus_more', { number: _vm.extraMentions.length }))+\"\\n \")]):_vm._e(),(_vm.expanded)?_c('button',{staticClass:\"button-unstyled showMoreLess\",on:{\"click\":_vm.toggleShowMore}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('general.show_less'))+\"\\n \")]):_vm._e()]):_vm._e()],2)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","\n\n\n","/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./progress_button.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./progress_button.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-9f751ae6\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./progress_button.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{attrs:{\"disabled\":_vm.progress || _vm.disabled},on:{\"click\":_vm.onClick}},[(_vm.progress && _vm.$slots.progress)?[_vm._t(\"progress\")]:[_vm._t(\"default\")]],2)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","const specialLanguageCodes = {\n 'ja_easy': 'ja',\n 'zh_Hant': 'zh-HANT'\n}\n\nconst internalToBrowserLocale = code => specialLanguageCodes[code] || code\n\nconst localeService = {\n internalToBrowserLocale\n}\n\nexport default localeService\n","import { set, delete as del } from 'vue'\nimport { setPreset, applyTheme } from '../services/style_setter/style_setter.js'\nimport messages from '../i18n/messages'\n\nconst browserLocale = (window.navigator.language || 'en').split('-')[0]\n\n/* TODO this is a bit messy.\n * We need to declare settings with their types and also deal with\n * instance-default settings in some way, hopefully try to avoid copy-pasta\n * in general.\n */\nexport const multiChoiceProperties = [\n 'postContentType',\n 'subjectLineBehavior'\n]\n\nexport const defaultState = {\n colors: {},\n theme: undefined,\n customTheme: undefined,\n customThemeSource: undefined,\n hideISP: false,\n hideInstanceWallpaper: false,\n hideShoutbox: false,\n // bad name: actually hides posts of muted USERS\n hideMutedPosts: undefined, // instance default\n collapseMessageWithSubject: undefined, // instance default\n padEmoji: true,\n hideAttachments: false,\n hideAttachmentsInConv: false,\n maxThumbnails: 16,\n hideNsfw: true,\n preloadImage: true,\n loopVideo: true,\n loopVideoSilentOnly: true,\n streaming: false,\n emojiReactionsOnTimeline: true,\n alwaysShowNewPostButton: false,\n autohideFloatingPostButton: false,\n pauseOnUnfocused: true,\n stopGifs: false,\n replyVisibility: 'all',\n notificationVisibility: {\n follows: true,\n mentions: true,\n likes: true,\n repeats: true,\n moves: true,\n emojiReactions: true,\n followRequest: true,\n chatMention: true\n },\n webPushNotifications: false,\n muteWords: [],\n highlight: {},\n interfaceLanguage: browserLocale,\n hideScopeNotice: false,\n useStreamingApi: false,\n sidebarRight: undefined, // instance default\n scopeCopy: undefined, // instance default\n subjectLineBehavior: undefined, // instance default\n alwaysShowSubjectInput: undefined, // instance default\n postContentType: undefined, // instance default\n minimalScopesMode: undefined, // instance default\n // This hides statuses filtered via a word filter\n hideFilteredStatuses: undefined, // instance default\n playVideosInModal: false,\n useOneClickNsfw: false,\n useContainFit: false,\n greentext: undefined, // instance default\n hidePostStats: undefined, // instance default\n hideUserStats: undefined, // instance default\n virtualScrolling: undefined, // instance default\n sensitiveByDefault: undefined // instance default\n}\n\n// caching the instance default properties\nexport const instanceDefaultProperties = Object.entries(defaultState)\n .filter(([key, value]) => value === undefined)\n .map(([key, value]) => key)\n\nconst config = {\n state: { ...defaultState },\n getters: {\n defaultConfig (state, getters, rootState, rootGetters) {\n const { instance } = rootState\n return {\n ...defaultState,\n ...Object.fromEntries(\n instanceDefaultProperties.map(key => [key, instance[key]])\n )\n }\n },\n mergedConfig (state, getters, rootState, rootGetters) {\n const { defaultConfig } = rootGetters\n return {\n ...defaultConfig,\n // Do not override with undefined\n ...Object.fromEntries(Object.entries(state).filter(([k, v]) => v !== undefined))\n }\n }\n },\n mutations: {\n setOption (state, { name, value }) {\n set(state, name, value)\n },\n setHighlight (state, { user, color, type }) {\n const data = this.state.config.highlight[user]\n if (color || type) {\n set(state.highlight, user, { color: color || data.color, type: type || data.type })\n } else {\n del(state.highlight, user)\n }\n }\n },\n actions: {\n loadSettings ({ dispatch }, data) {\n const knownKeys = new Set(Object.keys(defaultState))\n const presentKeys = new Set(Object.keys(data))\n const intersection = new Set()\n for (let elem of presentKeys) {\n if (knownKeys.has(elem)) {\n intersection.add(elem)\n }\n }\n\n intersection.forEach(\n name => dispatch('setOption', { name, value: data[name] })\n )\n },\n setHighlight ({ commit, dispatch }, { user, color, type }) {\n commit('setHighlight', { user, color, type })\n },\n setOption ({ commit, dispatch }, { name, value }) {\n commit('setOption', { name, value })\n switch (name) {\n case 'theme':\n setPreset(value)\n break\n case 'customTheme':\n case 'customThemeSource':\n applyTheme(value)\n break\n case 'interfaceLanguage':\n messages.setLanguage(this.getters.i18n, value)\n break\n }\n }\n }\n}\n\nexport default config\n","import { filter } from 'lodash'\n\nexport const muteWordHits = (status, muteWords) => {\n const statusText = status.text.toLowerCase()\n const statusSummary = status.summary.toLowerCase()\n const hits = filter(muteWords, (muteWord) => {\n return statusText.includes(muteWord.toLowerCase()) || statusSummary.includes(muteWord.toLowerCase())\n })\n\n return hits\n}\n","export const showDesktopNotification = (rootState, desktopNotificationOpts) => {\n if (!('Notification' in window && window.Notification.permission === 'granted')) return\n if (rootState.statuses.notifications.desktopNotificationSilence) { return }\n\n const desktopNotification = new window.Notification(desktopNotificationOpts.title, desktopNotificationOpts)\n // Chrome is known for not closing notifications automatically\n // according to MDN, anyway.\n setTimeout(desktopNotification.close.bind(desktopNotification), 5000)\n}\n","export const findOffset = (child, parent, { top = 0, left = 0 } = {}, ignorePadding = true) => {\n const result = {\n top: top + child.offsetTop,\n left: left + child.offsetLeft\n }\n if (!ignorePadding && child !== window) {\n const { topPadding, leftPadding } = findPadding(child)\n result.top += ignorePadding ? 0 : topPadding\n result.left += ignorePadding ? 0 : leftPadding\n }\n\n if (child.offsetParent && (parent === window || parent.contains(child.offsetParent) || parent === child.offsetParent)) {\n return findOffset(child.offsetParent, parent, result, false)\n } else {\n if (parent !== window) {\n const { topPadding, leftPadding } = findPadding(parent)\n result.top += topPadding\n result.left += leftPadding\n }\n return result\n }\n}\n\nconst findPadding = (el) => {\n const topPaddingStr = window.getComputedStyle(el)['padding-top']\n const topPadding = Number(topPaddingStr.substring(0, topPaddingStr.length - 2))\n const leftPaddingStr = window.getComputedStyle(el)['padding-left']\n const leftPadding = Number(leftPaddingStr.substring(0, leftPaddingStr.length - 2))\n\n return { topPadding, leftPadding }\n}\n","export const newExporter = ({\n filename = 'data',\n getExportedObject\n}) => ({\n exportData () {\n const stringified = JSON.stringify(getExportedObject(), null, 2) // Pretty-print and indent with 2 spaces\n\n // Create an invisible link with a data url and simulate a click\n const e = document.createElement('a')\n e.setAttribute('download', `${filename}.json`)\n e.setAttribute('href', 'data:application/json;base64,' + window.btoa(stringified))\n e.style.display = 'none'\n\n document.body.appendChild(e)\n e.click()\n document.body.removeChild(e)\n }\n})\n\nexport const newImporter = ({\n onImport,\n onImportFailure,\n validator = () => true\n}) => ({\n importData () {\n const filePicker = document.createElement('input')\n filePicker.setAttribute('type', 'file')\n filePicker.setAttribute('accept', '.json')\n\n filePicker.addEventListener('change', event => {\n if (event.target.files[0]) {\n // eslint-disable-next-line no-undef\n const reader = new FileReader()\n reader.onload = ({ target }) => {\n try {\n const parsed = JSON.parse(target.result)\n const validationResult = validator(parsed)\n if (validationResult === true) {\n onImport(parsed)\n } else {\n onImportFailure({ validationResult })\n }\n } catch (error) {\n onImportFailure({ error })\n }\n }\n reader.readAsText(event.target.files[0])\n }\n })\n\n document.body.appendChild(filePicker)\n filePicker.click()\n document.body.removeChild(filePicker)\n }\n})\n","const fetchRelationship = (attempt, userId, store) => new Promise((resolve, reject) => {\n setTimeout(() => {\n store.state.api.backendInteractor.fetchUserRelationship({ id: userId })\n .then((relationship) => {\n store.commit('updateUserRelationship', [relationship])\n return relationship\n })\n .then((relationship) => resolve([relationship.following, relationship.requested, relationship.locked, attempt]))\n .catch((e) => reject(e))\n }, 500)\n}).then(([following, sent, locked, attempt]) => {\n if (!following && !(locked && sent) && attempt <= 3) {\n // If we BE reports that we still not following that user - retry,\n // increment attempts by one\n fetchRelationship(++attempt, userId, store)\n }\n})\n\nexport const requestFollow = (userId, store) => new Promise((resolve, reject) => {\n store.state.api.backendInteractor.followUser({ id: userId })\n .then((updated) => {\n store.commit('updateUserRelationship', [updated])\n\n if (updated.following || (updated.locked && updated.requested)) {\n // If we get result immediately or the account is locked, just stop.\n resolve()\n return\n }\n\n // But usually we don't get result immediately, so we ask server\n // for updated user profile to confirm if we are following them\n // Sometimes it takes several tries. Sometimes we end up not following\n // user anyway, probably because they locked themselves and we\n // don't know that yet.\n // Recursive Promise, it will call itself up to 3 times.\n\n return fetchRelationship(1, updated, store)\n .then(() => {\n resolve()\n })\n })\n})\n\nexport const requestUnfollow = (userId, store) => new Promise((resolve, reject) => {\n store.state.api.backendInteractor.unfollowUser({ id: userId })\n .then((updated) => {\n store.commit('updateUserRelationship', [updated])\n resolve({\n updated\n })\n })\n})\n","import { requestFollow, requestUnfollow } from '../../services/follow_manipulate/follow_manipulate'\nexport default {\n props: ['relationship', 'labelFollowing', 'buttonClass'],\n data () {\n return {\n inProgress: false\n }\n },\n computed: {\n isPressed () {\n return this.inProgress || this.relationship.following\n },\n title () {\n if (this.inProgress || this.relationship.following) {\n return this.$t('user_card.follow_unfollow')\n } else if (this.relationship.requested) {\n return this.$t('user_card.follow_cancel')\n } else {\n return this.$t('user_card.follow')\n }\n },\n label () {\n if (this.inProgress) {\n return this.$t('user_card.follow_progress')\n } else if (this.relationship.following) {\n return this.labelFollowing || this.$t('user_card.following')\n } else if (this.relationship.requested) {\n return this.$t('user_card.follow_sent')\n } else {\n return this.$t('user_card.follow')\n }\n }\n },\n methods: {\n onClick () {\n this.relationship.following || this.relationship.requested ? this.unfollow() : this.follow()\n },\n follow () {\n this.inProgress = true\n requestFollow(this.relationship.id, this.$store).then(() => {\n this.inProgress = false\n })\n },\n unfollow () {\n const store = this.$store\n this.inProgress = true\n requestUnfollow(this.relationship.id, store).then(() => {\n this.inProgress = false\n store.commit('removeStatus', { timeline: 'friends', userId: this.relationship.id })\n })\n }\n }\n}\n","/* script */\nexport * from \"!!babel-loader!./follow_button.js\"\nimport __vue_script__ from \"!!babel-loader!./follow_button.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-d23ef426\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./follow_button.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{staticClass:\"btn button-default follow-button\",class:{ toggled: _vm.isPressed },attrs:{\"disabled\":_vm.inProgress,\"title\":_vm.title},on:{\"click\":_vm.onClick}},[_vm._v(\"\\n \"+_vm._s(_vm.label)+\"\\n\")])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","\nconst VideoAttachment = {\n props: ['attachment', 'controls'],\n data () {\n return {\n blocksSuspend: false,\n // Start from true because removing \"loop\" property seems buggy in Vue\n hasAudio: true\n }\n },\n computed: {\n loopVideo () {\n if (this.$store.getters.mergedConfig.loopVideoSilentOnly) {\n return !this.hasAudio\n }\n return this.$store.getters.mergedConfig.loopVideo\n }\n },\n methods: {\n onPlaying (e) {\n this.setHasAudio(e)\n if (this.loopVideo) {\n this.$emit('play', { looping: true })\n return\n }\n this.$emit('play')\n },\n onPaused (e) {\n this.$emit('pause')\n },\n setHasAudio (e) {\n const target = e.srcElement || e.target\n // If hasAudio is false, we've already marked this video to not have audio,\n // a video can't gain audio out of nowhere so don't bother checking again.\n if (!this.hasAudio) return\n if (typeof target.webkitAudioDecodedByteCount !== 'undefined') {\n // non-zero if video has audio track\n if (target.webkitAudioDecodedByteCount > 0) return\n }\n if (typeof target.mozHasAudio !== 'undefined') {\n // true if video has audio track\n if (target.mozHasAudio) return\n }\n if (typeof target.audioTracks !== 'undefined') {\n if (target.audioTracks.length > 0) return\n }\n this.hasAudio = false\n }\n }\n}\n\nexport default VideoAttachment\n","/* script */\nexport * from \"!!babel-loader!./video_attachment.js\"\nimport __vue_script__ from \"!!babel-loader!./video_attachment.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-dda2841a\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./video_attachment.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('video',{staticClass:\"video\",attrs:{\"preload\":\"metadata\",\"src\":_vm.attachment.url,\"loop\":_vm.loopVideo,\"controls\":_vm.controls,\"alt\":_vm.attachment.description,\"title\":_vm.attachment.description,\"playsinline\":\"\"},on:{\"playing\":_vm.onPlaying,\"pause\":_vm.onPaused}})}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator'\nimport { mapGetters, mapState } from 'vuex'\nimport { highlightClass, highlightStyle } from '../../services/user_highlighter/user_highlighter.js'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faAt\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faAt\n)\n\nconst MentionLink = {\n name: 'MentionLink',\n props: {\n url: {\n required: true,\n type: String\n },\n content: {\n required: true,\n type: String\n },\n userId: {\n required: false,\n type: String\n },\n userScreenName: {\n required: false,\n type: String\n }\n },\n methods: {\n onClick () {\n const link = generateProfileLink(\n this.userId || this.user.id,\n this.userScreenName || this.user.screen_name\n )\n this.$router.push(link)\n }\n },\n computed: {\n user () {\n return this.url && this.$store && this.$store.getters.findUserByUrl(this.url)\n },\n isYou () {\n // FIXME why user !== currentUser???\n return this.user && this.user.id === this.currentUser.id\n },\n userName () {\n return this.user && this.userNameFullUi.split('@')[0]\n },\n userNameFull () {\n return this.user && this.user.screen_name\n },\n userNameFullUi () {\n return this.user && this.user.screen_name_ui\n },\n highlight () {\n return this.user && this.mergedConfig.highlight[this.user.screen_name]\n },\n highlightType () {\n return this.highlight && ('-' + this.highlight.type)\n },\n highlightClass () {\n if (this.highlight) return highlightClass(this.user)\n },\n style () {\n if (this.highlight) {\n const {\n backgroundColor,\n backgroundPosition,\n backgroundImage,\n ...rest\n } = highlightStyle(this.highlight)\n return rest\n }\n },\n classnames () {\n return [\n {\n '-you': this.isYou,\n '-highlighted': this.highlight\n },\n this.highlightType\n ]\n },\n ...mapGetters(['mergedConfig']),\n ...mapState({\n currentUser: state => state.users.currentUser\n })\n }\n}\n\nexport default MentionLink\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!./mention_link.scss\")\n}\n/* script */\nexport * from \"!!babel-loader!./mention_link.js\"\nimport __vue_script__ from \"!!babel-loader!./mention_link.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-9e9097c8\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./mention_link.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{staticClass:\"MentionLink\"},[(!_vm.user)?_c('a',{staticClass:\"original\",attrs:{\"href\":_vm.url,\"target\":\"_blank\"},domProps:{\"innerHTML\":_vm._s(_vm.content)}}):_vm._e(),_vm._v(\" \"),(_vm.user)?_c('span',{staticClass:\"new\",class:_vm.classnames,style:(_vm.style)},[_c('a',{staticClass:\"short button-unstyled\",attrs:{\"href\":_vm.url},on:{\"click\":function($event){$event.preventDefault();return _vm.onClick($event)}}},[_c('FAIcon',{staticClass:\"at\",attrs:{\"size\":\"sm\",\"icon\":\"at\"}}),_c('span',{staticClass:\"shortName\"},[_c('span',{staticClass:\"userName\",domProps:{\"innerHTML\":_vm._s(_vm.userName)}})]),_vm._v(\" \"),(_vm.isYou)?_c('span',{staticClass:\"you\"},[_vm._v(_vm._s(_vm.$t('status.you')))]):_vm._e()],1),_vm._v(\" \"),(_vm.userName !== _vm.userNameFull)?_c('span',{staticClass:\"full popover-default\",class:[_vm.highlightType]},[_c('span',{staticClass:\"userNameFull\",domProps:{\"textContent\":_vm._s('@' + _vm.userNameFull)}})]):_vm._e()]):_vm._e()])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import Attachment from '../attachment/attachment.vue'\nimport { chunk, last, dropRight, sumBy } from 'lodash'\n\nconst Gallery = {\n props: [\n 'attachments',\n 'nsfw',\n 'setMedia'\n ],\n data () {\n return {\n sizes: {}\n }\n },\n components: { Attachment },\n computed: {\n rows () {\n if (!this.attachments) {\n return []\n }\n const rows = chunk(this.attachments, 3)\n if (last(rows).length === 1 && rows.length > 1) {\n // if 1 attachment on last row -> add it to the previous row instead\n const lastAttachment = last(rows)[0]\n const allButLastRow = dropRight(rows)\n last(allButLastRow).push(lastAttachment)\n return allButLastRow\n }\n return rows\n },\n useContainFit () {\n return this.$store.getters.mergedConfig.useContainFit\n }\n },\n methods: {\n onNaturalSizeLoad (id, size) {\n this.$set(this.sizes, id, size)\n },\n rowStyle (itemsPerRow) {\n return { 'padding-bottom': `${(100 / (itemsPerRow + 0.6))}%` }\n },\n itemStyle (id, row) {\n const total = sumBy(row, item => this.getAspectRatio(item.id))\n return { flex: `${this.getAspectRatio(id) / total} 1 0%` }\n },\n getAspectRatio (id) {\n const size = this.sizes[id]\n return size ? size.width / size.height : 1\n }\n }\n}\n\nexport default Gallery\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./gallery.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./gallery.js\"\nimport __vue_script__ from \"!!babel-loader!./gallery.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-3db94942\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./gallery.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"galleryContainer\",staticStyle:{\"width\":\"100%\"}},_vm._l((_vm.rows),function(row,index){return _c('div',{key:index,staticClass:\"gallery-row\",class:{ 'contain-fit': _vm.useContainFit, 'cover-fit': !_vm.useContainFit },style:(_vm.rowStyle(row.length))},[_c('div',{staticClass:\"gallery-row-inner\"},_vm._l((row),function(attachment){return _c('attachment',{key:attachment.id,style:(_vm.itemStyle(attachment.id, row)),attrs:{\"set-media\":_vm.setMedia,\"nsfw\":_vm.nsfw,\"attachment\":attachment,\"allow-play\":false,\"natural-size-load\":_vm.onNaturalSizeLoad.bind(null, attachment.id)}})}),1)])}),0)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import { mapGetters } from 'vuex'\n\nconst LinkPreview = {\n name: 'LinkPreview',\n props: [\n 'card',\n 'size',\n 'nsfw'\n ],\n data () {\n return {\n imageLoaded: false\n }\n },\n computed: {\n useImage () {\n // Currently BE shoudn't give cards if tagged NSFW, this is a bit paranoid\n // as it makes sure to hide the image if somehow NSFW tagged preview can\n // exist.\n return this.card.image && !this.censored && this.size !== 'hide'\n },\n censored () {\n return this.nsfw && this.hideNsfwConfig\n },\n useDescription () {\n return this.card.description && /\\S/.test(this.card.description)\n },\n hideNsfwConfig () {\n return this.mergedConfig.hideNsfw\n },\n ...mapGetters([\n 'mergedConfig'\n ])\n },\n created () {\n if (this.useImage) {\n const newImg = new Image()\n newImg.onload = () => {\n this.imageLoaded = true\n }\n newImg.src = this.card.image\n }\n }\n}\n\nexport default LinkPreview\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./link-preview.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./link-preview.js\"\nimport __vue_script__ from \"!!babel-loader!./link-preview.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-25194025\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./link-preview.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('a',{staticClass:\"link-preview-card\",attrs:{\"href\":_vm.card.url,\"target\":\"_blank\",\"rel\":\"noopener\"}},[(_vm.useImage && _vm.imageLoaded)?_c('div',{staticClass:\"card-image\"},[_c('img',{attrs:{\"src\":_vm.card.image}})]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"card-content\"},[_c('span',{staticClass:\"card-host faint\"},[(_vm.censored)?_c('span',{staticClass:\"nsfw-alert alert warning\"},[_vm._v(_vm._s(_vm.$t('status.nsfw')))]):_vm._e(),_vm._v(\"\\n \"+_vm._s(_vm.card.provider_name)+\"\\n \")]),_vm._v(\" \"),_c('h4',{staticClass:\"card-title\"},[_vm._v(_vm._s(_vm.card.title))]),_vm._v(\" \"),(_vm.useDescription)?_c('p',{staticClass:\"card-description\"},[_vm._v(_vm._s(_vm.card.description))]):_vm._e()])])])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","export default {\n props: [ 'user' ],\n computed: {\n subscribeUrl () {\n // eslint-disable-next-line no-undef\n const serverUrl = new URL(this.user.statusnet_profile_url)\n return `${serverUrl.protocol}//${serverUrl.host}/main/ostatus`\n }\n }\n}\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./remote_follow.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./remote_follow.js\"\nimport __vue_script__ from \"!!babel-loader!./remote_follow.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-4ae39779\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./remote_follow.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"remote-follow\"},[_c('form',{attrs:{\"method\":\"POST\",\"action\":_vm.subscribeUrl}},[_c('input',{attrs:{\"type\":\"hidden\",\"name\":\"nickname\"},domProps:{\"value\":_vm.user.screen_name}}),_vm._v(\" \"),_c('input',{attrs:{\"type\":\"hidden\",\"name\":\"profile\",\"value\":\"\"}}),_vm._v(\" \"),_c('button',{staticClass:\"button-default remote-button\",attrs:{\"click\":\"submit\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('user_card.remote_follow'))+\"\\n \")])])])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import UserAvatar from '../user_avatar/user_avatar.vue'\nimport generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator'\n\nconst AvatarList = {\n props: ['users'],\n computed: {\n slicedUsers () {\n return this.users ? this.users.slice(0, 15) : []\n }\n },\n components: {\n UserAvatar\n },\n methods: {\n userProfileLink (user) {\n return generateProfileLink(user.id, user.screen_name, this.$store.state.instance.restrictedNicknames)\n }\n }\n}\n\nexport default AvatarList\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./avatar_list.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./avatar_list.js\"\nimport __vue_script__ from \"!!babel-loader!./avatar_list.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-4cea5bcf\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./avatar_list.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"avatars\"},_vm._l((_vm.slicedUsers),function(user){return _c('router-link',{key:user.id,staticClass:\"avatars-item\",attrs:{\"to\":_vm.userProfileLink(user)}},[_c('UserAvatar',{staticClass:\"avatar-small\",attrs:{\"user\":user}})],1)}),1)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","/**\n * suggest - generates a suggestor function to be used by emoji-input\n * data: object providing source information for specific types of suggestions:\n * data.emoji - optional, an array of all emoji available i.e.\n * (state.instance.emoji + state.instance.customEmoji)\n * data.users - optional, an array of all known users\n * updateUsersList - optional, a function to search and append to users\n *\n * Depending on data present one or both (or none) can be present, so if field\n * doesn't support user linking you can just provide only emoji.\n */\n\nexport default data => {\n const emojiCurry = suggestEmoji(data.emoji)\n const usersCurry = data.store && suggestUsers(data.store)\n return input => {\n const firstChar = input[0]\n if (firstChar === ':' && data.emoji) {\n return emojiCurry(input)\n }\n if (firstChar === '@' && usersCurry) {\n return usersCurry(input)\n }\n return []\n }\n}\n\nexport const suggestEmoji = emojis => input => {\n const noPrefix = input.toLowerCase().substr(1)\n return emojis\n .filter(({ displayText }) => displayText.toLowerCase().match(noPrefix))\n .sort((a, b) => {\n let aScore = 0\n let bScore = 0\n\n // An exact match always wins\n aScore += a.displayText.toLowerCase() === noPrefix ? 200 : 0\n bScore += b.displayText.toLowerCase() === noPrefix ? 200 : 0\n\n // Prioritize custom emoji a lot\n aScore += a.imageUrl ? 100 : 0\n bScore += b.imageUrl ? 100 : 0\n\n // Prioritize prefix matches somewhat\n aScore += a.displayText.toLowerCase().startsWith(noPrefix) ? 10 : 0\n bScore += b.displayText.toLowerCase().startsWith(noPrefix) ? 10 : 0\n\n // Sort by length\n aScore -= a.displayText.length\n bScore -= b.displayText.length\n\n // Break ties alphabetically\n const alphabetically = a.displayText > b.displayText ? 0.5 : -0.5\n\n return bScore - aScore + alphabetically\n })\n}\n\nexport const suggestUsers = ({ dispatch, state }) => {\n // Keep some persistent values in closure, most importantly for the\n // custom debounce to work. Lodash debounce does not return a promise.\n let suggestions = []\n let previousQuery = ''\n let timeout = null\n let cancelUserSearch = null\n\n const userSearch = (query) => dispatch('searchUsers', { query })\n const debounceUserSearch = (query) => {\n cancelUserSearch && cancelUserSearch()\n return new Promise((resolve, reject) => {\n timeout = setTimeout(() => {\n userSearch(query).then(resolve).catch(reject)\n }, 300)\n cancelUserSearch = () => {\n clearTimeout(timeout)\n resolve([])\n }\n })\n }\n\n return async input => {\n const noPrefix = input.toLowerCase().substr(1)\n if (previousQuery === noPrefix) return suggestions\n\n suggestions = []\n previousQuery = noPrefix\n // Fetch more and wait, don't fetch if there's the 2nd @ because\n // the backend user search can't deal with it.\n // Reference semantics make it so that we get the updated data after\n // the await.\n if (!noPrefix.includes('@')) {\n await debounceUserSearch(noPrefix)\n }\n\n const newSuggestions = state.users.users.filter(\n user =>\n user.screen_name.toLowerCase().startsWith(noPrefix) ||\n user.name.toLowerCase().startsWith(noPrefix)\n ).slice(0, 20).sort((a, b) => {\n let aScore = 0\n let bScore = 0\n\n // Matches on screen name (i.e. user@instance) makes a priority\n aScore += a.screen_name.toLowerCase().startsWith(noPrefix) ? 2 : 0\n bScore += b.screen_name.toLowerCase().startsWith(noPrefix) ? 2 : 0\n\n // Matches on name takes second priority\n aScore += a.name.toLowerCase().startsWith(noPrefix) ? 1 : 0\n bScore += b.name.toLowerCase().startsWith(noPrefix) ? 1 : 0\n\n const diff = (bScore - aScore) * 10\n\n // Then sort alphabetically\n const nameAlphabetically = a.name > b.name ? 1 : -1\n const screenNameAlphabetically = a.screen_name > b.screen_name ? 1 : -1\n\n return diff + nameAlphabetically + screenNameAlphabetically\n /* eslint-disable camelcase */\n }).map(({ screen_name, screen_name_ui, name, profile_image_url_original }) => ({\n displayText: screen_name_ui,\n detailText: name,\n imageUrl: profile_image_url_original,\n replacement: '@' + screen_name + ' '\n }))\n /* eslint-enable camelcase */\n\n suggestions = newSuggestions || []\n return suggestions\n }\n}\n","import Vue from 'vue'\nimport { mapState } from 'vuex'\nimport { FontAwesomeIcon as FAIcon } from '@fortawesome/vue-fontawesome'\n\nimport './tab_switcher.scss'\n\nexport default Vue.component('tab-switcher', {\n name: 'TabSwitcher',\n props: {\n renderOnlyFocused: {\n required: false,\n type: Boolean,\n default: false\n },\n onSwitch: {\n required: false,\n type: Function,\n default: undefined\n },\n activeTab: {\n required: false,\n type: String,\n default: undefined\n },\n scrollableTabs: {\n required: false,\n type: Boolean,\n default: false\n },\n sideTabBar: {\n required: false,\n type: Boolean,\n default: false\n }\n },\n data () {\n return {\n active: this.$slots.default.findIndex(_ => _.tag)\n }\n },\n computed: {\n activeIndex () {\n // In case of controlled component\n if (this.activeTab) {\n return this.$slots.default.findIndex(slot => this.activeTab === slot.key)\n } else {\n return this.active\n }\n },\n settingsModalVisible () {\n return this.settingsModalState === 'visible'\n },\n ...mapState({\n settingsModalState: state => state.interface.settingsModalState\n })\n },\n beforeUpdate () {\n const currentSlot = this.$slots.default[this.active]\n if (!currentSlot.tag) {\n this.active = this.$slots.default.findIndex(_ => _.tag)\n }\n },\n methods: {\n clickTab (index) {\n return (e) => {\n e.preventDefault()\n this.setTab(index)\n }\n },\n setTab (index) {\n if (typeof this.onSwitch === 'function') {\n this.onSwitch.call(null, this.$slots.default[index].key)\n }\n this.active = index\n if (this.scrollableTabs) {\n this.$refs.contents.scrollTop = 0\n }\n }\n },\n render (h) {\n const tabs = this.$slots.default\n .map((slot, index) => {\n if (!slot.tag) return\n const classesTab = ['tab', 'button-default']\n const classesWrapper = ['tab-wrapper']\n if (this.activeIndex === index) {\n classesTab.push('active')\n classesWrapper.push('active')\n }\n if (slot.data.attrs.image) {\n return (\n
\n \n \n {slot.data.attrs.label ? '' : slot.data.attrs.label}\n \n
\n )\n }\n return (\n
\n \n {!slot.data.attrs.icon ? '' : ()}\n \n {slot.data.attrs.label}\n \n \n
\n )\n })\n\n const contents = this.$slots.default.map((slot, index) => {\n if (!slot.tag) return\n const active = this.activeIndex === index\n const classes = [ active ? 'active' : 'hidden' ]\n if (slot.data.attrs.fullHeight) {\n classes.push('full-height')\n }\n const renderSlot = (!this.renderOnlyFocused || active)\n ? slot\n : ''\n\n return (\n
\n {\n this.sideTabBar\n ?

{slot.data.attrs.label}

\n : ''\n }\n {renderSlot}\n
\n )\n })\n\n return (\n
\n
\n {tabs}\n
\n
\n {contents}\n
\n
\n )\n }\n})\n","import isFunction from 'lodash/isFunction'\n\nconst getComponentOptions = (Component) => (isFunction(Component)) ? Component.options : Component\n\nconst getComponentProps = (Component) => getComponentOptions(Component).props\n\nexport {\n getComponentOptions,\n getComponentProps\n}\n","import { reduce, find } from 'lodash'\n\nexport const replaceWord = (str, toReplace, replacement) => {\n return str.slice(0, toReplace.start) + replacement + str.slice(toReplace.end)\n}\n\nexport const wordAtPosition = (str, pos) => {\n const words = splitByWhitespaceBoundary(str)\n const wordsWithPosition = addPositionToWords(words)\n\n return find(wordsWithPosition, ({ start, end }) => start <= pos && end > pos)\n}\n\nexport const addPositionToWords = (words) => {\n return reduce(words, (result, word) => {\n const data = {\n word,\n start: 0,\n end: word.length\n }\n\n if (result.length > 0) {\n const previous = result.pop()\n\n data.start += previous.end\n data.end += previous.end\n\n result.push(previous)\n }\n\n result.push(data)\n\n return result\n }, [])\n}\n\nexport const splitByWhitespaceBoundary = (str) => {\n let result = []\n let currentWord = ''\n for (let i = 0; i < str.length; i++) {\n const currentChar = str[i]\n // Starting a new word\n if (!currentWord) {\n currentWord = currentChar\n continue\n }\n // current character is whitespace while word isn't, or vice versa:\n // add our current word to results, start over the current word.\n if (!!currentChar.trim() !== !!currentWord.trim()) {\n result.push(currentWord)\n currentWord = currentChar\n continue\n }\n currentWord += currentChar\n }\n // Add the last word we were working on\n if (currentWord) {\n result.push(currentWord)\n }\n return result\n}\n\nconst completion = {\n wordAtPosition,\n addPositionToWords,\n splitByWhitespaceBoundary,\n replaceWord\n}\n\nexport default completion\n","import Checkbox from '../checkbox/checkbox.vue'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faBoxOpen,\n faStickyNote,\n faSmileBeam\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faBoxOpen,\n faStickyNote,\n faSmileBeam\n)\n\n// At widest, approximately 20 emoji are visible in a row,\n// loading 3 rows, could be overkill for narrow picker\nconst LOAD_EMOJI_BY = 60\n\n// When to start loading new batch emoji, in pixels\nconst LOAD_EMOJI_MARGIN = 64\n\nconst filterByKeyword = (list, keyword = '') => {\n if (keyword === '') return list\n\n const keywordLowercase = keyword.toLowerCase()\n let orderedEmojiList = []\n for (const emoji of list) {\n const indexOfKeyword = emoji.displayText.toLowerCase().indexOf(keywordLowercase)\n if (indexOfKeyword > -1) {\n if (!Array.isArray(orderedEmojiList[indexOfKeyword])) {\n orderedEmojiList[indexOfKeyword] = []\n }\n orderedEmojiList[indexOfKeyword].push(emoji)\n }\n }\n return orderedEmojiList.flat()\n}\n\nconst EmojiPicker = {\n props: {\n enableStickerPicker: {\n required: false,\n type: Boolean,\n default: false\n }\n },\n data () {\n return {\n keyword: '',\n activeGroup: 'custom',\n showingStickers: false,\n groupsScrolledClass: 'scrolled-top',\n keepOpen: false,\n customEmojiBufferSlice: LOAD_EMOJI_BY,\n customEmojiTimeout: null,\n customEmojiLoadAllConfirmed: false\n }\n },\n components: {\n StickerPicker: () => import('../sticker_picker/sticker_picker.vue'),\n Checkbox\n },\n methods: {\n onStickerUploaded (e) {\n this.$emit('sticker-uploaded', e)\n },\n onStickerUploadFailed (e) {\n this.$emit('sticker-upload-failed', e)\n },\n onEmoji (emoji) {\n const value = emoji.imageUrl ? `:${emoji.displayText}:` : emoji.replacement\n this.$emit('emoji', { insertion: value, keepOpen: this.keepOpen })\n },\n onScroll (e) {\n const target = (e && e.target) || this.$refs['emoji-groups']\n this.updateScrolledClass(target)\n this.scrolledGroup(target)\n this.triggerLoadMore(target)\n },\n highlight (key) {\n const ref = this.$refs['group-' + key]\n const top = ref[0].offsetTop\n this.setShowStickers(false)\n this.activeGroup = key\n this.$nextTick(() => {\n this.$refs['emoji-groups'].scrollTop = top + 1\n })\n },\n updateScrolledClass (target) {\n if (target.scrollTop <= 5) {\n this.groupsScrolledClass = 'scrolled-top'\n } else if (target.scrollTop >= target.scrollTopMax - 5) {\n this.groupsScrolledClass = 'scrolled-bottom'\n } else {\n this.groupsScrolledClass = 'scrolled-middle'\n }\n },\n triggerLoadMore (target) {\n const ref = this.$refs['group-end-custom'][0]\n if (!ref) return\n const bottom = ref.offsetTop + ref.offsetHeight\n\n const scrollerBottom = target.scrollTop + target.clientHeight\n const scrollerTop = target.scrollTop\n const scrollerMax = target.scrollHeight\n\n // Loads more emoji when they come into view\n const approachingBottom = bottom - scrollerBottom < LOAD_EMOJI_MARGIN\n // Always load when at the very top in case there's no scroll space yet\n const atTop = scrollerTop < 5\n // Don't load when looking at unicode category or at the very bottom\n const bottomAboveViewport = bottom < scrollerTop || scrollerBottom === scrollerMax\n if (!bottomAboveViewport && (approachingBottom || atTop)) {\n this.loadEmoji()\n }\n },\n scrolledGroup (target) {\n const top = target.scrollTop + 5\n this.$nextTick(() => {\n this.emojisView.forEach(group => {\n const ref = this.$refs['group-' + group.id]\n if (ref[0].offsetTop <= top) {\n this.activeGroup = group.id\n }\n })\n })\n },\n loadEmoji () {\n const allLoaded = this.customEmojiBuffer.length === this.filteredEmoji.length\n\n if (allLoaded) {\n return\n }\n\n this.customEmojiBufferSlice += LOAD_EMOJI_BY\n },\n startEmojiLoad (forceUpdate = false) {\n if (!forceUpdate) {\n this.keyword = ''\n }\n this.$nextTick(() => {\n this.$refs['emoji-groups'].scrollTop = 0\n })\n const bufferSize = this.customEmojiBuffer.length\n const bufferPrefilledAll = bufferSize === this.filteredEmoji.length\n if (bufferPrefilledAll && !forceUpdate) {\n return\n }\n this.customEmojiBufferSlice = LOAD_EMOJI_BY\n },\n toggleStickers () {\n this.showingStickers = !this.showingStickers\n },\n setShowStickers (value) {\n this.showingStickers = value\n }\n },\n watch: {\n keyword () {\n this.customEmojiLoadAllConfirmed = false\n this.onScroll()\n this.startEmojiLoad(true)\n }\n },\n computed: {\n activeGroupView () {\n return this.showingStickers ? '' : this.activeGroup\n },\n stickersAvailable () {\n if (this.$store.state.instance.stickers) {\n return this.$store.state.instance.stickers.length > 0\n }\n return 0\n },\n filteredEmoji () {\n return filterByKeyword(\n this.$store.state.instance.customEmoji || [],\n this.keyword\n )\n },\n customEmojiBuffer () {\n return this.filteredEmoji.slice(0, this.customEmojiBufferSlice)\n },\n emojis () {\n const standardEmojis = this.$store.state.instance.emoji || []\n const customEmojis = this.customEmojiBuffer\n\n return [\n {\n id: 'custom',\n text: this.$t('emoji.custom'),\n icon: 'smile-beam',\n emojis: customEmojis\n },\n {\n id: 'standard',\n text: this.$t('emoji.unicode'),\n icon: 'box-open',\n emojis: filterByKeyword(standardEmojis, this.keyword)\n }\n ]\n },\n emojisView () {\n return this.emojis.filter(value => value.emojis.length > 0)\n },\n stickerPickerEnabled () {\n return (this.$store.state.instance.stickers || []).length !== 0\n }\n }\n}\n\nexport default EmojiPicker\n","function injectStyle (context) {\n require(\"!!vue-style-loader!css-loader?minimize!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!sass-loader!./emoji_picker.scss\")\n}\n/* script */\nexport * from \"!!babel-loader!./emoji_picker.js\"\nimport __vue_script__ from \"!!babel-loader!./emoji_picker.js\"/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-50bb08b3\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./emoji_picker.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"emoji-picker panel panel-default panel-body\"},[_c('div',{staticClass:\"heading\"},[_c('span',{staticClass:\"emoji-tabs\"},_vm._l((_vm.emojis),function(group){return _c('span',{key:group.id,staticClass:\"emoji-tabs-item\",class:{\n active: _vm.activeGroupView === group.id,\n disabled: group.emojis.length === 0\n },attrs:{\"title\":group.text},on:{\"click\":function($event){$event.preventDefault();return _vm.highlight(group.id)}}},[_c('FAIcon',{attrs:{\"icon\":group.icon,\"fixed-width\":\"\"}})],1)}),0),_vm._v(\" \"),(_vm.stickerPickerEnabled)?_c('span',{staticClass:\"additional-tabs\"},[_c('span',{staticClass:\"stickers-tab-icon additional-tabs-item\",class:{active: _vm.showingStickers},attrs:{\"title\":_vm.$t('emoji.stickers')},on:{\"click\":function($event){$event.preventDefault();return _vm.toggleStickers($event)}}},[_c('FAIcon',{attrs:{\"icon\":\"sticky-note\",\"fixed-width\":\"\"}})],1)]):_vm._e()]),_vm._v(\" \"),_c('div',{staticClass:\"content\"},[_c('div',{staticClass:\"emoji-content\",class:{hidden: _vm.showingStickers}},[_c('div',{staticClass:\"emoji-search\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.keyword),expression:\"keyword\"}],staticClass:\"form-control\",attrs:{\"type\":\"text\",\"placeholder\":_vm.$t('emoji.search_emoji')},domProps:{\"value\":(_vm.keyword)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.keyword=$event.target.value}}})]),_vm._v(\" \"),_c('div',{ref:\"emoji-groups\",staticClass:\"emoji-groups\",class:_vm.groupsScrolledClass,on:{\"scroll\":_vm.onScroll}},_vm._l((_vm.emojisView),function(group){return _c('div',{key:group.id,staticClass:\"emoji-group\"},[_c('h6',{ref:'group-' + group.id,refInFor:true,staticClass:\"emoji-group-title\"},[_vm._v(\"\\n \"+_vm._s(group.text)+\"\\n \")]),_vm._v(\" \"),_vm._l((group.emojis),function(emoji){return _c('span',{key:group.id + emoji.displayText,staticClass:\"emoji-item\",attrs:{\"title\":emoji.displayText},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.onEmoji(emoji)}}},[(!emoji.imageUrl)?_c('span',[_vm._v(_vm._s(emoji.replacement))]):_c('img',{attrs:{\"src\":emoji.imageUrl}})])}),_vm._v(\" \"),_c('span',{ref:'group-end-' + group.id,refInFor:true})],2)}),0),_vm._v(\" \"),_c('div',{staticClass:\"keep-open\"},[_c('Checkbox',{model:{value:(_vm.keepOpen),callback:function ($$v) {_vm.keepOpen=$$v},expression:\"keepOpen\"}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('emoji.keep_open'))+\"\\n \")])],1)]),_vm._v(\" \"),(_vm.showingStickers)?_c('div',{staticClass:\"stickers-content\"},[_c('sticker-picker',{on:{\"uploaded\":_vm.onStickerUploaded,\"upload-failed\":_vm.onStickerUploadFailed}})],1):_vm._e()])])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","import Completion from '../../services/completion/completion.js'\nimport EmojiPicker from '../emoji_picker/emoji_picker.vue'\nimport { take } from 'lodash'\nimport { findOffset } from '../../services/offset_finder/offset_finder.service.js'\n\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faSmileBeam\n} from '@fortawesome/free-regular-svg-icons'\n\nlibrary.add(\n faSmileBeam\n)\n\n/**\n * EmojiInput - augmented inputs for emoji and autocomplete support in inputs\n * without having to give up the comfort of and