From d0eb43b58b0a191b727360cf4523329d2dc60adc Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Thu, 16 Jul 2020 22:19:17 -0500 Subject: [PATCH 001/362] Add account aliases --- docs/API/pleroma_api.md | 20 ++++++++ lib/pleroma/user.ex | 24 ++++++++++ .../operations/pleroma_account_operation.ex | 46 +++++++++++++++++++ lib/pleroma/web/api_spec/schemas/account.ex | 2 + .../web/mastodon_api/views/account_view.ex | 1 + .../controllers/account_controller.ex | 25 ++++++++++ lib/pleroma/web/router.ex | 3 ++ lib/pleroma/web/web_finger/web_finger.ex | 9 +++- .../20200717025041_add_aliases_to_users.exs | 9 ++++ test/user_test.exs | 37 +++++++++++++++ .../mastodon_api/views/account_view_test.exs | 5 +- .../controllers/account_controller_test.exs | 29 ++++++++++++ .../web_finger/web_finger_controller_test.exs | 14 +++++- 13 files changed, 220 insertions(+), 4 deletions(-) create mode 100644 priv/repo/migrations/20200717025041_add_aliases_to_users.exs diff --git a/docs/API/pleroma_api.md b/docs/API/pleroma_api.md index 5bd38ad36..8a937fdfd 100644 --- a/docs/API/pleroma_api.md +++ b/docs/API/pleroma_api.md @@ -570,3 +570,23 @@ Emoji reactions work a lot like favourites do. They make it possible to react to {"name": "😀", "count": 2, "me": true, "accounts": [{"id" => "xyz.."...}, {"id" => "zyx..."}]} ] ``` + +# Account aliases + +Set and delete ActivityPub aliases for follower move. + +## `POST /api/v1/pleroma/accounts/ap_aliases` +### Add account aliases +* Method: `POST` +* Authentication: required +* Params: + * `aliases`: array of ActivityPub IDs to add +* Response: JSON, the user's account + +## `DELETE /api/v1/pleroma/accounts/ap_aliases` +### Delete account aliases +* Method: `DELETE` +* Authentication: required +* Params: + * `aliases`: array of ActivityPub IDs to delete +* Response: JSON, the user's account diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 9240e912d..9b756c9a0 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -89,6 +89,7 @@ defmodule Pleroma.User do field(:keys, :string) field(:public_key, :string) field(:ap_id, :string) + field(:ap_aliases, {:array, :string}, default: []) field(:avatar, :map, default: %{}) field(:local, :boolean, default: true) field(:follower_address, :string) @@ -2268,4 +2269,27 @@ def sanitize_html(%User{} = user, filter) do |> Map.put(:bio, HTML.filter_tags(user.bio, filter)) |> Map.put(:fields, fields) end + + def add_aliases(%User{} = user, aliases) when is_list(aliases) do + alias_set = + (user.ap_aliases ++ aliases) + |> MapSet.new() + |> MapSet.to_list() + + user + |> change(%{ap_aliases: alias_set}) + |> Repo.update() + end + + def delete_aliases(%User{} = user, aliases) when is_list(aliases) do + alias_set = + user.ap_aliases + |> MapSet.new() + |> MapSet.difference(MapSet.new(aliases)) + |> MapSet.to_list() + + user + |> change(%{ap_aliases: alias_set}) + |> Repo.update() + end end 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 97836b2eb..1040f6e20 100644 --- a/lib/pleroma/web/api_spec/operations/pleroma_account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/pleroma_account_operation.ex @@ -4,6 +4,8 @@ defmodule Pleroma.Web.ApiSpec.PleromaAccountOperation do alias OpenApiSpex.Operation + alias OpenApiSpex.Schema + alias Pleroma.Web.ApiSpec.Schemas.Account alias Pleroma.Web.ApiSpec.Schemas.AccountRelationship alias Pleroma.Web.ApiSpec.Schemas.ApiError alias Pleroma.Web.ApiSpec.Schemas.FlakeID @@ -87,10 +89,54 @@ def unsubscribe_operation do } end + def add_aliases_operation do + %Operation{ + tags: ["Accounts"], + summary: "Add ActivityPub aliases", + operationId: "PleromaAPI.AccountController.add_aliases", + requestBody: request_body("Parameters", alias_request(), required: true), + security: [%{"oAuth" => ["write:accounts"]}], + responses: %{ + 200 => Operation.response("Account", "application/json", Account), + 403 => Operation.response("Forbidden", "application/json", ApiError) + } + } + end + + def delete_aliases_operation do + %Operation{ + tags: ["Accounts"], + summary: "Delete ActivityPub aliases", + operationId: "PleromaAPI.AccountController.delete_aliases", + requestBody: request_body("Parameters", alias_request(), required: true), + security: [%{"oAuth" => ["write:accounts"]}], + responses: %{ + 200 => Operation.response("Account", "application/json", Account) + } + } + end + defp id_param do Operation.parameter(:id, :path, FlakeID, "Account ID", example: "9umDrYheeY451cQnEe", required: true ) end + + defp alias_request do + %Schema{ + title: "AccountAliasRequest", + description: "POST body for adding/deleting AP aliases", + type: :object, + properties: %{ + aliases: %Schema{ + type: :array, + items: %Schema{type: :string} + } + }, + example: %{ + "aliases" => ["https://beepboop.social/users/beep", "https://mushroom.kingdom/users/toad"] + } + } + end end diff --git a/lib/pleroma/web/api_spec/schemas/account.ex b/lib/pleroma/web/api_spec/schemas/account.ex index ca79f0747..4fd27edf5 100644 --- a/lib/pleroma/web/api_spec/schemas/account.ex +++ b/lib/pleroma/web/api_spec/schemas/account.ex @@ -40,6 +40,8 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Account do pleroma: %Schema{ type: :object, properties: %{ + ap_id: %Schema{type: :string}, + ap_aliases: %Schema{type: :array, items: %Schema{type: :string}}, allow_following_move: %Schema{ type: :boolean, description: "whether the user allows automatically follow moved following accounts" diff --git a/lib/pleroma/web/mastodon_api/views/account_view.ex b/lib/pleroma/web/mastodon_api/views/account_view.ex index bc9745044..e2912031a 100644 --- a/lib/pleroma/web/mastodon_api/views/account_view.ex +++ b/lib/pleroma/web/mastodon_api/views/account_view.ex @@ -248,6 +248,7 @@ defp do_render("show.json", %{user: user} = opts) do # Pleroma extension pleroma: %{ ap_id: user.ap_id, + ap_aliases: user.ap_aliases, confirmation_pending: user.confirmation_pending, tags: user.tags, hide_followers_count: user.hide_followers_count, diff --git a/lib/pleroma/web/pleroma_api/controllers/account_controller.ex b/lib/pleroma/web/pleroma_api/controllers/account_controller.ex index 563edded7..03e5781a3 100644 --- a/lib/pleroma/web/pleroma_api/controllers/account_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/account_controller.ex @@ -39,6 +39,11 @@ defmodule Pleroma.Web.PleromaAPI.AccountController do %{scopes: ["read:favourites"], fallback: :proceed_unauthenticated} when action == :favourites ) + plug( + OAuthScopesPlug, + %{scopes: ["write:accounts"]} when action in [:add_aliases, :delete_aliases] + ) + plug(RateLimiter, [name: :account_confirmation_resend] when action == :confirmation_resend) plug(:assign_account_by_id when action in [:favourites, :subscribe, :unsubscribe]) @@ -107,4 +112,24 @@ def unsubscribe(%{assigns: %{user: user, account: subscription_target}} = conn, {:error, message} -> json_response(conn, :forbidden, %{error: message}) end end + + @doc "POST /api/v1/pleroma/accounts/ap_aliases" + def add_aliases(%{assigns: %{user: user}, body_params: %{aliases: aliases}} = conn, _params) + when is_list(aliases) do + with {:ok, user} <- User.add_aliases(user, aliases) do + render(conn, "show.json", user: user) + else + {:error, message} -> json_response(conn, :forbidden, %{error: message}) + end + end + + @doc "DELETE /api/v1/pleroma/accounts/ap_aliases" + def delete_aliases(%{assigns: %{user: user}, body_params: %{aliases: aliases}} = conn, _params) + when is_list(aliases) do + with {:ok, user} <- User.delete_aliases(user, aliases) do + render(conn, "show.json", user: user) + else + {:error, message} -> json_response(conn, :forbidden, %{error: message}) + end + end end diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index 386308362..dea95cd77 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -344,6 +344,9 @@ defmodule Pleroma.Web.Router do post("/accounts/:id/subscribe", AccountController, :subscribe) post("/accounts/:id/unsubscribe", AccountController, :unsubscribe) + + post("/accounts/ap_aliases", AccountController, :add_aliases) + delete("/accounts/ap_aliases", AccountController, :delete_aliases) end post("/accounts/confirmation_resend", AccountController, :confirmation_resend) diff --git a/lib/pleroma/web/web_finger/web_finger.ex b/lib/pleroma/web/web_finger/web_finger.ex index 71ccf251a..fb142ce8d 100644 --- a/lib/pleroma/web/web_finger/web_finger.ex +++ b/lib/pleroma/web/web_finger/web_finger.ex @@ -58,12 +58,19 @@ defp gather_links(%User{} = user) do ] ++ Publisher.gather_webfinger_links(user) end + defp gather_aliases(%User{} = user) do + user.ap_aliases + |> MapSet.new() + |> MapSet.put(user.ap_id) + |> MapSet.to_list() + end + def represent_user(user, "JSON") do {:ok, user} = User.ensure_keys_present(user) %{ "subject" => "acct:#{user.nickname}@#{Pleroma.Web.Endpoint.host()}", - "aliases" => [user.ap_id], + "aliases" => gather_aliases(user), "links" => gather_links(user) } end diff --git a/priv/repo/migrations/20200717025041_add_aliases_to_users.exs b/priv/repo/migrations/20200717025041_add_aliases_to_users.exs new file mode 100644 index 000000000..a6ace6e0f --- /dev/null +++ b/priv/repo/migrations/20200717025041_add_aliases_to_users.exs @@ -0,0 +1,9 @@ +defmodule Pleroma.Repo.Migrations.AddAliasesToUsers do + use Ecto.Migration + + def change do + alter table(:users) do + add(:ap_aliases, {:array, :string}, default: []) + end + end +end diff --git a/test/user_test.exs b/test/user_test.exs index 9788e09d9..db6e4872e 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -1858,4 +1858,41 @@ test "avatar fallback" do assert User.avatar_url(user, no_default: true) == nil end + + test "add_aliases/2" do + user = insert(:user) + + aliases = [ + "https://gleasonator.com/users/alex", + "https://gleasonator.com/users/alex", + "https://animalliberation.social/users/alex" + ] + + {:ok, user} = User.add_aliases(user, aliases) + + assert user.ap_aliases == [ + "https://animalliberation.social/users/alex", + "https://gleasonator.com/users/alex" + ] + end + + test "delete_aliases/2" do + user = + insert(:user, + ap_aliases: [ + "https://animalliberation.social/users/alex", + "https://benis.social/users/benis", + "https://gleasonator.com/users/alex" + ] + ) + + aliases = ["https://benis.social/users/benis"] + + {:ok, user} = User.delete_aliases(user, aliases) + + assert user.ap_aliases == [ + "https://animalliberation.social/users/alex", + "https://gleasonator.com/users/alex" + ] + end end diff --git a/test/web/mastodon_api/views/account_view_test.exs b/test/web/mastodon_api/views/account_view_test.exs index a83bf90a3..4a0512e68 100644 --- a/test/web/mastodon_api/views/account_view_test.exs +++ b/test/web/mastodon_api/views/account_view_test.exs @@ -37,7 +37,8 @@ test "Represent a user account" do "valid html. a
b
c
d
f '&<>\"", inserted_at: ~N[2017-08-15 15:47:06.597036], emoji: %{"karjalanpiirakka" => "/file.png"}, - raw_bio: "valid html. a\nb\nc\nd\nf '&<>\"" + raw_bio: "valid html. a\nb\nc\nd\nf '&<>\"", + ap_aliases: ["https://shitposter.zone/users/shp"] }) expected = %{ @@ -77,6 +78,7 @@ test "Represent a user account" do }, pleroma: %{ ap_id: user.ap_id, + ap_aliases: ["https://shitposter.zone/users/shp"], background_image: "https://example.com/images/asuka_hospital.png", favicon: "https://shitposter.club/plugins/Qvitter/img/gnusocial-favicons/favicon-16x16.png", @@ -171,6 +173,7 @@ test "Represent a Service(bot) account" do }, pleroma: %{ ap_id: user.ap_id, + ap_aliases: [], background_image: nil, favicon: "https://shitposter.club/plugins/Qvitter/img/gnusocial-favicons/favicon-16x16.png", diff --git a/test/web/pleroma_api/controllers/account_controller_test.exs b/test/web/pleroma_api/controllers/account_controller_test.exs index 07909d48b..da01a8218 100644 --- a/test/web/pleroma_api/controllers/account_controller_test.exs +++ b/test/web/pleroma_api/controllers/account_controller_test.exs @@ -281,4 +281,33 @@ test "returns 404 when subscription_target not found" do assert %{"error" => "Record not found"} = json_response_and_validate_schema(conn, 404) end end + + describe "aliases controllers" do + setup do: oauth_access(["write:accounts"]) + + test "adds aliases", %{conn: conn} do + aliases = ["https://gleasonator.com/users/alex"] + + conn = + conn + |> put_req_header("content-type", "application/json") + |> post("/api/v1/pleroma/accounts/ap_aliases", %{"aliases" => aliases}) + + assert %{"pleroma" => %{"ap_aliases" => res}} = json_response_and_validate_schema(conn, 200) + assert Enum.count(res) == 1 + end + + test "deletes aliases", %{conn: conn, user: user} do + aliases = ["https://gleasonator.com/users/alex"] + User.add_aliases(user, aliases) + + conn = + conn + |> put_req_header("content-type", "application/json") + |> delete("/api/v1/pleroma/accounts/ap_aliases", %{"aliases" => aliases}) + + assert %{"pleroma" => %{"ap_aliases" => res}} = json_response_and_validate_schema(conn, 200) + assert Enum.count(res) == 0 + end + end end diff --git a/test/web/web_finger/web_finger_controller_test.exs b/test/web/web_finger/web_finger_controller_test.exs index 0023f1e81..50b6c4b3e 100644 --- a/test/web/web_finger/web_finger_controller_test.exs +++ b/test/web/web_finger/web_finger_controller_test.exs @@ -30,14 +30,24 @@ test "GET host-meta" do end test "Webfinger JRD" do - user = insert(:user) + user = + insert(:user, + ap_id: "https://hyrule.world/users/zelda", + ap_aliases: ["https://mushroom.kingdom/users/toad"] + ) response = build_conn() |> put_req_header("accept", "application/jrd+json") |> get("/.well-known/webfinger?resource=acct:#{user.nickname}@localhost") + |> json_response(200) - assert json_response(response, 200)["subject"] == "acct:#{user.nickname}@localhost" + assert response["subject"] == "acct:#{user.nickname}@localhost" + + assert response["aliases"] == [ + "https://hyrule.world/users/zelda", + "https://mushroom.kingdom/users/toad" + ] end test "it returns 404 when user isn't found (JSON)" do From bd1e2e3a58ebd702306e7a6e2df985ac07e5f7d8 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Fri, 17 Jul 2020 19:11:28 -0500 Subject: [PATCH 002/362] Validate alias IDs --- CHANGELOG.md | 1 + lib/pleroma/user.ex | 13 +++++++++++++ test/user_test.exs | 7 +++++++ 3 files changed, 21 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a02f28241..ef3235804 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -63,6 +63,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Support pagination in emoji packs API (for packs and for files in pack) - Support for viewing instances favicons next to posts and accounts - Added Pleroma.Upload.Filter.Exiftool as an alternate EXIF stripping mechanism targeting GPS/location metadata. +- Ability to set ActivityPub aliases for follower migration.
API Changes diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 9b756c9a0..66664235b 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -47,6 +47,8 @@ defmodule Pleroma.User do # credo:disable-for-next-line Credo.Check.Readability.MaxLineLength @email_regex ~r/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/ + # credo:disable-for-next-line Credo.Check.Readability.MaxLineLength + @url_regex ~r/https?:\/\/[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&\/=]*)/ @strict_local_nickname_regex ~r/^[a-zA-Z\d]+$/ @extended_local_nickname_regex ~r/^[a-zA-Z\d_-]+$/ @@ -2278,6 +2280,7 @@ def add_aliases(%User{} = user, aliases) when is_list(aliases) do user |> change(%{ap_aliases: alias_set}) + |> validate_ap_aliases() |> Repo.update() end @@ -2290,6 +2293,16 @@ def delete_aliases(%User{} = user, aliases) when is_list(aliases) do user |> change(%{ap_aliases: alias_set}) + |> validate_ap_aliases() |> Repo.update() end + + defp validate_ap_aliases(changeset) do + validate_change(changeset, :ap_aliases, fn :ap_aliases, ap_aliases -> + case Enum.all?(ap_aliases, fn a -> Regex.match?(@url_regex, a) end) do + true -> [] + false -> [ap_aliases: "Invalid ap_id format. Must be a URL."] + end + end) + end end diff --git a/test/user_test.exs b/test/user_test.exs index db6e4872e..29855b9cd 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -1876,6 +1876,13 @@ test "add_aliases/2" do ] end + test "add_aliases/2 with invalid alias" do + user = insert(:user) + {:error, _} = User.add_aliases(user, ["invalid_alias"]) + {:error, _} = User.add_aliases(user, ["http://still_invalid"]) + {:error, _} = User.add_aliases(user, ["http://validalias.com/users/dude", "invalid_alias"]) + end + test "delete_aliases/2" do user = insert(:user, From e9cff69bceb5cfb14a13ef09d1d7ab1079028a58 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sun, 2 Aug 2020 12:24:40 -0500 Subject: [PATCH 003/362] Add TagPolicy as default MRF, #2010 --- config/config.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.exs b/config/config.exs index 134dccf49..68a050315 100644 --- a/config/config.exs +++ b/config/config.exs @@ -719,7 +719,7 @@ config :pleroma, Pleroma.Web.ApiSpec.CastAndValidate, strict: false config :pleroma, :mrf, - policies: Pleroma.Web.ActivityPub.MRF.ObjectAgePolicy, + policies: [Pleroma.Web.ActivityPub.MRF.ObjectAgePolicy, Pleroma.Web.ActivityPub.MRF.TagPolicy], transparency: true, transparency_exclusions: [] From 4af1b803811cbb59d41f0149706d6dda340b4755 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Fri, 7 Aug 2020 16:48:03 -0500 Subject: [PATCH 004/362] Clean up account aliases --- docs/API/differences_in_mastoapi_responses.md | 1 + docs/API/pleroma_api.md | 20 -------- lib/pleroma/user.ex | 37 +++------------ .../api_spec/operations/account_operation.ex | 7 +++ .../operations/pleroma_account_operation.ex | 46 ------------------- lib/pleroma/web/api_spec/schemas/account.ex | 2 +- .../controllers/account_controller.ex | 2 + .../web/mastodon_api/views/account_view.ex | 2 +- .../controllers/account_controller.ex | 25 ---------- lib/pleroma/web/router.ex | 3 -- lib/pleroma/web/web_finger/web_finger.ex | 14 +++--- .../20200717025041_add_aliases_to_users.exs | 9 ---- test/user_test.exs | 44 ------------------ .../update_credentials_test.exs | 10 ++++ .../mastodon_api/views/account_view_test.exs | 6 +-- .../controllers/account_controller_test.exs | 29 ------------ .../web_finger/web_finger_controller_test.exs | 12 +++-- 17 files changed, 47 insertions(+), 222 deletions(-) delete mode 100644 priv/repo/migrations/20200717025041_add_aliases_to_users.exs diff --git a/docs/API/differences_in_mastoapi_responses.md b/docs/API/differences_in_mastoapi_responses.md index 38865dc68..3cb2183bd 100644 --- a/docs/API/differences_in_mastoapi_responses.md +++ b/docs/API/differences_in_mastoapi_responses.md @@ -184,6 +184,7 @@ Additional parameters can be added to the JSON body/Form data: - `pleroma_settings_store` - Opaque user settings to be saved on the backend. - `skip_thread_containment` - if true, skip filtering out broken threads - `allow_following_move` - if true, allows automatically follow moved following accounts +- `also_known_as` - array of ActivityPub IDs, needed for following move - `pleroma_background_image` - sets the background image of the user. Can be set to "" (an empty string) to reset. - `discoverable` - if true, discovery of this account in search results and other services is allowed. - `actor_type` - the type of this account. diff --git a/docs/API/pleroma_api.md b/docs/API/pleroma_api.md index c1aa4d204..4e97d26c0 100644 --- a/docs/API/pleroma_api.md +++ b/docs/API/pleroma_api.md @@ -570,23 +570,3 @@ Emoji reactions work a lot like favourites do. They make it possible to react to {"name": "😀", "count": 2, "me": true, "accounts": [{"id" => "xyz.."...}, {"id" => "zyx..."}]} ] ``` - -# Account aliases - -Set and delete ActivityPub aliases for follower move. - -## `POST /api/v1/pleroma/accounts/ap_aliases` -### Add account aliases -* Method: `POST` -* Authentication: required -* Params: - * `aliases`: array of ActivityPub IDs to add -* Response: JSON, the user's account - -## `DELETE /api/v1/pleroma/accounts/ap_aliases` -### Delete account aliases -* Method: `DELETE` -* Authentication: required -* Params: - * `aliases`: array of ActivityPub IDs to delete -* Response: JSON, the user's account diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index ad7a04f62..57e06bd5a 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -96,7 +96,6 @@ defmodule Pleroma.User do field(:keys, :string) field(:public_key, :string) field(:ap_id, :string) - field(:ap_aliases, {:array, :string}, default: []) field(:avatar, :map, default: %{}) field(:local, :boolean, default: true) field(:follower_address, :string) @@ -486,6 +485,7 @@ def update_changeset(struct, params \\ %{}) do :hide_follows_count, :hide_favorites, :allow_following_move, + :also_known_as, :background, :show_role, :skip_thread_containment, @@ -494,12 +494,12 @@ def update_changeset(struct, params \\ %{}) do :pleroma_settings_store, :discoverable, :actor_type, - :also_known_as, :accepts_chat_messages ] ) |> unique_constraint(:nickname) |> validate_format(:nickname, local_nickname_regex()) + |> validate_also_known_as() |> validate_length(:bio, max: bio_limit) |> validate_length(:name, min: 1, max: name_limit) |> validate_inclusion(:actor_type, ["Person", "Service"]) @@ -2387,36 +2387,11 @@ def sanitize_html(%User{} = user, filter) do |> Map.put(:fields, fields) end - def add_aliases(%User{} = user, aliases) when is_list(aliases) do - alias_set = - (user.ap_aliases ++ aliases) - |> MapSet.new() - |> MapSet.to_list() - - user - |> change(%{ap_aliases: alias_set}) - |> validate_ap_aliases() - |> Repo.update() - end - - def delete_aliases(%User{} = user, aliases) when is_list(aliases) do - alias_set = - user.ap_aliases - |> MapSet.new() - |> MapSet.difference(MapSet.new(aliases)) - |> MapSet.to_list() - - user - |> change(%{ap_aliases: alias_set}) - |> validate_ap_aliases() - |> Repo.update() - end - - defp validate_ap_aliases(changeset) do - validate_change(changeset, :ap_aliases, fn :ap_aliases, ap_aliases -> - case Enum.all?(ap_aliases, fn a -> Regex.match?(@url_regex, a) end) do + defp validate_also_known_as(changeset) do + validate_change(changeset, :also_known_as, fn :also_known_as, also_known_as -> + case Enum.all?(also_known_as, fn a -> Regex.match?(@url_regex, a) end) do true -> [] - false -> [ap_aliases: "Invalid ap_id format. Must be a URL."] + false -> [also_known_as: "Invalid ap_id format. Must be a URL."] end end) end diff --git a/lib/pleroma/web/api_spec/operations/account_operation.ex b/lib/pleroma/web/api_spec/operations/account_operation.ex index aaebc9b5c..91b4d0c80 100644 --- a/lib/pleroma/web/api_spec/operations/account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/account_operation.ex @@ -597,6 +597,12 @@ defp update_credentials_request do nullable: true, description: "Allows automatically follow moved following accounts" }, + also_known_as: %Schema{ + type: :array, + items: %Schema{type: :string}, + nullable: true, + description: "List of alternate ActivityPub IDs" + }, pleroma_background_image: %Schema{ type: :string, nullable: true, @@ -627,6 +633,7 @@ defp update_credentials_request do pleroma_settings_store: %{"pleroma-fe" => %{"key" => "val"}}, skip_thread_containment: false, allow_following_move: false, + also_known_as: ["https://foo.bar/users/foo"], discoverable: false, actor_type: "Person" } 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 1040f6e20..97836b2eb 100644 --- a/lib/pleroma/web/api_spec/operations/pleroma_account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/pleroma_account_operation.ex @@ -4,8 +4,6 @@ defmodule Pleroma.Web.ApiSpec.PleromaAccountOperation do alias OpenApiSpex.Operation - alias OpenApiSpex.Schema - alias Pleroma.Web.ApiSpec.Schemas.Account alias Pleroma.Web.ApiSpec.Schemas.AccountRelationship alias Pleroma.Web.ApiSpec.Schemas.ApiError alias Pleroma.Web.ApiSpec.Schemas.FlakeID @@ -89,54 +87,10 @@ def unsubscribe_operation do } end - def add_aliases_operation do - %Operation{ - tags: ["Accounts"], - summary: "Add ActivityPub aliases", - operationId: "PleromaAPI.AccountController.add_aliases", - requestBody: request_body("Parameters", alias_request(), required: true), - security: [%{"oAuth" => ["write:accounts"]}], - responses: %{ - 200 => Operation.response("Account", "application/json", Account), - 403 => Operation.response("Forbidden", "application/json", ApiError) - } - } - end - - def delete_aliases_operation do - %Operation{ - tags: ["Accounts"], - summary: "Delete ActivityPub aliases", - operationId: "PleromaAPI.AccountController.delete_aliases", - requestBody: request_body("Parameters", alias_request(), required: true), - security: [%{"oAuth" => ["write:accounts"]}], - responses: %{ - 200 => Operation.response("Account", "application/json", Account) - } - } - end - defp id_param do Operation.parameter(:id, :path, FlakeID, "Account ID", example: "9umDrYheeY451cQnEe", required: true ) end - - defp alias_request do - %Schema{ - title: "AccountAliasRequest", - description: "POST body for adding/deleting AP aliases", - type: :object, - properties: %{ - aliases: %Schema{ - type: :array, - items: %Schema{type: :string} - } - }, - example: %{ - "aliases" => ["https://beepboop.social/users/beep", "https://mushroom.kingdom/users/toad"] - } - } - end end diff --git a/lib/pleroma/web/api_spec/schemas/account.ex b/lib/pleroma/web/api_spec/schemas/account.ex index 4fd27edf5..cf743932c 100644 --- a/lib/pleroma/web/api_spec/schemas/account.ex +++ b/lib/pleroma/web/api_spec/schemas/account.ex @@ -41,7 +41,7 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Account do type: :object, properties: %{ ap_id: %Schema{type: :string}, - ap_aliases: %Schema{type: :array, items: %Schema{type: :string}}, + also_known_as: %Schema{type: :array, items: %Schema{type: :string}}, allow_following_move: %Schema{ type: :boolean, description: "whether the user allows automatically follow moved following accounts" diff --git a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex index f45678184..b0ec97d87 100644 --- a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex @@ -186,6 +186,7 @@ def update_credentials(%{assigns: %{user: user}, body_params: params} = conn, _p :show_role, :skip_thread_containment, :allow_following_move, + :also_known_as, :discoverable, :accepts_chat_messages ] @@ -210,6 +211,7 @@ def update_credentials(%{assigns: %{user: user}, body_params: params} = conn, _p if bot, do: {:ok, "Service"}, else: {:ok, "Person"} end) |> Maps.put_if_present(:actor_type, params[:actor_type]) + |> Maps.put_if_present(:also_known_as, params[:also_known_as]) # What happens here: # diff --git a/lib/pleroma/web/mastodon_api/views/account_view.ex b/lib/pleroma/web/mastodon_api/views/account_view.ex index 4f29a80fb..f78b04565 100644 --- a/lib/pleroma/web/mastodon_api/views/account_view.ex +++ b/lib/pleroma/web/mastodon_api/views/account_view.ex @@ -267,7 +267,7 @@ defp do_render("show.json", %{user: user} = opts) do # Pleroma extension pleroma: %{ ap_id: user.ap_id, - ap_aliases: user.ap_aliases, + also_known_as: user.also_known_as, confirmation_pending: user.confirmation_pending, tags: user.tags, hide_followers_count: user.hide_followers_count, diff --git a/lib/pleroma/web/pleroma_api/controllers/account_controller.ex b/lib/pleroma/web/pleroma_api/controllers/account_controller.ex index 03e5781a3..563edded7 100644 --- a/lib/pleroma/web/pleroma_api/controllers/account_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/account_controller.ex @@ -39,11 +39,6 @@ defmodule Pleroma.Web.PleromaAPI.AccountController do %{scopes: ["read:favourites"], fallback: :proceed_unauthenticated} when action == :favourites ) - plug( - OAuthScopesPlug, - %{scopes: ["write:accounts"]} when action in [:add_aliases, :delete_aliases] - ) - plug(RateLimiter, [name: :account_confirmation_resend] when action == :confirmation_resend) plug(:assign_account_by_id when action in [:favourites, :subscribe, :unsubscribe]) @@ -112,24 +107,4 @@ def unsubscribe(%{assigns: %{user: user, account: subscription_target}} = conn, {:error, message} -> json_response(conn, :forbidden, %{error: message}) end end - - @doc "POST /api/v1/pleroma/accounts/ap_aliases" - def add_aliases(%{assigns: %{user: user}, body_params: %{aliases: aliases}} = conn, _params) - when is_list(aliases) do - with {:ok, user} <- User.add_aliases(user, aliases) do - render(conn, "show.json", user: user) - else - {:error, message} -> json_response(conn, :forbidden, %{error: message}) - end - end - - @doc "DELETE /api/v1/pleroma/accounts/ap_aliases" - def delete_aliases(%{assigns: %{user: user}, body_params: %{aliases: aliases}} = conn, _params) - when is_list(aliases) do - with {:ok, user} <- User.delete_aliases(user, aliases) do - render(conn, "show.json", user: user) - else - {:error, message} -> json_response(conn, :forbidden, %{error: message}) - end - end end diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index fbab0fc27..c6433cc53 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -345,9 +345,6 @@ defmodule Pleroma.Web.Router do post("/accounts/:id/subscribe", AccountController, :subscribe) post("/accounts/:id/unsubscribe", AccountController, :unsubscribe) - - post("/accounts/ap_aliases", AccountController, :add_aliases) - delete("/accounts/ap_aliases", AccountController, :delete_aliases) end post("/accounts/confirmation_resend", AccountController, :confirmation_resend) diff --git a/lib/pleroma/web/web_finger/web_finger.ex b/lib/pleroma/web/web_finger/web_finger.ex index fb142ce8d..b0df356a3 100644 --- a/lib/pleroma/web/web_finger/web_finger.ex +++ b/lib/pleroma/web/web_finger/web_finger.ex @@ -59,10 +59,7 @@ defp gather_links(%User{} = user) do end defp gather_aliases(%User{} = user) do - user.ap_aliases - |> MapSet.new() - |> MapSet.put(user.ap_id) - |> MapSet.to_list() + [user.ap_id] ++ user.also_known_as end def represent_user(user, "JSON") do @@ -78,6 +75,10 @@ def represent_user(user, "JSON") do def represent_user(user, "XML") do {:ok, user} = User.ensure_keys_present(user) + aliases = + gather_aliases(user) + |> Enum.map(fn the_alias -> {:Alias, the_alias} end) + links = gather_links(user) |> Enum.map(fn link -> {:Link, link} end) @@ -86,9 +87,8 @@ def represent_user(user, "XML") do :XRD, %{xmlns: "http://docs.oasis-open.org/ns/xri/xrd-1.0"}, [ - {:Subject, "acct:#{user.nickname}@#{Pleroma.Web.Endpoint.host()}"}, - {:Alias, user.ap_id} - ] ++ links + {:Subject, "acct:#{user.nickname}@#{Pleroma.Web.Endpoint.host()}"} + ] ++ aliases ++ links } |> XmlBuilder.to_doc() end diff --git a/priv/repo/migrations/20200717025041_add_aliases_to_users.exs b/priv/repo/migrations/20200717025041_add_aliases_to_users.exs deleted file mode 100644 index a6ace6e0f..000000000 --- a/priv/repo/migrations/20200717025041_add_aliases_to_users.exs +++ /dev/null @@ -1,9 +0,0 @@ -defmodule Pleroma.Repo.Migrations.AddAliasesToUsers do - use Ecto.Migration - - def change do - alter table(:users) do - add(:ap_aliases, {:array, :string}, default: []) - end - end -end diff --git a/test/user_test.exs b/test/user_test.exs index 941e48408..b47405895 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -2024,48 +2024,4 @@ test "avatar fallback" do assert User.avatar_url(user, no_default: true) == nil end - - test "add_aliases/2" do - user = insert(:user) - - aliases = [ - "https://gleasonator.com/users/alex", - "https://gleasonator.com/users/alex", - "https://animalliberation.social/users/alex" - ] - - {:ok, user} = User.add_aliases(user, aliases) - - assert user.ap_aliases == [ - "https://animalliberation.social/users/alex", - "https://gleasonator.com/users/alex" - ] - end - - test "add_aliases/2 with invalid alias" do - user = insert(:user) - {:error, _} = User.add_aliases(user, ["invalid_alias"]) - {:error, _} = User.add_aliases(user, ["http://still_invalid"]) - {:error, _} = User.add_aliases(user, ["http://validalias.com/users/dude", "invalid_alias"]) - end - - test "delete_aliases/2" do - user = - insert(:user, - ap_aliases: [ - "https://animalliberation.social/users/alex", - "https://benis.social/users/benis", - "https://gleasonator.com/users/alex" - ] - ) - - aliases = ["https://benis.social/users/benis"] - - {:ok, user} = User.delete_aliases(user, aliases) - - assert user.ap_aliases == [ - "https://animalliberation.social/users/alex", - "https://gleasonator.com/users/alex" - ] - end end diff --git a/test/web/mastodon_api/controllers/account_controller/update_credentials_test.exs b/test/web/mastodon_api/controllers/account_controller/update_credentials_test.exs index b888e4c71..467110f3b 100644 --- a/test/web/mastodon_api/controllers/account_controller/update_credentials_test.exs +++ b/test/web/mastodon_api/controllers/account_controller/update_credentials_test.exs @@ -216,6 +216,16 @@ test "updates the user's name", %{conn: conn} do assert user_data["display_name"] == "markorepairs" end + test "updates the user's AKAs", %{conn: conn} do + conn = + patch(conn, "/api/v1/accounts/update_credentials", %{ + "also_known_as" => ["https://mushroom.kingdom/users/mario"] + }) + + assert user_data = json_response_and_validate_schema(conn, 200) + assert user_data["pleroma"]["also_known_as"] == ["https://mushroom.kingdom/users/mario"] + end + test "updates the user's avatar", %{user: user, conn: conn} do new_avatar = %Plug.Upload{ content_type: "image/jpg", diff --git a/test/web/mastodon_api/views/account_view_test.exs b/test/web/mastodon_api/views/account_view_test.exs index a55b5a06e..bbf7b33a8 100644 --- a/test/web/mastodon_api/views/account_view_test.exs +++ b/test/web/mastodon_api/views/account_view_test.exs @@ -38,7 +38,7 @@ test "Represent a user account" do inserted_at: ~N[2017-08-15 15:47:06.597036], emoji: %{"karjalanpiirakka" => "/file.png"}, raw_bio: "valid html. a\nb\nc\nd\nf '&<>\"", - ap_aliases: ["https://shitposter.zone/users/shp"] + also_known_as: ["https://shitposter.zone/users/shp"] }) expected = %{ @@ -78,7 +78,7 @@ test "Represent a user account" do }, pleroma: %{ ap_id: user.ap_id, - ap_aliases: ["https://shitposter.zone/users/shp"], + also_known_as: ["https://shitposter.zone/users/shp"], background_image: "https://example.com/images/asuka_hospital.png", favicon: "https://shitposter.club/plugins/Qvitter/img/gnusocial-favicons/favicon-16x16.png", @@ -174,7 +174,7 @@ test "Represent a Service(bot) account" do }, pleroma: %{ ap_id: user.ap_id, - ap_aliases: [], + also_known_as: [], background_image: nil, favicon: "https://shitposter.club/plugins/Qvitter/img/gnusocial-favicons/favicon-16x16.png", diff --git a/test/web/pleroma_api/controllers/account_controller_test.exs b/test/web/pleroma_api/controllers/account_controller_test.exs index da01a8218..07909d48b 100644 --- a/test/web/pleroma_api/controllers/account_controller_test.exs +++ b/test/web/pleroma_api/controllers/account_controller_test.exs @@ -281,33 +281,4 @@ test "returns 404 when subscription_target not found" do assert %{"error" => "Record not found"} = json_response_and_validate_schema(conn, 404) end end - - describe "aliases controllers" do - setup do: oauth_access(["write:accounts"]) - - test "adds aliases", %{conn: conn} do - aliases = ["https://gleasonator.com/users/alex"] - - conn = - conn - |> put_req_header("content-type", "application/json") - |> post("/api/v1/pleroma/accounts/ap_aliases", %{"aliases" => aliases}) - - assert %{"pleroma" => %{"ap_aliases" => res}} = json_response_and_validate_schema(conn, 200) - assert Enum.count(res) == 1 - end - - test "deletes aliases", %{conn: conn, user: user} do - aliases = ["https://gleasonator.com/users/alex"] - User.add_aliases(user, aliases) - - conn = - conn - |> put_req_header("content-type", "application/json") - |> delete("/api/v1/pleroma/accounts/ap_aliases", %{"aliases" => aliases}) - - assert %{"pleroma" => %{"ap_aliases" => res}} = json_response_and_validate_schema(conn, 200) - assert Enum.count(res) == 0 - end - end end diff --git a/test/web/web_finger/web_finger_controller_test.exs b/test/web/web_finger/web_finger_controller_test.exs index 50b6c4b3e..ce9eb0650 100644 --- a/test/web/web_finger/web_finger_controller_test.exs +++ b/test/web/web_finger/web_finger_controller_test.exs @@ -33,7 +33,7 @@ test "Webfinger JRD" do user = insert(:user, ap_id: "https://hyrule.world/users/zelda", - ap_aliases: ["https://mushroom.kingdom/users/toad"] + also_known_as: ["https://mushroom.kingdom/users/toad"] ) response = @@ -61,14 +61,20 @@ test "it returns 404 when user isn't found (JSON)" do end test "Webfinger XML" do - user = insert(:user) + user = + insert(:user, + ap_id: "https://hyrule.world/users/zelda", + also_known_as: ["https://mushroom.kingdom/users/toad"] + ) response = build_conn() |> put_req_header("accept", "application/xrd+xml") |> get("/.well-known/webfinger?resource=acct:#{user.nickname}@localhost") + |> response(200) - assert response(response, 200) + assert response =~ "https://hyrule.world/users/zelda" + assert response =~ "https://mushroom.kingdom/users/toad" end test "it returns 404 when user isn't found (XML)" do From c56e3d4f3bfb090d19bdbe93dac6cede7616cc4d Mon Sep 17 00:00:00 2001 From: Roman Chvanikov Date: Tue, 8 Sep 2020 13:26:44 +0300 Subject: [PATCH 005/362] Add expires_in param for account mutes --- config/config.exs | 5 ++- lib/pleroma/user.ex | 45 ++++++++++--------- .../api_spec/operations/account_operation.ex | 15 ++++++- .../controllers/account_controller.ex | 2 +- lib/pleroma/workers/mute_expire_worker.ex | 22 +++++++++ test/notification_test.exs | 4 +- test/user_test.exs | 2 +- .../notification_controller_test.exs | 2 +- .../mastodon_api/views/account_view_test.exs | 2 +- 9 files changed, 69 insertions(+), 30 deletions(-) create mode 100644 lib/pleroma/workers/mute_expire_worker.ex diff --git a/config/config.exs b/config/config.exs index ed37b93c0..0649f3078 100644 --- a/config/config.exs +++ b/config/config.exs @@ -541,7 +541,8 @@ background: 5, remote_fetcher: 2, attachments_cleanup: 5, - new_users_digest: 1 + new_users_digest: 1, + mute_expire: 5 ], plugins: [Oban.Plugins.Pruner], crontab: [ @@ -672,7 +673,7 @@ # With no frontend configuration, the bundled files from the `static` directory will # be used. # -# config :pleroma, :frontends, +# config :pleroma, :frontends, # primary: %{"name" => "pleroma-fe", "ref" => "develop"}, # admin: %{"name" => "admin-fe", "ref" => "stable"}, # available: %{...} diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 94c96de8d..040db8d80 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -1356,14 +1356,34 @@ def get_recipients_from_activity(%Activity{recipients: to, actor: actor}) do |> Repo.all() end - @spec mute(User.t(), User.t(), boolean()) :: + @spec mute(User.t(), User.t(), map()) :: {:ok, list(UserRelationship.t())} | {:error, String.t()} - def mute(%User{} = muter, %User{} = mutee, notifications? \\ true) do - add_to_mutes(muter, mutee, notifications?) + def mute(%User{} = muter, %User{} = mutee, params \\ %{}) do + notifications? = Map.get(params, :notifications, true) + expires_in = Map.get(params, :expires_in, 0) + + with {:ok, user_mute} <- UserRelationship.create_mute(muter, mutee), + {:ok, user_notification_mute} <- + (notifications? && UserRelationship.create_notification_mute(muter, mutee)) || + {:ok, nil} do + with seconds when seconds > 0 <- expires_in do + Pleroma.Workers.MuteExpireWorker.enqueue( + "unmute", + %{"muter" => muter.id, "mutee" => mutee.id}, + schedule_in: expires_in + ) + end + + {:ok, Enum.filter([user_mute, user_notification_mute], & &1)} + end end def unmute(%User{} = muter, %User{} = mutee) do - remove_from_mutes(muter, mutee) + with {:ok, user_mute} <- UserRelationship.delete_mute(muter, mutee), + {:ok, user_notification_mute} <- + UserRelationship.delete_notification_mute(muter, mutee) do + {:ok, [user_mute, user_notification_mute]} + end end def subscribe(%User{} = subscriber, %User{} = target) do @@ -2379,23 +2399,6 @@ defp remove_from_block(%User{} = user, %User{} = blocked) do UserRelationship.delete_block(user, blocked) end - defp add_to_mutes(%User{} = user, %User{} = muted_user, notifications?) do - with {:ok, user_mute} <- UserRelationship.create_mute(user, muted_user), - {:ok, user_notification_mute} <- - (notifications? && UserRelationship.create_notification_mute(user, muted_user)) || - {:ok, nil} do - {:ok, Enum.filter([user_mute, user_notification_mute], & &1)} - end - end - - defp remove_from_mutes(user, %User{} = muted_user) do - with {:ok, user_mute} <- UserRelationship.delete_mute(user, muted_user), - {:ok, user_notification_mute} <- - UserRelationship.delete_notification_mute(user, muted_user) do - {:ok, [user_mute, user_notification_mute]} - end - end - def set_invisible(user, invisible) do params = %{invisible: invisible} diff --git a/lib/pleroma/web/api_spec/operations/account_operation.ex b/lib/pleroma/web/api_spec/operations/account_operation.ex index aaebc9b5c..de715a077 100644 --- a/lib/pleroma/web/api_spec/operations/account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/account_operation.ex @@ -262,6 +262,12 @@ def mute_operation do :query, %Schema{allOf: [BooleanLike], default: true}, "Mute notifications in addition to statuses? Defaults to `true`." + ), + Operation.parameter( + :expires_in, + :query, + %Schema{type: :integer, default: 0}, + "Expire the mute in `expires_in` seconds. Default 0 for infinity" ) ], responses: %{ @@ -718,10 +724,17 @@ defp mute_request do nullable: true, description: "Mute notifications in addition to statuses? Defaults to true.", default: true + }, + expires_in: %Schema{ + type: :integer, + nullable: true, + description: "Expire the mute in `expires_in` seconds. Default 0 for infinity", + default: 0 } }, example: %{ - "notifications" => true + "notifications" => true, + "expires_in" => 86_400 } } end diff --git a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex index 95d8452df..ca1a79f5e 100644 --- a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex @@ -394,7 +394,7 @@ def unfollow(%{assigns: %{user: follower, account: followed}} = conn, _params) d @doc "POST /api/v1/accounts/:id/mute" def mute(%{assigns: %{user: muter, account: muted}, body_params: params} = conn, _params) do - with {:ok, _user_relationships} <- User.mute(muter, muted, params.notifications) do + with {:ok, _user_relationships} <- User.mute(muter, muted, params) do render(conn, "relationship.json", user: muter, target: muted) else {:error, message} -> json_response(conn, :forbidden, %{error: message}) diff --git a/lib/pleroma/workers/mute_expire_worker.ex b/lib/pleroma/workers/mute_expire_worker.ex new file mode 100644 index 000000000..b8ec939a9 --- /dev/null +++ b/lib/pleroma/workers/mute_expire_worker.ex @@ -0,0 +1,22 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Workers.MuteExpireWorker do + use Pleroma.Workers.WorkerHelper, queue: "mute_expire" + + require Logger + + @impl Oban.Worker + def perform(%Job{args: %{"op" => "unmute", "muter" => muter_id, "mutee" => mutee_id}}) do + muter = Pleroma.User.get_by_id(muter_id) + mutee = Pleroma.User.get_by_id(mutee_id) + Pleroma.User.unmute(muter, mutee) + :ok + end + + def perform(any) do + Logger.error("Got call to perform(#{inspect(any)})") + :ok + end +end diff --git a/test/notification_test.exs b/test/notification_test.exs index a09b08675..ffd737969 100644 --- a/test/notification_test.exs +++ b/test/notification_test.exs @@ -227,7 +227,7 @@ test "notification created if user is muted without notifications" do muter = insert(:user) muted = insert(:user) - {:ok, _user_relationships} = User.mute(muter, muted, false) + {:ok, _user_relationships} = User.mute(muter, muted, %{notifications: false}) {:ok, activity} = CommonAPI.post(muted, %{status: "Hi @#{muter.nickname}"}) @@ -1013,7 +1013,7 @@ test "move activity generates a notification" do test "it returns notifications for muted user without notifications", %{user: user} do muted = insert(:user) - {:ok, _user_relationships} = User.mute(user, muted, false) + {:ok, _user_relationships} = User.mute(user, muted, %{notifications: false}) {:ok, _activity} = CommonAPI.post(muted, %{status: "hey @#{user.nickname}"}) diff --git a/test/user_test.exs b/test/user_test.exs index 50f72549e..b23e36be3 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -981,7 +981,7 @@ test "it mutes user without notifications" do refute User.mutes?(user, muted_user) refute User.muted_notifications?(user, muted_user) - {:ok, _user_relationships} = User.mute(user, muted_user, false) + {:ok, _user_relationships} = User.mute(user, muted_user, %{notifications: false}) assert User.mutes?(user, muted_user) refute User.muted_notifications?(user, muted_user) diff --git a/test/web/mastodon_api/controllers/notification_controller_test.exs b/test/web/mastodon_api/controllers/notification_controller_test.exs index 70ef0e8b5..5fd518c60 100644 --- a/test/web/mastodon_api/controllers/notification_controller_test.exs +++ b/test/web/mastodon_api/controllers/notification_controller_test.exs @@ -502,7 +502,7 @@ test "see notifications after muting user without notifications" do assert length(json_response_and_validate_schema(ret_conn, 200)) == 1 - {:ok, _user_relationships} = User.mute(user, user2, false) + {:ok, _user_relationships} = User.mute(user, user2, %{notifications: false}) conn = get(conn, "/api/v1/notifications") diff --git a/test/web/mastodon_api/views/account_view_test.exs b/test/web/mastodon_api/views/account_view_test.exs index 8f37efa3c..c34cbcfc1 100644 --- a/test/web/mastodon_api/views/account_view_test.exs +++ b/test/web/mastodon_api/views/account_view_test.exs @@ -277,7 +277,7 @@ test "represent a relationship for the following and followed user" do {:ok, user} = User.follow(user, other_user) {:ok, other_user} = User.follow(other_user, user) {:ok, _subscription} = User.subscribe(user, other_user) - {:ok, _user_relationships} = User.mute(user, other_user, true) + {:ok, _user_relationships} = User.mute(user, other_user, %{notifications: true}) {:ok, _reblog_mute} = CommonAPI.hide_reblogs(user, other_user) expected = From f6b250fb8d13f6788c1ecc6c1287e76febbfd888 Mon Sep 17 00:00:00 2001 From: Roman Chvanikov Date: Tue, 8 Sep 2020 14:11:00 +0300 Subject: [PATCH 006/362] Add test for expiring mutes --- test/user_test.exs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/test/user_test.exs b/test/user_test.exs index b23e36be3..83c017ec5 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -963,6 +963,19 @@ test "it mutes people" do assert User.muted_notifications?(user, muted_user) end + test "expiring" do + user = insert(:user) + muted_user = insert(:user) + + {:ok, _user_relationships} = User.mute(user, muted_user, %{expires_in: 60}) + assert User.mutes?(user, muted_user) + + assert_enqueued( + worker: Pleroma.Workers.MuteExpireWorker, + args: %{"op" => "unmute", "muter" => user.id, "mutee" => muted_user.id} + ) + end + test "it unmutes users" do user = insert(:user) muted_user = insert(:user) From e3f845b24363cd867ab85b7297f2d34bfa16b13f Mon Sep 17 00:00:00 2001 From: Roman Chvanikov Date: Tue, 8 Sep 2020 15:13:50 +0300 Subject: [PATCH 007/362] Add expiring mutes for activities --- lib/pleroma/user.ex | 6 ++--- .../api_spec/operations/status_operation.ex | 22 ++++++++++++++++++- lib/pleroma/web/common_api/common_api.ex | 12 +++++++++- lib/pleroma/workers/mute_expire_worker.ex | 10 ++++++--- test/user_test.exs | 12 ++++++++-- test/web/common_api/common_api_test.exs | 18 +++++++++++++++ 6 files changed, 70 insertions(+), 10 deletions(-) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 040db8d80..46e03553c 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -1366,10 +1366,10 @@ def mute(%User{} = muter, %User{} = mutee, params \\ %{}) do {:ok, user_notification_mute} <- (notifications? && UserRelationship.create_notification_mute(muter, mutee)) || {:ok, nil} do - with seconds when seconds > 0 <- expires_in do + if expires_in > 0 do Pleroma.Workers.MuteExpireWorker.enqueue( - "unmute", - %{"muter" => muter.id, "mutee" => mutee.id}, + "unmute_user", + %{"muter_id" => muter.id, "mutee_id" => mutee.id}, schedule_in: expires_in ) end diff --git a/lib/pleroma/web/api_spec/operations/status_operation.ex b/lib/pleroma/web/api_spec/operations/status_operation.ex index 5bd4619d5..6589a16f3 100644 --- a/lib/pleroma/web/api_spec/operations/status_operation.ex +++ b/lib/pleroma/web/api_spec/operations/status_operation.ex @@ -223,7 +223,27 @@ def mute_conversation_operation do security: [%{"oAuth" => ["write:mutes"]}], description: "Do not receive notifications for the thread that this status is part of.", operationId: "StatusController.mute_conversation", - parameters: [id_param()], + requestBody: + request_body("Parameters", %Schema{ + type: :object, + properties: %{ + expires_in: %Schema{ + type: :integer, + nullable: true, + description: "Expire the mute in `expires_in` seconds. Default 0 for infinity", + default: 0 + } + } + }), + parameters: [ + id_param(), + Operation.parameter( + :expires_in, + :query, + %Schema{type: :integer, default: 0}, + "Expire the mute in `expires_in` seconds. Default 0 for infinity" + ) + ], responses: %{ 200 => status_response(), 400 => Operation.response("Error", "application/json", ApiError) diff --git a/lib/pleroma/web/common_api/common_api.ex b/lib/pleroma/web/common_api/common_api.ex index 4ab533658..b217c4d10 100644 --- a/lib/pleroma/web/common_api/common_api.ex +++ b/lib/pleroma/web/common_api/common_api.ex @@ -451,9 +451,19 @@ def unpin(id, user) do end end - def add_mute(user, activity) do + def add_mute(user, activity, params \\ %{}) do + expires_in = Map.get(params, :expires_in, 0) + with {:ok, _} <- ThreadMute.add_mute(user.id, activity.data["context"]), _ <- Pleroma.Notification.mark_context_as_read(user, activity.data["context"]) do + if expires_in > 0 do + Pleroma.Workers.MuteExpireWorker.enqueue( + "unmute_conversation", + %{"user_id" => user.id, "activity_id" => activity.id}, + schedule_in: expires_in + ) + end + {:ok, activity} else {:error, _} -> {:error, dgettext("errors", "conversation is already muted")} diff --git a/lib/pleroma/workers/mute_expire_worker.ex b/lib/pleroma/workers/mute_expire_worker.ex index b8ec939a9..622fdbadd 100644 --- a/lib/pleroma/workers/mute_expire_worker.ex +++ b/lib/pleroma/workers/mute_expire_worker.ex @@ -8,15 +8,19 @@ defmodule Pleroma.Workers.MuteExpireWorker do require Logger @impl Oban.Worker - def perform(%Job{args: %{"op" => "unmute", "muter" => muter_id, "mutee" => mutee_id}}) do + def perform(%Job{args: %{"op" => "unmute_user", "muter_id" => muter_id, "mutee_id" => mutee_id}}) do muter = Pleroma.User.get_by_id(muter_id) mutee = Pleroma.User.get_by_id(mutee_id) Pleroma.User.unmute(muter, mutee) :ok end - def perform(any) do - Logger.error("Got call to perform(#{inspect(any)})") + def perform(%Job{ + args: %{"op" => "unmute_conversation", "user_id" => user_id, "activity_id" => activity_id} + }) do + user = Pleroma.User.get_by_id(user_id) + activity = Pleroma.Activity.get_by_id(activity_id) + Pleroma.Web.CommonAPI.remove_mute(user, activity) :ok end end diff --git a/test/user_test.exs b/test/user_test.exs index 83c017ec5..d49afb35a 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -970,10 +970,18 @@ test "expiring" do {:ok, _user_relationships} = User.mute(user, muted_user, %{expires_in: 60}) assert User.mutes?(user, muted_user) + worker = Pleroma.Workers.MuteExpireWorker + args = %{"op" => "unmute_user", "muter_id" => user.id, "mutee_id" => muted_user.id} + assert_enqueued( - worker: Pleroma.Workers.MuteExpireWorker, - args: %{"op" => "unmute", "muter" => user.id, "mutee" => muted_user.id} + worker: worker, + args: args ) + + assert :ok = perform_job(worker, args) + + refute User.mutes?(user, muted_user) + refute User.muted_notifications?(user, muted_user) end test "it unmutes users" do diff --git a/test/web/common_api/common_api_test.exs b/test/web/common_api/common_api_test.exs index 800db9a20..7ceb7ec7f 100644 --- a/test/web/common_api/common_api_test.exs +++ b/test/web/common_api/common_api_test.exs @@ -3,7 +3,9 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.CommonAPITest do + use Oban.Testing, repo: Pleroma.Repo use Pleroma.DataCase + alias Pleroma.Activity alias Pleroma.Chat alias Pleroma.Conversation.Participation @@ -878,6 +880,22 @@ test "add mute", %{user: user, activity: activity} do assert CommonAPI.thread_muted?(user, activity) end + test "add expiring mute", %{user: user, activity: activity} do + {:ok, _} = CommonAPI.add_mute(user, activity, %{expires_in: 60}) + assert CommonAPI.thread_muted?(user, activity) + + worker = Pleroma.Workers.MuteExpireWorker + args = %{"op" => "unmute_conversation", "user_id" => user.id, "activity_id" => activity.id} + + assert_enqueued( + worker: worker, + args: args + ) + + assert :ok = perform_job(worker, args) + refute CommonAPI.thread_muted?(user, activity) + end + test "remove mute", %{user: user, activity: activity} do CommonAPI.add_mute(user, activity) {:ok, _} = CommonAPI.remove_mute(user, activity) From 91b9985e1c0ef1766eb1705364e1aebe69d9b9bd Mon Sep 17 00:00:00 2001 From: Roman Chvanikov Date: Tue, 8 Sep 2020 15:26:06 +0300 Subject: [PATCH 008/362] Pass expires_in param from status controller --- lib/pleroma/web/mastodon_api/controllers/status_controller.ex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/web/mastodon_api/controllers/status_controller.ex b/lib/pleroma/web/mastodon_api/controllers/status_controller.ex index ecfa38489..da14c0b6c 100644 --- a/lib/pleroma/web/mastodon_api/controllers/status_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/status_controller.ex @@ -285,9 +285,9 @@ def unbookmark(%{assigns: %{user: user}} = conn, %{id: id}) do end @doc "POST /api/v1/statuses/:id/mute" - def mute_conversation(%{assigns: %{user: user}} = conn, %{id: id}) do + def mute_conversation(%{assigns: %{user: user}, body_params: params} = conn, %{id: id}) do with %Activity{} = activity <- Activity.get_by_id(id), - {:ok, activity} <- CommonAPI.add_mute(user, activity) do + {:ok, activity} <- CommonAPI.add_mute(user, activity, params) do try_render(conn, "show.json", activity: activity, for: user, as: :activity) end end From de2499e54b33a1746e5f6a5b79f1422d31c11570 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Wed, 9 Sep 2020 09:52:07 +0300 Subject: [PATCH 009/362] don't run update in tests --- lib/pleroma/stats.ex | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/lib/pleroma/stats.ex b/lib/pleroma/stats.ex index e5c9c668b..48afe901e 100644 --- a/lib/pleroma/stats.ex +++ b/lib/pleroma/stats.ex @@ -23,7 +23,6 @@ def start_link(_) do @impl true def init(_args) do - if Pleroma.Config.get(:env) == :test, do: :ok = Ecto.Adapters.SQL.Sandbox.checkout(Repo) {:ok, nil, {:continue, :calculate_stats}} end @@ -32,11 +31,6 @@ def force_update do GenServer.call(__MODULE__, :force_update) end - @doc "Performs collect stats" - def do_collect do - GenServer.cast(__MODULE__, :run_update) - end - @doc "Returns stats data" @spec get_stats() :: %{ domain_count: non_neg_integer(), @@ -111,7 +105,11 @@ def get_status_visibility_count(instance \\ nil) do @impl true def handle_continue(:calculate_stats, _) do stats = calculate_stat_data() - Process.send_after(self(), :run_update, @interval) + + unless Pleroma.Config.get(:env) == :test do + Process.send_after(self(), :run_update, @interval) + end + {:noreply, stats} end @@ -126,13 +124,6 @@ def handle_call(:get_state, _from, state) do {:reply, state, state} end - @impl true - def handle_cast(:run_update, _state) do - new_stats = calculate_stat_data() - - {:noreply, new_stats} - end - @impl true def handle_info(:run_update, _) do new_stats = calculate_stat_data() From 527afb813af6c64337d02ddf1a2f159fe557acbc Mon Sep 17 00:00:00 2001 From: Roman Chvanikov Date: Sun, 13 Sep 2020 12:23:45 +0300 Subject: [PATCH 010/362] Remove unused require --- lib/pleroma/workers/mute_expire_worker.ex | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/pleroma/workers/mute_expire_worker.ex b/lib/pleroma/workers/mute_expire_worker.ex index 622fdbadd..c8b44894e 100644 --- a/lib/pleroma/workers/mute_expire_worker.ex +++ b/lib/pleroma/workers/mute_expire_worker.ex @@ -5,8 +5,6 @@ defmodule Pleroma.Workers.MuteExpireWorker do use Pleroma.Workers.WorkerHelper, queue: "mute_expire" - require Logger - @impl Oban.Worker def perform(%Job{args: %{"op" => "unmute_user", "muter_id" => muter_id, "mutee_id" => mutee_id}}) do muter = Pleroma.User.get_by_id(muter_id) From 28d0986f839651df7d305da8932f7b5c48a4fbfb Mon Sep 17 00:00:00 2001 From: Roman Chvanikov Date: Sun, 20 Sep 2020 20:51:20 +0300 Subject: [PATCH 011/362] Refactor mutes removing in CommonAPI and User --- lib/pleroma/user.ex | 14 ++++++++++++++ lib/pleroma/web/common_api/common_api.ex | 18 +++++++++++++++++- lib/pleroma/workers/mute_expire_worker.ex | 8 ++------ test/user_test.exs | 11 +++++++++++ test/web/common_api/common_api_test.exs | 6 ++++++ 5 files changed, 50 insertions(+), 7 deletions(-) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 83eb4d5ff..83e89a12c 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -1385,6 +1385,20 @@ def unmute(%User{} = muter, %User{} = mutee) do end end + def unmute(muter_id, mutee_id) do + with {:muter, %User{} = muter} <- {:muter, User.get_by_id(muter_id)}, + {:mutee, %User{} = mutee} <- {:mutee, User.get_by_id(mutee_id)} do + unmute(muter, mutee) + else + {who, result} = error -> + Logger.warn( + "User.unmute/2 failed. #{who}: #{result}, muter_id: #{muter_id}, mutee_id: #{mutee_id}" + ) + + {:error, error} + end + end + def subscribe(%User{} = subscriber, %User{} = target) do deny_follow_blocked = Config.get([:user, :deny_follow_blocked]) diff --git a/lib/pleroma/web/common_api/common_api.ex b/lib/pleroma/web/common_api/common_api.ex index fca9246a5..aa4c6ddab 100644 --- a/lib/pleroma/web/common_api/common_api.ex +++ b/lib/pleroma/web/common_api/common_api.ex @@ -472,11 +472,27 @@ def add_mute(user, activity, params \\ %{}) do end end - def remove_mute(user, activity) do + def remove_mute(%User{} = user, %Activity{} = activity) do ThreadMute.remove_mute(user.id, activity.data["context"]) {:ok, activity} end + def remove_mute(user_id, activity_id) do + with {:user, %User{} = user} <- {:user, User.get_by_id(user_id)}, + {:activity, %Activity{} = activity} <- {:activity, Activity.get_by_id(activity_id)} do + remove_mute(user, activity) + else + {what, result} = error -> + Logger.warn( + "CommonAPI.remove_mute/2 failed. #{what}: #{result}, user_id: #{user_id}, activity_id: #{ + activity_id + }" + ) + + {:error, error} + end + end + def thread_muted?(%User{id: user_id}, %{data: %{"context" => context}}) when is_binary(context) do ThreadMute.exists?(user_id, context) diff --git a/lib/pleroma/workers/mute_expire_worker.ex b/lib/pleroma/workers/mute_expire_worker.ex index c8b44894e..32a12ba85 100644 --- a/lib/pleroma/workers/mute_expire_worker.ex +++ b/lib/pleroma/workers/mute_expire_worker.ex @@ -7,18 +7,14 @@ defmodule Pleroma.Workers.MuteExpireWorker do @impl Oban.Worker def perform(%Job{args: %{"op" => "unmute_user", "muter_id" => muter_id, "mutee_id" => mutee_id}}) do - muter = Pleroma.User.get_by_id(muter_id) - mutee = Pleroma.User.get_by_id(mutee_id) - Pleroma.User.unmute(muter, mutee) + Pleroma.User.unmute(muter_id, mutee_id) :ok end def perform(%Job{ args: %{"op" => "unmute_conversation", "user_id" => user_id, "activity_id" => activity_id} }) do - user = Pleroma.User.get_by_id(user_id) - activity = Pleroma.Activity.get_by_id(activity_id) - Pleroma.Web.CommonAPI.remove_mute(user, activity) + Pleroma.Web.CommonAPI.remove_mute(user_id, activity_id) :ok end end diff --git a/test/user_test.exs b/test/user_test.exs index ce0d4d38b..79c8b76b8 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -1034,6 +1034,17 @@ test "it unmutes users" do refute User.muted_notifications?(user, muted_user) end + test "it unmutes users by id" do + user = insert(:user) + muted_user = insert(:user) + + {:ok, _user_relationships} = User.mute(user, muted_user) + {:ok, _user_mute} = User.unmute(user.id, muted_user.id) + + refute User.mutes?(user, muted_user) + refute User.muted_notifications?(user, muted_user) + end + test "it mutes user without notifications" do user = insert(:user) muted_user = insert(:user) diff --git a/test/web/common_api/common_api_test.exs b/test/web/common_api/common_api_test.exs index bf4353a57..45ab1e0bd 100644 --- a/test/web/common_api/common_api_test.exs +++ b/test/web/common_api/common_api_test.exs @@ -913,6 +913,12 @@ test "remove mute", %{user: user, activity: activity} do refute CommonAPI.thread_muted?(user, activity) end + test "remove mute by ids", %{user: user, activity: activity} do + CommonAPI.add_mute(user, activity) + {:ok, _} = CommonAPI.remove_mute(user.id, activity.id) + refute CommonAPI.thread_muted?(user, activity) + end + test "check that mutes can't be duplicate", %{user: user, activity: activity} do CommonAPI.add_mute(user, activity) {:error, _} = CommonAPI.add_mute(user, activity) From b0bd81ef7187ddf5b4e6cfbc1780fc60b65798c6 Mon Sep 17 00:00:00 2001 From: Roman Chvanikov Date: Sun, 20 Sep 2020 20:58:32 +0300 Subject: [PATCH 012/362] Update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5a7e27fd3..9fd5f9efe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Added - Experimental websocket-based federation between Pleroma instances. +- User and conversation mutes can now auto-expire if `expires_in` parameter was given while adding the mute. ### Changed From a3964b373e696301dae0e432983f55d22f055c5f Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Thu, 8 Oct 2020 15:46:03 -0500 Subject: [PATCH 013/362] Aliases: move changelog entry --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 97908caf7..6107ac07e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Mix tasks for controlling user account confirmation status in bulk (`mix pleroma.user confirm_all` and `mix pleroma.user unconfirm_all`) - Mix task for sending confirmation emails to all unconfirmed users (`mix pleroma.email send_confirmation_mails`) - Mix task option for force-unfollowing relays +- Ability to set ActivityPub aliases for follower migration. ### Changed @@ -182,7 +183,6 @@ switched to a new configuration mechanism, however it was not officially removed - Support pagination in emoji packs API (for packs and for files in pack) - Support for viewing instances favicons next to posts and accounts - Added Pleroma.Upload.Filter.Exiftool as an alternate EXIF stripping mechanism targeting GPS/location metadata. -- Ability to set ActivityPub aliases for follower migration. - "By approval" registrations mode. - Configuration: Added `:welcome` settings for the welcome message to newly registered users. You can send a welcome message as a direct message, chat or email. - Ability to hide favourites and emoji reactions in the API with `[:instance, :show_reactions]` config. From 5ec7d88b77360ed78f75be6b1f94895c3f602972 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Thu, 8 Oct 2020 16:33:47 -0500 Subject: [PATCH 014/362] Aliases: fix URL regex --- lib/pleroma/user.ex | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index e0252c8ee..d66c92b14 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -51,8 +51,7 @@ defmodule Pleroma.User do # credo:disable-for-next-line Credo.Check.Readability.MaxLineLength @email_regex ~r/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/ - # credo:disable-for-next-line Credo.Check.Readability.MaxLineLength - @url_regex ~r/https?:\/\/[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&\/=]*)/ + @url_regex ~r/^https?:\/\/[^\s]{1,256}$/ @strict_local_nickname_regex ~r/^[a-zA-Z\d]+$/ @extended_local_nickname_regex ~r/^[a-zA-Z\d_-]+$/ From b2fed59209a92624884df38a477837cba9a8dbd9 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sun, 11 Oct 2020 18:52:35 -0500 Subject: [PATCH 015/362] Handle User.post_register_action/1 in steps --- lib/pleroma/user.ex | 30 +++++++++++++++++-- .../web/twitter_api/twitter_api_controller.ex | 3 +- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 09ea80793..3f40ac9b3 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -773,12 +773,37 @@ def register(%Ecto.Changeset{} = changeset) do end def post_register_action(%User{} = user) do + instance_config = + Config.get(:instance) + |> Enum.into(%{}) + + do_post_register_action(user, instance_config) + end + + defp do_post_register_action(%User{confirmation_pending: true} = user, %{ + account_activation_required: true + }) do + with {:ok, _} <- try_send_confirmation_email(user) do + {:ok, user} + end + end + + defp do_post_register_action(%User{approval_pending: true} = user, %{ + account_approval_required: true + }) do + # TODO: Send approval explanation email + {:ok, user} + end + + defp do_post_register_action( + %User{approval_pending: false, confirmation_pending: false} = user, + _instance_config + ) do with {:ok, user} <- autofollow_users(user), {:ok, user} <- set_cache(user), {:ok, _} <- send_welcome_email(user), {:ok, _} <- send_welcome_message(user), - {:ok, _} <- send_welcome_chat_message(user), - {:ok, _} <- try_send_confirmation_email(user) do + {:ok, _} <- send_welcome_chat_message(user) do {:ok, user} end end @@ -1570,6 +1595,7 @@ def approve(users) when is_list(users) do def approve(%User{} = user) do change(user, approval_pending: false) |> update_and_set_cache() + |> post_register_action() end def update_notification_settings(%User{} = user, settings) do diff --git a/lib/pleroma/web/twitter_api/twitter_api_controller.ex b/lib/pleroma/web/twitter_api/twitter_api_controller.ex index c2de26b0b..25dad547c 100644 --- a/lib/pleroma/web/twitter_api/twitter_api_controller.ex +++ b/lib/pleroma/web/twitter_api/twitter_api_controller.ex @@ -34,7 +34,8 @@ def confirm_email(conn, %{"user_id" => uid, "token" => token}) do {:ok, _} <- user |> User.confirmation_changeset(need_confirmation: false) - |> User.update_and_set_cache() do + |> User.update_and_set_cache() + |> User.post_register_action() do redirect(conn, to: "/") end end From c69b20540958b4de9cc4fd66595d43f26bcd5fd1 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sun, 11 Oct 2020 19:25:34 -0500 Subject: [PATCH 016/362] Registration: user state is separate from instance state --- lib/pleroma/user.ex | 21 +++------------------ 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 3f40ac9b3..3a4f031b1 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -772,33 +772,18 @@ def register(%Ecto.Changeset{} = changeset) do end end - def post_register_action(%User{} = user) do - instance_config = - Config.get(:instance) - |> Enum.into(%{}) - - do_post_register_action(user, instance_config) - end - - defp do_post_register_action(%User{confirmation_pending: true} = user, %{ - account_activation_required: true - }) do + def post_register_action(%User{confirmation_pending: true} = user) do with {:ok, _} <- try_send_confirmation_email(user) do {:ok, user} end end - defp do_post_register_action(%User{approval_pending: true} = user, %{ - account_approval_required: true - }) do + def post_register_action(%User{approval_pending: true} = user) do # TODO: Send approval explanation email {:ok, user} end - defp do_post_register_action( - %User{approval_pending: false, confirmation_pending: false} = user, - _instance_config - ) do + def post_register_action(%User{approval_pending: false, confirmation_pending: false} = user) do with {:ok, user} <- autofollow_users(user), {:ok, user} <- set_cache(user), {:ok, _} <- send_welcome_email(user), From 28005563f00028981cf516cceb16c2b55bd0e97c Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sun, 11 Oct 2020 20:50:09 -0500 Subject: [PATCH 017/362] Send approval pending email during registration --- lib/pleroma/emails/user_email.ex | 13 +++++++++++++ lib/pleroma/user.ex | 6 +++++- test/emails/user_email_test.exs | 11 +++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/emails/user_email.ex b/lib/pleroma/emails/user_email.ex index 1d8c72ae9..831e5464f 100644 --- a/lib/pleroma/emails/user_email.ex +++ b/lib/pleroma/emails/user_email.ex @@ -93,6 +93,19 @@ def account_confirmation_email(user) do |> html_body(html_body) 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.

+ """ + + new() + |> to(recipient(user)) + |> from(sender()) + |> subject("Your account is awaiting approval") + |> html_body(html_body) + end + @doc """ Email used in digest email notifications Includes Mentions and New Followers data diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 3a4f031b1..cde9ff0eb 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -779,7 +779,11 @@ def post_register_action(%User{confirmation_pending: true} = user) do end def post_register_action(%User{approval_pending: true} = user) do - # TODO: Send approval explanation email + # Send approval pending email + user + |> Pleroma.Emails.UserEmail.approval_pending_email() + |> Pleroma.Emails.Mailer.deliver_async() + {:ok, user} end diff --git a/test/emails/user_email_test.exs b/test/emails/user_email_test.exs index a75623bb4..a214e59a7 100644 --- a/test/emails/user_email_test.exs +++ b/test/emails/user_email_test.exs @@ -45,4 +45,15 @@ test "build account confirmation email" do assert email.html_body =~ Router.Helpers.confirm_email_url(Endpoint, :confirm_email, user.id, "conf-token") end + + test "build approval pending email" do + config = Pleroma.Config.get(:instance) + user = insert(:user) + email = UserEmail.approval_pending_email(user) + + assert email.from == {config[:name], config[:notify_email]} + assert email.to == [{user.name, user.email}] + assert email.subject == "Your account is awaiting approval" + assert email.html_body =~ "Awaiting Approval" + end end From 521e965884d916c21d76ff12544e678b7fcdb1d4 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sun, 11 Oct 2020 21:38:01 -0500 Subject: [PATCH 018/362] Registration tests --- lib/pleroma/user.ex | 8 +++++--- .../web/twitter_api/twitter_api_controller.ex | 4 ++-- test/user_test.exs | 16 ++++++++++++++++ 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index cde9ff0eb..ae2fe93fc 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -1582,9 +1582,11 @@ def approve(users) when is_list(users) do end def approve(%User{} = user) do - change(user, approval_pending: false) - |> update_and_set_cache() - |> post_register_action() + with chg <- change(user, approval_pending: false), + {:ok, user} <- update_and_set_cache(chg) do + post_register_action(user) + {:ok, user} + end end def update_notification_settings(%User{} = user, settings) do diff --git a/lib/pleroma/web/twitter_api/twitter_api_controller.ex b/lib/pleroma/web/twitter_api/twitter_api_controller.ex index 25dad547c..6961118ca 100644 --- a/lib/pleroma/web/twitter_api/twitter_api_controller.ex +++ b/lib/pleroma/web/twitter_api/twitter_api_controller.ex @@ -34,8 +34,8 @@ def confirm_email(conn, %{"user_id" => uid, "token" => token}) do {:ok, _} <- user |> User.confirmation_changeset(need_confirmation: false) - |> User.update_and_set_cache() - |> User.post_register_action() do + |> User.update_and_set_cache() do + User.post_register_action(user) redirect(conn, to: "/") end end diff --git a/test/user_test.exs b/test/user_test.exs index d506f7047..2d3a6564b 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -517,6 +517,22 @@ test "it sends a confirm email" do |> assert_email_sent() end + test "sends a pending approval email" do + clear_config([:instance, :account_approval_required], true) + + {:ok, user} = + User.register_changeset(%User{}, @full_user_data) + |> User.register() + + ObanHelpers.perform_all() + + assert_email_sent( + from: Pleroma.Config.Helpers.sender(), + to: {user.name, user.email}, + subject: "Your account is awaiting approval" + ) + end + test "it requires an email, name, nickname and password, bio is optional when account_activation_required is enabled" do Pleroma.Config.put([:instance, :account_activation_required], true) From bb8c0614efa978ad33d15fdafd452792180a1c15 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sun, 11 Oct 2020 21:44:22 -0500 Subject: [PATCH 019/362] Move admin approval email logic into User.post_register_action/1 --- lib/pleroma/user.ex | 11 ++++++++++- lib/pleroma/web/twitter_api/twitter_api.ex | 13 ------------- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index ae2fe93fc..b56620c54 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -779,11 +779,20 @@ def post_register_action(%User{confirmation_pending: true} = user) do end def post_register_action(%User{approval_pending: true} = user) do - # Send approval pending email + # Send approval pending email to user user |> Pleroma.Emails.UserEmail.approval_pending_email() |> Pleroma.Emails.Mailer.deliver_async() + # Notify admins + all_superusers() + |> Enum.filter(fn user -> not is_nil(user.email) end) + |> Enum.each(fn superuser -> + superuser + |> Pleroma.Emails.AdminEmail.new_unapproved_registration(user) + |> Pleroma.Emails.Mailer.deliver_async() + end) + {:ok, user} end diff --git a/lib/pleroma/web/twitter_api/twitter_api.ex b/lib/pleroma/web/twitter_api/twitter_api.ex index 5d7948507..8e20b0d55 100644 --- a/lib/pleroma/web/twitter_api/twitter_api.ex +++ b/lib/pleroma/web/twitter_api/twitter_api.ex @@ -45,7 +45,6 @@ defp create_user(params, opts) do case User.register(changeset) do {:ok, user} -> - maybe_notify_admins(user) {:ok, user} {:error, changeset} -> @@ -58,18 +57,6 @@ defp create_user(params, opts) do end end - defp maybe_notify_admins(%User{} = account) do - if Pleroma.Config.get([:instance, :account_approval_required]) do - User.all_superusers() - |> Enum.filter(fn user -> not is_nil(user.email) end) - |> Enum.each(fn superuser -> - superuser - |> Pleroma.Emails.AdminEmail.new_unapproved_registration(account) - |> Pleroma.Emails.Mailer.deliver_async() - end) - end - end - def password_reset(nickname_or_email) do with true <- is_binary(nickname_or_email), %User{local: true, email: email, deactivated: false} = user when is_binary(email) <- From 9ddc292ca82ae14754a4a2d71105832eddbb126e Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Mon, 12 Oct 2020 15:24:53 -0500 Subject: [PATCH 020/362] TwitterAPI: test pending approval user email --- test/web/twitter_api/twitter_api_test.exs | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/test/web/twitter_api/twitter_api_test.exs b/test/web/twitter_api/twitter_api_test.exs index 20a45cb6f..4a418dee3 100644 --- a/test/web/twitter_api/twitter_api_test.exs +++ b/test/web/twitter_api/twitter_api_test.exs @@ -80,13 +80,9 @@ test "it sends confirmation email if :account_activation_required is specified i end test "it sends an admin email if :account_approval_required is specified in instance config" do - admin = insert(:user, is_admin: true) - setting = Pleroma.Config.get([:instance, :account_approval_required]) + clear_config([:instance, :account_approval_required], true) - unless setting do - Pleroma.Config.put([:instance, :account_approval_required], true) - on_exit(fn -> Pleroma.Config.put([:instance, :account_approval_required], setting) end) - end + admin = insert(:user, is_admin: true) data = %{ :username => "lain", @@ -103,15 +99,24 @@ test "it sends an admin email if :account_approval_required is specified in inst assert user.approval_pending - email = Pleroma.Emails.AdminEmail.new_unapproved_registration(admin, user) + user_email = Pleroma.Emails.UserEmail.approval_pending_email(user) + admin_email = Pleroma.Emails.AdminEmail.new_unapproved_registration(admin, user) notify_email = Pleroma.Config.get([:instance, :notify_email]) instance_name = Pleroma.Config.get([:instance, :name]) + # User approval email + Swoosh.TestAssertions.assert_email_sent( + from: {instance_name, notify_email}, + to: {user.name, user.email}, + html_body: user_email.html_body + ) + + # Admin email Swoosh.TestAssertions.assert_email_sent( from: {instance_name, notify_email}, to: {admin.name, admin.email}, - html_body: email.html_body + html_body: admin_email.html_body ) end From 6ebec50df643325a524926858371d43f44e4c6da Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Mon, 12 Oct 2020 16:32:34 -0500 Subject: [PATCH 021/362] Refactor User.confirm/1, add more tests --- lib/pleroma/user.ex | 16 +++++ .../web/twitter_api/twitter_api_controller.ex | 6 +- test/user_test.exs | 72 +++++++++++++++++++ 3 files changed, 89 insertions(+), 5 deletions(-) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index b56620c54..4329fde12 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -1598,6 +1598,22 @@ def approve(%User{} = user) do end end + def confirm(users) when is_list(users) do + Repo.transaction(fn -> + Enum.map(users, fn user -> + with {:ok, user} <- confirm(user), do: user + end) + end) + end + + def confirm(%User{} = user) do + with chg <- confirmation_changeset(user, need_confirmation: false), + {:ok, user} <- update_and_set_cache(chg) do + post_register_action(user) + {:ok, user} + end + end + def update_notification_settings(%User{} = user, settings) do user |> cast(%{notification_settings: settings}, []) diff --git a/lib/pleroma/web/twitter_api/twitter_api_controller.ex b/lib/pleroma/web/twitter_api/twitter_api_controller.ex index 6961118ca..b12606472 100644 --- a/lib/pleroma/web/twitter_api/twitter_api_controller.ex +++ b/lib/pleroma/web/twitter_api/twitter_api_controller.ex @@ -31,11 +31,7 @@ defmodule Pleroma.Web.TwitterAPI.Controller do def confirm_email(conn, %{"user_id" => uid, "token" => token}) do with %User{} = user <- User.get_cached_by_id(uid), true <- user.local and user.confirmation_pending and user.confirmation_token == token, - {:ok, _} <- - user - |> User.confirmation_changeset(need_confirmation: false) - |> User.update_and_set_cache() do - User.post_register_action(user) + {:ok, _} <- User.confirm(user) do redirect(conn, to: "/") end end diff --git a/test/user_test.exs b/test/user_test.exs index 2d3a6564b..e83275fa5 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -1352,6 +1352,78 @@ test "approves a list of users" do assert false == user.approval_pending end) end + + test "it sends welcome email if it is set" do + clear_config([:welcome, :email, :enabled], true) + clear_config([:welcome, :email, :sender], "tester@test.me") + + user = insert(:user, approval_pending: true) + welcome_user = insert(:user, email: "tester@test.me") + instance_name = Pleroma.Config.get([:instance, :name]) + + User.approve(user) + + ObanHelpers.perform_all() + + assert_email_sent( + from: {instance_name, welcome_user.email}, + to: {user.name, user.email}, + html_body: "Welcome to #{instance_name}" + ) + end + end + + describe "confirm" do + test "confirms a user" do + user = insert(:user, confirmation_pending: true) + assert true == user.confirmation_pending + {:ok, user} = User.confirm(user) + assert false == user.confirmation_pending + end + + test "confirms a list of users" do + unconfirmed_users = [ + insert(:user, confirmation_pending: true), + insert(:user, confirmation_pending: true), + insert(:user, confirmation_pending: true) + ] + + {:ok, users} = User.confirm(unconfirmed_users) + + assert Enum.count(users) == 3 + + Enum.each(users, fn user -> + assert false == user.confirmation_pending + end) + end + + test "sends approval emails when `approval_pending: true`" do + admin = insert(:user, is_admin: true) + user = insert(:user, confirmation_pending: true, approval_pending: true) + User.confirm(user) + + ObanHelpers.perform_all() + + user_email = Pleroma.Emails.UserEmail.approval_pending_email(user) + admin_email = Pleroma.Emails.AdminEmail.new_unapproved_registration(admin, user) + + notify_email = Pleroma.Config.get([:instance, :notify_email]) + instance_name = Pleroma.Config.get([:instance, :name]) + + # User approval email + assert_email_sent( + from: {instance_name, notify_email}, + to: {user.name, user.email}, + html_body: user_email.html_body + ) + + # Admin email + assert_email_sent( + from: {instance_name, notify_email}, + to: {admin.name, admin.email}, + html_body: admin_email.html_body + ) + end end describe "delete" do From cb29769a224104882ed7572087f8cd2db48475ef Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Mon, 12 Oct 2020 16:42:59 -0500 Subject: [PATCH 022/362] Make User.confirm/1 and User.approve/1 idempotent --- lib/pleroma/user.ex | 8 ++++++-- test/user_test.exs | 20 ++++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 4329fde12..c6767cfca 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -1590,7 +1590,7 @@ def approve(users) when is_list(users) do end) end - def approve(%User{} = user) do + def approve(%User{approval_pending: true} = user) do with chg <- change(user, approval_pending: false), {:ok, user} <- update_and_set_cache(chg) do post_register_action(user) @@ -1598,6 +1598,8 @@ def approve(%User{} = user) do end end + def approve(%User{} = user), do: {:ok, user} + def confirm(users) when is_list(users) do Repo.transaction(fn -> Enum.map(users, fn user -> @@ -1606,7 +1608,7 @@ def confirm(users) when is_list(users) do end) end - def confirm(%User{} = user) do + def confirm(%User{confirmation_pending: true} = user) do with chg <- confirmation_changeset(user, need_confirmation: false), {:ok, user} <- update_and_set_cache(chg) do post_register_action(user) @@ -1614,6 +1616,8 @@ def confirm(%User{} = user) do end end + def confirm(%User{} = user), do: {:ok, user} + def update_notification_settings(%User{} = user, settings) do user |> cast(%{notification_settings: settings}, []) diff --git a/test/user_test.exs b/test/user_test.exs index e83275fa5..18a143919 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -1371,6 +1371,17 @@ test "it sends welcome email if it is set" do html_body: "Welcome to #{instance_name}" ) end + + test "approving an approved user does not trigger post-register actions" do + clear_config([:welcome, :email, :enabled], true) + + user = insert(:user, approval_pending: false) + User.approve(user) + + ObanHelpers.perform_all() + + assert_no_email_sent() + end end describe "confirm" do @@ -1424,6 +1435,15 @@ test "sends approval emails when `approval_pending: true`" do html_body: admin_email.html_body ) end + + test "confirming a confirmed user does not trigger post-register actions" do + user = insert(:user, confirmation_pending: false, approval_pending: true) + User.confirm(user) + + ObanHelpers.perform_all() + + assert_no_email_sent() + end end describe "delete" do From 06934b820e739f8a5a598bb807235b621ca6e2ba Mon Sep 17 00:00:00 2001 From: Ali Riza Keles Date: Mon, 12 Oct 2020 23:20:10 +0100 Subject: [PATCH 023/362] Add ejabberd auth document --- docs/configuration/howto_ejabberd.md | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 docs/configuration/howto_ejabberd.md diff --git a/docs/configuration/howto_ejabberd.md b/docs/configuration/howto_ejabberd.md new file mode 100644 index 000000000..6940acbda --- /dev/null +++ b/docs/configuration/howto_ejabberd.md @@ -0,0 +1,9 @@ +# Configuring Ejabberd (XMPP Server) to use Pleroma for authentication + +If you want to give your Pleroma users an XMPP (chat) account, you can configure [Ejabberd](https://github.com/processone/ejabberd) to use your Pleroma server for user authentication, automatically giving every local user an XMPP account. + +In general, you just have to follow the configuration described at [https://docs.ejabberd.im/admin/configuration/authentication/#external-script](https://docs.ejabberd.im/admin/configuration/authentication/#external-script). Please read this section carefully. + +To get the external script please go to [https://github.com/alirizakeles/ejabberd-pleroma-auth](https://github.com/alirizakeles/ejabberd-pleroma-auth) and follow the steps described in README. + +After restarting your Ejabberd server, your users should now be able to connect with their Pleroma credentials. From 66e00ace7c0708f2f9361bc6e1008ccea08cb6ef Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Mon, 12 Oct 2020 17:21:08 -0500 Subject: [PATCH 024/362] Refactor User.post_register_action/1 emails --- lib/pleroma/user.ex | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index c6767cfca..0978cc02c 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -779,21 +779,10 @@ def post_register_action(%User{confirmation_pending: true} = user) do end def post_register_action(%User{approval_pending: true} = user) do - # Send approval pending email to user - user - |> Pleroma.Emails.UserEmail.approval_pending_email() - |> Pleroma.Emails.Mailer.deliver_async() - - # Notify admins - all_superusers() - |> Enum.filter(fn user -> not is_nil(user.email) end) - |> Enum.each(fn superuser -> - superuser - |> Pleroma.Emails.AdminEmail.new_unapproved_registration(user) - |> Pleroma.Emails.Mailer.deliver_async() - end) - - {:ok, user} + with {:ok, _} <- send_user_approval_email(user), + {:ok, _} <- send_admin_approval_emails(user) do + {:ok, user} + end end def post_register_action(%User{approval_pending: false, confirmation_pending: false} = user) do @@ -806,6 +795,26 @@ def post_register_action(%User{approval_pending: false, confirmation_pending: fa end end + defp send_user_approval_email(user) do + user + |> Pleroma.Emails.UserEmail.approval_pending_email() + |> Pleroma.Emails.Mailer.deliver_async() + + {:ok, :enqueued} + end + + defp send_admin_approval_emails(user) do + all_superusers() + |> Enum.filter(fn user -> not is_nil(user.email) end) + |> Enum.each(fn superuser -> + superuser + |> Pleroma.Emails.AdminEmail.new_unapproved_registration(user) + |> Pleroma.Emails.Mailer.deliver_async() + end) + + {:ok, :enqueued} + end + def send_welcome_message(user) do if User.WelcomeMessage.enabled?() do User.WelcomeMessage.post_message(user) From 943f65c7399a03075cb6392ce89ae5403ab0c1a0 Mon Sep 17 00:00:00 2001 From: Ali Riza Keles Date: Tue, 13 Oct 2020 19:58:38 +0100 Subject: [PATCH 025/362] Include python script and description --- docs/configuration/howto_ejabberd.md | 129 ++++++++++++++++++++++++++- 1 file changed, 128 insertions(+), 1 deletion(-) diff --git a/docs/configuration/howto_ejabberd.md b/docs/configuration/howto_ejabberd.md index 6940acbda..520a0acbc 100644 --- a/docs/configuration/howto_ejabberd.md +++ b/docs/configuration/howto_ejabberd.md @@ -4,6 +4,133 @@ If you want to give your Pleroma users an XMPP (chat) account, you can configure In general, you just have to follow the configuration described at [https://docs.ejabberd.im/admin/configuration/authentication/#external-script](https://docs.ejabberd.im/admin/configuration/authentication/#external-script). Please read this section carefully. -To get the external script please go to [https://github.com/alirizakeles/ejabberd-pleroma-auth](https://github.com/alirizakeles/ejabberd-pleroma-auth) and follow the steps described in README. +Copy the script below to suitable path on your system and set owner and permissions. Also do not forget adjusting `PLEROMA_HOST` and `PLEROMA_PORT`, if necessary. + +```bash +cp pleroma_ejabberd_auth.py /etc/ejabberd/pleroma_ejabberd_auth.py +chown ejabberd /etc/ejabberd/pleroma_ejabberd_auth.py +chmod 700 /etc/ejabberd/pleroma_ejabberd_auth.py +``` + +Set external auth params in ejabberd.yaml file: + +```bash +auth_method: [external] +extauth_program: "python3 /etc/ejabberd/pleroma_ejabberd_auth.py" +extauth_instances: 3 +auth_use_cache: false +``` + +Restart / reload your ejabberd service. After restarting your Ejabberd server, your users should now be able to connect with their Pleroma credentials. + + +```python +import sys +import struct +import http.client +from base64 import b64encode +import logging + + +PLEROMA_HOST = "127.0.0.1" +PLEROMA_PORT = "4000" +AUTH_ENDPOINT = "/api/v1/accounts/verify_credentials" +USER_ENDPOINT = "/api/v1/accounts" +LOGFILE = "/var/log/ejabberd/pleroma_auth.log" + +logging.basicConfig(filename=LOGFILE, level=logging.INFO) + + +# Pleroma functions +def create_connection(): + return http.client.HTTPConnection(PLEROMA_HOST, PLEROMA_PORT) + + +def verify_credentials(user: str, password: str) -> bool: + user_pass_b64 = b64encode("{}:{}".format( + user, password).encode('utf-8')).decode("ascii") + params = {} + headers = { + "Authorization": "Basic {}".format(user_pass_b64) + } + + try: + conn = create_connection() + conn.request("GET", AUTH_ENDPOINT, params, headers) + + response = conn.getresponse() + if response.status == 200: + return True + + return False + except Exception as e: + logging.info("Can not connect: %s", str(e)) + return False + + +def does_user_exist(user: str) -> bool: + conn = create_connection() + conn.request("GET", "{}/{}".format(USER_ENDPOINT, user)) + + response = conn.getresponse() + if response.status == 200: + return True + + return False + + +def auth(username: str, server: str, password: str) -> bool: + return verify_credentials(username, password) + + +def isuser(username, server): + return does_user_exist(username) + + +def read(): + (pkt_size,) = struct.unpack('>H', bytes(sys.stdin.read(2), encoding='utf8')) + pkt = sys.stdin.read(pkt_size) + cmd = pkt.split(':')[0] + if cmd == 'auth': + username, server, password = pkt.split(':', 3)[1:] + write(auth(username, server, password)) + elif cmd == 'isuser': + username, server = pkt.split(':', 2)[1:] + write(isuser(username, server)) + elif cmd == 'setpass': + # u, s, p = pkt.split(':', 3)[1:] + write(False) + elif cmd == 'tryregister': + # u, s, p = pkt.split(':', 3)[1:] + write(False) + elif cmd == 'removeuser': + # u, s = pkt.split(':', 2)[1:] + write(False) + elif cmd == 'removeuser3': + # u, s, p = pkt.split(':', 3)[1:] + write(False) + else: + write(False) + + +def write(result): + if result: + sys.stdout.write('\x00\x02\x00\x01') + else: + sys.stdout.write('\x00\x02\x00\x00') + sys.stdout.flush() + + +if __name__ == "__main__": + logging.info("Starting pleroma ejabberd auth daemon...") + while True: + try: + read() + except Exception as e: + logging.info( + "Error while processing data from ejabberd %s", str(e)) + pass + +``` \ No newline at end of file From dc38dc847207e4724265fbeb111d0a236b75f93f Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Tue, 13 Oct 2020 21:52:06 -0500 Subject: [PATCH 026/362] Replace User.toggle_confirmation/1 with User.confirm/1, fixes #2235 --- CHANGELOG.md | 1 + docs/administration/CLI_tasks/user.md | 4 ++-- lib/mix/tasks/pleroma/user.ex | 4 ++-- lib/pleroma/user.ex | 12 ------------ .../controllers/admin_api_controller.ex | 2 +- test/mix/tasks/pleroma/user_test.exs | 14 +++++++------- test/pleroma/user_test.exs | 18 ------------------ 7 files changed, 13 insertions(+), 42 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8fc1750d1..c546dd0bf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Users with the `discoverable` field set to false will not show up in searches. - Minimum lifetime for ephmeral activities changed to 10 minutes and made configurable (`:min_lifetime` option). - Introduced optional dependencies on `ffmpeg`, `ImageMagick`, `exiftool` software packages. Please refer to `docs/installation/optional/media_graphics_packages.md`. +- Changed `mix pleroma.user toggle_confirmed` to `mix pleroma.user confirm` ### Added - Media preview proxy (requires `ffmpeg` and `ImageMagick` to be installed and media proxy to be enabled; see `:media_preview_proxy` config for more details). diff --git a/docs/administration/CLI_tasks/user.md b/docs/administration/CLI_tasks/user.md index c64ed4f22..b57dce0e7 100644 --- a/docs/administration/CLI_tasks/user.md +++ b/docs/administration/CLI_tasks/user.md @@ -264,13 +264,13 @@ === "OTP" ```sh - ./bin/pleroma_ctl user toggle_confirmed + ./bin/pleroma_ctl user confirm ``` === "From Source" ```sh - mix pleroma.user toggle_confirmed + mix pleroma.user confirm ``` ## Set confirmation status for all regular active users diff --git a/lib/mix/tasks/pleroma/user.ex b/lib/mix/tasks/pleroma/user.ex index e06262804..c454f1d28 100644 --- a/lib/mix/tasks/pleroma/user.ex +++ b/lib/mix/tasks/pleroma/user.ex @@ -345,11 +345,11 @@ def run(["delete_activities", nickname]) do end end - def run(["toggle_confirmed", nickname]) do + def run(["confirm", nickname]) do start_pleroma() with %User{} = user <- User.get_cached_by_nickname(nickname) do - {:ok, user} = User.toggle_confirmation(user) + {:ok, user} = User.confirm(user) message = if user.confirmation_pending, do: "needs", else: "doesn't need" diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 0978cc02c..0dabb2a1e 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -2113,18 +2113,6 @@ def touch_last_digest_emailed_at(user) do updated_user end - @spec toggle_confirmation(User.t()) :: {:ok, User.t()} | {:error, Changeset.t()} - def toggle_confirmation(%User{} = user) do - user - |> confirmation_changeset(need_confirmation: !user.confirmation_pending) - |> update_and_set_cache() - end - - @spec toggle_confirmation([User.t()]) :: [{:ok, User.t()} | {:error, Changeset.t()}] - def toggle_confirmation(users) do - Enum.map(users, &toggle_confirmation/1) - end - @spec need_confirmation(User.t(), boolean()) :: {:ok, User.t()} | {:error, Changeset.t()} def need_confirmation(%User{} = user, bool) do user 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 bdd3e195d..c2bd441ee 100644 --- a/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex +++ b/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex @@ -655,7 +655,7 @@ def reload_emoji(conn, _params) do def confirm_email(%{assigns: %{user: admin}} = conn, %{"nicknames" => nicknames}) do users = Enum.map(nicknames, &User.get_cached_by_nickname/1) - User.toggle_confirmation(users) + User.confirm(users) ModerationLog.insert_log(%{actor: admin, subject: users, action: "confirm_email"}) diff --git a/test/mix/tasks/pleroma/user_test.exs b/test/mix/tasks/pleroma/user_test.exs index b8c423c48..f58690dbe 100644 --- a/test/mix/tasks/pleroma/user_test.exs +++ b/test/mix/tasks/pleroma/user_test.exs @@ -457,24 +457,24 @@ test "it prints an error message when user is not exist" do end end - describe "running toggle_confirmed" do + describe "running confirm" do test "user is confirmed" do %{id: id, nickname: nickname} = insert(:user, confirmation_pending: false) - assert :ok = Mix.Tasks.Pleroma.User.run(["toggle_confirmed", nickname]) + assert :ok = Mix.Tasks.Pleroma.User.run(["confirm", nickname]) assert_received {:mix_shell, :info, [message]} - assert message == "#{nickname} needs confirmation." + assert message == "#{nickname} doesn't need confirmation." user = Repo.get(User, id) - assert user.confirmation_pending - assert user.confirmation_token + refute user.confirmation_pending + refute user.confirmation_token end test "user is not confirmed" do %{id: id, nickname: nickname} = insert(:user, confirmation_pending: true, confirmation_token: "some token") - assert :ok = Mix.Tasks.Pleroma.User.run(["toggle_confirmed", nickname]) + assert :ok = Mix.Tasks.Pleroma.User.run(["confirm", nickname]) assert_received {:mix_shell, :info, [message]} assert message == "#{nickname} doesn't need confirmation." @@ -484,7 +484,7 @@ test "user is not confirmed" do end test "it prints an error message when user is not exist" do - Mix.Tasks.Pleroma.User.run(["toggle_confirmed", "foo"]) + Mix.Tasks.Pleroma.User.run(["confirm", "foo"]) assert_received {:mix_shell, :error, [message]} assert message =~ "No local user" diff --git a/test/pleroma/user_test.exs b/test/pleroma/user_test.exs index 18a143919..2c8ad2089 100644 --- a/test/pleroma/user_test.exs +++ b/test/pleroma/user_test.exs @@ -1940,24 +1940,6 @@ test "Only includes users with no read notifications" do end end - describe "toggle_confirmation/1" do - test "if user is confirmed" do - user = insert(:user, confirmation_pending: false) - {:ok, user} = User.toggle_confirmation(user) - - assert user.confirmation_pending - assert user.confirmation_token - end - - test "if user is unconfirmed" do - user = insert(:user, confirmation_pending: true, confirmation_token: "some token") - {:ok, user} = User.toggle_confirmation(user) - - refute user.confirmation_pending - refute user.confirmation_token - end - end - describe "ensure_keys_present" do test "it creates keys for a user and stores them in info" do user = insert(:user) From 4f79bbbc31c10c1d55c9fee4002f36ef16b95dbf Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Fri, 2 Oct 2020 21:00:50 +0400 Subject: [PATCH 027/362] Add local-only statuses --- docs/API/differences_in_mastoapi_responses.md | 2 + lib/pleroma/activity.ex | 10 ++ lib/pleroma/web/activity_pub/builder.ex | 3 + .../object_validators/announce_validator.ex | 7 +- lib/pleroma/web/activity_pub/pipeline.ex | 2 +- lib/pleroma/web/activity_pub/utils.ex | 3 +- lib/pleroma/web/activity_pub/visibility.ex | 6 +- .../api_spec/operations/status_operation.ex | 4 + lib/pleroma/web/common_api.ex | 25 +--- lib/pleroma/web/common_api/activity_draft.ex | 77 +++++------ lib/pleroma/web/common_api/utils.ex | 113 +++++++--------- .../web/mastodon_api/views/status_view.ex | 3 +- test/pleroma/web/common_api/utils_test.exs | 94 ++++++++----- test/pleroma/web/common_api_test.exs | 124 ++++++++++++++++++ .../controllers/status_controller_test.exs | 19 +++ .../mastodon_api/views/status_view_test.exs | 3 +- 16 files changed, 332 insertions(+), 163 deletions(-) diff --git a/docs/API/differences_in_mastoapi_responses.md b/docs/API/differences_in_mastoapi_responses.md index 38865dc68..1e932d908 100644 --- a/docs/API/differences_in_mastoapi_responses.md +++ b/docs/API/differences_in_mastoapi_responses.md @@ -28,6 +28,7 @@ Has these additional fields under the `pleroma` object: - `thread_muted`: true if the thread the post belongs to is muted - `emoji_reactions`: A list with emoji / reaction maps. The format is `{name: "☕", count: 1, me: true}`. Contains no information about the reacting users, for that use the `/statuses/:id/reactions` endpoint. - `parent_visible`: If the parent of this post is visible to the user or not. +- `local_only`: true for local-only, non-federated posts. ## Media Attachments @@ -154,6 +155,7 @@ Additional parameters can be added to the JSON body/Form data: - `visibility`: string, besides standard MastoAPI values (`direct`, `private`, `unlisted` or `public`) it can be used to address a List by setting it to `list:LIST_ID`. - `expires_in`: The number of seconds the posted activity should expire in. When a posted activity expires it will be deleted from the server, and a delete request for it will be federated. This needs to be longer than an hour. - `in_reply_to_conversation_id`: Will reply to a given conversation, addressing only the people who are part of the recipient set of that conversation. Sets the visibility to `direct`. +- `local_only`: boolean, if set to `true` the post won't be federated. ## GET `/api/v1/statuses` diff --git a/lib/pleroma/activity.ex b/lib/pleroma/activity.ex index 17af04257..789655ba2 100644 --- a/lib/pleroma/activity.ex +++ b/lib/pleroma/activity.ex @@ -18,6 +18,8 @@ defmodule Pleroma.Activity do import Ecto.Changeset import Ecto.Query + require Pleroma.Constants + @type t :: %__MODULE__{} @type actor :: String.t() @@ -343,4 +345,12 @@ def pinned_by_actor?(%Activity{} = activity) do actor = user_actor(activity) activity.id in actor.pinned_activities end + + def local_only?(activity) do + recipients = Enum.concat(activity.data["to"], Map.get(activity.data, "cc", [])) + public = Pleroma.Constants.as_public() + local = Pleroma.Web.base_url() <> "/#Public" + + Enum.member?(recipients, local) and not Enum.member?(recipients, public) + end end diff --git a/lib/pleroma/web/activity_pub/builder.ex b/lib/pleroma/web/activity_pub/builder.ex index 298aff6b7..236a5b9d1 100644 --- a/lib/pleroma/web/activity_pub/builder.ex +++ b/lib/pleroma/web/activity_pub/builder.ex @@ -222,6 +222,9 @@ def announce(actor, object, options \\ []) do actor.ap_id == Relay.ap_id() -> [actor.follower_address] + public? and Pleroma.Activity.local_only?(object) -> + [actor.follower_address, object.data["actor"], Pleroma.Web.base_url() <> "/#Public"] + public? -> [actor.follower_address, object.data["actor"], Pleroma.Constants.as_public()] 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 6f757f49c..5a963fca7 100644 --- a/lib/pleroma/web/activity_pub/object_validators/announce_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/announce_validator.ex @@ -67,7 +67,12 @@ def validate_announcable(cng) do %Object{} = object <- Object.get_cached_by_ap_id(object), false <- Visibility.is_public?(object) do same_actor = object.data["actor"] == actor.ap_id - is_public = Pleroma.Constants.as_public() in (get_field(cng, :to) ++ get_field(cng, :cc)) + recipients = get_field(cng, :to) ++ get_field(cng, :cc) + local_public = Pleroma.Web.base_url() <> "/#Public" + + is_public = + Enum.member?(recipients, Pleroma.Constants.as_public()) or + Enum.member?(recipients, local_public) cond do same_actor && is_public -> diff --git a/lib/pleroma/web/activity_pub/pipeline.ex b/lib/pleroma/web/activity_pub/pipeline.ex index 2db86f116..559c8387e 100644 --- a/lib/pleroma/web/activity_pub/pipeline.ex +++ b/lib/pleroma/web/activity_pub/pipeline.ex @@ -55,7 +55,7 @@ defp maybe_federate(%Activity{} = activity, meta) do with {:ok, local} <- Keyword.fetch(meta, :local) do do_not_federate = meta[:do_not_federate] || !Config.get([:instance, :federating]) - if !do_not_federate && local do + if !do_not_federate and local and not Activity.local_only?(activity) do activity = if object = Keyword.get(meta, :object_data) do %{activity | data: Map.put(activity.data, "object", object)} diff --git a/lib/pleroma/web/activity_pub/utils.ex b/lib/pleroma/web/activity_pub/utils.ex index 713b0ca1f..faf3bea00 100644 --- a/lib/pleroma/web/activity_pub/utils.ex +++ b/lib/pleroma/web/activity_pub/utils.ex @@ -175,7 +175,8 @@ def maybe_federate(%Activity{local: true, data: %{"type" => type}} = activity) d outgoing_blocks = Config.get([:activitypub, :outgoing_blocks]) with true <- Config.get!([:instance, :federating]), - true <- type != "Block" || outgoing_blocks do + true <- type != "Block" || outgoing_blocks, + false <- Activity.local_only?(activity) do Pleroma.Web.Federator.publish(activity) end diff --git a/lib/pleroma/web/activity_pub/visibility.ex b/lib/pleroma/web/activity_pub/visibility.ex index 5c349bb7a..3654b489b 100644 --- a/lib/pleroma/web/activity_pub/visibility.ex +++ b/lib/pleroma/web/activity_pub/visibility.ex @@ -17,7 +17,11 @@ def is_public?(%Object{data: data}), do: is_public?(data) def is_public?(%Activity{data: %{"type" => "Move"}}), do: true def is_public?(%Activity{data: data}), do: is_public?(data) def is_public?(%{"directMessage" => true}), do: false - def is_public?(data), do: Utils.label_in_message?(Pleroma.Constants.as_public(), data) + + def is_public?(data) do + Utils.label_in_message?(Pleroma.Constants.as_public(), data) or + Utils.label_in_message?(Pleroma.Web.base_url() <> "/#Public", data) + end def is_private?(activity) do with false <- is_public?(activity), diff --git a/lib/pleroma/web/api_spec/operations/status_operation.ex b/lib/pleroma/web/api_spec/operations/status_operation.ex index d7ebde6f6..e989e4f5f 100644 --- a/lib/pleroma/web/api_spec/operations/status_operation.ex +++ b/lib/pleroma/web/api_spec/operations/status_operation.ex @@ -475,6 +475,10 @@ defp create_request do type: :string, description: "Will reply to a given conversation, addressing only the people who are part of the recipient set of that conversation. Sets the visibility to `direct`." + }, + local_only: %Schema{ + type: :boolean, + description: "Post the status as local only" } }, example: %{ diff --git a/lib/pleroma/web/common_api.ex b/lib/pleroma/web/common_api.ex index 60a50b027..e5c66eea3 100644 --- a/lib/pleroma/web/common_api.ex +++ b/lib/pleroma/web/common_api.ex @@ -15,6 +15,7 @@ defmodule Pleroma.Web.CommonAPI do alias Pleroma.Web.ActivityPub.Pipeline alias Pleroma.Web.ActivityPub.Utils alias Pleroma.Web.ActivityPub.Visibility + alias Pleroma.Web.CommonAPI.ActivityDraft import Pleroma.Web.Gettext import Pleroma.Web.CommonAPI.Utils @@ -398,31 +399,13 @@ def check_expiry_date(expiry_str) do end def listen(user, data) do - visibility = Map.get(data, :visibility, "public") - - with {to, cc} <- get_to_and_cc(user, [], nil, visibility, nil), - listen_data <- - data - |> Map.take([:album, :artist, :title, :length]) - |> Map.new(fn {key, value} -> {to_string(key), value} end) - |> Map.put("type", "Audio") - |> Map.put("to", to) - |> Map.put("cc", cc) - |> Map.put("actor", user.ap_id), - {:ok, activity} <- - ActivityPub.listen(%{ - actor: user, - to: to, - object: listen_data, - context: Utils.generate_context_id(), - additional: %{"cc" => cc} - }) do - {:ok, activity} + with {:ok, draft} <- ActivityDraft.listen(user, data) do + ActivityPub.listen(draft.changes) end end def post(user, %{status: _} = data) do - with {:ok, draft} <- Pleroma.Web.CommonAPI.ActivityDraft.create(user, data) do + with {:ok, draft} <- ActivityDraft.create(user, data) do ActivityPub.create(draft.changes, draft.preview?) end end diff --git a/lib/pleroma/web/common_api/activity_draft.ex b/lib/pleroma/web/common_api/activity_draft.ex index 548f76609..aa2616d9e 100644 --- a/lib/pleroma/web/common_api/activity_draft.ex +++ b/lib/pleroma/web/common_api/activity_draft.ex @@ -22,7 +22,7 @@ defmodule Pleroma.Web.CommonAPI.ActivityDraft do in_reply_to_conversation: nil, visibility: nil, expires_at: nil, - poll: nil, + extra: nil, emoji: %{}, content_html: nil, mentions: [], @@ -35,9 +35,14 @@ defmodule Pleroma.Web.CommonAPI.ActivityDraft do preview?: false, changes: %{} - def create(user, params) do + def new(user, params) do %__MODULE__{user: user} |> put_params(params) + end + + def create(user, params) do + user + |> new(params) |> status() |> summary() |> with_valid(&attachments/1) @@ -57,6 +62,30 @@ def create(user, params) do |> validate() end + def listen(user, params) do + user + |> new(params) + |> visibility() + |> to_and_cc() + |> context() + |> listen_object() + |> with_valid(&changes/1) + |> validate() + end + + defp listen_object(draft) do + object = + draft.params + |> Map.take([:album, :artist, :title, :length]) + |> Map.new(fn {key, value} -> {to_string(key), value} end) + |> Map.put("type", "Audio") + |> Map.put("to", draft.to) + |> Map.put("cc", draft.cc) + |> Map.put("actor", draft.user.ap_id) + + %__MODULE__{draft | object: object} + end + defp put_params(draft, params) do params = Map.put_new(params, :in_reply_to_status_id, params[:in_reply_to_id]) %__MODULE__{draft | params: params} @@ -121,7 +150,7 @@ defp expires_at(draft) do defp poll(draft) do case Utils.make_poll_data(draft.params) do {:ok, {poll, poll_emoji}} -> - %__MODULE__{draft | poll: poll, emoji: Map.merge(draft.emoji, poll_emoji)} + %__MODULE__{draft | extra: poll, emoji: Map.merge(draft.emoji, poll_emoji)} {:error, message} -> add_error(draft, message) @@ -129,32 +158,18 @@ defp poll(draft) do end defp content(draft) do - {content_html, mentions, tags} = - Utils.make_content_html( - draft.status, - draft.attachments, - draft.params, - draft.visibility - ) + {content_html, mentioned_users, tags} = Utils.make_content_html(draft) + + mentions = + mentioned_users + |> Enum.map(fn {_, mentioned_user} -> mentioned_user.ap_id end) + |> Utils.get_addressed_users(draft.params[:to]) %__MODULE__{draft | content_html: content_html, mentions: mentions, tags: tags} end defp to_and_cc(draft) do - addressed_users = - draft.mentions - |> Enum.map(fn {_, mentioned_user} -> mentioned_user.ap_id end) - |> Utils.get_addressed_users(draft.params[:to]) - - {to, cc} = - Utils.get_to_and_cc( - draft.user, - addressed_users, - draft.in_reply_to, - draft.visibility, - draft.in_reply_to_conversation - ) - + {to, cc} = Utils.get_to_and_cc(draft) %__MODULE__{draft | to: to, cc: cc} end @@ -172,19 +187,7 @@ defp object(draft) do emoji = Map.merge(Pleroma.Emoji.Formatter.get_emoji_map(draft.full_payload), draft.emoji) object = - Utils.make_note_data( - draft.user.ap_id, - draft.to, - draft.context, - draft.content_html, - draft.attachments, - draft.in_reply_to, - draft.tags, - draft.summary, - draft.cc, - draft.sensitive, - draft.poll - ) + Utils.make_note_data(draft) |> Map.put("emoji", emoji) |> Map.put("source", draft.status) diff --git a/lib/pleroma/web/common_api/utils.ex b/lib/pleroma/web/common_api/utils.ex index 21f4d43e9..7c49c1fb1 100644 --- a/lib/pleroma/web/common_api/utils.ex +++ b/lib/pleroma/web/common_api/utils.ex @@ -16,6 +16,7 @@ defmodule Pleroma.Web.CommonAPI.Utils do alias Pleroma.User alias Pleroma.Web.ActivityPub.Utils alias Pleroma.Web.ActivityPub.Visibility + alias Pleroma.Web.CommonAPI.ActivityDraft alias Pleroma.Web.MediaProxy alias Pleroma.Web.Plugs.AuthenticationPlug @@ -50,67 +51,60 @@ def attachments_from_ids_descs(ids, descs_str) do {_, descs} = Jason.decode(descs_str) Enum.map(ids, fn media_id -> - case Repo.get(Object, media_id) do - %Object{data: data} -> - Map.put(data, "name", descs[media_id]) - - _ -> - nil + with %Object{data: data} <- Repo.get(Object, media_id) do + Map.put(data, "name", descs[media_id]) end end) |> Enum.reject(&is_nil/1) end - @spec get_to_and_cc( - User.t(), - list(String.t()), - Activity.t() | nil, - String.t(), - Participation.t() | nil - ) :: {list(String.t()), list(String.t())} + @spec get_to_and_cc(ActivityDraft.t()) :: {list(String.t()), list(String.t())} - def get_to_and_cc(_, _, _, _, %Participation{} = participation) do + def get_to_and_cc(%{in_reply_to_conversation: %Participation{} = participation}) do participation = Repo.preload(participation, :recipients) {Enum.map(participation.recipients, & &1.ap_id), []} end - def get_to_and_cc(user, mentioned_users, inReplyTo, "public", _) do - to = [Pleroma.Constants.as_public() | mentioned_users] - cc = [user.follower_address] + def get_to_and_cc(%{visibility: "public"} = draft) do + to = [public_uri(draft) | draft.mentions] + cc = [draft.user.follower_address] - if inReplyTo do - {Enum.uniq([inReplyTo.data["actor"] | to]), cc} + if draft.in_reply_to do + {Enum.uniq([draft.in_reply_to.data["actor"] | to]), cc} else {to, cc} end end - def get_to_and_cc(user, mentioned_users, inReplyTo, "unlisted", _) do - to = [user.follower_address | mentioned_users] - cc = [Pleroma.Constants.as_public()] + def get_to_and_cc(%{visibility: "unlisted"} = draft) do + to = [draft.user.follower_address | draft.mentions] + cc = [public_uri(draft)] - if inReplyTo do - {Enum.uniq([inReplyTo.data["actor"] | to]), cc} + if draft.in_reply_to do + {Enum.uniq([draft.in_reply_to.data["actor"] | to]), cc} else {to, cc} end end - def get_to_and_cc(user, mentioned_users, inReplyTo, "private", _) do - {to, cc} = get_to_and_cc(user, mentioned_users, inReplyTo, "direct", nil) - {[user.follower_address | to], cc} + def get_to_and_cc(%{visibility: "private"} = draft) do + {to, cc} = get_to_and_cc(struct(draft, visibility: "direct")) + {[draft.user.follower_address | to], cc} end - def get_to_and_cc(_user, mentioned_users, inReplyTo, "direct", _) do + def get_to_and_cc(%{visibility: "direct"} = draft) do # If the OP is a DM already, add the implicit actor. - if inReplyTo && Visibility.is_direct?(inReplyTo) do - {Enum.uniq([inReplyTo.data["actor"] | mentioned_users]), []} + if draft.in_reply_to && Visibility.is_direct?(draft.in_reply_to) do + {Enum.uniq([draft.in_reply_to.data["actor"] | draft.mentions]), []} else - {mentioned_users, []} + {draft.mentions, []} end end - def get_to_and_cc(_user, mentions, _inReplyTo, {:list, _}, _), do: {mentions, []} + def get_to_and_cc(%{visibility: {:list, _}, mentions: mentions}), do: {mentions, []} + + defp public_uri(%{params: %{local_only: true}}), do: Pleroma.Web.base_url() <> "/#Public" + defp public_uri(_), do: Pleroma.Constants.as_public() def get_addressed_users(_, to) when is_list(to) do User.get_ap_ids_by_nicknames(to) @@ -203,30 +197,25 @@ defp validate_poll_expiration(expires_in, %{min_expiration: min, max_expiration: end end - def make_content_html( - status, - attachments, - data, - visibility - ) do + def make_content_html(%ActivityDraft{} = draft) do attachment_links = - data + draft.params |> Map.get("attachment_links", Config.get([:instance, :attachment_links])) |> truthy_param?() - content_type = get_content_type(data[:content_type]) + content_type = get_content_type(draft.params[:content_type]) options = - if visibility == "direct" && Config.get([:instance, :safe_dm_mentions]) do + if draft.visibility == "direct" && Config.get([:instance, :safe_dm_mentions]) do [safe_mention: true] else [] end - status + draft.status |> format_input(content_type, options) - |> maybe_add_attachments(attachments, attachment_links) - |> maybe_add_nsfw_tag(data) + |> maybe_add_attachments(draft.attachments, attachment_links) + |> maybe_add_nsfw_tag(draft.params) end defp get_content_type(content_type) do @@ -317,33 +306,21 @@ def format_input(text, "text/markdown", options) do |> Formatter.html_escape("text/html") end - def make_note_data( - actor, - to, - context, - content_html, - attachments, - in_reply_to, - tags, - summary \\ nil, - cc \\ [], - sensitive \\ false, - extra_params \\ %{} - ) do + def make_note_data(%ActivityDraft{} = draft) do %{ "type" => "Note", - "to" => to, - "cc" => cc, - "content" => content_html, - "summary" => summary, - "sensitive" => truthy_param?(sensitive), - "context" => context, - "attachment" => attachments, - "actor" => actor, - "tag" => Keyword.values(tags) |> Enum.uniq() + "to" => draft.to, + "cc" => draft.cc, + "content" => draft.content_html, + "summary" => draft.summary, + "sensitive" => draft.sensitive, + "context" => draft.context, + "attachment" => draft.attachments, + "actor" => draft.user.ap_id, + "tag" => Keyword.values(draft.tags) |> Enum.uniq() } - |> add_in_reply_to(in_reply_to) - |> Map.merge(extra_params) + |> add_in_reply_to(draft.in_reply_to) + |> Map.merge(draft.extra) end defp add_in_reply_to(object, nil), do: object diff --git a/lib/pleroma/web/mastodon_api/views/status_view.ex b/lib/pleroma/web/mastodon_api/views/status_view.ex index 435bcde15..0fc78972e 100644 --- a/lib/pleroma/web/mastodon_api/views/status_view.ex +++ b/lib/pleroma/web/mastodon_api/views/status_view.ex @@ -368,7 +368,8 @@ def render("show.json", %{activity: %{data: %{"object" => _object}} = activity} direct_conversation_id: direct_conversation_id, thread_muted: thread_muted?, emoji_reactions: emoji_reactions, - parent_visible: visible_for_user?(reply_to, opts[:for]) + parent_visible: visible_for_user?(reply_to, opts[:for]), + local_only: Activity.local_only?(activity) } } end diff --git a/test/pleroma/web/common_api/utils_test.exs b/test/pleroma/web/common_api/utils_test.exs index e67c10b93..4d6c9ea26 100644 --- a/test/pleroma/web/common_api/utils_test.exs +++ b/test/pleroma/web/common_api/utils_test.exs @@ -6,6 +6,7 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do alias Pleroma.Builders.UserBuilder alias Pleroma.Object alias Pleroma.Web.CommonAPI + alias Pleroma.Web.CommonAPI.ActivityDraft alias Pleroma.Web.CommonAPI.Utils use Pleroma.DataCase @@ -235,9 +236,9 @@ test "when date is a random string" do test "for public posts, not a reply" do user = insert(:user) mentioned_user = insert(:user) - mentions = [mentioned_user.ap_id] + draft = %ActivityDraft{user: user, mentions: [mentioned_user.ap_id], visibility: "public"} - {to, cc} = Utils.get_to_and_cc(user, mentions, nil, "public", nil) + {to, cc} = Utils.get_to_and_cc(draft) assert length(to) == 2 assert length(cc) == 1 @@ -252,9 +253,15 @@ test "for public posts, a reply" do mentioned_user = insert(:user) third_user = insert(:user) {:ok, activity} = CommonAPI.post(third_user, %{status: "uguu"}) - mentions = [mentioned_user.ap_id] - {to, cc} = Utils.get_to_and_cc(user, mentions, activity, "public", nil) + draft = %ActivityDraft{ + user: user, + mentions: [mentioned_user.ap_id], + visibility: "public", + in_reply_to: activity + } + + {to, cc} = Utils.get_to_and_cc(draft) assert length(to) == 3 assert length(cc) == 1 @@ -268,9 +275,9 @@ test "for public posts, a reply" do test "for unlisted posts, not a reply" do user = insert(:user) mentioned_user = insert(:user) - mentions = [mentioned_user.ap_id] + draft = %ActivityDraft{user: user, mentions: [mentioned_user.ap_id], visibility: "unlisted"} - {to, cc} = Utils.get_to_and_cc(user, mentions, nil, "unlisted", nil) + {to, cc} = Utils.get_to_and_cc(draft) assert length(to) == 2 assert length(cc) == 1 @@ -285,9 +292,15 @@ test "for unlisted posts, a reply" do mentioned_user = insert(:user) third_user = insert(:user) {:ok, activity} = CommonAPI.post(third_user, %{status: "uguu"}) - mentions = [mentioned_user.ap_id] - {to, cc} = Utils.get_to_and_cc(user, mentions, activity, "unlisted", nil) + draft = %ActivityDraft{ + user: user, + mentions: [mentioned_user.ap_id], + visibility: "unlisted", + in_reply_to: activity + } + + {to, cc} = Utils.get_to_and_cc(draft) assert length(to) == 3 assert length(cc) == 1 @@ -301,9 +314,9 @@ test "for unlisted posts, a reply" do test "for private posts, not a reply" do user = insert(:user) mentioned_user = insert(:user) - mentions = [mentioned_user.ap_id] + draft = %ActivityDraft{user: user, mentions: [mentioned_user.ap_id], visibility: "private"} - {to, cc} = Utils.get_to_and_cc(user, mentions, nil, "private", nil) + {to, cc} = Utils.get_to_and_cc(draft) assert length(to) == 2 assert Enum.empty?(cc) @@ -316,9 +329,15 @@ test "for private posts, a reply" do mentioned_user = insert(:user) third_user = insert(:user) {:ok, activity} = CommonAPI.post(third_user, %{status: "uguu"}) - mentions = [mentioned_user.ap_id] - {to, cc} = Utils.get_to_and_cc(user, mentions, activity, "private", nil) + draft = %ActivityDraft{ + user: user, + mentions: [mentioned_user.ap_id], + visibility: "private", + in_reply_to: activity + } + + {to, cc} = Utils.get_to_and_cc(draft) assert length(to) == 2 assert Enum.empty?(cc) @@ -330,9 +349,9 @@ test "for private posts, a reply" do test "for direct posts, not a reply" do user = insert(:user) mentioned_user = insert(:user) - mentions = [mentioned_user.ap_id] + draft = %ActivityDraft{user: user, mentions: [mentioned_user.ap_id], visibility: "direct"} - {to, cc} = Utils.get_to_and_cc(user, mentions, nil, "direct", nil) + {to, cc} = Utils.get_to_and_cc(draft) assert length(to) == 1 assert Enum.empty?(cc) @@ -345,9 +364,15 @@ test "for direct posts, a reply" do mentioned_user = insert(:user) third_user = insert(:user) {:ok, activity} = CommonAPI.post(third_user, %{status: "uguu"}) - mentions = [mentioned_user.ap_id] - {to, cc} = Utils.get_to_and_cc(user, mentions, activity, "direct", nil) + draft = %ActivityDraft{ + user: user, + mentions: [mentioned_user.ap_id], + visibility: "direct", + in_reply_to: activity + } + + {to, cc} = Utils.get_to_and_cc(draft) assert length(to) == 1 assert Enum.empty?(cc) @@ -356,7 +381,14 @@ test "for direct posts, a reply" do {:ok, direct_activity} = CommonAPI.post(third_user, %{status: "uguu", visibility: "direct"}) - {to, cc} = Utils.get_to_and_cc(user, mentions, direct_activity, "direct", nil) + draft = %ActivityDraft{ + user: user, + mentions: [mentioned_user.ap_id], + visibility: "direct", + in_reply_to: direct_activity + } + + {to, cc} = Utils.get_to_and_cc(draft) assert length(to) == 2 assert Enum.empty?(cc) @@ -532,26 +564,26 @@ test "returns original params when list not found" do end end - describe "make_note_data/11" do + describe "make_note_data/1" do test "returns note data" do user = insert(:user) note = insert(:note) user2 = insert(:user) user3 = insert(:user) - assert Utils.make_note_data( - user.ap_id, - [user2.ap_id], - "2hu", - "

This is :moominmamma: note

", - [], - note.id, - [name: "jimm"], - "test summary", - [user3.ap_id], - false, - %{"custom_tag" => "test"} - ) == %{ + draft = %ActivityDraft{ + user: user, + to: [user2.ap_id], + context: "2hu", + content_html: "

This is :moominmamma: note

", + in_reply_to: note.id, + tags: [name: "jimm"], + summary: "test summary", + cc: [user3.ap_id], + extra: %{"custom_tag" => "test"} + } + + assert Utils.make_note_data(draft) == %{ "actor" => user.ap_id, "attachment" => [], "cc" => [user3.ap_id], diff --git a/test/pleroma/web/common_api_test.exs b/test/pleroma/web/common_api_test.exs index f5d09f396..a5d395558 100644 --- a/test/pleroma/web/common_api_test.exs +++ b/test/pleroma/web/common_api_test.exs @@ -1241,4 +1241,128 @@ test "fallback" do } = CommonAPI.get_user("") end end + + describe "with `local_only` enabled" do + setup do: clear_config([:instance, :federating], true) + + test "post" do + user = insert(:user) + + with_mock Pleroma.Web.Federator, publish: fn _ -> :ok end do + {:ok, activity} = CommonAPI.post(user, %{status: "#2hu #2HU", local_only: true}) + + assert Activity.local_only?(activity) + assert_not_called(Pleroma.Web.Federator.publish(activity)) + end + end + + test "delete" do + user = insert(:user) + + {:ok, %Activity{id: activity_id}} = + CommonAPI.post(user, %{status: "#2hu #2HU", local_only: true}) + + with_mock Pleroma.Web.Federator, publish: fn _ -> :ok end do + assert {:ok, %Activity{data: %{"deleted_activity_id" => ^activity_id}} = activity} = + CommonAPI.delete(activity_id, user) + + assert Activity.local_only?(activity) + assert_not_called(Pleroma.Web.Federator.publish(activity)) + end + end + + test "repeat" do + user = insert(:user) + other_user = insert(:user) + + {:ok, %Activity{id: activity_id}} = + CommonAPI.post(other_user, %{status: "cofe", local_only: true}) + + with_mock Pleroma.Web.Federator, publish: fn _ -> :ok end do + assert {:ok, %Activity{data: %{"type" => "Announce"}} = activity} = + CommonAPI.repeat(activity_id, user) + + assert Activity.local_only?(activity) + refute called(Pleroma.Web.Federator.publish(activity)) + end + end + + test "unrepeat" do + user = insert(:user) + other_user = insert(:user) + + {:ok, %Activity{id: activity_id}} = + CommonAPI.post(other_user, %{status: "cofe", local_only: true}) + + assert {:ok, _} = CommonAPI.repeat(activity_id, user) + + with_mock Pleroma.Web.Federator, publish: fn _ -> :ok end do + assert {:ok, %Activity{data: %{"type" => "Undo"}} = activity} = + CommonAPI.unrepeat(activity_id, user) + + assert Activity.local_only?(activity) + refute called(Pleroma.Web.Federator.publish(activity)) + end + end + + test "favorite" do + user = insert(:user) + other_user = insert(:user) + + {:ok, activity} = CommonAPI.post(other_user, %{status: "cofe", local_only: true}) + + with_mock Pleroma.Web.Federator, publish: fn _ -> :ok end do + assert {:ok, %Activity{data: %{"type" => "Like"}} = activity} = + CommonAPI.favorite(user, activity.id) + + assert Activity.local_only?(activity) + refute called(Pleroma.Web.Federator.publish(activity)) + end + end + + test "unfavorite" do + user = insert(:user) + other_user = insert(:user) + + {:ok, activity} = CommonAPI.post(other_user, %{status: "cofe", local_only: true}) + + {:ok, %Activity{}} = CommonAPI.favorite(user, activity.id) + + with_mock Pleroma.Web.Federator, publish: fn _ -> :ok end do + assert {:ok, activity} = CommonAPI.unfavorite(activity.id, user) + assert Activity.local_only?(activity) + refute called(Pleroma.Web.Federator.publish(activity)) + end + end + + test "react_with_emoji" do + user = insert(:user) + other_user = insert(:user) + {:ok, activity} = CommonAPI.post(other_user, %{status: "cofe", local_only: true}) + + with_mock Pleroma.Web.Federator, publish: fn _ -> :ok end do + assert {:ok, %Activity{data: %{"type" => "EmojiReact"}} = activity} = + CommonAPI.react_with_emoji(activity.id, user, "👍") + + assert Activity.local_only?(activity) + refute called(Pleroma.Web.Federator.publish(activity)) + end + end + + test "unreact_with_emoji" do + user = insert(:user) + other_user = insert(:user) + {:ok, activity} = CommonAPI.post(other_user, %{status: "cofe", local_only: true}) + + {:ok, _reaction} = CommonAPI.react_with_emoji(activity.id, user, "👍") + + with_mock Pleroma.Web.Federator, publish: fn _ -> :ok end do + assert {:ok, %Activity{data: %{"type" => "Undo"}} = activity} = + CommonAPI.unreact_with_emoji(activity.id, user, "👍") + + assert Activity.local_only?(activity) + refute called(Pleroma.Web.Federator.publish(activity)) + end + end + end end diff --git a/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs index 61359214a..b047f183d 100644 --- a/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs @@ -1740,4 +1740,23 @@ test "expires_at is nil for another user" do |> get("/api/v1/statuses/#{activity.id}") |> json_response_and_validate_schema(:ok) end + + test "posting a local only status" do + %{user: _user, conn: conn} = oauth_access(["write:statuses"]) + + conn_one = + conn + |> put_req_header("content-type", "application/json") + |> post("/api/v1/statuses", %{ + "status" => "cofe", + "local_only" => "true" + }) + + local = Pleroma.Web.base_url() <> "/#Public" + + assert %{"content" => "cofe", "id" => id, "pleroma" => %{"local_only" => true}} = + json_response(conn_one, 200) + + assert %Activity{id: ^id, data: %{"to" => [^local]}} = Activity.get_by_id(id) + end end diff --git a/test/pleroma/web/mastodon_api/views/status_view_test.exs b/test/pleroma/web/mastodon_api/views/status_view_test.exs index 70d829979..03b0cdf15 100644 --- a/test/pleroma/web/mastodon_api/views/status_view_test.exs +++ b/test/pleroma/web/mastodon_api/views/status_view_test.exs @@ -245,7 +245,8 @@ test "a note activity" do direct_conversation_id: nil, thread_muted: false, emoji_reactions: [], - parent_visible: false + parent_visible: false, + local_only: false } } From a598d5baab45693e4258f4a65534f474b81bfa7e Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Fri, 9 Oct 2020 20:30:04 +0400 Subject: [PATCH 028/362] Update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 36a84b1a8..c1964c957 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Mix tasks for controlling user account confirmation status in bulk (`mix pleroma.user confirm_all` and `mix pleroma.user unconfirm_all`) - Mix task for sending confirmation emails to all unconfirmed users (`mix pleroma.email send_confirmation_mails`) - Mix task option for force-unfollowing relays +- Support for local-only statuses ### Changed From 2a475622eea5550c9ab455c4e86212fc09ee9c58 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Thu, 15 Oct 2020 19:07:00 +0400 Subject: [PATCH 029/362] Add Pleroma.Constants.as_local_public/0 --- lib/pleroma/activity.ex | 2 +- lib/pleroma/constants.ex | 2 ++ lib/pleroma/web/activity_pub/builder.ex | 2 +- .../web/activity_pub/object_validators/announce_validator.ex | 2 +- lib/pleroma/web/activity_pub/visibility.ex | 2 +- lib/pleroma/web/common_api/utils.ex | 2 +- .../web/mastodon_api/controllers/status_controller_test.exs | 2 +- 7 files changed, 8 insertions(+), 6 deletions(-) diff --git a/lib/pleroma/activity.ex b/lib/pleroma/activity.ex index 789655ba2..3b01f5e31 100644 --- a/lib/pleroma/activity.ex +++ b/lib/pleroma/activity.ex @@ -349,7 +349,7 @@ def pinned_by_actor?(%Activity{} = activity) do def local_only?(activity) do recipients = Enum.concat(activity.data["to"], Map.get(activity.data, "cc", [])) public = Pleroma.Constants.as_public() - local = Pleroma.Web.base_url() <> "/#Public" + local = Pleroma.Constants.as_local_public() Enum.member?(recipients, local) and not Enum.member?(recipients, public) end diff --git a/lib/pleroma/constants.ex b/lib/pleroma/constants.ex index 13eeaa96b..cf8182d55 100644 --- a/lib/pleroma/constants.ex +++ b/lib/pleroma/constants.ex @@ -26,4 +26,6 @@ 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) ) + + def as_local_public, do: Pleroma.Web.base_url() <> "/#Public" end diff --git a/lib/pleroma/web/activity_pub/builder.ex b/lib/pleroma/web/activity_pub/builder.ex index 236a5b9d1..c9200a3f0 100644 --- a/lib/pleroma/web/activity_pub/builder.ex +++ b/lib/pleroma/web/activity_pub/builder.ex @@ -223,7 +223,7 @@ def announce(actor, object, options \\ []) do [actor.follower_address] public? and Pleroma.Activity.local_only?(object) -> - [actor.follower_address, object.data["actor"], Pleroma.Web.base_url() <> "/#Public"] + [actor.follower_address, object.data["actor"], Pleroma.Constants.as_local_public()] public? -> [actor.follower_address, object.data["actor"], Pleroma.Constants.as_public()] 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 5a963fca7..338957db8 100644 --- a/lib/pleroma/web/activity_pub/object_validators/announce_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/announce_validator.ex @@ -68,7 +68,7 @@ def validate_announcable(cng) do false <- Visibility.is_public?(object) do same_actor = object.data["actor"] == actor.ap_id recipients = get_field(cng, :to) ++ get_field(cng, :cc) - local_public = Pleroma.Web.base_url() <> "/#Public" + local_public = Pleroma.Constants.as_local_public() is_public = Enum.member?(recipients, Pleroma.Constants.as_public()) or diff --git a/lib/pleroma/web/activity_pub/visibility.ex b/lib/pleroma/web/activity_pub/visibility.ex index 3654b489b..1a0c9a46c 100644 --- a/lib/pleroma/web/activity_pub/visibility.ex +++ b/lib/pleroma/web/activity_pub/visibility.ex @@ -20,7 +20,7 @@ def is_public?(%{"directMessage" => true}), do: false def is_public?(data) do Utils.label_in_message?(Pleroma.Constants.as_public(), data) or - Utils.label_in_message?(Pleroma.Web.base_url() <> "/#Public", data) + Utils.label_in_message?(Pleroma.Constants.as_local_public(), data) end def is_private?(activity) do diff --git a/lib/pleroma/web/common_api/utils.ex b/lib/pleroma/web/common_api/utils.ex index 7c49c1fb1..d57ba4209 100644 --- a/lib/pleroma/web/common_api/utils.ex +++ b/lib/pleroma/web/common_api/utils.ex @@ -103,7 +103,7 @@ def get_to_and_cc(%{visibility: "direct"} = draft) do def get_to_and_cc(%{visibility: {:list, _}, mentions: mentions}), do: {mentions, []} - defp public_uri(%{params: %{local_only: true}}), do: Pleroma.Web.base_url() <> "/#Public" + defp public_uri(%{params: %{local_only: true}}), do: Pleroma.Constants.as_local_public() defp public_uri(_), do: Pleroma.Constants.as_public() def get_addressed_users(_, to) when is_list(to) do diff --git a/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs index b047f183d..4acf7a18e 100644 --- a/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs @@ -1752,7 +1752,7 @@ test "posting a local only status" do "local_only" => "true" }) - local = Pleroma.Web.base_url() <> "/#Public" + local = Pleroma.Constants.as_local_public() assert %{"content" => "cofe", "id" => id, "pleroma" => %{"local_only" => true}} = json_response(conn_one, 200) From 65b73eb9fd2c33ad1fc59e08974495331b51888f Mon Sep 17 00:00:00 2001 From: rinpatch Date: Thu, 15 Oct 2020 21:43:35 +0300 Subject: [PATCH 030/362] mix.exs: bump version to 2.2.0 --- mix.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mix.exs b/mix.exs index 427329d38..dfa035025 100644 --- a/mix.exs +++ b/mix.exs @@ -4,7 +4,7 @@ defmodule Pleroma.Mixfile do def project do [ app: :pleroma, - version: version("2.1.50"), + version: version("2.2.0"), elixir: "~> 1.9", elixirc_paths: elixirc_paths(Mix.env()), compilers: [:phoenix, :gettext] ++ Mix.compilers(), From 6c1bc9ca394add6f037653a8e93ed0caf89ef73b Mon Sep 17 00:00:00 2001 From: rinpatch Date: Thu, 15 Oct 2020 21:43:46 +0300 Subject: [PATCH 031/362] CHANGELOG.md: prepare 2.2.0 changelog --- CHANGELOG.md | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 36a84b1a8..649d8c902 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). -## Unreleased +## [2.2.0] - 2020-10-?? ### Added - Mix tasks for controlling user account confirmation status in bulk (`mix pleroma.user confirm_all` and `mix pleroma.user unconfirm_all`) @@ -15,6 +15,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - **Breaking** Requires `libmagic` (or `file`) to guess file types. - **Breaking:** Pleroma Admin API: emoji packs and files routes changed. - **Breaking:** Sensitive/NSFW statuses no longer disable link previews. +- API: Empty parameter values for integer parameters are now ignored in non-strict validaton mode. - Search: Users are now findable by their urls. - Renamed `:await_up_timeout` in `:connections_pool` namespace to `:connect_timeout`, old name is deprecated. - Renamed `:timeout` in `pools` namespace to `:recv_timeout`, old name is deprecated. @@ -50,10 +51,14 @@ switched to a new configuration mechanism, however it was not officially removed - Add documented-but-missing chat pagination. - Allow sending out emails again. -## Unreleased (Patch) +### Upgrade notes + +1. Install libmagic and development headers (`libmagic-dev` on Ubuntu/Debian, `file-dev` on Alpine Linux) +2. Run database migrations (inside Pleroma directory): + - OTP: `./bin/pleroma_ctl migrate` + - From Source: `mix ecto.migrate` +3. Restart Pleroma -### Changed -- API: Empty parameter values for integer parameters are now ignored in non-strict validaton mode. ## [2.1.2] - 2020-09-17 From 274c8e6fabeb65813f76766ccaa22227168c726e Mon Sep 17 00:00:00 2001 From: rinpatch Date: Thu, 15 Oct 2020 21:45:31 +0300 Subject: [PATCH 032/362] SECURITY.md: update supported versions to only 2.2 --- SECURITY.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SECURITY.md b/SECURITY.md index 8617c1434..c009d21d9 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -6,7 +6,7 @@ Currently, Pleroma offers bugfixes and security patches only for the latest mino | Version | Support |---------| -------- -| 2.1 | Bugfixes and security patches +| 2.2 | Bugfixes and security patches ## Reporting a vulnerability From fb0e3403632ed10ba7d226d998618e0a894d2538 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Wed, 21 Oct 2020 21:13:49 +0300 Subject: [PATCH 033/362] Rip out fedsockets from the release branch --- CHANGELOG.md | 1 - config/config.exs | 4 +++- config/description.exs | 13 ------------- docs/configuration/cheatsheet.md | 10 ---------- 4 files changed, 3 insertions(+), 25 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 649d8c902..80ca6a350 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,7 +27,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Added - Media preview proxy (requires `ffmpeg` and `ImageMagick` to be installed and media proxy to be enabled; see `:media_preview_proxy` config for more details). - Pleroma API: Importing the mutes users from CSV files. -- Experimental websocket-based federation between Pleroma instances.
API Changes diff --git a/config/config.exs b/config/config.exs index 2c6142360..148e9e7da 100644 --- a/config/config.exs +++ b/config/config.exs @@ -130,7 +130,9 @@ dispatch: [ {:_, [ - {"/api/fedsocket/v1", Pleroma.Web.FedSockets.IncomingHandler, []}, + # FedSockets are commented out of the dispatch table on stable because they can't even + # fail properly when they are disabled. They will hang the connection instead of returning a 404. + # {"/api/fedsocket/v1", Pleroma.Web.FedSockets.IncomingHandler, []}, {"/api/v1/streaming", Pleroma.Web.MastodonAPI.WebsocketHandler, []}, {"/websocket", Phoenix.Endpoint.CowboyWebSocket, {Phoenix.Transports.WebSocket, diff --git a/config/description.exs b/config/description.exs index 2a1898922..fa843ea8c 100644 --- a/config/description.exs +++ b/config/description.exs @@ -273,19 +273,6 @@ } ] }, - %{ - group: :pleroma, - key: :fed_sockets, - type: :group, - description: "Websocket based federation", - children: [ - %{ - key: :enabled, - type: :boolean, - description: "Enable FedSockets" - } - ] - }, %{ group: :pleroma, key: Pleroma.Emails.Mailer, diff --git a/docs/configuration/cheatsheet.md b/docs/configuration/cheatsheet.md index 0b13d7e88..2c41ee932 100644 --- a/docs/configuration/cheatsheet.md +++ b/docs/configuration/cheatsheet.md @@ -219,16 +219,6 @@ config :pleroma, :mrf_user_allowlist, %{ * `total_user_limit`: the number of scheduled activities a user is allowed to create in total (Default: `300`) * `enabled`: whether scheduled activities are sent to the job queue to be executed -## FedSockets -FedSockets is an experimental feature allowing for Pleroma backends to federate using a persistant websocket connection as opposed to making each federation a seperate http connection. This feature is currently off by default. It is configurable throught he following options. - -### :fedsockets -* `enabled`: Enables FedSockets for this instance. `false` by default. -* `connection_duration`: Time an idle websocket is kept open. -* `rejection_duration`: Failures to connect via FedSockets will not be retried for this period of time. -* `fed_socket_fetches` and `fed_socket_rejections`: Settings passed to `cachex` for the fetch registry, and rejection stacks. See `Pleroma.Web.FedSockets` for more details. - - ## Frontends ### :frontend_configurations From 03e306785b2013fe6fd47b59d4e578c6ed586b08 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Tue, 27 Oct 2020 19:20:04 +0400 Subject: [PATCH 034/362] Add an API endpoint to install a new frontend --- config/config.exs | 3 +- lib/mix/tasks/pleroma/frontend.ex | 107 +---------------- lib/pleroma/frontend.ex | 108 ++++++++++++++++++ .../controllers/frontend_controller.ex | 41 +++++++ .../web/admin_api/views/frontend_view.ex | 21 ++++ .../operations/admin/frontend_operation.ex | 77 +++++++++++++ lib/pleroma/web/router.ex | 3 + .../workers/frontend_installer_worker.ex | 21 ++++ test/pleroma/frontend_test.exs | 80 +++++++++++++ .../controllers/frontend_controller_test.exs | 94 +++++++++++++++ 10 files changed, 448 insertions(+), 107 deletions(-) create mode 100644 lib/pleroma/frontend.ex create mode 100644 lib/pleroma/web/admin_api/controllers/frontend_controller.ex create mode 100644 lib/pleroma/web/admin_api/views/frontend_view.ex create mode 100644 lib/pleroma/web/api_spec/operations/admin/frontend_operation.ex create mode 100644 lib/pleroma/workers/frontend_installer_worker.ex create mode 100644 test/pleroma/frontend_test.exs create mode 100644 test/pleroma/web/admin_api/controllers/frontend_controller_test.exs diff --git a/config/config.exs b/config/config.exs index 124f30a77..2e22a046b 100644 --- a/config/config.exs +++ b/config/config.exs @@ -560,7 +560,8 @@ background: 5, remote_fetcher: 2, attachments_cleanup: 5, - new_users_digest: 1 + new_users_digest: 1, + frontend_installer: 1 ], plugins: [Oban.Plugins.Pruner], crontab: [ diff --git a/lib/mix/tasks/pleroma/frontend.ex b/lib/mix/tasks/pleroma/frontend.ex index cbce81ab9..f15dbc38b 100644 --- a/lib/mix/tasks/pleroma/frontend.ex +++ b/lib/mix/tasks/pleroma/frontend.ex @@ -17,8 +17,6 @@ def run(["install", "none" | _args]) do end def run(["install", frontend | args]) do - log_level = Logger.level() - Logger.configure(level: :warn) start_pleroma() {options, [], []} = @@ -33,109 +31,6 @@ def run(["install", frontend | args]) do ] ) - instance_static_dir = - with nil <- options[:static_dir] do - Pleroma.Config.get!([:instance, :static_dir]) - end - - cmd_frontend_info = %{ - "name" => frontend, - "ref" => options[:ref], - "build_url" => options[:build_url], - "build_dir" => options[:build_dir] - } - - config_frontend_info = Pleroma.Config.get([:frontends, :available, frontend], %{}) - - frontend_info = - Map.merge(config_frontend_info, cmd_frontend_info, fn _key, config, cmd -> - # This only overrides things that are actually set - cmd || config - end) - - ref = frontend_info["ref"] - - unless ref do - raise "No ref given or configured" - end - - dest = - Path.join([ - instance_static_dir, - "frontends", - frontend, - ref - ]) - - fe_label = "#{frontend} (#{ref})" - - tmp_dir = Path.join([instance_static_dir, "frontends", "tmp"]) - - with {_, :ok} <- - {:download_or_unzip, download_or_unzip(frontend_info, tmp_dir, options[:file])}, - shell_info("Installing #{fe_label} to #{dest}"), - :ok <- install_frontend(frontend_info, tmp_dir, dest) do - File.rm_rf!(tmp_dir) - shell_info("Frontend #{fe_label} installed to #{dest}") - - Logger.configure(level: log_level) - else - {:download_or_unzip, _} -> - shell_info("Could not download or unzip the frontend") - - _e -> - shell_info("Could not install the frontend") - end - end - - defp download_or_unzip(frontend_info, temp_dir, file) do - if file do - with {:ok, zip} <- File.read(Path.expand(file)) do - unzip(zip, temp_dir) - end - else - download_build(frontend_info, temp_dir) - end - end - - def unzip(zip, dest) do - with {:ok, unzipped} <- :zip.unzip(zip, [:memory]) do - File.rm_rf!(dest) - File.mkdir_p!(dest) - - Enum.each(unzipped, fn {filename, data} -> - path = filename - - new_file_path = Path.join(dest, path) - - new_file_path - |> Path.dirname() - |> File.mkdir_p!() - - File.write!(new_file_path, data) - end) - - :ok - end - end - - defp download_build(frontend_info, dest) do - shell_info("Downloading pre-built bundle for #{frontend_info["name"]}") - url = String.replace(frontend_info["build_url"], "${ref}", frontend_info["ref"]) - - with {:ok, %{status: 200, body: zip_body}} <- - Pleroma.HTTP.get(url, [], pool: :media, recv_timeout: 120_000) do - unzip(zip_body, dest) - else - e -> {:error, e} - end - end - - defp install_frontend(frontend_info, source, dest) do - from = frontend_info["build_dir"] || "dist" - File.rm_rf!(dest) - File.mkdir_p!(dest) - File.cp_r!(Path.join([source, from]), dest) - :ok + Pleroma.Frontend.install(frontend, options) end end diff --git a/lib/pleroma/frontend.ex b/lib/pleroma/frontend.ex new file mode 100644 index 000000000..3413d2fba --- /dev/null +++ b/lib/pleroma/frontend.ex @@ -0,0 +1,108 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Frontend do + alias Pleroma.Config + + require Logger + + def install(name, opts \\ []) do + cmd_frontend_info = %{ + "ref" => opts[:ref], + "build_url" => opts[:build_url], + "build_dir" => opts[:build_dir] + } + + config_frontend_info = Config.get([:frontends, :available, name], %{}) + + frontend_info = + Map.merge(config_frontend_info, cmd_frontend_info, fn _key, config, cmd -> + # This only overrides things that are actually set + cmd || config + end) + + ref = frontend_info["ref"] + + unless ref do + raise "No ref given or configured" + end + + dest = Path.join([dir(), name, ref]) + + label = "#{name} (#{ref})" + tmp_dir = Path.join(dir(), "tmp") + + with {_, :ok} <- + {:download_or_unzip, download_or_unzip(frontend_info, tmp_dir, opts[:file])}, + Logger.info("Installing #{label} to #{dest}"), + :ok <- install_frontend(frontend_info, tmp_dir, dest) do + File.rm_rf!(tmp_dir) + Logger.info("Frontend #{label} installed to #{dest}") + else + {:download_or_unzip, _} -> + Logger.info("Could not download or unzip the frontend") + + _e -> + Logger.info("Could not install the frontend") + end + end + + def dir(opts \\ []) do + if is_nil(opts[:static_dir]) do + Pleroma.Config.get!([:instance, :static_dir]) + else + opts[:static_dir] + end + |> Path.join("frontends") + end + + defp download_or_unzip(frontend_info, temp_dir, nil), + do: download_build(frontend_info, temp_dir) + + defp download_or_unzip(_frontend_info, temp_dir, file) do + with {:ok, zip} <- File.read(Path.expand(file)) do + unzip(zip, temp_dir) + end + end + + def unzip(zip, dest) do + with {:ok, unzipped} <- :zip.unzip(zip, [:memory]) do + File.rm_rf!(dest) + File.mkdir_p!(dest) + + Enum.each(unzipped, fn {filename, data} -> + path = filename + + new_file_path = Path.join(dest, path) + + new_file_path + |> Path.dirname() + |> File.mkdir_p!() + + File.write!(new_file_path, data) + end) + end + end + + defp download_build(frontend_info, dest) do + Logger.info("Downloading pre-built bundle for #{frontend_info["name"]}") + url = String.replace(frontend_info["build_url"], "${ref}", frontend_info["ref"]) + + with {:ok, %{status: 200, body: zip_body}} <- + Pleroma.HTTP.get(url, [], pool: :media, recv_timeout: 120_000) do + unzip(zip_body, dest) + else + {:error, e} -> {:error, e} + e -> {:error, e} + end + end + + defp install_frontend(frontend_info, source, dest) do + from = frontend_info["build_dir"] || "dist" + File.rm_rf!(dest) + File.mkdir_p!(dest) + File.cp_r!(Path.join([source, from]), dest) + :ok + end +end diff --git a/lib/pleroma/web/admin_api/controllers/frontend_controller.ex b/lib/pleroma/web/admin_api/controllers/frontend_controller.ex new file mode 100644 index 000000000..59c69aba1 --- /dev/null +++ b/lib/pleroma/web/admin_api/controllers/frontend_controller.ex @@ -0,0 +1,41 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.AdminAPI.FrontendController do + use Pleroma.Web, :controller + + alias Pleroma.Config + alias Pleroma.Web.Plugs.OAuthScopesPlug + alias Pleroma.Workers.FrontendInstallerWorker + + plug(Pleroma.Web.ApiSpec.CastAndValidate) + plug(OAuthScopesPlug, %{scopes: ["write"], admin: true} when action == :install) + plug(OAuthScopesPlug, %{scopes: ["read"], admin: true} when action == :index) + action_fallback(Pleroma.Web.AdminAPI.FallbackController) + + defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.Admin.FrontendOperation + + def index(conn, _params) do + installed = installed() + + frontends = + [:frontends, :available] + |> Config.get([]) + |> Enum.map(fn {name, desc} -> + Map.put(desc, "installed", name in installed) + end) + + render(conn, "index.json", frontends: frontends) + end + + def install(%{body_params: params} = conn, _params) do + FrontendInstallerWorker.install(params.name, Map.delete(params, :name)) + + index(conn, %{}) + end + + defp installed do + File.ls!(Pleroma.Frontend.dir()) + end +end diff --git a/lib/pleroma/web/admin_api/views/frontend_view.ex b/lib/pleroma/web/admin_api/views/frontend_view.ex new file mode 100644 index 000000000..374841d0b --- /dev/null +++ b/lib/pleroma/web/admin_api/views/frontend_view.ex @@ -0,0 +1,21 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.AdminAPI.FrontendView do + use Pleroma.Web, :view + + def render("index.json", %{frontends: frontends}) do + render_many(frontends, __MODULE__, "show.json") + end + + def render("show.json", %{frontend: frontend}) do + %{ + name: frontend["name"], + git: frontend["git"], + build_url: frontend["build_url"], + ref: frontend["ref"], + installed: frontend["installed"] + } + end +end diff --git a/lib/pleroma/web/api_spec/operations/admin/frontend_operation.ex b/lib/pleroma/web/api_spec/operations/admin/frontend_operation.ex new file mode 100644 index 000000000..24d23a4e0 --- /dev/null +++ b/lib/pleroma/web/api_spec/operations/admin/frontend_operation.ex @@ -0,0 +1,77 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Admin.FrontendOperation do + alias OpenApiSpex.Operation + alias OpenApiSpex.Schema + 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: ["Admin", "Reports"], + summary: "Get a list of available frontends", + operationId: "AdminAPI.FrontendController.index", + security: [%{"oAuth" => ["read"]}], + responses: %{ + 200 => Operation.response("Response", "application/json", list_of_frontends()), + 403 => Operation.response("Forbidden", "application/json", ApiError) + } + } + end + + def install_operation do + %Operation{ + tags: ["Admin", "Reports"], + summary: "Install a frontend", + operationId: "AdminAPI.FrontendController.install", + security: [%{"oAuth" => ["read"]}], + requestBody: request_body("Parameters", install_request(), required: true), + responses: %{ + 200 => Operation.response("Response", "application/json", list_of_frontends()), + 403 => Operation.response("Forbidden", "application/json", ApiError) + } + } + end + + defp list_of_frontends do + %Schema{ + type: :array, + items: %Schema{ + type: :object, + properties: %{ + name: %Schema{type: :string}, + git: %Schema{type: :string, format: :uri, nullable: true}, + build_url: %Schema{type: :string, format: :uri}, + ref: %Schema{type: :string}, + installed: %Schema{type: :boolean} + } + } + } + end + + defp install_request do + %Schema{ + title: "FrontendInstallRequest", + type: :object, + required: [:name], + properties: %{ + name: %Schema{ + type: :string, + nullable: false + }, + ref: %Schema{ + type: :string, + nullable: false + } + } + } + end +end diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index d2d939989..aba505a66 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -223,6 +223,9 @@ defmodule Pleroma.Web.Router do get("/chats/:id", ChatController, :show) get("/chats/:id/messages", ChatController, :messages) delete("/chats/:id/messages/:message_id", ChatController, :delete_message) + + get("/frontends", FrontendController, :index) + post("/frontends", FrontendController, :install) end scope "/api/pleroma/emoji", Pleroma.Web.PleromaAPI do diff --git a/lib/pleroma/workers/frontend_installer_worker.ex b/lib/pleroma/workers/frontend_installer_worker.ex new file mode 100644 index 000000000..38688c63b --- /dev/null +++ b/lib/pleroma/workers/frontend_installer_worker.ex @@ -0,0 +1,21 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Workers.FrontendInstallerWorker do + use Oban.Worker, queue: :frontend_installer, max_attempts: 1 + + alias Oban.Job + alias Pleroma.Frontend + + def install(name, opts \\ []) do + %{"name" => name, "opts" => Map.new(opts)} + |> new() + |> Oban.insert() + end + + def perform(%Job{args: %{"name" => name, "opts" => opts}}) do + opts = Keyword.new(opts, fn {key, value} -> {String.to_existing_atom(key), value} end) + Frontend.install(name, opts) + end +end diff --git a/test/pleroma/frontend_test.exs b/test/pleroma/frontend_test.exs new file mode 100644 index 000000000..77913b223 --- /dev/null +++ b/test/pleroma/frontend_test.exs @@ -0,0 +1,80 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.FrontendTest do + use Pleroma.DataCase + alias Pleroma.Frontend + + import ExUnit.CaptureIO, only: [capture_io: 1] + + @dir "test/frontend_static_test" + + setup do + File.mkdir_p!(@dir) + clear_config([:instance, :static_dir], @dir) + + on_exit(fn -> + File.rm_rf(@dir) + end) + end + + test "it downloads and unzips a known frontend" do + clear_config([:frontends, :available], %{ + "pleroma" => %{ + "ref" => "fantasy", + "name" => "pleroma", + "build_url" => "http://gensokyo.2hu/builds/${ref}" + } + }) + + Tesla.Mock.mock(fn %{url: "http://gensokyo.2hu/builds/fantasy"} -> + %Tesla.Env{status: 200, body: File.read!("test/fixtures/tesla_mock/frontend_dist.zip")} + end) + + capture_io(fn -> + Frontend.install("pleroma") + end) + + assert File.exists?(Path.join([@dir, "frontends", "pleroma", "fantasy", "test.txt"])) + end + + test "it also works given a file" do + clear_config([:frontends, :available], %{ + "pleroma" => %{ + "ref" => "fantasy", + "name" => "pleroma", + "build_dir" => "" + } + }) + + folder = Path.join([@dir, "frontends", "pleroma", "fantasy"]) + previously_existing = Path.join([folder, "temp"]) + File.mkdir_p!(folder) + File.write!(previously_existing, "yey") + assert File.exists?(previously_existing) + + capture_io(fn -> + Frontend.install("pleroma", file: "test/fixtures/tesla_mock/frontend.zip") + end) + + assert File.exists?(Path.join([folder, "test.txt"])) + refute File.exists?(previously_existing) + end + + test "it downloads and unzips unknown frontends" do + Tesla.Mock.mock(fn %{url: "http://gensokyo.2hu/madeup.zip"} -> + %Tesla.Env{status: 200, body: File.read!("test/fixtures/tesla_mock/frontend.zip")} + end) + + capture_io(fn -> + Frontend.install("unknown", + ref: "baka", + build_url: "http://gensokyo.2hu/madeup.zip", + build_dir: "" + ) + end) + + assert File.exists?(Path.join([@dir, "frontends", "unknown", "baka", "test.txt"])) + end +end diff --git a/test/pleroma/web/admin_api/controllers/frontend_controller_test.exs b/test/pleroma/web/admin_api/controllers/frontend_controller_test.exs new file mode 100644 index 000000000..461d6e5c9 --- /dev/null +++ b/test/pleroma/web/admin_api/controllers/frontend_controller_test.exs @@ -0,0 +1,94 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.AdminAPI.FrontendControllerTest do + use Pleroma.Web.ConnCase + use Oban.Testing, repo: Pleroma.Repo + + import Pleroma.Factory + + alias Pleroma.Config + alias Pleroma.Tests.ObanHelpers + alias Pleroma.Workers.FrontendInstallerWorker + + @dir "test/frontend_static_test" + + setup do + clear_config([:instance, :static_dir], @dir) + File.mkdir_p!(Pleroma.Frontend.dir()) + + on_exit(fn -> + File.rm_rf(@dir) + end) + + admin = insert(:user, is_admin: true) + token = insert(:oauth_admin_token, user: admin) + + conn = + build_conn() + |> assign(:user, admin) + |> assign(:token, token) + + {:ok, %{admin: admin, token: token, conn: conn}} + end + + describe "GET /api/pleroma/admin/frontends" do + test "it lists available frontends", %{conn: conn} do + response = + conn + |> get("/api/pleroma/admin/frontends") + |> json_response_and_validate_schema(:ok) + + assert Enum.map(response, & &1["name"]) == + Enum.map(Config.get([:frontends, :available]), fn {_, map} -> map["name"] end) + + refute Enum.any?(response, fn frontend -> frontend["installed"] == true end) + end + end + + describe "POST /api/pleroma/admin/frontends" do + test "it installs a frontend", %{conn: conn} do + clear_config([:frontends, :available], %{ + "pleroma" => %{ + "ref" => "fantasy", + "name" => "pleroma", + "build_url" => "http://gensokyo.2hu/builds/${ref}" + } + }) + + Tesla.Mock.mock(fn %{url: "http://gensokyo.2hu/builds/fantasy"} -> + %Tesla.Env{status: 200, body: File.read!("test/fixtures/tesla_mock/frontend_dist.zip")} + end) + + conn + |> put_req_header("content-type", "application/json") + |> post("/api/pleroma/admin/frontends", %{name: "pleroma"}) + |> json_response_and_validate_schema(:ok) + + assert_enqueued( + worker: FrontendInstallerWorker, + args: %{"name" => "pleroma", "opts" => %{}} + ) + + ObanHelpers.perform(all_enqueued(worker: FrontendInstallerWorker)) + + assert File.exists?(Path.join([@dir, "frontends", "pleroma", "fantasy", "test.txt"])) + + response = + conn + |> get("/api/pleroma/admin/frontends") + |> json_response_and_validate_schema(:ok) + + assert response == [ + %{ + "build_url" => "http://gensokyo.2hu/builds/${ref}", + "git" => nil, + "installed" => true, + "name" => "pleroma", + "ref" => "fantasy" + } + ] + end + end +end From d83c2bd330d1ed01b84634b70dfe024020ebfd6c Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Thu, 29 Oct 2020 16:37:50 +0400 Subject: [PATCH 035/362] Add support for install via `file` and `build_url` params --- lib/pleroma/frontend.ex | 8 +-- .../operations/admin/frontend_operation.ex | 17 ++++-- test/pleroma/frontend_test.exs | 22 +++----- .../controllers/frontend_controller_test.exs | 52 ++++++++++++++++++- 4 files changed, 74 insertions(+), 25 deletions(-) diff --git a/lib/pleroma/frontend.ex b/lib/pleroma/frontend.ex index 3413d2fba..b3d4c3325 100644 --- a/lib/pleroma/frontend.ex +++ b/lib/pleroma/frontend.ex @@ -8,16 +8,16 @@ defmodule Pleroma.Frontend do require Logger def install(name, opts \\ []) do - cmd_frontend_info = %{ + frontend_info = %{ "ref" => opts[:ref], "build_url" => opts[:build_url], "build_dir" => opts[:build_dir] } - config_frontend_info = Config.get([:frontends, :available, name], %{}) - frontend_info = - Map.merge(config_frontend_info, cmd_frontend_info, fn _key, config, cmd -> + [:frontends, :available, name] + |> Config.get(%{}) + |> Map.merge(frontend_info, fn _key, config, cmd -> # This only overrides things that are actually set cmd || config end) 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 24d23a4e0..9d7d017a2 100644 --- a/lib/pleroma/web/api_spec/operations/admin/frontend_operation.ex +++ b/lib/pleroma/web/api_spec/operations/admin/frontend_operation.ex @@ -49,7 +49,7 @@ defp list_of_frontends do properties: %{ name: %Schema{type: :string}, git: %Schema{type: :string, format: :uri, nullable: true}, - build_url: %Schema{type: :string, format: :uri}, + build_url: %Schema{type: :string, format: :uri, nullable: true}, ref: %Schema{type: :string}, installed: %Schema{type: :boolean} } @@ -64,12 +64,19 @@ defp install_request do required: [:name], properties: %{ name: %Schema{ - type: :string, - nullable: false + type: :string }, ref: %Schema{ - type: :string, - nullable: false + type: :string + }, + file: %Schema{ + type: :string + }, + build_url: %Schema{ + type: :string + }, + build_dir: %Schema{ + type: :string } } } diff --git a/test/pleroma/frontend_test.exs b/test/pleroma/frontend_test.exs index 77913b223..223625857 100644 --- a/test/pleroma/frontend_test.exs +++ b/test/pleroma/frontend_test.exs @@ -6,8 +6,6 @@ defmodule Pleroma.FrontendTest do use Pleroma.DataCase alias Pleroma.Frontend - import ExUnit.CaptureIO, only: [capture_io: 1] - @dir "test/frontend_static_test" setup do @@ -32,9 +30,7 @@ test "it downloads and unzips a known frontend" do %Tesla.Env{status: 200, body: File.read!("test/fixtures/tesla_mock/frontend_dist.zip")} end) - capture_io(fn -> - Frontend.install("pleroma") - end) + Frontend.install("pleroma") assert File.exists?(Path.join([@dir, "frontends", "pleroma", "fantasy", "test.txt"])) end @@ -54,9 +50,7 @@ test "it also works given a file" do File.write!(previously_existing, "yey") assert File.exists?(previously_existing) - capture_io(fn -> - Frontend.install("pleroma", file: "test/fixtures/tesla_mock/frontend.zip") - end) + Frontend.install("pleroma", file: "test/fixtures/tesla_mock/frontend.zip") assert File.exists?(Path.join([folder, "test.txt"])) refute File.exists?(previously_existing) @@ -67,13 +61,11 @@ test "it downloads and unzips unknown frontends" do %Tesla.Env{status: 200, body: File.read!("test/fixtures/tesla_mock/frontend.zip")} end) - capture_io(fn -> - Frontend.install("unknown", - ref: "baka", - build_url: "http://gensokyo.2hu/madeup.zip", - build_dir: "" - ) - end) + Frontend.install("unknown", + ref: "baka", + build_url: "http://gensokyo.2hu/madeup.zip", + build_dir: "" + ) assert File.exists?(Path.join([@dir, "frontends", "unknown", "baka", "test.txt"])) end diff --git a/test/pleroma/web/admin_api/controllers/frontend_controller_test.exs b/test/pleroma/web/admin_api/controllers/frontend_controller_test.exs index 461d6e5c9..afe82ddf5 100644 --- a/test/pleroma/web/admin_api/controllers/frontend_controller_test.exs +++ b/test/pleroma/web/admin_api/controllers/frontend_controller_test.exs @@ -48,7 +48,7 @@ test "it lists available frontends", %{conn: conn} do end describe "POST /api/pleroma/admin/frontends" do - test "it installs a frontend", %{conn: conn} do + test "from available frontends", %{conn: conn} do clear_config([:frontends, :available], %{ "pleroma" => %{ "ref" => "fantasy", @@ -90,5 +90,55 @@ test "it installs a frontend", %{conn: conn} do } ] end + + test "from a file", %{conn: conn} do + clear_config([:frontends, :available], %{ + "pleroma" => %{ + "ref" => "fantasy", + "name" => "pleroma", + "build_dir" => "" + } + }) + + conn + |> put_req_header("content-type", "application/json") + |> post("/api/pleroma/admin/frontends", %{ + name: "pleroma", + file: "test/fixtures/tesla_mock/frontend.zip" + }) + |> json_response_and_validate_schema(:ok) + + assert_enqueued( + worker: FrontendInstallerWorker, + args: %{ + "name" => "pleroma", + "opts" => %{"file" => "test/fixtures/tesla_mock/frontend.zip"} + } + ) + + ObanHelpers.perform(all_enqueued(worker: FrontendInstallerWorker)) + + assert File.exists?(Path.join([@dir, "frontends", "pleroma", "fantasy", "test.txt"])) + end + + test "from an URL", %{conn: conn} do + Tesla.Mock.mock(fn %{url: "http://gensokyo.2hu/madeup.zip"} -> + %Tesla.Env{status: 200, body: File.read!("test/fixtures/tesla_mock/frontend.zip")} + end) + + conn + |> put_req_header("content-type", "application/json") + |> post("/api/pleroma/admin/frontends", %{ + name: "unknown", + ref: "baka", + build_url: "http://gensokyo.2hu/madeup.zip", + build_dir: "" + }) + |> json_response_and_validate_schema(:ok) + + ObanHelpers.perform(all_enqueued(worker: FrontendInstallerWorker)) + + assert File.exists?(Path.join([@dir, "frontends", "unknown", "baka", "test.txt"])) + end end end From 75d131ba1860dc75486819ca93310292244ef92e Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Thu, 29 Oct 2020 15:55:30 +0400 Subject: [PATCH 036/362] Add documentation and update CHANGELOG --- CHANGELOG.md | 1 + docs/API/admin_api.md | 58 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index afeaa930b..5b52acfb4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Mix task option for force-unfollowing relays - Media preview proxy (requires `ffmpeg` and `ImageMagick` to be installed and media proxy to be enabled; see `:media_preview_proxy` config for more details). - Pleroma API: Importing the mutes users from CSV files. +- Pleroma API: An endpoint to manage frontends - Experimental websocket-based federation between Pleroma instances. ### Changed diff --git a/docs/API/admin_api.md b/docs/API/admin_api.md index 7bf13daef..ca8c98728 100644 --- a/docs/API/admin_api.md +++ b/docs/API/admin_api.md @@ -1497,3 +1497,61 @@ Returns the content of the document "url": "https://example.com/instance/panel.html" } ``` + +## `GET /api/pleroma/admin/frontends + +### List available frontends + +- Response: + +```json +[ + { + "build_url": "https://git.pleroma.social/pleroma/fedi-fe/-/jobs/artifacts/${ref}/download?job=build", + "git": "https://git.pleroma.social/pleroma/fedi-fe", + "installed": true, + "name": "fedi-fe", + "ref": "master" + }, + { + "build_url": "https://git.pleroma.social/lambadalambda/kenoma/-/jobs/artifacts/${ref}/download?job=build", + "git": "https://git.pleroma.social/lambadalambda/kenoma", + "installed": false, + "name": "kenoma", + "ref": "master" + } +] +``` + + +## `POST /api/pleroma/admin/frontends + +### Install a frontend + +- Params: + - `name`: frontend name, required + - `ref`: frontend ref + - `file`: path to a frontend zip file + - `build_url`: build URL + - `build_dir`: build directory + +- Response: + +```json +[ + { + "build_url": "https://git.pleroma.social/pleroma/fedi-fe/-/jobs/artifacts/${ref}/download?job=build", + "git": "https://git.pleroma.social/pleroma/fedi-fe", + "installed": true, + "name": "fedi-fe", + "ref": "master" + }, + { + "build_url": "https://git.pleroma.social/lambadalambda/kenoma/-/jobs/artifacts/${ref}/download?job=build", + "git": "https://git.pleroma.social/lambadalambda/kenoma", + "installed": false, + "name": "kenoma", + "ref": "master" + } +] +``` From 04f6b48ac1a76fe9c6c3fd573427d418bc152adf Mon Sep 17 00:00:00 2001 From: Ivan Tashkinov Date: Sat, 31 Oct 2020 13:38:35 +0300 Subject: [PATCH 037/362] Auth subsystem refactoring and tweaks. Added proper OAuth skipping for SessionAuthenticationPlug. Integrated LegacyAuthenticationPlug into AuthenticationPlug. Adjusted tests & docs. --- docs/dev.md | 4 +- lib/pleroma/helpers/auth_helper.ex | 17 ++++ .../plugs/admin_secret_authentication_plug.ex | 4 +- lib/pleroma/web/plugs/authentication_plug.ex | 63 +++++++------- .../web/plugs/basic_auth_decoder_plug.ex | 6 ++ lib/pleroma/web/plugs/ensure_user_key_plug.ex | 5 +- .../web/plugs/legacy_authentication_plug.ex | 41 ---------- .../web/plugs/session_authentication_plug.ex | 10 +++ .../web/plugs/set_user_session_id_plug.ex | 3 +- lib/pleroma/web/plugs/user_fetcher_plug.ex | 6 ++ lib/pleroma/web/router.ex | 1 - .../admin_secret_authentication_plug_test.exs | 2 + .../web/plugs/authentication_plug_test.exs | 3 + .../plugs/legacy_authentication_plug_test.exs | 82 ------------------- .../session_authentication_plug_test.exs | 32 ++++---- 15 files changed, 97 insertions(+), 182 deletions(-) create mode 100644 lib/pleroma/helpers/auth_helper.ex delete mode 100644 lib/pleroma/web/plugs/legacy_authentication_plug.ex delete mode 100644 test/pleroma/web/plugs/legacy_authentication_plug_test.exs diff --git a/docs/dev.md b/docs/dev.md index 22e0691f1..ba2718673 100644 --- a/docs/dev.md +++ b/docs/dev.md @@ -14,9 +14,9 @@ This document contains notes and guidelines for Pleroma developers. For `:api` pipeline routes, it'll be verified whether `OAuthScopesPlug` was called or explicitly skipped, and if it was not then auth information will be dropped for request. Then `EnsurePublicOrAuthenticatedPlug` will be called to ensure that either the instance is not private or user is authenticated (unless explicitly skipped). Such automated checks help to prevent human errors and result in higher security / privacy for users. -## [HTTP Basic Authentication](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Authorization) +## Non-OAuth authentication -* With HTTP Basic Auth, OAuth scopes check is _not_ performed for any action (since password is provided during the auth, requester is able to obtain a token with full permissions anyways). `Pleroma.Web.Plugs.AuthenticationPlug` and `Pleroma.Web.Plugs.LegacyAuthenticationPlug` both call `Pleroma.Web.Plugs.OAuthScopesPlug.skip_plug(conn)` when password is provided. +* With non-OAuth authentication ([HTTP Basic Authentication](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Authorization) or HTTP header- or params-provided auth), OAuth scopes check is _not_ performed for any action (since password is provided during the auth, requester is able to obtain a token with full permissions anyways); auth plugs invoke `Pleroma.Helpers.AuthHelper.skip_oauth(conn)` in this case. ## Auth-related configuration, OAuth consumer mode etc. diff --git a/lib/pleroma/helpers/auth_helper.ex b/lib/pleroma/helpers/auth_helper.ex new file mode 100644 index 000000000..6e29c006a --- /dev/null +++ b/lib/pleroma/helpers/auth_helper.ex @@ -0,0 +1,17 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Helpers.AuthHelper do + alias Pleroma.Web.Plugs.OAuthScopesPlug + + @doc """ + Skips OAuth permissions (scopes) checks, assigns nil `:token`. + Intended to be used with explicit authentication and only when OAuth token cannot be determined. + """ + def skip_oauth(conn) do + conn + |> Plug.Conn.assign(:token, nil) + |> OAuthScopesPlug.skip_plug() + end +end diff --git a/lib/pleroma/web/plugs/admin_secret_authentication_plug.ex b/lib/pleroma/web/plugs/admin_secret_authentication_plug.ex index d7d4e4092..ff49801f4 100644 --- a/lib/pleroma/web/plugs/admin_secret_authentication_plug.ex +++ b/lib/pleroma/web/plugs/admin_secret_authentication_plug.ex @@ -5,8 +5,8 @@ defmodule Pleroma.Web.Plugs.AdminSecretAuthenticationPlug do import Plug.Conn + alias Pleroma.Helpers.AuthHelper alias Pleroma.User - alias Pleroma.Web.Plugs.OAuthScopesPlug alias Pleroma.Web.Plugs.RateLimiter def init(options) do @@ -51,7 +51,7 @@ def authenticate(conn) do defp assign_admin_user(conn) do conn |> assign(:user, %User{is_admin: true}) - |> OAuthScopesPlug.skip_plug() + |> AuthHelper.skip_oauth() end defp handle_bad_token(conn) do diff --git a/lib/pleroma/web/plugs/authentication_plug.ex b/lib/pleroma/web/plugs/authentication_plug.ex index e2a8b1b69..a7b8a9bfe 100644 --- a/lib/pleroma/web/plugs/authentication_plug.ex +++ b/lib/pleroma/web/plugs/authentication_plug.ex @@ -3,6 +3,9 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Plugs.AuthenticationPlug do + @moduledoc "Password authentication plug." + + alias Pleroma.Helpers.AuthHelper alias Pleroma.User import Plug.Conn @@ -11,6 +14,30 @@ defmodule Pleroma.Web.Plugs.AuthenticationPlug do def init(options), do: options + def call(%{assigns: %{user: %User{}}} = conn, _), do: conn + + def call( + %{ + assigns: %{ + auth_user: %{password_hash: password_hash} = auth_user, + auth_credentials: %{password: password} + } + } = conn, + _ + ) do + if checkpw(password, password_hash) do + {:ok, auth_user} = maybe_update_password(auth_user, password) + + conn + |> assign(:user, auth_user) + |> AuthHelper.skip_oauth() + else + conn + end + end + + def call(conn, _), do: conn + def checkpw(password, "$6" <> _ = password_hash) do :crypt.crypt(password, password_hash) == password_hash end @@ -40,40 +67,6 @@ def maybe_update_password(%User{password_hash: "$6" <> _} = user, password) do def maybe_update_password(user, _), do: {:ok, user} defp do_update_password(user, password) do - user - |> User.password_update_changeset(%{ - "password" => password, - "password_confirmation" => password - }) - |> Pleroma.Repo.update() + User.reset_password(user, %{password: password, password_confirmation: password}) end - - def call(%{assigns: %{user: %User{}}} = conn, _), do: conn - - def call( - %{ - assigns: %{ - auth_user: %{password_hash: password_hash} = auth_user, - auth_credentials: %{password: password} - } - } = conn, - _ - ) do - if checkpw(password, password_hash) do - {:ok, auth_user} = maybe_update_password(auth_user, password) - - conn - |> assign(:user, auth_user) - |> Pleroma.Web.Plugs.OAuthScopesPlug.skip_plug() - else - conn - end - end - - def call(%{assigns: %{auth_credentials: %{password: _}}} = conn, _) do - Pbkdf2.no_user_verify() - conn - end - - def call(conn, _), do: conn end diff --git a/lib/pleroma/web/plugs/basic_auth_decoder_plug.ex b/lib/pleroma/web/plugs/basic_auth_decoder_plug.ex index 4dadfb000..97529aedb 100644 --- a/lib/pleroma/web/plugs/basic_auth_decoder_plug.ex +++ b/lib/pleroma/web/plugs/basic_auth_decoder_plug.ex @@ -3,6 +3,12 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Plugs.BasicAuthDecoderPlug do + @moduledoc """ + Decodes HTTP Basic Auth information and assigns `:auth_credentials`. + + NOTE: no checks are performed at this step, auth_credentials/username could be easily faked. + """ + import Plug.Conn def init(options) do diff --git a/lib/pleroma/web/plugs/ensure_user_key_plug.ex b/lib/pleroma/web/plugs/ensure_user_key_plug.ex index 70d3091f0..31608dbbf 100644 --- a/lib/pleroma/web/plugs/ensure_user_key_plug.ex +++ b/lib/pleroma/web/plugs/ensure_user_key_plug.ex @@ -5,6 +5,8 @@ defmodule Pleroma.Web.Plugs.EnsureUserKeyPlug do import Plug.Conn + @moduledoc "Ensures `conn.assigns.user` is initialized." + def init(opts) do opts end @@ -12,7 +14,6 @@ def init(opts) do def call(%{assigns: %{user: _}} = conn, _), do: conn def call(conn, _) do - conn - |> assign(:user, nil) + assign(conn, :user, nil) end end diff --git a/lib/pleroma/web/plugs/legacy_authentication_plug.ex b/lib/pleroma/web/plugs/legacy_authentication_plug.ex deleted file mode 100644 index 2a54d0b59..000000000 --- a/lib/pleroma/web/plugs/legacy_authentication_plug.ex +++ /dev/null @@ -1,41 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.Plugs.LegacyAuthenticationPlug do - import Plug.Conn - - alias Pleroma.User - - def init(options) do - options - end - - def call(%{assigns: %{user: %User{}}} = conn, _), do: conn - - def call( - %{ - assigns: %{ - auth_user: %{password_hash: "$6$" <> _ = password_hash} = auth_user, - auth_credentials: %{password: password} - } - } = conn, - _ - ) do - with ^password_hash <- :crypt.crypt(password, password_hash), - {:ok, user} <- - User.reset_password(auth_user, %{password: password, password_confirmation: password}) do - conn - |> assign(:auth_user, user) - |> assign(:user, user) - |> Pleroma.Web.Plugs.OAuthScopesPlug.skip_plug() - else - _ -> - conn - end - end - - def call(conn, _) do - conn - end -end diff --git a/lib/pleroma/web/plugs/session_authentication_plug.ex b/lib/pleroma/web/plugs/session_authentication_plug.ex index 6e176d553..51704e273 100644 --- a/lib/pleroma/web/plugs/session_authentication_plug.ex +++ b/lib/pleroma/web/plugs/session_authentication_plug.ex @@ -3,17 +3,27 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Plugs.SessionAuthenticationPlug do + @moduledoc """ + Authenticates user by session-stored `:user_id` and request-contained username. + Username can be provided via HTTP Basic Auth (the password is not checked and can be anything). + """ + import Plug.Conn + alias Pleroma.Helpers.AuthHelper + def init(options) do options end + def call(%{assigns: %{user: %Pleroma.User{}}} = conn, _), do: conn + def call(conn, _) do with saved_user_id <- get_session(conn, :user_id), %{auth_user: %{id: ^saved_user_id}} <- conn.assigns do conn |> assign(:user, conn.assigns.auth_user) + |> AuthHelper.skip_oauth() else _ -> conn 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 e520159e4..6ddb6b5e5 100644 --- a/lib/pleroma/web/plugs/set_user_session_id_plug.ex +++ b/lib/pleroma/web/plugs/set_user_session_id_plug.ex @@ -11,8 +11,7 @@ def init(opts) do end def call(%{assigns: %{user: %User{id: id}}} = conn, _) do - conn - |> put_session(:user_id, id) + put_session(conn, :user_id, id) end def call(conn, _), do: conn diff --git a/lib/pleroma/web/plugs/user_fetcher_plug.ex b/lib/pleroma/web/plugs/user_fetcher_plug.ex index 4039600da..89e16b49f 100644 --- a/lib/pleroma/web/plugs/user_fetcher_plug.ex +++ b/lib/pleroma/web/plugs/user_fetcher_plug.ex @@ -3,6 +3,12 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Plugs.UserFetcherPlug do + @moduledoc """ + Assigns `:auth_user` basing on `:auth_credentials`. + + NOTE: no checks are performed at this step, auth_credentials/username could be easily faked. + """ + alias Pleroma.User import Plug.Conn diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index 76ca2c9b5..9da10f1e5 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -49,7 +49,6 @@ defmodule Pleroma.Web.Router do plug(Pleroma.Web.Plugs.BasicAuthDecoderPlug) plug(Pleroma.Web.Plugs.UserFetcherPlug) plug(Pleroma.Web.Plugs.SessionAuthenticationPlug) - plug(Pleroma.Web.Plugs.LegacyAuthenticationPlug) plug(Pleroma.Web.Plugs.AuthenticationPlug) end diff --git a/test/pleroma/web/plugs/admin_secret_authentication_plug_test.exs b/test/pleroma/web/plugs/admin_secret_authentication_plug_test.exs index 33394722a..23498badf 100644 --- a/test/pleroma/web/plugs/admin_secret_authentication_plug_test.exs +++ b/test/pleroma/web/plugs/admin_secret_authentication_plug_test.exs @@ -49,6 +49,7 @@ test "with `admin_token` query parameter", %{conn: conn} do |> AdminSecretAuthenticationPlug.call(%{}) assert conn.assigns[:user].is_admin + assert conn.assigns[:token] == nil assert PlugHelper.plug_skipped?(conn, OAuthScopesPlug) end @@ -69,6 +70,7 @@ test "with `x-admin-token` HTTP header", %{conn: conn} do |> AdminSecretAuthenticationPlug.call(%{}) assert conn.assigns[:user].is_admin + assert conn.assigns[:token] == nil assert PlugHelper.plug_skipped?(conn, OAuthScopesPlug) end end diff --git a/test/pleroma/web/plugs/authentication_plug_test.exs b/test/pleroma/web/plugs/authentication_plug_test.exs index af39352e2..3dedd38b2 100644 --- a/test/pleroma/web/plugs/authentication_plug_test.exs +++ b/test/pleroma/web/plugs/authentication_plug_test.exs @@ -48,6 +48,7 @@ test "with a correct password in the credentials, " <> |> AuthenticationPlug.call(%{}) assert conn.assigns.user == conn.assigns.auth_user + assert conn.assigns.token == nil assert PlugHelper.plug_skipped?(conn, OAuthScopesPlug) end @@ -62,6 +63,7 @@ test "with a bcrypt hash, it updates to a pkbdf2 hash", %{conn: conn} do |> AuthenticationPlug.call(%{}) assert conn.assigns.user.id == conn.assigns.auth_user.id + assert conn.assigns.token == nil assert PlugHelper.plug_skipped?(conn, OAuthScopesPlug) user = User.get_by_id(user.id) @@ -83,6 +85,7 @@ test "with a crypt hash, it updates to a pkbdf2 hash", %{conn: conn} do |> AuthenticationPlug.call(%{}) assert conn.assigns.user.id == conn.assigns.auth_user.id + assert conn.assigns.token == nil assert PlugHelper.plug_skipped?(conn, OAuthScopesPlug) user = User.get_by_id(user.id) diff --git a/test/pleroma/web/plugs/legacy_authentication_plug_test.exs b/test/pleroma/web/plugs/legacy_authentication_plug_test.exs deleted file mode 100644 index 2016a31a8..000000000 --- a/test/pleroma/web/plugs/legacy_authentication_plug_test.exs +++ /dev/null @@ -1,82 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.Plugs.LegacyAuthenticationPlugTest do - use Pleroma.Web.ConnCase - - import Pleroma.Factory - - alias Pleroma.User - alias Pleroma.Web.Plugs.LegacyAuthenticationPlug - alias Pleroma.Web.Plugs.OAuthScopesPlug - alias Pleroma.Web.Plugs.PlugHelper - - setup do - user = - insert(:user, - password: "password", - password_hash: - "$6$9psBWV8gxkGOZWBz$PmfCycChoxeJ3GgGzwvhlgacb9mUoZ.KUXNCssekER4SJ7bOK53uXrHNb2e4i8yPFgSKyzaW9CcmrDXWIEMtD1" - ) - - %{user: user} - end - - test "it does nothing if a user is assigned", %{conn: conn, user: user} do - conn = - conn - |> assign(:auth_credentials, %{username: "dude", password: "password"}) - |> assign(:auth_user, user) - |> assign(:user, %User{}) - - ret_conn = - conn - |> LegacyAuthenticationPlug.call(%{}) - - assert ret_conn == conn - end - - @tag :skip_on_mac - test "if `auth_user` is present and password is correct, " <> - "it authenticates the user, resets the password, marks OAuthScopesPlug as skipped", - %{ - conn: conn, - user: user - } do - conn = - conn - |> assign(:auth_credentials, %{username: "dude", password: "password"}) - |> assign(:auth_user, user) - - conn = LegacyAuthenticationPlug.call(conn, %{}) - - assert conn.assigns.user.id == user.id - assert PlugHelper.plug_skipped?(conn, OAuthScopesPlug) - end - - @tag :skip_on_mac - test "it does nothing if the password is wrong", %{ - conn: conn, - user: user - } do - conn = - conn - |> assign(:auth_credentials, %{username: "dude", password: "wrong_password"}) - |> assign(:auth_user, user) - - ret_conn = - conn - |> LegacyAuthenticationPlug.call(%{}) - - assert conn == ret_conn - end - - test "with no credentials or user it does nothing", %{conn: conn} do - ret_conn = - conn - |> LegacyAuthenticationPlug.call(%{}) - - assert ret_conn == conn - end -end diff --git a/test/pleroma/web/plugs/session_authentication_plug_test.exs b/test/pleroma/web/plugs/session_authentication_plug_test.exs index 2b4d5bc0c..d027331a9 100644 --- a/test/pleroma/web/plugs/session_authentication_plug_test.exs +++ b/test/pleroma/web/plugs/session_authentication_plug_test.exs @@ -6,6 +6,8 @@ defmodule Pleroma.Web.Plugs.SessionAuthenticationPlugTest do use Pleroma.Web.ConnCase, async: true alias Pleroma.User + alias Pleroma.Web.Plugs.OAuthScopesPlug + alias Pleroma.Web.Plugs.PlugHelper alias Pleroma.Web.Plugs.SessionAuthenticationPlug setup %{conn: conn} do @@ -18,24 +20,20 @@ defmodule Pleroma.Web.Plugs.SessionAuthenticationPlugTest do conn = conn |> Plug.Session.call(Plug.Session.init(session_opts)) - |> fetch_session + |> fetch_session() |> assign(:auth_user, %User{id: 1}) %{conn: conn} end test "it does nothing if a user is assigned", %{conn: conn} do - conn = - conn - |> assign(:user, %User{}) - - ret_conn = - conn - |> SessionAuthenticationPlug.call(%{}) + conn = assign(conn, :user, %User{}) + ret_conn = SessionAuthenticationPlug.call(conn, %{}) assert ret_conn == conn end + # Scenario: requester has the cookie and knows the username (not necessarily knows the password) test "if the auth_user has the same id as the user_id in the session, it assigns the user", %{ conn: conn } do @@ -45,19 +43,23 @@ test "if the auth_user has the same id as the user_id in the session, it assigns |> SessionAuthenticationPlug.call(%{}) assert conn.assigns.user == conn.assigns.auth_user + assert conn.assigns.token == nil + assert PlugHelper.plug_skipped?(conn, OAuthScopesPlug) end + # Scenario: requester has the cookie but doesn't know the username test "if the auth_user has a different id as the user_id in the session, it does nothing", %{ conn: conn } do - conn = - conn - |> put_session(:user_id, -1) - - ret_conn = - conn - |> SessionAuthenticationPlug.call(%{}) + conn = put_session(conn, :user_id, -1) + ret_conn = SessionAuthenticationPlug.call(conn, %{}) assert ret_conn == conn end + + test "if the session does not contain user_id, it does nothing", %{ + conn: conn + } do + assert conn == SessionAuthenticationPlug.call(conn, %{}) + end end From fa6ad67397bd951d3e7f65ac3ac5ed6a3ee9b4c4 Mon Sep 17 00:00:00 2001 From: feld Date: Sun, 1 Nov 2020 19:31:17 +0000 Subject: [PATCH 038/362] Merge branch 'tesla-get-to-pleroma' into 'develop' Use Pleroma.HTTP instead of Tesla Closes #2275 See merge request pleroma/pleroma!3113 --- lib/pleroma/captcha/kocaptcha.ex | 2 +- lib/pleroma/emoji/pack.ex | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/pleroma/captcha/kocaptcha.ex b/lib/pleroma/captcha/kocaptcha.ex index 337506647..201b55ab4 100644 --- a/lib/pleroma/captcha/kocaptcha.ex +++ b/lib/pleroma/captcha/kocaptcha.ex @@ -10,7 +10,7 @@ defmodule Pleroma.Captcha.Kocaptcha do def new do endpoint = Pleroma.Config.get!([__MODULE__, :endpoint]) - case Tesla.get(endpoint <> "/new") do + case Pleroma.HTTP.get(endpoint <> "/new") do {:error, _} -> %{error: :kocaptcha_service_unavailable} diff --git a/lib/pleroma/emoji/pack.ex b/lib/pleroma/emoji/pack.ex index 0670f29f1..ca58e5432 100644 --- a/lib/pleroma/emoji/pack.ex +++ b/lib/pleroma/emoji/pack.ex @@ -594,7 +594,7 @@ defp fetch_pack_info(remote_pack, uri, name) do end defp download_archive(url, sha) do - with {:ok, %{body: archive}} <- Tesla.get(url) do + with {:ok, %{body: archive}} <- Pleroma.HTTP.get(url) do if Base.decode16!(sha) == :crypto.hash(:sha256, archive) do {:ok, archive} else @@ -617,7 +617,7 @@ defp fallback_sha_changed?(pack, data) do end defp update_sha_and_save_metadata(pack, data) do - with {:ok, %{body: zip}} <- Tesla.get(data[:"fallback-src"]), + with {:ok, %{body: zip}} <- Pleroma.HTTP.get(data[:"fallback-src"]), :ok <- validate_has_all_files(pack, zip) do fallback_sha = :sha256 |> :crypto.hash(zip) |> Base.encode16() From 49b43e668eb208a95a621f667f72f41b69bc10e5 Mon Sep 17 00:00:00 2001 From: feld Date: Thu, 17 Sep 2020 16:54:53 +0000 Subject: [PATCH 039/362] Merge branch 'instance-docs' into 'develop' AdminAPI: Allow to modify Terms of Service and Instance Panel via Admin API Closes #1516 See merge request pleroma/pleroma!2931 --- .../instance_document_controller_test.exs | 106 ++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 test/web/admin_api/controllers/instance_document_controller_test.exs diff --git a/test/web/admin_api/controllers/instance_document_controller_test.exs b/test/web/admin_api/controllers/instance_document_controller_test.exs new file mode 100644 index 000000000..5f7b042f6 --- /dev/null +++ b/test/web/admin_api/controllers/instance_document_controller_test.exs @@ -0,0 +1,106 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.AdminAPI.InstanceDocumentControllerTest do + use Pleroma.Web.ConnCase, async: true + import Pleroma.Factory + alias Pleroma.Config + + @dir "test/tmp/instance_static" + @default_instance_panel ~s(

Welcome to Pleroma!

) + + setup do + File.mkdir_p!(@dir) + on_exit(fn -> File.rm_rf(@dir) end) + end + + setup do: clear_config([:instance, :static_dir], @dir) + + setup do + admin = insert(:user, is_admin: true) + token = insert(:oauth_admin_token, user: admin) + + conn = + build_conn() + |> assign(:user, admin) + |> assign(:token, token) + + {:ok, %{admin: admin, token: token, conn: conn}} + end + + describe "GET /api/pleroma/admin/instance_document/:name" do + test "return the instance document url", %{conn: conn} do + conn = get(conn, "/api/pleroma/admin/instance_document/instance-panel") + + assert content = html_response(conn, 200) + assert String.contains?(content, @default_instance_panel) + end + + test "it returns 403 if requested by a non-admin" do + non_admin_user = insert(:user) + token = insert(:oauth_token, user: non_admin_user) + + conn = + build_conn() + |> assign(:user, non_admin_user) + |> assign(:token, token) + |> get("/api/pleroma/admin/instance_document/instance-panel") + + assert json_response(conn, :forbidden) + end + + test "it returns 404 if the instance document with the given name doesn't exist", %{ + conn: conn + } do + conn = get(conn, "/api/pleroma/admin/instance_document/1234") + + assert json_response_and_validate_schema(conn, 404) + end + end + + describe "PATCH /api/pleroma/admin/instance_document/:name" do + test "uploads the instance document", %{conn: conn} do + image = %Plug.Upload{ + content_type: "text/html", + path: Path.absname("test/fixtures/custom_instance_panel.html"), + filename: "custom_instance_panel.html" + } + + conn = + conn + |> put_req_header("content-type", "multipart/form-data") + |> patch("/api/pleroma/admin/instance_document/instance-panel", %{ + "file" => image + }) + + assert %{"url" => url} = json_response_and_validate_schema(conn, 200) + index = get(build_conn(), url) + assert html_response(index, 200) == "

Custom instance panel

" + end + end + + describe "DELETE /api/pleroma/admin/instance_document/:name" do + test "deletes the instance document", %{conn: conn} do + File.mkdir!(@dir <> "/instance/") + File.write!(@dir <> "/instance/panel.html", "Custom instance panel") + + conn_resp = + conn + |> get("/api/pleroma/admin/instance_document/instance-panel") + + assert html_response(conn_resp, 200) == "Custom instance panel" + + conn + |> delete("/api/pleroma/admin/instance_document/instance-panel") + |> json_response_and_validate_schema(200) + + conn_resp = + conn + |> get("/api/pleroma/admin/instance_document/instance-panel") + + assert content = html_response(conn_resp, 200) + assert String.contains?(content, @default_instance_panel) + end + end +end From 6c8469664a08d2cd02bd8e6d998d8e2d5f07dac5 Mon Sep 17 00:00:00 2001 From: feld Date: Thu, 22 Oct 2020 20:33:52 +0000 Subject: [PATCH 040/362] Merge branch 'chore/elixir-1.11' into 'develop' Elixir 1.11 compatibility / Phoenix 1.5+ See merge request pleroma/pleroma!3059 --- config/config.exs | 3 +-- lib/phoenix/transports/web_socket/raw.ex | 7 +++++- lib/pleroma/application.ex | 16 +++++++++----- lib/pleroma/web.ex | 2 +- .../activity_pub/activity_pub_controller.ex | 4 ++-- lib/pleroma/web/activity_pub/publisher.ex | 4 +--- .../web/admin_api/views/report_view.ex | 2 +- lib/pleroma/web/common_api/utils.ex | 11 +--------- lib/pleroma/web/endpoint.ex | 2 ++ .../controllers/auth_controller.ex | 4 ++-- .../controllers/status_controller.ex | 9 ++------ .../web/media_proxy/invalidation/http.ex | 2 +- lib/pleroma/web/templates/layout/app.html.eex | 2 +- .../templates/layout/email_styled.html.eex | 2 +- .../templates/layout/metadata_player.html.eex | 2 +- .../web/templates/layout/static_fe.html.eex | 2 +- mix.exs | 13 ++++++++--- mix.lock | 22 ++++++++++--------- test/pleroma/notification_test.exs | 2 +- .../web/activity_pub/activity_pub_test.exs | 8 +++---- .../mrf/reject_non_public_test.exs | 8 +++---- .../web/activity_pub/mrf/tag_policy_test.exs | 2 +- .../transmogrifier/announce_handling_test.exs | 2 +- .../web/activity_pub/transmogrifier_test.exs | 2 +- test/pleroma/web/common_api_test.exs | 2 +- .../web/fed_sockets/fed_registry_test.exs | 4 ++-- .../controllers/account_controller_test.exs | 8 +++---- .../controllers/status_controller_test.exs | 2 +- .../web/o_auth/o_auth_controller_test.exs | 14 ++++++------ .../emoji_pack_controller_test.exs | 2 +- .../controllers/mascot_controller_test.exs | 2 +- test/support/channel_case.ex | 2 +- test/support/conn_case.ex | 3 ++- 33 files changed, 89 insertions(+), 83 deletions(-) diff --git a/config/config.exs b/config/config.exs index 148e9e7da..170e4e1c7 100644 --- a/config/config.exs +++ b/config/config.exs @@ -123,7 +123,6 @@ # Configures the endpoint config :pleroma, Pleroma.Web.Endpoint, - instrumenters: [Pleroma.Web.Endpoint.Instrumenter], url: [host: "localhost"], http: [ ip: {127, 0, 0, 1}, @@ -145,7 +144,7 @@ secret_key_base: "aK4Abxf29xU9TTDKre9coZPUgevcVCFQJe/5xP/7Lt4BEif6idBIbjupVbOrbKxl", signing_salt: "CqaoopA2", render_errors: [view: Pleroma.Web.ErrorView, accepts: ~w(json)], - pubsub: [name: Pleroma.PubSub, adapter: Phoenix.PubSub.PG2], + pubsub_server: Pleroma.PubSub, secure_cookie_flag: true, extra_cookie_attrs: [ "SameSite=Lax" diff --git a/lib/phoenix/transports/web_socket/raw.ex b/lib/phoenix/transports/web_socket/raw.ex index aab7fad99..c3665bebe 100644 --- a/lib/phoenix/transports/web_socket/raw.ex +++ b/lib/phoenix/transports/web_socket/raw.ex @@ -31,7 +31,12 @@ def init(%Plug.Conn{method: "GET"} = conn, {endpoint, handler, transport}) do case conn do %{halted: false} = conn -> - case Transport.connect(endpoint, handler, transport, __MODULE__, nil, conn.params) do + case handler.connect(%{ + endpoint: endpoint, + transport: transport, + options: [serializer: nil], + params: conn.params + }) do {:ok, socket} -> {:ok, conn, {__MODULE__, {socket, opts}}} diff --git a/lib/pleroma/application.ex b/lib/pleroma/application.ex index 301b4e273..51e9dda3b 100644 --- a/lib/pleroma/application.ex +++ b/lib/pleroma/application.ex @@ -100,7 +100,7 @@ def start(_type, _args) do ] ++ task_children(@env) ++ dont_run_in_test(@env) ++ - chat_child(@env, chat_enabled?()) ++ + chat_child(chat_enabled?()) ++ [ Pleroma.Web.Endpoint, Pleroma.Gopher.Server @@ -151,7 +151,10 @@ defp setup_instrumenters do Pleroma.Web.Endpoint.MetricsExporter.setup() Pleroma.Web.Endpoint.PipelineInstrumenter.setup() - Pleroma.Web.Endpoint.Instrumenter.setup() + + # Note: disabled until prometheus-phx is integrated into prometheus-phoenix: + # Pleroma.Web.Endpoint.Instrumenter.setup() + PrometheusPhx.setup() end defp cachex_children do @@ -202,11 +205,14 @@ defp dont_run_in_test(_) do ] end - defp chat_child(_env, true) do - [Pleroma.Web.ChatChannel.ChatChannelState] + defp chat_child(true) do + [ + Pleroma.Web.ChatChannel.ChatChannelState, + {Phoenix.PubSub, [name: Pleroma.PubSub, adapter: Phoenix.PubSub.PG2]} + ] end - defp chat_child(_, _), do: [] + defp chat_child(_), do: [] defp task_children(:test) do [ diff --git a/lib/pleroma/web.ex b/lib/pleroma/web.ex index 7779826e3..6ed19d3dd 100644 --- a/lib/pleroma/web.ex +++ b/lib/pleroma/web.ex @@ -172,7 +172,7 @@ def router do def channel do quote do # credo:disable-for-next-line Credo.Check.Consistency.MultiAliasImportRequireUse - use Phoenix.Channel + import Phoenix.Channel import Pleroma.Web.Gettext end end diff --git a/lib/pleroma/web/activity_pub/activity_pub_controller.ex b/lib/pleroma/web/activity_pub/activity_pub_controller.ex index 570bcc7e7..44f09be75 100644 --- a/lib/pleroma/web/activity_pub/activity_pub_controller.ex +++ b/lib/pleroma/web/activity_pub/activity_pub_controller.ex @@ -414,7 +414,7 @@ defp handle_user_activity( object = object |> Map.merge(Map.take(params, ["to", "cc"])) - |> Map.put("attributedTo", user.ap_id()) + |> Map.put("attributedTo", user.ap_id) |> Transmogrifier.fix_object() ActivityPub.create(%{ @@ -458,7 +458,7 @@ def update_outbox( %{assigns: %{user: %User{nickname: nickname} = user}} = conn, %{"nickname" => nickname} = params ) do - actor = user.ap_id() + actor = user.ap_id params = params diff --git a/lib/pleroma/web/activity_pub/publisher.ex b/lib/pleroma/web/activity_pub/publisher.ex index 9c3956683..a2930c1cd 100644 --- a/lib/pleroma/web/activity_pub/publisher.ex +++ b/lib/pleroma/web/activity_pub/publisher.ex @@ -242,9 +242,7 @@ def publish(%User{} = actor, %{data: %{"bcc" => bcc}} = activity) end) end - @doc """ - Publishes an activity to all relevant peers. - """ + # Publishes an activity to all relevant peers. def publish(%User{} = actor, %Activity{} = activity) do public = is_public?(activity) diff --git a/lib/pleroma/web/admin_api/views/report_view.ex b/lib/pleroma/web/admin_api/views/report_view.ex index 773f798fe..535556370 100644 --- a/lib/pleroma/web/admin_api/views/report_view.ex +++ b/lib/pleroma/web/admin_api/views/report_view.ex @@ -52,7 +52,7 @@ def render("show.json", %{report: report, user: user, account: account, statuses end def render("index_notes.json", %{notes: notes}) when is_list(notes) do - Enum.map(notes, &render(__MODULE__, "show_note.json", &1)) + Enum.map(notes, &render(__MODULE__, "show_note.json", Map.from_struct(&1))) end def render("index_notes.json", _), do: [] diff --git a/lib/pleroma/web/common_api/utils.ex b/lib/pleroma/web/common_api/utils.ex index 21f4d43e9..3b71adf0e 100644 --- a/lib/pleroma/web/common_api/utils.ex +++ b/lib/pleroma/web/common_api/utils.ex @@ -274,7 +274,7 @@ defp build_attachment_link(_), do: "" def format_input(text, format, options \\ []) @doc """ - Formatting text to plain text. + Formatting text to plain text, BBCode, HTML, or Markdown """ def format_input(text, "text/plain", options) do text @@ -285,9 +285,6 @@ def format_input(text, "text/plain", options) do end).() end - @doc """ - Formatting text as BBCode. - """ def format_input(text, "text/bbcode", options) do text |> String.replace(~r/\r/, "") @@ -297,18 +294,12 @@ def format_input(text, "text/bbcode", options) do |> Formatter.linkify(options) end - @doc """ - Formatting text to html. - """ def format_input(text, "text/html", options) do text |> Formatter.html_escape("text/html") |> Formatter.linkify(options) end - @doc """ - Formatting text to markdown. - """ def format_input(text, "text/markdown", options) do text |> Formatter.mentions_escape(options) diff --git a/lib/pleroma/web/endpoint.ex b/lib/pleroma/web/endpoint.ex index 56562c12f..d0e01f3d9 100644 --- a/lib/pleroma/web/endpoint.ex +++ b/lib/pleroma/web/endpoint.ex @@ -9,6 +9,8 @@ defmodule Pleroma.Web.Endpoint do socket("/socket", Pleroma.Web.UserSocket) + plug(Plug.Telemetry, event_prefix: [:phoenix, :endpoint]) + plug(Pleroma.Web.Plugs.SetLocalePlug) plug(CORSPlug) plug(Pleroma.Web.Plugs.HTTPSecurityPlug) diff --git a/lib/pleroma/web/mastodon_api/controllers/auth_controller.ex b/lib/pleroma/web/mastodon_api/controllers/auth_controller.ex index 75b809aab..9cc3984d0 100644 --- a/lib/pleroma/web/mastodon_api/controllers/auth_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/auth_controller.ex @@ -24,7 +24,7 @@ def login(%{assigns: %{user: %User{}}} = conn, _params) do redirect(conn, to: local_mastodon_root_path(conn)) end - @doc "Local Mastodon FE login init action" + # Local Mastodon FE login init action def login(conn, %{"code" => auth_token}) do with {:ok, app} <- get_or_make_app(), {:ok, auth} <- Authorization.get_by_token(app, auth_token), @@ -35,7 +35,7 @@ def login(conn, %{"code" => auth_token}) do end end - @doc "Local Mastodon FE callback action" + # Local Mastodon FE callback action def login(conn, _) do with {:ok, app} <- get_or_make_app() do path = diff --git a/lib/pleroma/web/mastodon_api/controllers/status_controller.ex b/lib/pleroma/web/mastodon_api/controllers/status_controller.ex index 08d6c1c22..6848adace 100644 --- a/lib/pleroma/web/mastodon_api/controllers/status_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/status_controller.ex @@ -127,9 +127,8 @@ def index(%{assigns: %{user: user}} = conn, %{ids: ids} = _params) do @doc """ POST /api/v1/statuses - - Creates a scheduled status when `scheduled_at` param is present and it's far enough """ + # Creates a scheduled status when `scheduled_at` param is present and it's far enough def create( %{ assigns: %{user: user}, @@ -160,11 +159,7 @@ def create( end end - @doc """ - POST /api/v1/statuses - - Creates a regular status - """ + # Creates a regular status def create(%{assigns: %{user: user}, body_params: %{status: _} = params} = conn, _) do params = Map.put(params, :in_reply_to_status_id, params[:in_reply_to_id]) diff --git a/lib/pleroma/web/media_proxy/invalidation/http.ex b/lib/pleroma/web/media_proxy/invalidation/http.ex index bb81d8888..0b0cde68c 100644 --- a/lib/pleroma/web/media_proxy/invalidation/http.ex +++ b/lib/pleroma/web/media_proxy/invalidation/http.ex @@ -30,7 +30,7 @@ defp do_purge(method, url, headers, options) do {:ok, %{status: status} = env} when 400 <= status and status < 500 -> {:error, env} - {:error, error} = error -> + {:error, _} = error -> error _ -> diff --git a/lib/pleroma/web/templates/layout/app.html.eex b/lib/pleroma/web/templates/layout/app.html.eex index 51603fe0c..3f28f1920 100644 --- a/lib/pleroma/web/templates/layout/app.html.eex +++ b/lib/pleroma/web/templates/layout/app.html.eex @@ -228,7 +228,7 @@

<%= Pleroma.Config.get([:instance, :name]) %>

- <%= render @view_module, @view_template, assigns %> + <%= @inner_content %>
diff --git a/lib/pleroma/web/templates/layout/email_styled.html.eex b/lib/pleroma/web/templates/layout/email_styled.html.eex index ca2caaf4d..82cabd889 100644 --- a/lib/pleroma/web/templates/layout/email_styled.html.eex +++ b/lib/pleroma/web/templates/layout/email_styled.html.eex @@ -181,7 +181,7 @@ <% end %> - <%= render @view_module, @view_template, assigns %> + <%= @inner_content %> diff --git a/lib/pleroma/web/templates/layout/metadata_player.html.eex b/lib/pleroma/web/templates/layout/metadata_player.html.eex index 460f28094..c00f6fa21 100644 --- a/lib/pleroma/web/templates/layout/metadata_player.html.eex +++ b/lib/pleroma/web/templates/layout/metadata_player.html.eex @@ -10,7 +10,7 @@ video, audio { } -<%= render @view_module, @view_template, assigns %> +<%= @inner_content %> diff --git a/lib/pleroma/web/templates/layout/static_fe.html.eex b/lib/pleroma/web/templates/layout/static_fe.html.eex index dc0ee2a5c..e6adb526b 100644 --- a/lib/pleroma/web/templates/layout/static_fe.html.eex +++ b/lib/pleroma/web/templates/layout/static_fe.html.eex @@ -9,7 +9,7 @@
- <%= render @view_module, @view_template, assigns %> + <%= @inner_content %>
diff --git a/mix.exs b/mix.exs index dfa035025..f91f57644 100644 --- a/mix.exs +++ b/mix.exs @@ -114,10 +114,10 @@ defp oauth_deps do # Type `mix help deps` for examples and options. defp deps do [ - {:phoenix, "~> 1.4.17"}, + {:phoenix, "~> 1.5.5"}, {:tzdata, "~> 1.0.3"}, {:plug_cowboy, "~> 2.3"}, - {:phoenix_pubsub, "~> 1.1"}, + {:phoenix_pubsub, "~> 2.0"}, {:phoenix_ecto, "~> 4.0"}, {:ecto_enum, "~> 1.4"}, {:ecto_sql, "~> 3.4.4"}, @@ -165,9 +165,16 @@ defp deps do {:telemetry, "~> 0.3"}, {:poolboy, "~> 1.5"}, {:prometheus, "~> 4.6"}, - {:prometheus_ex, "~> 3.0"}, + {:prometheus_ex, + git: "https://git.pleroma.social/pleroma/elixir-libraries/prometheus.ex.git", + ref: "a4e9beb3c1c479d14b352fd9d6dd7b1f6d7deee5", + override: true}, {:prometheus_plugs, "~> 1.1"}, {:prometheus_phoenix, "~> 1.3"}, + # Note: once `prometheus_phx` is integrated into `prometheus_phoenix`, remove the former: + {:prometheus_phx, + git: "https://git.pleroma.social/pleroma/elixir-libraries/prometheus-phx.git", + branch: "no-logging"}, {:prometheus_ecto, "~> 1.4"}, {:recon, "~> 2.5"}, {:quack, "~> 0.1.1"}, diff --git a/mix.lock b/mix.lock index 1f2885440..07238f550 100644 --- a/mix.lock +++ b/mix.lock @@ -18,8 +18,9 @@ "connection": {:hex, :connection, "1.0.4", "a1cae72211f0eef17705aaededacac3eb30e6625b04a6117c1b2db6ace7d5976", [:mix], [], "hexpm", "4a0850c9be22a43af9920a71ab17c051f5f7d45c209e40269a1938832510e4d9"}, "cors_plug": {:hex, :cors_plug, "2.0.2", "2b46083af45e4bc79632bd951550509395935d3e7973275b2b743bd63cc942ce", [:mix], [{:plug, "~> 1.8", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "f0d0e13f71c51fd4ef8b2c7e051388e4dfb267522a83a22392c856de7e46465f"}, "cowboy": {:hex, :cowboy, "2.8.0", "f3dc62e35797ecd9ac1b50db74611193c29815401e53bac9a5c0577bd7bc667d", [:rebar3], [{:cowlib, "~> 2.9.1", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "~> 1.7.1", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "4643e4fba74ac96d4d152c75803de6fad0b3fa5df354c71afdd6cbeeb15fac8a"}, + "cowboy_telemetry": {:hex, :cowboy_telemetry, "0.3.0", "69fdb5cf92df6373e15675eb4018cf629f5d8e35e74841bb637d6596cb797bbc", [:rebar3], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "42868c229d9a2900a1501c5d0355bfd46e24c862c322b0b4f5a6f14fe0216753"}, "cowlib": {:hex, :cowlib, "2.9.1", "61a6c7c50cf07fdd24b2f45b89500bb93b6686579b069a89f88cb211e1125c78", [:rebar3], [], "hexpm", "e4175dc240a70d996156160891e1c62238ede1729e45740bdd38064dad476170"}, - "credo": {:hex, :credo, "1.4.0", "92339d4cbadd1e88b5ee43d427b639b68a11071b6f73854e33638e30a0ea11f5", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "1fd3b70dce216574ce3c18bdf510b57e7c4c85c2ec9cad4bff854abaf7e58658"}, + "credo": {:hex, :credo, "1.4.1", "16392f1edd2cdb1de9fe4004f5ab0ae612c92e230433968eab00aafd976282fc", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "155f8a2989ad77504de5d8291fa0d41320fdcaa6a1030472e9967f285f8c7692"}, "crontab": {:hex, :crontab, "1.1.8", "2ce0e74777dfcadb28a1debbea707e58b879e6aa0ffbf9c9bb540887bce43617", [:mix], [{:ecto, "~> 1.0 or ~> 2.0 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm"}, "crypt": {:git, "https://github.com/msantos/crypt.git", "f63a705f92c26955977ee62a313012e309a4d77a", [ref: "f63a705f92c26955977ee62a313012e309a4d77a"]}, "custom_base": {:hex, :custom_base, "0.2.1", "4a832a42ea0552299d81652aa0b1f775d462175293e99dfbe4d7dbaab785a706", [:mix], [], "hexpm", "8df019facc5ec9603e94f7270f1ac73ddf339f56ade76a721eaa57c1493ba463"}, @@ -85,14 +86,14 @@ "p1_utils": {:hex, :p1_utils, "1.0.18", "3fe224de5b2e190d730a3c5da9d6e8540c96484cf4b4692921d1e28f0c32b01c", [:rebar3], [], "hexpm", "1fc8773a71a15553b179c986b22fbeead19b28fe486c332d4929700ffeb71f88"}, "parse_trans": {:hex, :parse_trans, "3.3.0", "09765507a3c7590a784615cfd421d101aec25098d50b89d7aa1d66646bc571c1", [:rebar3], [], "hexpm", "17ef63abde837ad30680ea7f857dd9e7ced9476cdd7b0394432af4bfc241b960"}, "pbkdf2_elixir": {:hex, :pbkdf2_elixir, "1.2.1", "9cbe354b58121075bd20eb83076900a3832324b7dd171a6895fab57b6bb2752c", [:mix], [{:comeonin, "~> 5.3", [hex: :comeonin, repo: "hexpm", optional: false]}], "hexpm", "d3b40a4a4630f0b442f19eca891fcfeeee4c40871936fed2f68e1c4faa30481f"}, - "phoenix": {:hex, :phoenix, "1.4.17", "1b1bd4cff7cfc87c94deaa7d60dd8c22e04368ab95499483c50640ef3bd838d8", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 1.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:plug, "~> 1.8.1 or ~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 1.0 or ~> 2.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "3a8e5d7a3d76d452bb5fb86e8b7bd115f737e4f8efe202a463d4aeb4a5809611"}, - "phoenix_ecto": {:hex, :phoenix_ecto, "4.1.0", "a044d0756d0464c5a541b4a0bf4bcaf89bffcaf92468862408290682c73ae50d", [:mix], [{:ecto, "~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.9", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "c5e666a341ff104d0399d8f0e4ff094559b2fde13a5985d4cb5023b2c2ac558b"}, + "phoenix": {:hex, :phoenix, "1.5.6", "8298cdb4e0f943242ba8410780a6a69cbbe972fef199b341a36898dd751bdd66", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_html, "~> 2.13", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.0", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:plug, "~> 1.10", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 1.0 or ~> 2.2", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.1.2 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "0dc4d39af1306b6aa5122729b0a95ca779e42c708c6fe7abbb3d336d5379e956"}, + "phoenix_ecto": {:hex, :phoenix_ecto, "4.2.1", "13f124cf0a3ce0f1948cf24654c7b9f2347169ff75c1123f44674afee6af3b03", [:mix], [{:ecto, "~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14.2 or ~> 2.15", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "478a1bae899cac0a6e02be1deec7e2944b7754c04e7d4107fc5a517f877743c0"}, "phoenix_html": {:hex, :phoenix_html, "2.14.2", "b8a3899a72050f3f48a36430da507dd99caf0ac2d06c77529b1646964f3d563e", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "58061c8dfd25da5df1ea0ca47c972f161beb6c875cd293917045b92ffe1bf617"}, - "phoenix_pubsub": {:hex, :phoenix_pubsub, "1.1.2", "496c303bdf1b2e98a9d26e89af5bba3ab487ba3a3735f74bf1f4064d2a845a3e", [:mix], [], "hexpm", "1f13f9f0f3e769a667a6b6828d29dec37497a082d195cc52dbef401a9b69bf38"}, - "phoenix_swoosh": {:hex, :phoenix_swoosh, "0.3.0", "2acfa0db038a7649e0a4614eee970e6ed9a39d191ccd79a03583b51d0da98165", [:mix], [{:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:swoosh, "~> 1.0", [hex: :swoosh, repo: "hexpm", optional: false]}], "hexpm", "b8bbae4b59a676de6b8bd8675eda37bc8b4424812ae429d6fdcb2b039e00003b"}, + "phoenix_pubsub": {:hex, :phoenix_pubsub, "2.0.0", "a1ae76717bb168cdeb10ec9d92d1480fec99e3080f011402c0a2d68d47395ffb", [:mix], [], "hexpm", "c52d948c4f261577b9c6fa804be91884b381a7f8f18450c5045975435350f771"}, + "phoenix_swoosh": {:hex, :phoenix_swoosh, "0.3.2", "43d3518349a22b8b1910ea28b4dd5119926d5017b3187db3fbd1a1e05769a851", [:mix], [{:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:swoosh, "~> 1.0", [hex: :swoosh, repo: "hexpm", optional: false]}], "hexpm", "3e2ac4e883db7af0702d75ba00c19901760e8342b91f8f66e13941de552e777f"}, "plug": {:hex, :plug, "1.10.4", "41eba7d1a2d671faaf531fa867645bd5a3dce0957d8e2a3f398ccff7d2ef017f", [:mix], [{:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ad1e233fe73d2eec56616568d260777b67f53148a999dc2d048f4eb9778fe4a0"}, - "plug_cowboy": {:hex, :plug_cowboy, "2.3.0", "149a50e05cb73c12aad6506a371cd75750c0b19a32f81866e1a323dda9e0e99d", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "bc595a1870cef13f9c1e03df56d96804db7f702175e4ccacdb8fc75c02a7b97e"}, - "plug_crypto": {:hex, :plug_crypto, "1.1.2", "bdd187572cc26dbd95b87136290425f2b580a116d3fb1f564216918c9730d227", [:mix], [], "hexpm", "6b8b608f895b6ffcfad49c37c7883e8df98ae19c6a28113b02aa1e9c5b22d6b5"}, + "plug_cowboy": {:hex, :plug_cowboy, "2.4.0", "e936ef151751f386804c51f87f7300f5aaae6893cdad726559c3930c6c032948", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "e25ddcfc06b1b76e55af79d078b03cbc86bbcb99ce4e5e0a5e4a8114ee039be6"}, + "plug_crypto": {:hex, :plug_crypto, "1.2.0", "1cb20793aa63a6c619dd18bb33d7a3aa94818e5fd39ad357051a67f26dfa2df6", [:mix], [], "hexpm", "a48b538ae8bf381ffac344520755f3007cc10bd8e90b240af98ea29b69683fc2"}, "plug_static_index_html": {:hex, :plug_static_index_html, "1.0.0", "840123d4d3975585133485ea86af73cb2600afd7f2a976f9f5fd8b3808e636a0", [:mix], [{:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "79fd4fcf34d110605c26560cbae8f23c603ec4158c08298bd4360fdea90bb5cf"}, "poison": {:hex, :poison, "3.1.0", "d9eb636610e096f86f25d9a46f35a9facac35609a7591b3be3326e99a0484665", [:mix], [], "hexpm", "fec8660eb7733ee4117b85f55799fd3833eb769a6df71ccf8903e8dc5447cfce"}, "poolboy": {:hex, :poolboy, "1.5.2", "392b007a1693a64540cead79830443abf5762f5d30cf50bc95cb2c1aaafa006b", [:rebar3], [], "hexpm", "dad79704ce5440f3d5a3681c8590b9dc25d1a561e8f5a9c995281012860901e3"}, @@ -100,8 +101,9 @@ "pot": {:hex, :pot, "0.11.0", "61bad869a94534739dd4614a25a619bc5c47b9970e9a0ea5bef4628036fc7a16", [:rebar3], [], "hexpm", "57ee6ee6bdeb639661ffafb9acefe3c8f966e45394de6a766813bb9e1be4e54b"}, "prometheus": {:hex, :prometheus, "4.6.0", "20510f381db1ccab818b4cf2fac5fa6ab5cc91bc364a154399901c001465f46f", [:mix, :rebar3], [], "hexpm", "4905fd2992f8038eccd7aa0cd22f40637ed618c0bed1f75c05aacec15b7545de"}, "prometheus_ecto": {:hex, :prometheus_ecto, "1.4.3", "3dd4da1812b8e0dbee81ea58bb3b62ed7588f2eae0c9e97e434c46807ff82311", [:mix], [{:ecto, "~> 2.0 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:prometheus_ex, "~> 1.1 or ~> 2.0 or ~> 3.0", [hex: :prometheus_ex, repo: "hexpm", optional: false]}], "hexpm", "8d66289f77f913b37eda81fd287340c17e61a447549deb28efc254532b2bed82"}, - "prometheus_ex": {:hex, :prometheus_ex, "3.0.5", "fa58cfd983487fc5ead331e9a3e0aa622c67232b3ec71710ced122c4c453a02f", [:mix], [{:prometheus, "~> 4.0", [hex: :prometheus, repo: "hexpm", optional: false]}], "hexpm", "9fd13404a48437e044b288b41f76e64acd9735fb8b0e3809f494811dfa66d0fb"}, + "prometheus_ex": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/prometheus.ex.git", "a4e9beb3c1c479d14b352fd9d6dd7b1f6d7deee5", [ref: "a4e9beb3c1c479d14b352fd9d6dd7b1f6d7deee5"]}, "prometheus_phoenix": {:hex, :prometheus_phoenix, "1.3.0", "c4b527e0b3a9ef1af26bdcfbfad3998f37795b9185d475ca610fe4388fdd3bb5", [:mix], [{:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}, {:prometheus_ex, "~> 1.3 or ~> 2.0 or ~> 3.0", [hex: :prometheus_ex, repo: "hexpm", optional: false]}], "hexpm", "c4d1404ac4e9d3d963da601db2a7d8ea31194f0017057fabf0cfb9bf5a6c8c75"}, + "prometheus_phx": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/prometheus-phx.git", "9cd8f248c9381ffedc799905050abce194a97514", [branch: "no-logging"]}, "prometheus_plugs": {:hex, :prometheus_plugs, "1.1.5", "25933d48f8af3a5941dd7b621c889749894d8a1082a6ff7c67cc99dec26377c5", [:mix], [{:accept, "~> 0.1", [hex: :accept, repo: "hexpm", optional: false]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}, {:prometheus_ex, "~> 1.1 or ~> 2.0 or ~> 3.0", [hex: :prometheus_ex, repo: "hexpm", optional: false]}, {:prometheus_process_collector, "~> 1.1", [hex: :prometheus_process_collector, repo: "hexpm", optional: true]}], "hexpm", "0273a6483ccb936d79ca19b0ab629aef0dba958697c94782bb728b920dfc6a79"}, "quack": {:hex, :quack, "0.1.1", "cca7b4da1a233757fdb44b3334fce80c94785b3ad5a602053b7a002b5a8967bf", [:mix], [{:poison, ">= 1.0.0", [hex: :poison, repo: "hexpm", optional: false]}, {:tesla, "~> 1.2.0", [hex: :tesla, repo: "hexpm", optional: false]}], "hexpm", "d736bfa7444112eb840027bb887832a0e403a4a3437f48028c3b29a2dbbd2543"}, "ranch": {:hex, :ranch, "1.7.1", "6b1fab51b49196860b733a49c07604465a47bdb78aa10c1c16a3d199f7f8c881", [:rebar3], [], "hexpm", "451d8527787df716d99dc36162fca05934915db0b6141bbdac2ea8d3c7afc7d7"}, @@ -110,13 +112,13 @@ "sleeplocks": {:hex, :sleeplocks, "1.1.1", "3d462a0639a6ef36cc75d6038b7393ae537ab394641beb59830a1b8271faeed3", [:rebar3], [], "hexpm", "84ee37aeff4d0d92b290fff986d6a95ac5eedf9b383fadfd1d88e9b84a1c02e1"}, "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.5", "6eaf7ad16cb568bb01753dbbd7a95ff8b91c7979482b95f38443fe2c8852a79b", [:make, :mix, :rebar3], [], "hexpm", "13104d7897e38ed7f044c4de953a6c28597d1c952075eb2e328bc6d6f2bfc496"}, "sweet_xml": {:hex, :sweet_xml, "0.6.6", "fc3e91ec5dd7c787b6195757fbcf0abc670cee1e4172687b45183032221b66b8", [:mix], [], "hexpm", "2e1ec458f892ffa81f9f8386e3f35a1af6db7a7a37748a64478f13163a1f3573"}, - "swoosh": {:hex, :swoosh, "1.0.0", "c547cfc83f30e12d5d1fdcb623d7de2c2e29a5becfc68bf8f42ba4d23d2c2756", [:mix], [{:cowboy, "~> 1.0.1 or ~> 1.1 or ~> 2.4", [hex: :cowboy, repo: "hexpm", optional: true]}, {:gen_smtp, "~> 0.13", [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", "b3b08e463f876cb6167f7168e9ad99a069a724e124bcee61847e0e1ed13f4a0d"}, + "swoosh": {:hex, :swoosh, "1.0.6", "6765e334c67dacabe721f0d701c7e5a6f06e4595c90df6f91e73ebd54d555833", [:mix], [{:cowboy, "~> 1.1 or ~> 2.4", [hex: :cowboy, 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", "7c50ef78e4acfd1cbd4907dc1fa87b5540675a6be9dc979d04890f49d7ec1830"}, "syslog": {:hex, :syslog, "1.1.0", "6419a232bea84f07b56dc575225007ffe34d9fdc91abe6f1b2f254fd71d8efc2", [:rebar3], [], "hexpm", "4c6a41373c7e20587be33ef841d3de6f3beba08519809329ecc4d27b15b659e1"}, "telemetry": {:hex, :telemetry, "0.4.2", "2808c992455e08d6177322f14d3bdb6b625fbcfd233a73505870d8738a2f4599", [:rebar3], [], "hexpm", "2d1419bd9dda6a206d7b5852179511722e2b18812310d304620c7bd92a13fcef"}, "tesla": {:git, "https://github.com/teamon/tesla/", "9f7261ca49f9f901ceb73b60219ad6f8a9f6aa30", [ref: "9f7261ca49f9f901ceb73b60219ad6f8a9f6aa30"]}, "timex": {:hex, :timex, "3.6.2", "845cdeb6119e2fef10751c0b247b6c59d86d78554c83f78db612e3290f819bc2", [:mix], [{:combine, "~> 0.10", [hex: :combine, repo: "hexpm", optional: false]}, {:gettext, "~> 0.10", [hex: :gettext, repo: "hexpm", optional: false]}, {:tzdata, "~> 0.1.8 or ~> 0.5 or ~> 1.0.0", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm", "26030b46199d02a590be61c2394b37ea25a3664c02fafbeca0b24c972025d47a"}, "trailing_format_plug": {:hex, :trailing_format_plug, "0.0.7", "64b877f912cf7273bed03379936df39894149e35137ac9509117e59866e10e45", [:mix], [{:plug, "> 0.12.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "bd4fde4c15f3e993a999e019d64347489b91b7a9096af68b2bdadd192afa693f"}, - "tzdata": {:hex, :tzdata, "1.0.3", "73470ad29dde46e350c60a66e6b360d3b99d2d18b74c4c349dbebbc27a09a3eb", [:mix], [{:hackney, "~> 1.0", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "a6e1ee7003c4d04ecbd21dd3ec690d4c6662db5d3bbdd7262d53cdf5e7c746c1"}, + "tzdata": {:hex, :tzdata, "1.0.4", "a3baa4709ea8dba552dca165af6ae97c624a2d6ac14bd265165eaa8e8af94af6", [:mix], [{:hackney, "~> 1.0", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "b02637db3df1fd66dd2d3c4f194a81633d0e4b44308d36c1b2fdfd1e4e6f169b"}, "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.4.1", "d869e4c68901dd9531385bb0c8c40444ebf624e60b6962d95952775cac5e90cd", [:rebar3], [], "hexpm", "1d1848c40487cdb0b30e8ed975e34e025860c02e419cb615d255849f3427439d"}, "unsafe": {:hex, :unsafe, "1.0.1", "a27e1874f72ee49312e0a9ec2e0b27924214a05e3ddac90e91727bc76f8613d8", [:mix], [], "hexpm", "6c7729a2d214806450d29766abc2afaa7a2cbecf415be64f36a6691afebb50e5"}, diff --git a/test/pleroma/notification_test.exs b/test/pleroma/notification_test.exs index 0e9630f28..a74fb7bc2 100644 --- a/test/pleroma/notification_test.exs +++ b/test/pleroma/notification_test.exs @@ -400,7 +400,7 @@ test "dismisses the notification on follow request rejection" do user = insert(:user, is_locked: true) follower = insert(:user) {:ok, _, _, _follow_activity} = CommonAPI.follow(follower, user) - assert [notification] = Notification.for_user(user) + assert [_notification] = Notification.for_user(user) {:ok, _follower} = CommonAPI.reject_follow_request(follower, user) assert [] = Notification.for_user(user) end diff --git a/test/pleroma/web/activity_pub/activity_pub_test.exs b/test/pleroma/web/activity_pub/activity_pub_test.exs index 1a8a844ca..9200aef65 100644 --- a/test/pleroma/web/activity_pub/activity_pub_test.exs +++ b/test/pleroma/web/activity_pub/activity_pub_test.exs @@ -505,22 +505,22 @@ test "increases replies count", %{user: user} do # public {:ok, _} = CommonAPI.post(user2, Map.put(reply_data, :visibility, "public")) - assert %{data: data, object: object} = Activity.get_by_ap_id_with_object(ap_id) + assert %{data: _data, object: object} = Activity.get_by_ap_id_with_object(ap_id) assert object.data["repliesCount"] == 1 # unlisted {:ok, _} = CommonAPI.post(user2, Map.put(reply_data, :visibility, "unlisted")) - assert %{data: data, object: object} = Activity.get_by_ap_id_with_object(ap_id) + assert %{data: _data, object: object} = Activity.get_by_ap_id_with_object(ap_id) assert object.data["repliesCount"] == 2 # private {:ok, _} = CommonAPI.post(user2, Map.put(reply_data, :visibility, "private")) - assert %{data: data, object: object} = Activity.get_by_ap_id_with_object(ap_id) + assert %{data: _data, object: object} = Activity.get_by_ap_id_with_object(ap_id) assert object.data["repliesCount"] == 2 # direct {:ok, _} = CommonAPI.post(user2, Map.put(reply_data, :visibility, "direct")) - assert %{data: data, object: object} = Activity.get_by_ap_id_with_object(ap_id) + assert %{data: _data, object: object} = Activity.get_by_ap_id_with_object(ap_id) assert object.data["repliesCount"] == 2 end end diff --git a/test/pleroma/web/activity_pub/mrf/reject_non_public_test.exs b/test/pleroma/web/activity_pub/mrf/reject_non_public_test.exs index 58b46b9a2..e08eb3ba6 100644 --- a/test/pleroma/web/activity_pub/mrf/reject_non_public_test.exs +++ b/test/pleroma/web/activity_pub/mrf/reject_non_public_test.exs @@ -21,7 +21,7 @@ test "it's allowed when address is public" do "type" => "Create" } - assert {:ok, message} = RejectNonPublic.filter(message) + assert {:ok, _message} = RejectNonPublic.filter(message) end test "it's allowed when cc address contain public address" do @@ -34,7 +34,7 @@ test "it's allowed when cc address contain public address" do "type" => "Create" } - assert {:ok, message} = RejectNonPublic.filter(message) + assert {:ok, _message} = RejectNonPublic.filter(message) end end @@ -50,7 +50,7 @@ test "it's allowed when addrer of message in the follower addresses of user and } Pleroma.Config.put([:mrf_rejectnonpublic, :allow_followersonly], true) - assert {:ok, message} = RejectNonPublic.filter(message) + assert {:ok, _message} = RejectNonPublic.filter(message) end test "it's rejected when addrer of message in the follower addresses of user and it disabled in config" do @@ -80,7 +80,7 @@ test "it's allows when direct messages are allow" do } Pleroma.Config.put([:mrf_rejectnonpublic, :allow_direct], true) - assert {:ok, message} = RejectNonPublic.filter(message) + assert {:ok, _message} = RejectNonPublic.filter(message) end test "it's reject when direct messages aren't allow" do diff --git a/test/pleroma/web/activity_pub/mrf/tag_policy_test.exs b/test/pleroma/web/activity_pub/mrf/tag_policy_test.exs index 6ff71d640..ffc30ba62 100644 --- a/test/pleroma/web/activity_pub/mrf/tag_policy_test.exs +++ b/test/pleroma/web/activity_pub/mrf/tag_policy_test.exs @@ -29,7 +29,7 @@ test "allows non-local follow requests" do actor = insert(:user, tags: ["mrf_tag:disable-remote-subscription"]) follower = insert(:user, tags: ["mrf_tag:disable-remote-subscription"], local: true) message = %{"object" => actor.ap_id, "type" => "Follow", "actor" => follower.ap_id} - assert {:ok, message} = TagPolicy.filter(message) + assert {:ok, _message} = TagPolicy.filter(message) end end diff --git a/test/pleroma/web/activity_pub/transmogrifier/announce_handling_test.exs b/test/pleroma/web/activity_pub/transmogrifier/announce_handling_test.exs index e895636b5..54335acdb 100644 --- a/test/pleroma/web/activity_pub/transmogrifier/announce_handling_test.exs +++ b/test/pleroma/web/activity_pub/transmogrifier/announce_handling_test.exs @@ -144,7 +144,7 @@ test "it rejects incoming announces with an inlined activity from another origin _user = insert(:user, local: false, ap_id: data["actor"]) - assert {:error, e} = Transmogrifier.handle_incoming(data) + assert {:error, _e} = Transmogrifier.handle_incoming(data) end test "it does not clobber the addressing on announce activities" do diff --git a/test/pleroma/web/activity_pub/transmogrifier_test.exs b/test/pleroma/web/activity_pub/transmogrifier_test.exs index 561674f01..4547c84b7 100644 --- a/test/pleroma/web/activity_pub/transmogrifier_test.exs +++ b/test/pleroma/web/activity_pub/transmogrifier_test.exs @@ -101,7 +101,7 @@ test "it fetches reply-to activities if we don't have them" do {:ok, returned_activity} = Transmogrifier.handle_incoming(data) returned_object = Object.normalize(returned_activity, false) - assert activity = + assert %Activity{} = Activity.get_create_by_object_ap_id( "https://mstdn.io/users/mayuutann/statuses/99568293732299394" ) diff --git a/test/pleroma/web/common_api_test.exs b/test/pleroma/web/common_api_test.exs index f5d09f396..64476a099 100644 --- a/test/pleroma/web/common_api_test.exs +++ b/test/pleroma/web/common_api_test.exs @@ -622,7 +622,7 @@ test "it validates character limits are correctly enforced" do assert {:error, "The status is over the character limit"} = CommonAPI.post(user, %{status: "foobar"}) - assert {:ok, activity} = CommonAPI.post(user, %{status: "12345"}) + assert {:ok, _activity} = CommonAPI.post(user, %{status: "12345"}) end test "it can handle activities that expire" do diff --git a/test/pleroma/web/fed_sockets/fed_registry_test.exs b/test/pleroma/web/fed_sockets/fed_registry_test.exs index 19ac874d6..73aaced46 100644 --- a/test/pleroma/web/fed_sockets/fed_registry_test.exs +++ b/test/pleroma/web/fed_sockets/fed_registry_test.exs @@ -52,7 +52,7 @@ test "multiple origins can be added" do end test "will be ignored" do - assert {:ok, %SocketInfo{origin: origin, pid: pid_one}} = + assert {:ok, %SocketInfo{origin: origin, pid: _pid_one}} = FedRegistry.get_fed_socket(@good_domain_origin) assert origin == "good.domain:80" @@ -63,7 +63,7 @@ test "will be ignored" do test "the newer process will be closed" do pid_two = build_test_socket(@good_domain) - assert {:ok, %SocketInfo{origin: origin, pid: pid_one}} = + assert {:ok, %SocketInfo{origin: origin, pid: _pid_one}} = FedRegistry.get_fed_socket(@good_domain_origin) assert origin == "good.domain:80" diff --git a/test/pleroma/web/mastodon_api/controllers/account_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/account_controller_test.exs index 7336fa8de..dcc0c81ec 100644 --- a/test/pleroma/web/mastodon_api/controllers/account_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/account_controller_test.exs @@ -32,7 +32,7 @@ test "works by id" do test "works by nickname" do user = insert(:user) - assert %{"id" => user_id} = + assert %{"id" => _user_id} = build_conn() |> get("/api/v1/accounts/#{user.nickname}") |> json_response_and_validate_schema(200) @@ -43,7 +43,7 @@ test "works by nickname for remote users" do user = insert(:user, nickname: "user@example.com", local: false) - assert %{"id" => user_id} = + assert %{"id" => _user_id} = build_conn() |> get("/api/v1/accounts/#{user.nickname}") |> json_response_and_validate_schema(200) @@ -1429,10 +1429,10 @@ test "returns an error if captcha is invalid", %{conn: conn} do test "returns lists to which the account belongs" do %{user: user, conn: conn} = oauth_access(["read:lists"]) other_user = insert(:user) - assert {:ok, %Pleroma.List{id: list_id} = list} = Pleroma.List.create("Test List", user) + assert {:ok, %Pleroma.List{id: _list_id} = list} = Pleroma.List.create("Test List", user) {:ok, %{following: _following}} = Pleroma.List.follow(list, other_user) - assert [%{"id" => list_id, "title" => "Test List"}] = + assert [%{"id" => _list_id, "title" => "Test List"}] = conn |> get("/api/v1/accounts/#{other_user.id}/lists") |> json_response_and_validate_schema(200) diff --git a/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs index 61359214a..436608e51 100644 --- a/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs @@ -937,7 +937,7 @@ test "reblogged status for another user" do |> get("/api/v1/statuses/#{reblog_activity1.id}") assert %{ - "reblog" => %{"id" => id, "reblogged" => false, "reblogs_count" => 2}, + "reblog" => %{"id" => _id, "reblogged" => false, "reblogs_count" => 2}, "reblogged" => false, "favourited" => false, "bookmarked" => false diff --git a/test/pleroma/web/o_auth/o_auth_controller_test.exs b/test/pleroma/web/o_auth/o_auth_controller_test.exs index 1200126b8..a00df8cc7 100644 --- a/test/pleroma/web/o_auth/o_auth_controller_test.exs +++ b/test/pleroma/web/o_auth/o_auth_controller_test.exs @@ -77,7 +77,7 @@ test "GET /oauth/prepare_request encodes parameters as `state` and redirects", % } ) - assert response = html_response(conn, 302) + assert html_response(conn, 302) redirect_query = URI.parse(redirected_to(conn)).query assert %{"state" => state_param} = URI.decode_query(redirect_query) @@ -119,7 +119,7 @@ test "with user-bound registration, GET /oauth//callback redirects to } ) - assert response = html_response(conn, 302) + assert html_response(conn, 302) assert redirected_to(conn) =~ ~r/#{redirect_uri}\?code=.+/ end @@ -182,7 +182,7 @@ test "on authentication error, GET /oauth//callback redirects to `redi } ) - assert response = html_response(conn, 302) + assert html_response(conn, 302) assert redirected_to(conn) == app.redirect_uris assert get_flash(conn, :error) == "Failed to authenticate: (error description)." end @@ -238,7 +238,7 @@ test "with valid params, POST /oauth/register?op=register redirects to `redirect } ) - assert response = html_response(conn, 302) + assert html_response(conn, 302) assert redirected_to(conn) =~ ~r/#{redirect_uri}\?code=.+/ end @@ -268,7 +268,7 @@ test "with unlisted `redirect_uri`, POST /oauth/register?op=register results in } ) - assert response = html_response(conn, 401) + assert html_response(conn, 401) end test "with invalid params, POST /oauth/register?op=register renders registration_details page", @@ -336,7 +336,7 @@ test "with valid params, POST /oauth/register?op=connect redirects to `redirect_ } ) - assert response = html_response(conn, 302) + assert html_response(conn, 302) assert redirected_to(conn) =~ ~r/#{redirect_uri}\?code=.+/ end @@ -367,7 +367,7 @@ test "with unlisted `redirect_uri`, POST /oauth/register?op=connect results in H } ) - assert response = html_response(conn, 401) + assert html_response(conn, 401) end test "with invalid params, POST /oauth/register?op=connect renders registration_details page", diff --git a/test/pleroma/web/pleroma_api/controllers/emoji_pack_controller_test.exs b/test/pleroma/web/pleroma_api/controllers/emoji_pack_controller_test.exs index 386ad8634..3445f0ca0 100644 --- a/test/pleroma/web/pleroma_api/controllers/emoji_pack_controller_test.exs +++ b/test/pleroma/web/pleroma_api/controllers/emoji_pack_controller_test.exs @@ -569,7 +569,7 @@ test "shows pack.json", %{conn: conn} do test "for pack name with special chars", %{conn: conn} do assert %{ - "files" => files, + "files" => _files, "files_count" => 1, "pack" => %{ "can-download" => true, diff --git a/test/pleroma/web/pleroma_api/controllers/mascot_controller_test.exs b/test/pleroma/web/pleroma_api/controllers/mascot_controller_test.exs index d6be92869..289119d45 100644 --- a/test/pleroma/web/pleroma_api/controllers/mascot_controller_test.exs +++ b/test/pleroma/web/pleroma_api/controllers/mascot_controller_test.exs @@ -34,7 +34,7 @@ test "mascot upload" do |> put_req_header("content-type", "multipart/form-data") |> put("/api/v1/pleroma/mascot", %{"file" => file}) - assert %{"id" => _, "type" => image} = json_response_and_validate_schema(conn, 200) + assert %{"id" => _, "type" => _image} = json_response_and_validate_schema(conn, 200) end test "mascot retrieving" do diff --git a/test/support/channel_case.ex b/test/support/channel_case.ex index d63a0f06b..114184a9f 100644 --- a/test/support/channel_case.ex +++ b/test/support/channel_case.ex @@ -22,7 +22,7 @@ defmodule Pleroma.Web.ChannelCase do using do quote do # Import conveniences for testing with channels - use Phoenix.ChannelTest + import Phoenix.ChannelTest use Pleroma.Tests.Helpers # The default endpoint for testing diff --git a/test/support/conn_case.ex b/test/support/conn_case.ex index 7ef681258..9316a82e4 100644 --- a/test/support/conn_case.ex +++ b/test/support/conn_case.ex @@ -22,7 +22,8 @@ defmodule Pleroma.Web.ConnCase do using do quote do # Import conveniences for testing with connections - use Phoenix.ConnTest + import Plug.Conn + import Phoenix.ConnTest use Pleroma.Tests.Helpers import Pleroma.Web.Router.Helpers From 7058cac1c2eeb46ef6e95b6af863c931f8d38f06 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Thu, 22 Oct 2020 10:56:17 +0000 Subject: [PATCH 041/362] Merge branch '2257-self-chat' into 'develop' Resolve "Can't message yourself in a chat (but can start it)" Closes #2257 See merge request pleroma/pleroma!3099 --- CHANGELOG.md | 1 + lib/pleroma/web/activity_pub/side_effects.ex | 1 + test/pleroma/web/common_api_test.exs | 14 ++++++++++++++ 3 files changed, 16 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 80ca6a350..01038b7ec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -49,6 +49,7 @@ switched to a new configuration mechanism, however it was not officially removed - Add documented-but-missing chat pagination. - Allow sending out emails again. +- Allow sending chat messages to yourself ### Upgrade notes diff --git a/lib/pleroma/web/activity_pub/side_effects.ex b/lib/pleroma/web/activity_pub/side_effects.ex index d421ca7af..0fff5faf2 100644 --- a/lib/pleroma/web/activity_pub/side_effects.ex +++ b/lib/pleroma/web/activity_pub/side_effects.ex @@ -306,6 +306,7 @@ def handle_object_creation(%{"type" => "ChatMessage"} = object, meta) do streamables = [[actor, recipient], [recipient, actor]] + |> Enum.uniq() |> Enum.map(fn [user, other_user] -> if user.local do {:ok, chat} = Chat.bump_or_create(user.id, other_user.ap_id) diff --git a/test/pleroma/web/common_api_test.exs b/test/pleroma/web/common_api_test.exs index 64476a099..c5b90ad84 100644 --- a/test/pleroma/web/common_api_test.exs +++ b/test/pleroma/web/common_api_test.exs @@ -95,6 +95,20 @@ test "it blocks and does not federate if outgoing blocks are disabled", %{ describe "posting chat messages" do setup do: clear_config([:instance, :chat_limit]) + test "it posts a self-chat" do + author = insert(:user) + recipient = author + + {:ok, activity} = + CommonAPI.post_chat_message( + author, + recipient, + "remember to buy milk when milk truk arive" + ) + + assert activity.data["type"] == "Create" + end + test "it posts a chat message without content but with an attachment" do author = insert(:user) recipient = insert(:user) From 6d850c46dc439e018323fb3580e708131247457b Mon Sep 17 00:00:00 2001 From: lain Date: Wed, 4 Nov 2020 17:12:47 +0100 Subject: [PATCH 042/362] AdminEmail: Use AP id as user url. --- lib/pleroma/emails/admin_email.ex | 10 +++------- test/pleroma/emails/admin_email_test.exs | 6 +++--- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/lib/pleroma/emails/admin_email.ex b/lib/pleroma/emails/admin_email.ex index 8979db2f8..02274554f 100644 --- a/lib/pleroma/emails/admin_email.ex +++ b/lib/pleroma/emails/admin_email.ex @@ -18,10 +18,6 @@ defp instance_notify_email do Keyword.get(instance_config(), :notify_email, instance_config()[:email]) end - defp user_url(user) do - Helpers.user_feed_url(Pleroma.Web.Endpoint, :feed_redirect, user.id) - end - def test_email(mail_to \\ nil) do html_body = """

Instance Test Email

@@ -69,8 +65,8 @@ def report(to, reporter, account, statuses, comment) do end html_body = """ -

Reported by: #{reporter.nickname}

-

Reported Account: #{account.nickname}

+

Reported by: #{reporter.nickname}

+

Reported Account: #{account.nickname}

#{comment_html} #{statuses_html}

@@ -86,7 +82,7 @@ def report(to, reporter, account, statuses, comment) do def new_unapproved_registration(to, account) do html_body = """ -

New account for review: @#{account.nickname}

+

New account for review: @#{account.nickname}

#{HTML.strip_tags(account.registration_reason)}
Visit AdminFE """ diff --git a/test/pleroma/emails/admin_email_test.exs b/test/pleroma/emails/admin_email_test.exs index 155057f3e..0da0699cc 100644 --- a/test/pleroma/emails/admin_email_test.exs +++ b/test/pleroma/emails/admin_email_test.exs @@ -19,8 +19,8 @@ test "build report email" do AdminEmail.report(to_user, reporter, account, [%{name: "Test", id: "12"}], "Test comment") status_url = Helpers.o_status_url(Pleroma.Web.Endpoint, :notice, "12") - reporter_url = Helpers.user_feed_url(Pleroma.Web.Endpoint, :feed_redirect, reporter.id) - account_url = Helpers.user_feed_url(Pleroma.Web.Endpoint, :feed_redirect, account.id) + reporter_url = reporter.ap_id + account_url = account.ap_id assert res.to == [{to_user.name, to_user.email}] assert res.from == {config[:name], config[:notify_email]} @@ -54,7 +54,7 @@ test "new unapproved registration email" do res = AdminEmail.new_unapproved_registration(to_user, account) - account_url = Helpers.user_feed_url(Pleroma.Web.Endpoint, :feed_redirect, account.id) + account_url = account.ap_id assert res.to == [{to_user.name, to_user.email}] assert res.from == {config[:name], config[:notify_email]} From 5ddf0be208b1a2703f24c907ac5a07cb8ea12f8c Mon Sep 17 00:00:00 2001 From: lain Date: Wed, 4 Nov 2020 17:13:34 +0100 Subject: [PATCH 043/362] Changelog: Add info about admin email user link changes. --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3a82f7d6c..756939dde 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,6 +32,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Minimum lifetime for ephmeral activities changed to 10 minutes and made configurable (`:min_lifetime` option). - Introduced optional dependencies on `ffmpeg`, `ImageMagick`, `exiftool` software packages. Please refer to `docs/installation/optional/media_graphics_packages.md`. - Polls now always return a `voters_count`, even if they are single-choice +- Admin Emails: The ap id is used as the user link in emails now.
API Changes From 9b2ed1427725cd8c5e8d81e39cc5bbc73a2140bc Mon Sep 17 00:00:00 2001 From: lain Date: Thu, 5 Nov 2020 13:23:58 +0100 Subject: [PATCH 044/362] Docs: Add info about expiring mutes. --- docs/API/differences_in_mastoapi_responses.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/API/differences_in_mastoapi_responses.md b/docs/API/differences_in_mastoapi_responses.md index bb1000b0b..3075b6b86 100644 --- a/docs/API/differences_in_mastoapi_responses.md +++ b/docs/API/differences_in_mastoapi_responses.md @@ -255,6 +255,10 @@ There is an additional `user:pleroma_chat` stream. Incoming chat messages will m For viewing remote server timelines, there are `public:remote` and `public:remote:media` streams. Each of these accept a parameter like `?instance=lain.com`. +## User muting and thread muting + +Both user muting and thread muting can be done for only a certain time by adding an `expires_in` parameter to the API calls and giving the expiration time in seconds. + ## Not implemented Pleroma is generally compatible with the Mastodon 2.7.2 API, but some newer features and non-essential features are omitted. These features usually return an HTTP 200 status code, but with an empty response. While they may be added in the future, they are considered low priority. From 88dc1d24b98a9cac9f740fcd12b38a2d7727a9c2 Mon Sep 17 00:00:00 2001 From: feld Date: Wed, 28 Oct 2020 15:06:47 +0000 Subject: [PATCH 045/362] Merge branch 'issue/2261' into 'develop' [#2261] FrontStatic plug: excluded invalid url See merge request pleroma/pleroma!3106 --- lib/pleroma/web/plugs/frontend_static.ex | 26 +++++++++++-------- .../web/plugs/frontend_static_plug_test.exs | 21 +++++++++++++++ 2 files changed, 36 insertions(+), 11 deletions(-) diff --git a/lib/pleroma/web/plugs/frontend_static.ex b/lib/pleroma/web/plugs/frontend_static.ex index ceb10dcf8..1b0b36813 100644 --- a/lib/pleroma/web/plugs/frontend_static.ex +++ b/lib/pleroma/web/plugs/frontend_static.ex @@ -34,22 +34,26 @@ def init(opts) do end def call(conn, opts) do - frontend_type = Map.get(opts, :frontend_type, :primary) - path = file_path("", frontend_type) - - if path do - conn - |> call_static(opts, path) + with false <- invalid_path?(conn.path_info), + frontend_type <- Map.get(opts, :frontend_type, :primary), + path when not is_nil(path) <- file_path("", frontend_type) do + call_static(conn, opts, path) else - conn + _ -> + conn end end - defp call_static(conn, opts, from) do - opts = - opts - |> Map.put(:from, from) + defp invalid_path?(list) do + invalid_path?(list, :binary.compile_pattern(["/", "\\", ":", "\0"])) + end + defp invalid_path?([h | _], _match) when h in [".", "..", ""], do: true + defp invalid_path?([h | t], match), do: String.contains?(h, match) or invalid_path?(t) + defp invalid_path?([], _match), do: false + + defp call_static(conn, opts, from) do + opts = Map.put(opts, :from, from) Plug.Static.call(conn, opts) end end diff --git a/test/pleroma/web/plugs/frontend_static_plug_test.exs b/test/pleroma/web/plugs/frontend_static_plug_test.exs index f6f7d7bdb..8b7b022fc 100644 --- a/test/pleroma/web/plugs/frontend_static_plug_test.exs +++ b/test/pleroma/web/plugs/frontend_static_plug_test.exs @@ -4,6 +4,7 @@ defmodule Pleroma.Web.Plugs.FrontendStaticPlugTest do use Pleroma.Web.ConnCase + import Mock @dir "test/tmp/instance_static" @@ -53,4 +54,24 @@ test "overrides existing static files for the `pleroma/admin` path", %{conn: con index = get(conn, "/pleroma/admin/") assert html_response(index, 200) == "from frontend plug" end + + test "exclude invalid path", %{conn: conn} do + name = "pleroma-fe" + ref = "dist" + clear_config([:media_proxy, :enabled], true) + clear_config([Pleroma.Web.Endpoint, :secret_key_base], "00000000000") + clear_config([:frontends, :primary], %{"name" => name, "ref" => ref}) + path = "#{@dir}/frontends/#{name}/#{ref}" + + File.mkdir_p!("#{path}/proxy/rr/ss") + File.write!("#{path}/proxy/rr/ss/Ek7w8WPVcAApOvN.jpg:large", "FB image") + + url = + Pleroma.Web.MediaProxy.encode_url("https://pbs.twimg.com/media/Ek7w8WPVcAApOvN.jpg:large") + + with_mock Pleroma.ReverseProxy, + call: fn _conn, _url, _opts -> %Plug.Conn{status: :success} end do + assert %Plug.Conn{status: :success} = get(conn, url) + end + end end From 5f27a39152cfee4746313ee8c63fb5f600fdb1a2 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Fri, 23 Oct 2020 19:39:42 +0000 Subject: [PATCH 046/362] Merge branch '2242-nsfw-case' into 'develop' Resolve "Posts tagged with #NSFW from GS aren't marked as sensitive" Closes #2242 See merge request pleroma/pleroma!3094 --- .../web/activity_pub/transmogrifier.ex | 19 +++--- .../fixtures/mastodon-post-activity-nsfw.json | 68 +++++++++++++++++++ .../web/activity_pub/transmogrifier_test.exs | 10 +++ 3 files changed, 89 insertions(+), 8 deletions(-) create mode 100644 test/fixtures/mastodon-post-activity-nsfw.json diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index d7dd9fe6b..39c8f7e39 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -40,6 +40,7 @@ def fix_object(object, options \\ []) do |> fix_in_reply_to(options) |> fix_emoji |> fix_tag + |> set_sensitive |> fix_content_map |> fix_addressing |> fix_summary @@ -313,19 +314,21 @@ def fix_tag(%{"tag" => tag} = object) when is_list(tag) do tags = tag |> Enum.filter(fn data -> data["type"] == "Hashtag" and data["name"] end) - |> Enum.map(fn data -> String.slice(data["name"], 1..-1) end) + |> Enum.map(fn %{"name" => name} -> + name + |> String.slice(1..-1) + |> String.downcase() + end) Map.put(object, "tag", tag ++ tags) end - def fix_tag(%{"tag" => %{"type" => "Hashtag", "name" => hashtag} = tag} = object) do - combined = [tag, String.slice(hashtag, 1..-1)] - - Map.put(object, "tag", combined) + def fix_tag(%{"tag" => %{} = tag} = object) do + object + |> Map.put("tag", [tag]) + |> fix_tag end - def fix_tag(%{"tag" => %{} = tag} = object), do: Map.put(object, "tag", [tag]) - def fix_tag(object), do: object # content map usually only has one language so this will do for now. @@ -927,7 +930,7 @@ def set_conversation(object) do Map.put(object, "conversation", object["context"]) end - def set_sensitive(%{"sensitive" => true} = object) do + def set_sensitive(%{"sensitive" => _} = object) do object end diff --git a/test/fixtures/mastodon-post-activity-nsfw.json b/test/fixtures/mastodon-post-activity-nsfw.json new file mode 100644 index 000000000..70729a1bd --- /dev/null +++ b/test/fixtures/mastodon-post-activity-nsfw.json @@ -0,0 +1,68 @@ +{ + "@context": [ + "https://www.w3.org/ns/activitystreams", + "https://w3id.org/security/v1", + { + "Emoji": "toot:Emoji", + "Hashtag": "as:Hashtag", + "atomUri": "ostatus:atomUri", + "conversation": "ostatus:conversation", + "inReplyToAtomUri": "ostatus:inReplyToAtomUri", + "manuallyApprovesFollowers": "as:manuallyApprovesFollowers", + "movedTo": "as:movedTo", + "ostatus": "http://ostatus.org#", + "toot": "http://joinmastodon.org/ns#" + } + ], + "actor": "http://mastodon.example.org/users/admin", + "cc": [ + "http://mastodon.example.org/users/admin/followers", + "http://localtesting.pleroma.lol/users/lain" + ], + "id": "http://mastodon.example.org/users/admin/statuses/99512778738411822/activity", + "nickname": "lain", + "object": { + "atomUri": "http://mastodon.example.org/users/admin/statuses/99512778738411822", + "attachment": [], + "attributedTo": "http://mastodon.example.org/users/admin", + "cc": [ + "http://mastodon.example.org/users/admin/followers", + "http://localtesting.pleroma.lol/users/lain" + ], + "content": "

@lain #moo

", + "conversation": "tag:mastodon.example.org,2018-02-12:objectId=20:objectType=Conversation", + "id": "http://mastodon.example.org/users/admin/statuses/99512778738411822", + "inReplyTo": null, + "inReplyToAtomUri": null, + "published": "2018-02-12T14:08:20Z", + "summary": "cw", + "tag": [ + { + "href": "http://localtesting.pleroma.lol/users/lain", + "name": "@lain@localtesting.pleroma.lol", + "type": "Mention" + }, + { + "href": "http://mastodon.example.org/tags/nsfw", + "name": "#NSFW", + "type": "Hashtag" + } + ], + "to": [ + "https://www.w3.org/ns/activitystreams#Public" + ], + "type": "Note", + "url": "http://mastodon.example.org/@admin/99512778738411822" + }, + "published": "2018-02-12T14:08:20Z", + "signature": { + "created": "2018-02-12T14:08:20Z", + "creator": "http://mastodon.example.org/users/admin#main-key", + "signatureValue": "rnNfcopkc6+Ju73P806popcfwrK9wGYHaJVG1/ZvrlEbWVDzaHjkXqj9Q3/xju5l8CSn9tvSgCCtPFqZsFQwn/pFIFUcw7ZWB2xi4bDm3NZ3S4XQ8JRaaX7og5hFxAhWkGhJhAkfxVnOg2hG+w2d/7d7vRVSC1vo5ip4erUaA/PkWusZvPIpxnRWoXaxJsFmVx0gJgjpJkYDyjaXUlp+jmaoseeZ4EPQUWqHLKJ59PRG0mg8j2xAjYH9nQaN14qMRmTGPxY8gfv/CUFcatA+8VJU9KEsJkDAwLVvglydNTLGrxpAJU78a2eaht0foV43XUIZGe3DKiJPgE+UOKGCJw==", + "type": "RsaSignature2017" + }, + "to": [ + "https://www.w3.org/ns/activitystreams#Public" + ], + "type": "Create" +} diff --git a/test/pleroma/web/activity_pub/transmogrifier_test.exs b/test/pleroma/web/activity_pub/transmogrifier_test.exs index 4547c84b7..e39af1dfc 100644 --- a/test/pleroma/web/activity_pub/transmogrifier_test.exs +++ b/test/pleroma/web/activity_pub/transmogrifier_test.exs @@ -206,6 +206,16 @@ test "it works for incoming notices" do assert user.note_count == 1 end + test "it works for incoming notices without the sensitive property but an nsfw hashtag" do + data = File.read!("test/fixtures/mastodon-post-activity-nsfw.json") |> Poison.decode!() + + {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) + + object_data = Object.normalize(data["object"], false).data + + assert object_data["sensitive"] == true + end + test "it works for incoming notices with hashtags" do data = File.read!("test/fixtures/mastodon-post-activity-hashtag.json") |> Poison.decode!() From 86b4149a1350b23a122f3ea8e2ef79ab3e8785e1 Mon Sep 17 00:00:00 2001 From: feld Date: Tue, 27 Oct 2020 17:47:56 +0000 Subject: [PATCH 047/362] Merge branch '1668-prometheus-access-restrictions' into 'develop' [#1668] App metrics endpoint (Prometheus) access restrictions Closes #1668 See merge request pleroma/pleroma!3093 --- CHANGELOG.md | 26 +++---- config/config.exs | 7 +- config/description.exs | 37 ++++++++++ docs/API/prometheus.md | 26 ++++++- lib/pleroma/helpers/inet_helper.ex | 19 +++++ lib/pleroma/web/endpoint.ex | 40 +++++++++-- .../web/endpoint/metrics_exporter_test.exs | 69 +++++++++++++++++++ 7 files changed, 203 insertions(+), 21 deletions(-) create mode 100644 lib/pleroma/helpers/inet_helper.ex create mode 100644 test/pleroma/web/endpoint/metrics_exporter_test.exs diff --git a/CHANGELOG.md b/CHANGELOG.md index 01038b7ec..ef10a945d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,14 +5,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ## [2.2.0] - 2020-10-?? -### Added -- Mix tasks for controlling user account confirmation status in bulk (`mix pleroma.user confirm_all` and `mix pleroma.user unconfirm_all`) -- Mix task for sending confirmation emails to all unconfirmed users (`mix pleroma.email send_confirmation_mails`) -- Mix task option for force-unfollowing relays - ### Changed - **Breaking** Requires `libmagic` (or `file`) to guess file types. +- **Breaking:** App metrics endpoint (`/api/pleroma/app_metrics`) is disabled by default, check `docs/API/prometheus.md` on enabling and configuring. - **Breaking:** Pleroma Admin API: emoji packs and files routes changed. - **Breaking:** Sensitive/NSFW statuses no longer disable link previews. - API: Empty parameter values for integer parameters are now ignored in non-strict validaton mode. @@ -24,9 +20,22 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Minimum lifetime for ephmeral activities changed to 10 minutes and made configurable (`:min_lifetime` option). - Introduced optional dependencies on `ffmpeg`, `ImageMagick`, `exiftool` software packages. Please refer to `docs/installation/optional/media_graphics_packages.md`. +### Removed + +- **Breaking:** `Pleroma.Workers.Cron.StatsWorker` setting from Oban `:crontab` (moved to a simpler implementation). +- **Breaking:** `Pleroma.Workers.Cron.ClearOauthTokenWorker` setting from Oban `:crontab` (moved to scheduled jobs). +- **Breaking:** `Pleroma.Workers.Cron.PurgeExpiredActivitiesWorker` setting from Oban `:crontab` (moved to scheduled jobs). +- Removed `:managed_config` option. In practice, it was accidentally removed with 2.0.0 release when frontends were +switched to a new configuration mechanism, however it was not officially removed until now. + ### Added - Media preview proxy (requires `ffmpeg` and `ImageMagick` to be installed and media proxy to be enabled; see `:media_preview_proxy` config for more details). - Pleroma API: Importing the mutes users from CSV files. +- Mix tasks for controlling user account confirmation status in bulk (`mix pleroma.user confirm_all` and `mix pleroma.user unconfirm_all`) +- Mix task for sending confirmation emails to all unconfirmed users (`mix pleroma.email send_confirmation_mails`) +- Mix task option for force-unfollowing relays +- App metrics: ability to restrict access to specified IP whitelist. +
API Changes @@ -37,13 +46,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
-### Removed - -- **Breaking:** `Pleroma.Workers.Cron.StatsWorker` setting from Oban `:crontab` (moved to a simpler implementation). -- **Breaking:** `Pleroma.Workers.Cron.ClearOauthTokenWorker` setting from Oban `:crontab` (moved to scheduled jobs). -- **Breaking:** `Pleroma.Workers.Cron.PurgeExpiredActivitiesWorker` setting from Oban `:crontab` (moved to scheduled jobs). -- Removed `:managed_config` option. In practice, it was accidentally removed with 2.0.0 release when frontends were -switched to a new configuration mechanism, however it was not officially removed until now. ### Fixed diff --git a/config/config.exs b/config/config.exs index 170e4e1c7..99c33010f 100644 --- a/config/config.exs +++ b/config/config.exs @@ -637,7 +637,12 @@ config :pleroma, Pleroma.Emails.NewUsersDigestEmail, enabled: false -config :prometheus, Pleroma.Web.Endpoint.MetricsExporter, path: "/api/pleroma/app_metrics" +config :prometheus, Pleroma.Web.Endpoint.MetricsExporter, + enabled: false, + auth: false, + ip_whitelist: [], + path: "/api/pleroma/app_metrics", + format: :text config :pleroma, Pleroma.ScheduledActivity, daily_user_limit: 25, diff --git a/config/description.exs b/config/description.exs index fa843ea8c..71b12326f 100644 --- a/config/description.exs +++ b/config/description.exs @@ -3709,5 +3709,42 @@ suggestions: [2] } ] + }, + %{ + group: :prometheus, + key: Pleroma.Web.Endpoint.MetricsExporter, + type: :group, + description: "Prometheus app metrics endpoint configuration", + children: [ + %{ + key: :enabled, + type: :boolean, + description: "[Pleroma extension] Enables app metrics endpoint." + }, + %{ + key: :ip_whitelist, + type: [{:list, :string}, {:list, :charlist}, {:list, :tuple}], + description: + "[Pleroma extension] If non-empty, restricts access to app metrics endpoint to specified IP addresses." + }, + %{ + key: :auth, + type: [:boolean, :tuple], + description: "Enables HTTP Basic Auth for app metrics endpoint.", + suggestion: [false, {:basic, "myusername", "mypassword"}] + }, + %{ + key: :path, + type: :string, + description: "App metrics endpoint URI path.", + suggestions: ["/api/pleroma/app_metrics"] + }, + %{ + key: :format, + type: :atom, + description: "App metrics endpoint output format.", + suggestions: [:text, :protobuf] + } + ] } ] diff --git a/docs/API/prometheus.md b/docs/API/prometheus.md index 19c564e3c..a5158d905 100644 --- a/docs/API/prometheus.md +++ b/docs/API/prometheus.md @@ -2,15 +2,37 @@ Pleroma includes support for exporting metrics via the [prometheus_ex](https://github.com/deadtrickster/prometheus.ex) library. +Config example: + +``` +config :prometheus, Pleroma.Web.Endpoint.MetricsExporter, + enabled: true, + auth: {:basic, "myusername", "mypassword"}, + ip_whitelist: ["127.0.0.1"], + path: "/api/pleroma/app_metrics", + format: :text +``` + +* `enabled` (Pleroma extension) enables the endpoint +* `ip_whitelist` (Pleroma extension) could be used to restrict access only to specified IPs +* `auth` sets the authentication (`false` for no auth; configurable to HTTP Basic Auth, see [prometheus-plugs](https://github.com/deadtrickster/prometheus-plugs#exporting) documentation) +* `format` sets the output format (`:text` or `:protobuf`) +* `path` sets the path to app metrics page + + ## `/api/pleroma/app_metrics` + ### Exports Prometheus application metrics + * Method: `GET` -* Authentication: not required +* Authentication: not required by default (see configuration options above) * Params: none -* Response: JSON +* Response: text ## Grafana + ### Config example + The following is a config example to use with [Grafana](https://grafana.com) ``` diff --git a/lib/pleroma/helpers/inet_helper.ex b/lib/pleroma/helpers/inet_helper.ex new file mode 100644 index 000000000..126f82381 --- /dev/null +++ b/lib/pleroma/helpers/inet_helper.ex @@ -0,0 +1,19 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Helpers.InetHelper do + def parse_address(ip) when is_tuple(ip) do + {:ok, ip} + end + + def parse_address(ip) when is_binary(ip) do + ip + |> String.to_charlist() + |> parse_address() + end + + def parse_address(ip) do + :inet.parse_address(ip) + end +end diff --git a/lib/pleroma/web/endpoint.ex b/lib/pleroma/web/endpoint.ex index d0e01f3d9..f26542e88 100644 --- a/lib/pleroma/web/endpoint.ex +++ b/lib/pleroma/web/endpoint.ex @@ -7,6 +7,8 @@ defmodule Pleroma.Web.Endpoint do require Pleroma.Constants + alias Pleroma.Config + socket("/socket", Pleroma.Web.UserSocket) plug(Plug.Telemetry, event_prefix: [:phoenix, :endpoint]) @@ -88,19 +90,19 @@ defmodule Pleroma.Web.Endpoint do plug(Plug.Parsers, parsers: [ :urlencoded, - {:multipart, length: {Pleroma.Config, :get, [[:instance, :upload_limit]]}}, + {:multipart, length: {Config, :get, [[:instance, :upload_limit]]}}, :json ], pass: ["*/*"], json_decoder: Jason, - length: Pleroma.Config.get([:instance, :upload_limit]), + length: Config.get([:instance, :upload_limit]), body_reader: {Pleroma.Web.Plugs.DigestPlug, :read_body, []} ) plug(Plug.MethodOverride) plug(Plug.Head) - secure_cookies = Pleroma.Config.get([__MODULE__, :secure_cookie_flag]) + secure_cookies = Config.get([__MODULE__, :secure_cookie_flag]) cookie_name = if secure_cookies, @@ -108,7 +110,7 @@ defmodule Pleroma.Web.Endpoint do else: "pleroma_key" extra = - Pleroma.Config.get([__MODULE__, :extra_cookie_attrs]) + Config.get([__MODULE__, :extra_cookie_attrs]) |> Enum.join(";") # The session will be stored in the cookie and signed, @@ -118,7 +120,7 @@ defmodule Pleroma.Web.Endpoint do Plug.Session, store: :cookie, key: cookie_name, - signing_salt: Pleroma.Config.get([__MODULE__, :signing_salt], "CqaoopA2"), + signing_salt: Config.get([__MODULE__, :signing_salt], "CqaoopA2"), http_only: true, secure: secure_cookies, extra: extra @@ -138,8 +140,34 @@ defmodule MetricsExporter do use Prometheus.PlugExporter end + defmodule MetricsExporterCaller do + @behaviour Plug + + def init(opts), do: opts + + def call(conn, opts) do + prometheus_config = Application.get_env(:prometheus, MetricsExporter, []) + ip_whitelist = List.wrap(prometheus_config[:ip_whitelist]) + + cond do + !prometheus_config[:enabled] -> + conn + + ip_whitelist != [] and + !Enum.find(ip_whitelist, fn ip -> + Pleroma.Helpers.InetHelper.parse_address(ip) == {:ok, conn.remote_ip} + end) -> + conn + + true -> + MetricsExporter.call(conn, opts) + end + end + end + plug(PipelineInstrumenter) - plug(MetricsExporter) + + plug(MetricsExporterCaller) plug(Pleroma.Web.Router) diff --git a/test/pleroma/web/endpoint/metrics_exporter_test.exs b/test/pleroma/web/endpoint/metrics_exporter_test.exs new file mode 100644 index 000000000..f954cc1e7 --- /dev/null +++ b/test/pleroma/web/endpoint/metrics_exporter_test.exs @@ -0,0 +1,69 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.Endpoint.MetricsExporterTest do + use Pleroma.Web.ConnCase + + alias Pleroma.Web.Endpoint.MetricsExporter + + defp config do + Application.get_env(:prometheus, MetricsExporter) + end + + describe "with default config" do + test "does NOT expose app metrics", %{conn: conn} do + conn + |> get(config()[:path]) + |> json_response(404) + end + end + + describe "when enabled" do + setup do + initial_config = config() + on_exit(fn -> Application.put_env(:prometheus, MetricsExporter, initial_config) end) + + Application.put_env( + :prometheus, + MetricsExporter, + Keyword.put(initial_config, :enabled, true) + ) + end + + test "serves app metrics", %{conn: conn} do + conn = get(conn, config()[:path]) + assert response = response(conn, 200) + + for metric <- [ + "http_requests_total", + "http_request_duration_microseconds", + "phoenix_controller_render_duration", + "phoenix_controller_call_duration", + "telemetry_scrape_duration", + "erlang_vm_memory_atom_bytes_total" + ] do + assert response =~ ~r/#{metric}/ + end + end + + test "when IP whitelist configured, " <> + "serves app metrics only if client IP is whitelisted", + %{conn: conn} do + Application.put_env( + :prometheus, + MetricsExporter, + Keyword.put(config(), :ip_whitelist, ["127.127.127.127", {1, 1, 1, 1}, '255.255.255.255']) + ) + + conn + |> get(config()[:path]) + |> json_response(404) + + conn + |> Map.put(:remote_ip, {127, 127, 127, 127}) + |> get(config()[:path]) + |> response(200) + end + end +end From 48f7e12e6c139e9cfc8e68b4eaf1695019c9d246 Mon Sep 17 00:00:00 2001 From: feld Date: Wed, 28 Oct 2020 18:08:51 +0000 Subject: [PATCH 048/362] Merge branch 'ostatus-controller-no-auth-check-on-non-federating-instances' into 'develop' OStatus / Static FE access control fixes See merge request pleroma/pleroma!3053 --- CHANGELOG.md | 1 + lib/pleroma/web/activity_pub/visibility.ex | 39 +++- lib/pleroma/web/feed/tag_controller.ex | 17 +- lib/pleroma/web/feed/user_controller.ex | 27 +-- .../web/o_status/o_status_controller.ex | 17 +- lib/pleroma/web/router.ex | 57 ++++-- .../web/static_fe/static_fe_controller.ex | 177 +++++++++--------- .../activity_pub_controller_test.exs | 48 ----- test/pleroma/web/feed/tag_controller_test.exs | 13 +- .../pleroma/web/feed/user_controller_test.exs | 12 +- .../web/o_status/o_status_controller_test.exs | 24 +-- .../static_fe/static_fe_controller_test.exs | 47 ++++- test/support/conn_case.ex | 22 --- 13 files changed, 258 insertions(+), 243 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ef10a945d..dd500bdd8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -52,6 +52,7 @@ switched to a new configuration mechanism, however it was not officially removed - Add documented-but-missing chat pagination. - Allow sending out emails again. - Allow sending chat messages to yourself +- OStatus / static FE endpoints: fixed inaccessibility for anonymous users on non-federating instances, switched to handling per `:restrict_unauthenticated` setting. ### Upgrade notes diff --git a/lib/pleroma/web/activity_pub/visibility.ex b/lib/pleroma/web/activity_pub/visibility.ex index 5c349bb7a..76bd54a42 100644 --- a/lib/pleroma/web/activity_pub/visibility.ex +++ b/lib/pleroma/web/activity_pub/visibility.ex @@ -44,29 +44,30 @@ def is_direct?(activity) do def is_list?(%{data: %{"listMessage" => _}}), do: true def is_list?(_), do: false - @spec visible_for_user?(Activity.t(), User.t() | nil) :: boolean() - def visible_for_user?(%{actor: ap_id}, %User{ap_id: ap_id}), do: true + @spec visible_for_user?(Activity.t() | nil, User.t() | nil) :: boolean() + def visible_for_user?(%Activity{actor: ap_id}, %User{ap_id: ap_id}), do: true def visible_for_user?(nil, _), do: false - def visible_for_user?(%{data: %{"listMessage" => _}}, nil), do: false + def visible_for_user?(%Activity{data: %{"listMessage" => _}}, nil), do: false - def visible_for_user?(%{data: %{"listMessage" => list_ap_id}} = activity, %User{} = user) do + def visible_for_user?( + %Activity{data: %{"listMessage" => list_ap_id}} = activity, + %User{} = user + ) do user.ap_id in activity.data["to"] || list_ap_id |> Pleroma.List.get_by_ap_id() |> Pleroma.List.member?(user) end - def visible_for_user?(%{local: local} = activity, nil) do - cfg_key = if local, do: :local, else: :remote - - if Pleroma.Config.restrict_unauthenticated_access?(:activities, cfg_key), + def visible_for_user?(%Activity{} = activity, nil) do + if restrict_unauthenticated_access?(activity), do: false, else: is_public?(activity) end - def visible_for_user?(activity, user) do + def visible_for_user?(%Activity{} = activity, user) do x = [user.ap_id | User.following(user)] y = [activity.actor] ++ activity.data["to"] ++ (activity.data["cc"] || []) is_public?(activity) || Enum.any?(x, &(&1 in y)) @@ -82,6 +83,26 @@ def entire_thread_visible_for_user?(%Activity{} = activity, %User{} = user) do result end + def restrict_unauthenticated_access?(%Activity{local: local}) do + restrict_unauthenticated_access_to_activity?(local) + end + + def restrict_unauthenticated_access?(%Object{} = object) do + object + |> Object.local?() + |> restrict_unauthenticated_access_to_activity?() + end + + def restrict_unauthenticated_access?(%User{} = user) do + User.visible_for(user, _reading_user = nil) + end + + defp restrict_unauthenticated_access_to_activity?(local?) when is_boolean(local?) do + cfg_key = if local?, do: :local, else: :remote + + Pleroma.Config.restrict_unauthenticated_access?(:activities, cfg_key) + end + def get_visibility(object) do to = object.data["to"] || [] cc = object.data["cc"] || [] diff --git a/lib/pleroma/web/feed/tag_controller.ex b/lib/pleroma/web/feed/tag_controller.ex index 93a8294b7..218cdbdf3 100644 --- a/lib/pleroma/web/feed/tag_controller.ex +++ b/lib/pleroma/web/feed/tag_controller.ex @@ -10,14 +10,14 @@ defmodule Pleroma.Web.Feed.TagController do alias Pleroma.Web.Feed.FeedView def feed(conn, params) do - unless Pleroma.Config.restrict_unauthenticated_access?(:activities, :local) do + if Config.get!([:instance, :public]) do render_feed(conn, params) else render_error(conn, :not_found, "Not found") end end - def render_feed(conn, %{"tag" => raw_tag} = params) do + defp render_feed(conn, %{"tag" => raw_tag} = params) do {format, tag} = parse_tag(raw_tag) activities = @@ -36,12 +36,13 @@ def render_feed(conn, %{"tag" => raw_tag} = params) do end @spec parse_tag(binary() | any()) :: {format :: String.t(), tag :: String.t()} - defp parse_tag(raw_tag) when is_binary(raw_tag) do - case Enum.reverse(String.split(raw_tag, ".")) do - [format | tag] when format in ["atom", "rss"] -> {format, Enum.join(tag, ".")} - _ -> {"rss", raw_tag} + defp parse_tag(raw_tag) do + case is_binary(raw_tag) && Enum.reverse(String.split(raw_tag, ".")) do + [format | tag] when format in ["rss", "atom"] -> + {format, Enum.join(tag, ".")} + + _ -> + {"atom", raw_tag} end end - - defp parse_tag(raw_tag), do: {"rss", raw_tag} end diff --git a/lib/pleroma/web/feed/user_controller.ex b/lib/pleroma/web/feed/user_controller.ex index 752983c3b..a5013d2c0 100644 --- a/lib/pleroma/web/feed/user_controller.ex +++ b/lib/pleroma/web/feed/user_controller.ex @@ -5,6 +5,7 @@ defmodule Pleroma.Web.Feed.UserController do use Pleroma.Web, :controller + alias Pleroma.Config alias Pleroma.User alias Pleroma.Web.ActivityPub.ActivityPub alias Pleroma.Web.ActivityPub.ActivityPubController @@ -22,12 +23,7 @@ def feed_redirect(%{assigns: %{format: "html"}} = conn, %{"nickname" => nickname def feed_redirect(%{assigns: %{format: format}} = conn, _params) when format in ["json", "activity+json"] do - with %{halted: false} = conn <- - Pleroma.Web.Plugs.EnsureAuthenticatedPlug.call(conn, - unless_func: &Pleroma.Web.Plugs.FederatingPlug.federating?/1 - ) do - ActivityPubController.call(conn, :user) - end + ActivityPubController.call(conn, :user) end def feed_redirect(conn, %{"nickname" => nickname}) do @@ -36,25 +32,18 @@ def feed_redirect(conn, %{"nickname" => nickname}) do end end - def feed(conn, params) do - unless Pleroma.Config.restrict_unauthenticated_access?(:profiles, :local) do - render_feed(conn, params) - else - errors(conn, {:error, :not_found}) - end - end - - def render_feed(conn, %{"nickname" => nickname} = params) do + def feed(conn, %{"nickname" => nickname} = params) do format = get_format(conn) format = - if format in ["rss", "atom"] do + if format in ["atom", "rss"] do format else "atom" end - with {_, %User{local: true} = user} <- {:fetch_user, User.get_cached_by_nickname(nickname)} do + with {_, %User{local: true} = user} <- {:fetch_user, User.get_cached_by_nickname(nickname)}, + {_, :visible} <- {:visibility, User.visible_for(user, _reading_user = nil)} do activities = %{ type: ["Create"], @@ -69,7 +58,7 @@ def render_feed(conn, %{"nickname" => nickname} = params) do |> render("user.#{format}", user: user, activities: activities, - feed_config: Pleroma.Config.get([:feed]) + feed_config: Config.get([:feed]) ) end end @@ -81,6 +70,8 @@ def errors(conn, {:error, :not_found}) do def errors(conn, {:fetch_user, %User{local: false}}), do: errors(conn, {:error, :not_found}) def errors(conn, {:fetch_user, nil}), do: errors(conn, {:error, :not_found}) + def errors(conn, {:visibility, _}), do: errors(conn, {:error, :not_found}) + def errors(conn, _) do render_error(conn, :internal_server_error, "Something went wrong") end diff --git a/lib/pleroma/web/o_status/o_status_controller.ex b/lib/pleroma/web/o_status/o_status_controller.ex index b044260b3..668ae0ea4 100644 --- a/lib/pleroma/web/o_status/o_status_controller.ex +++ b/lib/pleroma/web/o_status/o_status_controller.ex @@ -16,10 +16,6 @@ defmodule Pleroma.Web.OStatus.OStatusController do alias Pleroma.Web.Plugs.RateLimiter alias Pleroma.Web.Router - plug(Pleroma.Web.Plugs.EnsureAuthenticatedPlug, - unless_func: &Pleroma.Web.Plugs.FederatingPlug.federating?/1 - ) - plug( RateLimiter, [name: :ap_routes, params: ["uuid"]] when action in [:object, :activity] @@ -37,14 +33,12 @@ def object(%{assigns: %{format: format}} = conn, _params) ActivityPubController.call(conn, :object) end - def object(%{assigns: %{format: format}} = conn, _params) do + def object(conn, _params) do with id <- Endpoint.url() <> conn.request_path, {_, %Activity{} = activity} <- {:activity, Activity.get_create_by_object_ap_id_with_object(id)}, {_, true} <- {:public?, Visibility.is_public?(activity)} do - case format do - _ -> redirect(conn, to: "/notice/#{activity.id}") - end + redirect(conn, to: "/notice/#{activity.id}") else reason when reason in [{:public?, false}, {:activity, nil}] -> {:error, :not_found} @@ -59,13 +53,11 @@ def activity(%{assigns: %{format: format}} = conn, _params) ActivityPubController.call(conn, :activity) end - def activity(%{assigns: %{format: format}} = conn, _params) do + def activity(conn, _params) do with id <- Endpoint.url() <> conn.request_path, {_, %Activity{} = activity} <- {:activity, Activity.normalize(id)}, {_, true} <- {:public?, Visibility.is_public?(activity)} do - case format do - _ -> redirect(conn, to: "/notice/#{activity.id}") - end + redirect(conn, to: "/notice/#{activity.id}") else reason when reason in [{:public?, false}, {:activity, nil}] -> {:error, :not_found} @@ -119,6 +111,7 @@ def notice(%{assigns: %{format: format}} = conn, %{"id" => id}) do def notice_player(conn, %{"id" => id}) do with %Activity{data: %{"type" => "Create"}} = activity <- Activity.get_by_id_with_object(id), true <- Visibility.is_public?(activity), + {_, true} <- {:visible?, Visibility.visible_for_user?(activity, _reading_user = nil)}, %Object{} = object <- Object.normalize(activity), %{data: %{"attachment" => [%{"url" => [url | _]} | _]}} <- object, true <- String.starts_with?(url["mediaType"], ["audio", "video"]) do diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index d2d939989..07a574f35 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -5,6 +5,26 @@ defmodule Pleroma.Web.Router do use Pleroma.Web, :router + pipeline :accepts_html do + plug(:accepts, ["html"]) + end + + pipeline :accepts_html_xml do + plug(:accepts, ["html", "xml", "rss", "atom"]) + end + + pipeline :accepts_html_json do + plug(:accepts, ["html", "activity+json", "json"]) + end + + pipeline :accepts_html_xml_json do + plug(:accepts, ["html", "xml", "rss", "atom", "activity+json", "json"]) + end + + pipeline :accepts_xml_rss_atom do + plug(:accepts, ["xml", "rss", "atom"]) + end + pipeline :browser do plug(:accepts, ["html"]) plug(:fetch_session) @@ -566,30 +586,43 @@ defmodule Pleroma.Web.Router do ) end - pipeline :ostatus do - plug(:accepts, ["html", "xml", "rss", "atom", "activity+json", "json"]) - plug(Pleroma.Web.Plugs.StaticFEPlug) - end - - pipeline :oembed do - plug(:accepts, ["json", "xml"]) - end - scope "/", Pleroma.Web do - pipe_through([:ostatus, :http_signature]) + # Note: html format is supported only if static FE is enabled + # Note: http signature is only considered for json requests (no auth for non-json requests) + pipe_through([:accepts_html_json, :http_signature, Pleroma.Web.Plugs.StaticFEPlug]) get("/objects/:uuid", OStatus.OStatusController, :object) get("/activities/:uuid", OStatus.OStatusController, :activity) get("/notice/:id", OStatus.OStatusController, :notice) - get("/notice/:id/embed_player", OStatus.OStatusController, :notice_player) # Mastodon compatibility routes get("/users/:nickname/statuses/:id", OStatus.OStatusController, :object) get("/users/:nickname/statuses/:id/activity", OStatus.OStatusController, :activity) + end + + scope "/", Pleroma.Web do + # Note: html format is supported only if static FE is enabled + # Note: http signature is only considered for json requests (no auth for non-json requests) + pipe_through([:accepts_html_xml_json, :http_signature, Pleroma.Web.Plugs.StaticFEPlug]) + + # Note: returns user _profile_ for json requests, redirects to user _feed_ for non-json ones + get("/users/:nickname", Feed.UserController, :feed_redirect, as: :user_feed) + end + + scope "/", Pleroma.Web do + # Note: html format is supported only if static FE is enabled + pipe_through([:accepts_html_xml, Pleroma.Web.Plugs.StaticFEPlug]) get("/users/:nickname/feed", Feed.UserController, :feed, as: :user_feed) - get("/users/:nickname", Feed.UserController, :feed_redirect, as: :user_feed) + end + scope "/", Pleroma.Web do + pipe_through(:accepts_html) + get("/notice/:id/embed_player", OStatus.OStatusController, :notice_player) + end + + scope "/", Pleroma.Web do + pipe_through(:accepts_xml_rss_atom) get("/tags/:tag", Feed.TagController, :feed, as: :tag_feed) end diff --git a/lib/pleroma/web/static_fe/static_fe_controller.ex b/lib/pleroma/web/static_fe/static_fe_controller.ex index 687b17df6..bdec0897a 100644 --- a/lib/pleroma/web/static_fe/static_fe_controller.ex +++ b/lib/pleroma/web/static_fe/static_fe_controller.ex @@ -17,12 +17,96 @@ defmodule Pleroma.Web.StaticFE.StaticFEController do plug(:put_view, Pleroma.Web.StaticFE.StaticFEView) plug(:assign_id) - plug(Pleroma.Web.Plugs.EnsureAuthenticatedPlug, - unless_func: &Pleroma.Web.Plugs.FederatingPlug.federating?/1 - ) - @page_keys ["max_id", "min_id", "limit", "since_id", "order"] + @doc "Renders requested local public activity or public activities of requested user" + def show(%{assigns: %{notice_id: notice_id}} = conn, _params) do + with %Activity{local: true} = activity <- + Activity.get_by_id_with_object(notice_id), + true <- Visibility.is_public?(activity.object), + {_, true} <- {:visible?, Visibility.visible_for_user?(activity, _reading_user = nil)}, + %User{} = user <- User.get_by_ap_id(activity.object.data["actor"]) do + meta = Metadata.build_tags(%{activity_id: notice_id, object: activity.object, user: user}) + + timeline = + activity.object.data["context"] + |> ActivityPub.fetch_activities_for_context(%{}) + |> Enum.reverse() + |> Enum.map(&represent(&1, &1.object.id == activity.object.id)) + + render(conn, "conversation.html", %{activities: timeline, meta: meta}) + else + %Activity{object: %Object{data: data}} -> + conn + |> put_status(:found) + |> redirect(external: data["url"] || data["external_url"] || data["id"]) + + _ -> + not_found(conn, "Post not found.") + end + end + + def show(%{assigns: %{username_or_id: username_or_id}} = conn, params) do + with {_, %User{local: true} = user} <- + {:fetch_user, User.get_cached_by_nickname_or_id(username_or_id)}, + {_, :visible} <- {:visibility, User.visible_for(user, _reading_user = nil)} do + meta = Metadata.build_tags(%{user: user}) + + params = + params + |> Map.take(@page_keys) + |> Map.new(fn {k, v} -> {String.to_existing_atom(k), v} end) + + timeline = + user + |> ActivityPub.fetch_user_activities(_reading_user = nil, params) + |> Enum.map(&represent/1) + + prev_page_id = + (params["min_id"] || params["max_id"]) && + List.first(timeline) && List.first(timeline).id + + next_page_id = List.last(timeline) && List.last(timeline).id + + render(conn, "profile.html", %{ + user: User.sanitize_html(user), + timeline: timeline, + prev_page_id: prev_page_id, + next_page_id: next_page_id, + meta: meta + }) + else + _ -> + not_found(conn, "User not found.") + end + end + + def show(%{assigns: %{object_id: _}} = conn, _params) do + url = Helpers.url(conn) <> conn.request_path + + case Activity.get_create_by_object_ap_id_with_object(url) do + %Activity{} = activity -> + to = Helpers.o_status_path(Pleroma.Web.Endpoint, :notice, activity) + redirect(conn, to: to) + + _ -> + not_found(conn, "Post not found.") + end + end + + def show(%{assigns: %{activity_id: _}} = conn, _params) do + url = Helpers.url(conn) <> conn.request_path + + case Activity.get_by_ap_id(url) do + %Activity{} = activity -> + to = Helpers.o_status_path(Pleroma.Web.Endpoint, :notice, activity) + redirect(conn, to: to) + + _ -> + not_found(conn, "Post not found.") + end + end + defp get_title(%Object{data: %{"name" => name}}) when is_binary(name), do: name @@ -81,91 +165,6 @@ defp represent(%Activity{object: %Object{data: data}} = activity, selected) do } end - def show(%{assigns: %{notice_id: notice_id}} = conn, _params) do - with %Activity{local: true} = activity <- - Activity.get_by_id_with_object(notice_id), - true <- Visibility.is_public?(activity.object), - %User{} = user <- User.get_by_ap_id(activity.object.data["actor"]) do - meta = Metadata.build_tags(%{activity_id: notice_id, object: activity.object, user: user}) - - timeline = - activity.object.data["context"] - |> ActivityPub.fetch_activities_for_context(%{}) - |> Enum.reverse() - |> Enum.map(&represent(&1, &1.object.id == activity.object.id)) - - render(conn, "conversation.html", %{activities: timeline, meta: meta}) - else - %Activity{object: %Object{data: data}} -> - conn - |> put_status(:found) - |> redirect(external: data["url"] || data["external_url"] || data["id"]) - - _ -> - not_found(conn, "Post not found.") - end - end - - def show(%{assigns: %{username_or_id: username_or_id}} = conn, params) do - case User.get_cached_by_nickname_or_id(username_or_id) do - %User{} = user -> - meta = Metadata.build_tags(%{user: user}) - - params = - params - |> Map.take(@page_keys) - |> Map.new(fn {k, v} -> {String.to_existing_atom(k), v} end) - - timeline = - user - |> ActivityPub.fetch_user_activities(nil, params) - |> Enum.map(&represent/1) - - prev_page_id = - (params["min_id"] || params["max_id"]) && - List.first(timeline) && List.first(timeline).id - - next_page_id = List.last(timeline) && List.last(timeline).id - - render(conn, "profile.html", %{ - user: User.sanitize_html(user), - timeline: timeline, - prev_page_id: prev_page_id, - next_page_id: next_page_id, - meta: meta - }) - - _ -> - not_found(conn, "User not found.") - end - end - - def show(%{assigns: %{object_id: _}} = conn, _params) do - url = Helpers.url(conn) <> conn.request_path - - case Activity.get_create_by_object_ap_id_with_object(url) do - %Activity{} = activity -> - to = Helpers.o_status_path(Pleroma.Web.Endpoint, :notice, activity) - redirect(conn, to: to) - - _ -> - not_found(conn, "Post not found.") - end - end - - def show(%{assigns: %{activity_id: _}} = conn, _params) do - url = Helpers.url(conn) <> conn.request_path - - case Activity.get_by_ap_id(url) do - %Activity{} = activity -> - to = Helpers.o_status_path(Pleroma.Web.Endpoint, :notice, activity) - redirect(conn, to: to) - - _ -> - not_found(conn, "Post not found.") - end - end - defp assign_id(%{path_info: ["notice", notice_id]} = conn, _opts), do: assign(conn, :notice_id, notice_id) diff --git a/test/pleroma/web/activity_pub/activity_pub_controller_test.exs b/test/pleroma/web/activity_pub/activity_pub_controller_test.exs index b11e2f961..b696a24f4 100644 --- a/test/pleroma/web/activity_pub/activity_pub_controller_test.exs +++ b/test/pleroma/web/activity_pub/activity_pub_controller_test.exs @@ -156,21 +156,6 @@ test "it returns error when user is not found", %{conn: conn} do assert response == "Not found" end - - test "it requires authentication if instance is NOT federating", %{ - conn: conn - } do - user = insert(:user) - - conn = - put_req_header( - conn, - "accept", - "application/ld+json; profile=\"https://www.w3.org/ns/activitystreams\"" - ) - - ensure_federating_or_authenticated(conn, "/users/#{user.nickname}.json", user) - end end describe "mastodon compatibility routes" do @@ -338,18 +323,6 @@ test "cached purged after object deletion", %{conn: conn} do assert "Not found" == json_response(conn2, :not_found) end - - test "it requires authentication if instance is NOT federating", %{ - conn: conn - } do - user = insert(:user) - note = insert(:note) - uuid = String.split(note.data["id"], "/") |> List.last() - - conn = put_req_header(conn, "accept", "application/activity+json") - - ensure_federating_or_authenticated(conn, "/objects/#{uuid}", user) - end end describe "/activities/:uuid" do @@ -421,18 +394,6 @@ test "cached purged after activity deletion", %{conn: conn} do assert "Not found" == json_response(conn2, :not_found) end - - test "it requires authentication if instance is NOT federating", %{ - conn: conn - } do - user = insert(:user) - activity = insert(:note_activity) - uuid = String.split(activity.data["id"], "/") |> List.last() - - conn = put_req_header(conn, "accept", "application/activity+json") - - ensure_federating_or_authenticated(conn, "/activities/#{uuid}", user) - end end describe "/inbox" do @@ -893,15 +854,6 @@ test "it returns an announce activity in a collection", %{conn: conn} do assert response(conn, 200) =~ announce_activity.data["object"] end - - test "it requires authentication if instance is NOT federating", %{ - conn: conn - } do - user = insert(:user) - conn = put_req_header(conn, "accept", "application/activity+json") - - ensure_federating_or_authenticated(conn, "/users/#{user.nickname}/outbox", user) - end end describe "POST /users/:nickname/outbox (C2S)" do diff --git a/test/pleroma/web/feed/tag_controller_test.exs b/test/pleroma/web/feed/tag_controller_test.exs index 868e40965..e4084b0e5 100644 --- a/test/pleroma/web/feed/tag_controller_test.exs +++ b/test/pleroma/web/feed/tag_controller_test.exs @@ -8,6 +8,7 @@ defmodule Pleroma.Web.Feed.TagControllerTest do import Pleroma.Factory import SweetXml + alias Pleroma.Config alias Pleroma.Object alias Pleroma.Web.CommonAPI alias Pleroma.Web.Feed.FeedView @@ -15,7 +16,7 @@ defmodule Pleroma.Web.Feed.TagControllerTest do setup do: clear_config([:feed]) test "gets a feed (ATOM)", %{conn: conn} do - Pleroma.Config.put( + Config.put( [:feed, :post_title], %{max_length: 25, omission: "..."} ) @@ -82,7 +83,7 @@ test "gets a feed (ATOM)", %{conn: conn} do end test "gets a feed (RSS)", %{conn: conn} do - Pleroma.Config.put( + Config.put( [:feed, :post_title], %{max_length: 25, omission: "..."} ) @@ -157,7 +158,7 @@ test "gets a feed (RSS)", %{conn: conn} do response = conn |> put_req_header("accept", "application/rss+xml") - |> get(tag_feed_path(conn, :feed, "pleromaart")) + |> get(tag_feed_path(conn, :feed, "pleromaart.rss")) |> response(200) xml = parse(response) @@ -183,14 +184,12 @@ test "gets a feed (RSS)", %{conn: conn} do end describe "private instance" do - setup do: clear_config([:instance, :public]) + setup do: clear_config([:instance, :public], false) test "returns 404 for tags feed", %{conn: conn} do - Config.put([:instance, :public], false) - conn |> put_req_header("accept", "application/rss+xml") - |> get(tag_feed_path(conn, :feed, "pleromaart")) + |> get(tag_feed_path(conn, :feed, "pleromaart.rss")) |> response(404) end end diff --git a/test/pleroma/web/feed/user_controller_test.exs b/test/pleroma/web/feed/user_controller_test.exs index a5dc0894b..eabfe3a63 100644 --- a/test/pleroma/web/feed/user_controller_test.exs +++ b/test/pleroma/web/feed/user_controller_test.exs @@ -13,7 +13,7 @@ defmodule Pleroma.Web.Feed.UserControllerTest do alias Pleroma.User alias Pleroma.Web.CommonAPI - setup do: clear_config([:instance, :federating], true) + setup do: clear_config([:static_fe, :enabled], false) describe "feed" do setup do: clear_config([:feed]) @@ -192,6 +192,16 @@ test "returns 404 when the user is remote", %{conn: conn} do |> get(user_feed_path(conn, :feed, user.nickname)) |> response(404) end + + test "does not require authentication on non-federating instances", %{conn: conn} do + clear_config([:instance, :federating], false) + user = insert(:user) + + conn + |> put_req_header("accept", "application/rss+xml") + |> get("/users/#{user.nickname}/feed.rss") + |> response(200) + end end # Note: see ActivityPubControllerTest for JSON format tests diff --git a/test/pleroma/web/o_status/o_status_controller_test.exs b/test/pleroma/web/o_status/o_status_controller_test.exs index ee498f4b5..65b2c22db 100644 --- a/test/pleroma/web/o_status/o_status_controller_test.exs +++ b/test/pleroma/web/o_status/o_status_controller_test.exs @@ -7,7 +7,6 @@ defmodule Pleroma.Web.OStatus.OStatusControllerTest do import Pleroma.Factory - alias Pleroma.Config alias Pleroma.Object alias Pleroma.User alias Pleroma.Web.ActivityPub.ActivityPub @@ -21,7 +20,7 @@ defmodule Pleroma.Web.OStatus.OStatusControllerTest do :ok end - setup do: clear_config([:instance, :federating], true) + setup do: clear_config([:static_fe, :enabled], false) describe "Mastodon compatibility routes" do setup %{conn: conn} do @@ -215,15 +214,16 @@ test "404s a non-existing notice", %{conn: conn} do assert response(conn, 404) end - test "it requires authentication if instance is NOT federating", %{ + test "does not require authentication on non-federating instances", %{ conn: conn } do - user = insert(:user) + clear_config([:instance, :federating], false) note_activity = insert(:note_activity) - conn = put_req_header(conn, "accept", "text/html") - - ensure_federating_or_authenticated(conn, "/notice/#{note_activity.id}", user) + conn + |> put_req_header("accept", "text/html") + |> get("/notice/#{note_activity.id}") + |> response(200) end end @@ -325,14 +325,16 @@ test "404s when attachment isn't audio or video", %{conn: conn} do |> response(404) end - test "it requires authentication if instance is NOT federating", %{ + test "does not require authentication on non-federating instances", %{ conn: conn, note_activity: note_activity } do - user = insert(:user) - conn = put_req_header(conn, "accept", "text/html") + clear_config([:instance, :federating], false) - ensure_federating_or_authenticated(conn, "/notice/#{note_activity.id}/embed_player", user) + conn + |> put_req_header("accept", "text/html") + |> get("/notice/#{note_activity.id}/embed_player") + |> response(200) end end end diff --git a/test/pleroma/web/static_fe/static_fe_controller_test.exs b/test/pleroma/web/static_fe/static_fe_controller_test.exs index f819a1e52..19506f1d8 100644 --- a/test/pleroma/web/static_fe/static_fe_controller_test.exs +++ b/test/pleroma/web/static_fe/static_fe_controller_test.exs @@ -6,14 +6,12 @@ defmodule Pleroma.Web.StaticFE.StaticFEControllerTest do use Pleroma.Web.ConnCase alias Pleroma.Activity - alias Pleroma.Config alias Pleroma.Web.ActivityPub.Transmogrifier alias Pleroma.Web.CommonAPI import Pleroma.Factory setup_all do: clear_config([:static_fe, :enabled], true) - setup do: clear_config([:instance, :federating], true) setup %{conn: conn} do conn = put_req_header(conn, "accept", "text/html") @@ -74,8 +72,27 @@ test "pagination, page 2", %{conn: conn, user: user} do refute html =~ ">test29<" end - test "it requires authentication if instance is NOT federating", %{conn: conn, user: user} do - ensure_federating_or_authenticated(conn, "/users/#{user.nickname}", user) + test "does not require authentication on non-federating instances", %{ + conn: conn, + user: user + } do + clear_config([:instance, :federating], false) + + conn = get(conn, "/users/#{user.nickname}") + + assert html_response(conn, 200) =~ user.nickname + end + + test "returns 404 for local user with `restrict_unauthenticated/profiles/local` setting", %{ + conn: conn + } do + clear_config([:restrict_unauthenticated, :profiles, :local], true) + + local_user = insert(:user, local: true) + + conn + |> get("/users/#{local_user.nickname}") + |> html_response(404) end end @@ -187,10 +204,28 @@ test "302 for remote cached status", %{conn: conn, user: user} do assert html_response(conn, 302) =~ "redirected" end - test "it requires authentication if instance is NOT federating", %{conn: conn, user: user} do + test "does not require authentication on non-federating instances", %{ + conn: conn, + user: user + } do + clear_config([:instance, :federating], false) + {:ok, activity} = CommonAPI.post(user, %{status: "testing a thing!"}) - ensure_federating_or_authenticated(conn, "/notice/#{activity.id}", user) + conn = get(conn, "/notice/#{activity.id}") + + assert html_response(conn, 200) =~ "testing a thing!" + end + + test "returns 404 for local public activity with `restrict_unauthenticated/activities/local` setting", + %{conn: conn, user: user} do + clear_config([:restrict_unauthenticated, :activities, :local], true) + + {:ok, activity} = CommonAPI.post(user, %{status: "testing a thing!"}) + + conn + |> get("/notice/#{activity.id}") + |> html_response(404) end end end diff --git a/test/support/conn_case.ex b/test/support/conn_case.ex index 9316a82e4..47cb65a80 100644 --- a/test/support/conn_case.ex +++ b/test/support/conn_case.ex @@ -112,28 +112,6 @@ defp json_response_and_validate_schema( defp json_response_and_validate_schema(conn, _status) do flunk("Response schema not found for #{conn.method} #{conn.request_path} #{conn.status}") end - - defp ensure_federating_or_authenticated(conn, url, user) do - initial_setting = Config.get([:instance, :federating]) - on_exit(fn -> Config.put([:instance, :federating], initial_setting) end) - - Config.put([:instance, :federating], false) - - conn - |> get(url) - |> response(403) - - conn - |> assign(:user, user) - |> get(url) - |> response(200) - - Config.put([:instance, :federating], true) - - conn - |> get(url) - |> response(200) - end end end From 79caf3840e40ecd304aa79f42e826abc6329b255 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Tue, 27 Oct 2020 14:37:48 -0500 Subject: [PATCH 049/362] phoenix_controller_render_duration is no longer available in telemetry of Phoenix 1.5+ --- test/pleroma/web/endpoint/metrics_exporter_test.exs | 1 - 1 file changed, 1 deletion(-) diff --git a/test/pleroma/web/endpoint/metrics_exporter_test.exs b/test/pleroma/web/endpoint/metrics_exporter_test.exs index f954cc1e7..875addc96 100644 --- a/test/pleroma/web/endpoint/metrics_exporter_test.exs +++ b/test/pleroma/web/endpoint/metrics_exporter_test.exs @@ -38,7 +38,6 @@ test "serves app metrics", %{conn: conn} do for metric <- [ "http_requests_total", "http_request_duration_microseconds", - "phoenix_controller_render_duration", "phoenix_controller_call_duration", "telemetry_scrape_duration", "erlang_vm_memory_atom_bytes_total" From 4d693b5e54b46c8863c463503d270a0d61d79c37 Mon Sep 17 00:00:00 2001 From: Haelwenn Date: Tue, 27 Oct 2020 22:44:31 +0000 Subject: [PATCH 050/362] Merge branch '2236-no-name' into 'develop' Resolve "Account cannot be fetched by some instances" Closes #2236 See merge request pleroma/pleroma!3101 --- CHANGELOG.md | 1 + lib/pleroma/user.ex | 5 +- lib/pleroma/web/activity_pub/activity_pub.ex | 1 + test/fixtures/mewmew_no_name.json | 46 +++++++++++++++++++ .../web/activity_pub/activity_pub_test.exs | 11 +++++ 5 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 test/fixtures/mewmew_no_name.json diff --git a/CHANGELOG.md b/CHANGELOG.md index dd500bdd8..d712c3498 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -53,6 +53,7 @@ switched to a new configuration mechanism, however it was not officially removed - Allow sending out emails again. - Allow sending chat messages to yourself - OStatus / static FE endpoints: fixed inaccessibility for anonymous users on non-federating instances, switched to handling per `:restrict_unauthenticated` setting. +- Fix remote users with a whitespace name. ### Upgrade notes diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 87c8bfbd1..b56a5dfe2 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -426,7 +426,6 @@ def remote_user_changeset(struct \\ %User{local: false}, params) do params, [ :bio, - :name, :emoji, :ap_id, :inbox, @@ -455,7 +454,9 @@ def remote_user_changeset(struct \\ %User{local: false}, params) do :accepts_chat_messages ] ) - |> validate_required([:name, :ap_id]) + |> cast(params, [:name], empty_values: []) + |> validate_required([:ap_id]) + |> validate_required([:name], trim: false) |> unique_constraint(:nickname) |> validate_format(:nickname, @email_regex) |> validate_length(:bio, max: bio_limit) diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index 8022f0402..3543f7f73 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -1371,6 +1371,7 @@ def fetch_and_prepare_user_from_ap_id(ap_id, opts \\ []) do {:ok, data} <- user_data_from_user_object(data) do {:ok, maybe_update_follow_information(data)} else + # If this has been deleted, only log a debug and not an error {:error, "Object has been deleted" = e} -> Logger.debug("Could not decode user at fetch #{ap_id}, #{inspect(e)}") {:error, e} diff --git a/test/fixtures/mewmew_no_name.json b/test/fixtures/mewmew_no_name.json new file mode 100644 index 000000000..532d4cf70 --- /dev/null +++ b/test/fixtures/mewmew_no_name.json @@ -0,0 +1,46 @@ +{ + "@context" : [ + "https://www.w3.org/ns/activitystreams", + "https://princess.cat/schemas/litepub-0.1.jsonld", + { + "@language" : "und" + } + ], + "attachment" : [], + "capabilities" : { + "acceptsChatMessages" : true + }, + "discoverable" : false, + "endpoints" : { + "oauthAuthorizationEndpoint" : "https://princess.cat/oauth/authorize", + "oauthRegistrationEndpoint" : "https://princess.cat/api/v1/apps", + "oauthTokenEndpoint" : "https://princess.cat/oauth/token", + "sharedInbox" : "https://princess.cat/inbox", + "uploadMedia" : "https://princess.cat/api/ap/upload_media" + }, + "followers" : "https://princess.cat/users/mewmew/followers", + "following" : "https://princess.cat/users/mewmew/following", + "icon" : { + "type" : "Image", + "url" : "https://princess.cat/media/12794fb50e86911e65be97f69196814049dcb398a2f8b58b99bb6591576e648c.png?name=blobcatpresentpink.png" + }, + "id" : "https://princess.cat/users/mewmew", + "image" : { + "type" : "Image", + "url" : "https://princess.cat/media/05d8bf3953ab6028fc920494ffc643fbee9dcef40d7bdd06f107e19acbfbd7f9.png" + }, + "inbox" : "https://princess.cat/users/mewmew/inbox", + "manuallyApprovesFollowers" : true, + "name" : " ", + "outbox" : "https://princess.cat/users/mewmew/outbox", + "preferredUsername" : "mewmew", + "publicKey" : { + "id" : "https://princess.cat/users/mewmew#main-key", + "owner" : "https://princess.cat/users/mewmew", + "publicKeyPem" : "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAru7VpygVef4zrFwnj0Mh\nrbO/2z2EdKN3rERtNrT8zWsLXNLQ50lfpRPnGDrd+xq7Rva4EIu0d5KJJ9n4vtY0\nuxK3On9vA2oyjLlR9O0lI3XTrHJborG3P7IPXrmNUMFpHiFHNqHp5tugUrs1gUFq\n7tmOmM92IP4Wjk8qNHFcsfnUbaPTX7sNIhteQKdi5HrTb/6lrEIe4G/FlMKRqxo3\nRNHuv6SNFQuiUKvFzjzazvjkjvBSm+aFROgdHa2tKl88StpLr7xmuY8qNFCRT6W0\nLacRp6c8ah5f03Kd+xCBVhCKvKaF1K0ERnQTBiitUh85md+Mtx/CoDoLnmpnngR3\nvQIDAQAB\n-----END PUBLIC KEY-----\n\n" + }, + "summary" : "please reply to my posts as direct messages if you have many followers", + "tag" : [], + "type" : "Person", + "url" : "https://princess.cat/users/mewmew" +} diff --git a/test/pleroma/web/activity_pub/activity_pub_test.exs b/test/pleroma/web/activity_pub/activity_pub_test.exs index 9200aef65..99b1076d6 100644 --- a/test/pleroma/web/activity_pub/activity_pub_test.exs +++ b/test/pleroma/web/activity_pub/activity_pub_test.exs @@ -2257,4 +2257,15 @@ test "`following` still contains self-replies by friends" do assert length(activities) == 2 end end + + test "allow fetching of accounts with an empty string name field" do + Tesla.Mock.mock(fn + %{method: :get, url: "https://princess.cat/users/mewmew"} -> + file = File.read!("test/fixtures/mewmew_no_name.json") + %Tesla.Env{status: 200, body: file} + end) + + {:ok, user} = ActivityPub.make_user_from_ap_id("https://princess.cat/users/mewmew") + assert user.name == " " + end end From 5116859f0e53a5b79a01f764fa3baf4c2110df1b Mon Sep 17 00:00:00 2001 From: rinpatch Date: Tue, 3 Nov 2020 13:59:18 +0000 Subject: [PATCH 051/362] Merge branch 'fix/object-attachment-spoof' into 'develop' Fix object spoofing vulnerability in attachments See merge request pleroma/secteam/pleroma!18 --- lib/pleroma/object/fetcher.ex | 20 +- test/fixtures/spoofed-object.json | 26 +++ test/pleroma/object/fetcher_test.exs | 27 ++- test/pleroma/object_test.exs | 15 +- .../web/activity_pub/activity_pub_test.exs | 24 ++- .../transmogrifier/announce_handling_test.exs | 6 +- .../transmogrifier/article_handling_test.exs | 15 +- .../transmogrifier/audio_handling_test.exs | 3 +- .../transmogrifier/event_handling_test.exs | 6 +- test/support/http_request_mock.ex | 190 +++++++++++++----- 10 files changed, 253 insertions(+), 79 deletions(-) create mode 100644 test/fixtures/spoofed-object.json diff --git a/lib/pleroma/object/fetcher.ex b/lib/pleroma/object/fetcher.ex index 169298b34..ae4301738 100644 --- a/lib/pleroma/object/fetcher.ex +++ b/lib/pleroma/object/fetcher.ex @@ -232,8 +232,24 @@ defp get_object_http(id) do |> sign_fetch(id, date) case HTTP.get(id, headers) do - {:ok, %{body: body, status: code}} when code in 200..299 -> - {:ok, body} + {:ok, %{body: body, status: code, headers: headers}} when code in 200..299 -> + case List.keyfind(headers, "content-type", 0) do + {_, content_type} -> + case Plug.Conn.Utils.media_type(content_type) do + {:ok, "application", "activity+json", _} -> + {:ok, body} + + {:ok, "application", "ld+json", + %{"profile" => "https://www.w3.org/ns/activitystreams"}} -> + {:ok, body} + + _ -> + {:error, {:content_type, content_type}} + end + + _ -> + {:error, {:content_type, nil}} + end {:ok, %{status: code}} when code in [404, 410] -> {:error, "Object has been deleted"} diff --git a/test/fixtures/spoofed-object.json b/test/fixtures/spoofed-object.json new file mode 100644 index 000000000..91e34307d --- /dev/null +++ b/test/fixtures/spoofed-object.json @@ -0,0 +1,26 @@ +{ + "@context": [ + "https://www.w3.org/ns/activitystreams", + "https://patch.cx/schemas/litepub-0.1.jsonld", + { + "@language": "und" + } + ], + "actor": "https://patch.cx/users/rin", + "attachment": [], + "attributedTo": "https://patch.cx/users/rin", + "cc": [ + "https://patch.cx/users/rin/followers" + ], + "content": "Oracle Corporation (NYSE: ORCL) today announced that it has signed a definitive merger agreement to acquire Pleroma AG (FRA: PLA), for $26.50 per share (approximately $10.3 billion). The transaction has been approved by the boards of directors of both companies and should close by early January.", + "context": "https://patch.cx/contexts/spoof", + "id": "https://patch.cx/objects/spoof", + "published": "2020-10-23T18:02:06.038856Z", + "sensitive": false, + "summary": "Oracle buys Pleroma", + "tag": [], + "to": [ + "https://www.w3.org/ns/activitystreams#Public" + ], + "type": "Note" +} diff --git a/test/pleroma/object/fetcher_test.exs b/test/pleroma/object/fetcher_test.exs index 14d2c645f..7df6af7fe 100644 --- a/test/pleroma/object/fetcher_test.exs +++ b/test/pleroma/object/fetcher_test.exs @@ -21,6 +21,17 @@ defmodule Pleroma.Object.FetcherTest do %{method: :get, url: "https://mastodon.example.org/users/userisgone404"} -> %Tesla.Env{status: 404} + %{ + method: :get, + url: + "https://patch.cx/media/03ca3c8b4ac3ddd08bf0f84be7885f2f88de0f709112131a22d83650819e36c2.json" + } -> + %Tesla.Env{ + status: 200, + headers: [{"content-type", "application/json"}], + body: File.read!("test/fixtures/spoofed-object.json") + } + env -> apply(HttpRequestMock, :request, [env]) end) @@ -34,19 +45,22 @@ defmodule Pleroma.Object.FetcherTest do %{method: :get, url: "https://social.sakamoto.gq/notice/9wTkLEnuq47B25EehM"} -> %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/fetch_mocks/9wTkLEnuq47B25EehM.json") + body: File.read!("test/fixtures/fetch_mocks/9wTkLEnuq47B25EehM.json"), + headers: HttpRequestMock.activitypub_object_headers() } %{method: :get, url: "https://social.sakamoto.gq/users/eal"} -> %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/fetch_mocks/eal.json") + body: File.read!("test/fixtures/fetch_mocks/eal.json"), + headers: HttpRequestMock.activitypub_object_headers() } %{method: :get, url: "https://busshi.moe/users/tuxcrafting/statuses/104410921027210069"} -> %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/fetch_mocks/104410921027210069.json") + body: File.read!("test/fixtures/fetch_mocks/104410921027210069.json"), + headers: HttpRequestMock.activitypub_object_headers() } %{method: :get, url: "https://busshi.moe/users/tuxcrafting"} -> @@ -132,6 +146,13 @@ test "Return MRF reason when fetched status is rejected by one" do "http://mastodon.example.org/@admin/99541947525187367" ) end + + test "it does not fetch a spoofed object uploaded on an instance as an attachment" do + assert {:error, _} = + Fetcher.fetch_object_from_id( + "https://patch.cx/media/03ca3c8b4ac3ddd08bf0f84be7885f2f88de0f709112131a22d83650819e36c2.json" + ) + end end describe "implementation quirks" do diff --git a/test/pleroma/object_test.exs b/test/pleroma/object_test.exs index 99caba336..5d4e6fb84 100644 --- a/test/pleroma/object_test.exs +++ b/test/pleroma/object_test.exs @@ -281,7 +281,11 @@ test "does not fetch unknown objects when fetch_remote is false" do setup do mock(fn %{method: :get, url: "https://patch.cx/objects/9a172665-2bc5-452d-8428-2361d4c33b1d"} -> - %Tesla.Env{status: 200, body: File.read!("test/fixtures/tesla_mock/poll_original.json")} + %Tesla.Env{ + status: 200, + body: File.read!("test/fixtures/tesla_mock/poll_original.json"), + headers: HttpRequestMock.activitypub_object_headers() + } env -> apply(HttpRequestMock, :request, [env]) @@ -315,7 +319,8 @@ test "refetches if the time since the last refetch is greater than the interval" mock_modified.(%Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/poll_modified.json") + body: File.read!("test/fixtures/tesla_mock/poll_modified.json"), + headers: HttpRequestMock.activitypub_object_headers() }) updated_object = Object.get_by_id_and_maybe_refetch(object.id, interval: -1) @@ -359,7 +364,8 @@ test "does not refetch if the time since the last refetch is greater than the in mock_modified.(%Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/poll_modified.json") + body: File.read!("test/fixtures/tesla_mock/poll_modified.json"), + headers: HttpRequestMock.activitypub_object_headers() }) updated_object = Object.get_by_id_and_maybe_refetch(object.id, interval: 100) @@ -387,7 +393,8 @@ test "preserves internal fields on refetch", %{mock_modified: mock_modified} do mock_modified.(%Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/poll_modified.json") + body: File.read!("test/fixtures/tesla_mock/poll_modified.json"), + headers: HttpRequestMock.activitypub_object_headers() }) updated_object = Object.get_by_id_and_maybe_refetch(object.id, interval: -1) diff --git a/test/pleroma/web/activity_pub/activity_pub_test.exs b/test/pleroma/web/activity_pub/activity_pub_test.exs index 99b1076d6..c6ca37847 100644 --- a/test/pleroma/web/activity_pub/activity_pub_test.exs +++ b/test/pleroma/web/activity_pub/activity_pub_test.exs @@ -1410,19 +1410,25 @@ test "doesn't crash when follower and following counters are hidden" do mock(fn env -> case env.url do "http://localhost:4001/users/masto_hidden_counters/following" -> - json(%{ - "@context" => "https://www.w3.org/ns/activitystreams", - "id" => "http://localhost:4001/users/masto_hidden_counters/followers" - }) + json( + %{ + "@context" => "https://www.w3.org/ns/activitystreams", + "id" => "http://localhost:4001/users/masto_hidden_counters/followers" + }, + headers: HttpRequestMock.activitypub_object_headers() + ) "http://localhost:4001/users/masto_hidden_counters/following?page=1" -> %Tesla.Env{status: 403, body: ""} "http://localhost:4001/users/masto_hidden_counters/followers" -> - json(%{ - "@context" => "https://www.w3.org/ns/activitystreams", - "id" => "http://localhost:4001/users/masto_hidden_counters/following" - }) + json( + %{ + "@context" => "https://www.w3.org/ns/activitystreams", + "id" => "http://localhost:4001/users/masto_hidden_counters/following" + }, + headers: HttpRequestMock.activitypub_object_headers() + ) "http://localhost:4001/users/masto_hidden_counters/followers?page=1" -> %Tesla.Env{status: 403, body: ""} @@ -2262,7 +2268,7 @@ test "allow fetching of accounts with an empty string name field" do Tesla.Mock.mock(fn %{method: :get, url: "https://princess.cat/users/mewmew"} -> file = File.read!("test/fixtures/mewmew_no_name.json") - %Tesla.Env{status: 200, body: file} + %Tesla.Env{status: 200, body: file, headers: HttpRequestMock.activitypub_object_headers()} end) {:ok, user} = ActivityPub.make_user_from_ap_id("https://princess.cat/users/mewmew") diff --git a/test/pleroma/web/activity_pub/transmogrifier/announce_handling_test.exs b/test/pleroma/web/activity_pub/transmogrifier/announce_handling_test.exs index 54335acdb..99c296c74 100644 --- a/test/pleroma/web/activity_pub/transmogrifier/announce_handling_test.exs +++ b/test/pleroma/web/activity_pub/transmogrifier/announce_handling_test.exs @@ -60,7 +60,11 @@ test "it works for incoming announces, fetching the announced object" do Tesla.Mock.mock(fn %{method: :get} -> - %Tesla.Env{status: 200, body: File.read!("test/fixtures/mastodon-note-object.json")} + %Tesla.Env{ + status: 200, + body: File.read!("test/fixtures/mastodon-note-object.json"), + headers: HttpRequestMock.activitypub_object_headers() + } end) _user = insert(:user, local: false, ap_id: data["actor"]) diff --git a/test/pleroma/web/activity_pub/transmogrifier/article_handling_test.exs b/test/pleroma/web/activity_pub/transmogrifier/article_handling_test.exs index 9b12a470a..b0ae804c5 100644 --- a/test/pleroma/web/activity_pub/transmogrifier/article_handling_test.exs +++ b/test/pleroma/web/activity_pub/transmogrifier/article_handling_test.exs @@ -13,7 +13,11 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.ArticleHandlingTest do test "Pterotype (Wordpress Plugin) Article" do Tesla.Mock.mock(fn %{url: "https://wedistribute.org/wp-json/pterotype/v1/actor/-blog"} -> - %Tesla.Env{status: 200, body: File.read!("test/fixtures/tesla_mock/wedistribute-user.json")} + %Tesla.Env{ + status: 200, + body: File.read!("test/fixtures/tesla_mock/wedistribute-user.json"), + headers: HttpRequestMock.activitypub_object_headers() + } end) data = @@ -36,13 +40,15 @@ test "Plume Article" do %{url: "https://baptiste.gelez.xyz/~/PlumeDevelopment/this-month-in-plume-june-2018/"} -> %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/baptiste.gelex.xyz-article.json") + body: File.read!("test/fixtures/tesla_mock/baptiste.gelex.xyz-article.json"), + headers: HttpRequestMock.activitypub_object_headers() } %{url: "https://baptiste.gelez.xyz/@/BaptisteGelez"} -> %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/baptiste.gelex.xyz-user.json") + body: File.read!("test/fixtures/tesla_mock/baptiste.gelex.xyz-user.json"), + headers: HttpRequestMock.activitypub_object_headers() } end) @@ -61,7 +67,8 @@ test "Prismo Article" do Tesla.Mock.mock(fn %{url: "https://prismo.news/@mxb"} -> %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/https___prismo.news__mxb.json") + body: File.read!("test/fixtures/tesla_mock/https___prismo.news__mxb.json"), + headers: HttpRequestMock.activitypub_object_headers() } end) diff --git a/test/pleroma/web/activity_pub/transmogrifier/audio_handling_test.exs b/test/pleroma/web/activity_pub/transmogrifier/audio_handling_test.exs index 0636d00c5..181eb7b09 100644 --- a/test/pleroma/web/activity_pub/transmogrifier/audio_handling_test.exs +++ b/test/pleroma/web/activity_pub/transmogrifier/audio_handling_test.exs @@ -48,7 +48,8 @@ test "Funkwhale Audio object" do %{url: "https://channels.tests.funkwhale.audio/federation/actors/compositions"} -> %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/funkwhale_channel.json") + body: File.read!("test/fixtures/tesla_mock/funkwhale_channel.json"), + headers: HttpRequestMock.activitypub_object_headers() } end) diff --git a/test/pleroma/web/activity_pub/transmogrifier/event_handling_test.exs b/test/pleroma/web/activity_pub/transmogrifier/event_handling_test.exs index 7f1ef2cbd..d7c55cfbe 100644 --- a/test/pleroma/web/activity_pub/transmogrifier/event_handling_test.exs +++ b/test/pleroma/web/activity_pub/transmogrifier/event_handling_test.exs @@ -13,13 +13,15 @@ test "Mobilizon Event object" do %{url: "https://mobilizon.org/events/252d5816-00a3-4a89-a66f-15bf65c33e39"} -> %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/mobilizon.org-event.json") + body: File.read!("test/fixtures/tesla_mock/mobilizon.org-event.json"), + headers: HttpRequestMock.activitypub_object_headers() } %{url: "https://mobilizon.org/@tcit"} -> %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/mobilizon.org-user.json") + body: File.read!("test/fixtures/tesla_mock/mobilizon.org-user.json"), + headers: HttpRequestMock.activitypub_object_headers() } end) diff --git a/test/support/http_request_mock.ex b/test/support/http_request_mock.ex index cb022333f..93464ebff 100644 --- a/test/support/http_request_mock.ex +++ b/test/support/http_request_mock.ex @@ -5,6 +5,8 @@ defmodule HttpRequestMock do require Logger + def activitypub_object_headers, do: [{"content-type", "application/activity+json"}] + def request( %Tesla.Env{ url: url, @@ -34,7 +36,8 @@ def get("https://osada.macgirvin.com/channel/mike", _, _, _) do {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/https___osada.macgirvin.com_channel_mike.json") + body: File.read!("test/fixtures/tesla_mock/https___osada.macgirvin.com_channel_mike.json"), + headers: activitypub_object_headers() }} end @@ -42,7 +45,8 @@ def get("https://shitposter.club/users/moonman", _, _, _) do {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/moonman@shitposter.club.json") + body: File.read!("test/fixtures/tesla_mock/moonman@shitposter.club.json"), + headers: activitypub_object_headers() }} end @@ -50,7 +54,8 @@ def get("https://mastodon.social/users/emelie/statuses/101849165031453009", _, _ {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/status.emelie.json") + body: File.read!("test/fixtures/tesla_mock/status.emelie.json"), + headers: activitypub_object_headers() }} end @@ -66,7 +71,8 @@ def get("https://mastodon.social/users/emelie", _, _, _) do {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/emelie.json") + body: File.read!("test/fixtures/tesla_mock/emelie.json"), + headers: activitypub_object_headers() }} end @@ -78,7 +84,8 @@ def get("https://mastodon.sdf.org/users/rinpatch", _, _, _) do {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/rinpatch.json") + body: File.read!("test/fixtures/tesla_mock/rinpatch.json"), + headers: activitypub_object_headers() }} end @@ -86,7 +93,8 @@ def get("https://patch.cx/objects/tesla_mock/poll_attachment", _, _, _) do {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/poll_attachment.json") + body: File.read!("test/fixtures/tesla_mock/poll_attachment.json"), + headers: activitypub_object_headers() }} end @@ -99,7 +107,8 @@ def get( {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/webfinger_emelie.json") + body: File.read!("test/fixtures/tesla_mock/webfinger_emelie.json"), + headers: activitypub_object_headers() }} end @@ -112,7 +121,8 @@ def get( {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/mike@osada.macgirvin.com.json") + body: File.read!("test/fixtures/tesla_mock/mike@osada.macgirvin.com.json"), + headers: activitypub_object_headers() }} end @@ -190,7 +200,8 @@ def get( {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/lucifermysticus.json") + body: File.read!("test/fixtures/tesla_mock/lucifermysticus.json"), + headers: activitypub_object_headers() }} end @@ -198,7 +209,8 @@ def get("https://prismo.news/@mxb", _, _, _) do {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/https___prismo.news__mxb.json") + body: File.read!("test/fixtures/tesla_mock/https___prismo.news__mxb.json"), + headers: activitypub_object_headers() }} end @@ -211,7 +223,8 @@ def get( {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/kaniini@hubzilla.example.org.json") + body: File.read!("test/fixtures/tesla_mock/kaniini@hubzilla.example.org.json"), + headers: activitypub_object_headers() }} end @@ -219,7 +232,8 @@ def get("https://niu.moe/users/rye", _, _, [{"accept", "application/activity+jso {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/rye.json") + body: File.read!("test/fixtures/tesla_mock/rye.json"), + headers: activitypub_object_headers() }} end @@ -227,7 +241,8 @@ def get("https://n1u.moe/users/rye", _, _, [{"accept", "application/activity+jso {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/rye.json") + body: File.read!("test/fixtures/tesla_mock/rye.json"), + headers: activitypub_object_headers() }} end @@ -246,7 +261,8 @@ def get("https://puckipedia.com/", _, _, [{"accept", "application/activity+json" {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/puckipedia.com.json") + body: File.read!("test/fixtures/tesla_mock/puckipedia.com.json"), + headers: activitypub_object_headers() }} end @@ -254,7 +270,8 @@ def get("https://peertube.moe/accounts/7even", _, _, _) do {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/7even.json") + body: File.read!("test/fixtures/tesla_mock/7even.json"), + headers: activitypub_object_headers() }} end @@ -262,7 +279,8 @@ def get("https://peertube.moe/videos/watch/df5f464b-be8d-46fb-ad81-2d4c2d1630e3" {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/peertube.moe-vid.json") + body: File.read!("test/fixtures/tesla_mock/peertube.moe-vid.json"), + headers: activitypub_object_headers() }} end @@ -270,7 +288,8 @@ def get("https://framatube.org/accounts/framasoft", _, _, _) do {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/https___framatube.org_accounts_framasoft.json") + body: File.read!("test/fixtures/tesla_mock/https___framatube.org_accounts_framasoft.json"), + headers: activitypub_object_headers() }} end @@ -278,7 +297,8 @@ def get("https://framatube.org/videos/watch/6050732a-8a7a-43d4-a6cd-809525a1d206 {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/framatube.org-video.json") + body: File.read!("test/fixtures/tesla_mock/framatube.org-video.json"), + headers: activitypub_object_headers() }} end @@ -286,7 +306,8 @@ def get("https://peertube.social/accounts/craigmaloney", _, _, _) do {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/craigmaloney.json") + body: File.read!("test/fixtures/tesla_mock/craigmaloney.json"), + headers: activitypub_object_headers() }} end @@ -294,7 +315,8 @@ def get("https://peertube.social/videos/watch/278d2b7c-0f38-4aaa-afe6-9ecc0c4a34 {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/peertube-social.json") + body: File.read!("test/fixtures/tesla_mock/peertube-social.json"), + headers: activitypub_object_headers() }} end @@ -304,7 +326,8 @@ def get("https://mobilizon.org/events/252d5816-00a3-4a89-a66f-15bf65c33e39", _, {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/mobilizon.org-event.json") + body: File.read!("test/fixtures/tesla_mock/mobilizon.org-event.json"), + headers: activitypub_object_headers() }} end @@ -312,7 +335,8 @@ def get("https://mobilizon.org/@tcit", _, _, [{"accept", "application/activity+j {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/mobilizon.org-user.json") + body: File.read!("test/fixtures/tesla_mock/mobilizon.org-user.json"), + headers: activitypub_object_headers() }} end @@ -320,7 +344,8 @@ def get("https://baptiste.gelez.xyz/@/BaptisteGelez", _, _, _) do {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/baptiste.gelex.xyz-user.json") + body: File.read!("test/fixtures/tesla_mock/baptiste.gelex.xyz-user.json"), + headers: activitypub_object_headers() }} end @@ -328,7 +353,8 @@ def get("https://baptiste.gelez.xyz/~/PlumeDevelopment/this-month-in-plume-june- {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/baptiste.gelex.xyz-article.json") + body: File.read!("test/fixtures/tesla_mock/baptiste.gelex.xyz-article.json"), + headers: activitypub_object_headers() }} end @@ -336,7 +362,8 @@ def get("https://wedistribute.org/wp-json/pterotype/v1/object/85810", _, _, _) d {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/wedistribute-article.json") + body: File.read!("test/fixtures/tesla_mock/wedistribute-article.json"), + headers: activitypub_object_headers() }} end @@ -344,7 +371,8 @@ def get("https://wedistribute.org/wp-json/pterotype/v1/actor/-blog", _, _, _) do {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/wedistribute-user.json") + body: File.read!("test/fixtures/tesla_mock/wedistribute-user.json"), + headers: activitypub_object_headers() }} end @@ -352,7 +380,8 @@ def get("http://mastodon.example.org/users/admin", _, _, _) do {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/admin@mastdon.example.org.json") + body: File.read!("test/fixtures/tesla_mock/admin@mastdon.example.org.json"), + headers: activitypub_object_headers() }} end @@ -362,7 +391,8 @@ def get("http://mastodon.example.org/users/relay", _, _, [ {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/relay@mastdon.example.org.json") + body: File.read!("test/fixtures/tesla_mock/relay@mastdon.example.org.json"), + headers: activitypub_object_headers() }} end @@ -482,7 +512,8 @@ def get( {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/pekorino@pawoo.net_host_meta.json") + body: File.read!("test/fixtures/tesla_mock/pekorino@pawoo.net_host_meta.json"), + headers: activitypub_object_headers() }} end @@ -543,7 +574,8 @@ def get( {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/mastodon-note-object.json") + body: File.read!("test/fixtures/mastodon-note-object.json"), + headers: activitypub_object_headers() }} end @@ -567,7 +599,8 @@ def get("https://mstdn.io/users/mayuutann", _, _, [{"accept", "application/activ {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/mayumayu.json") + body: File.read!("test/fixtures/tesla_mock/mayumayu.json"), + headers: activitypub_object_headers() }} end @@ -580,7 +613,8 @@ def get( {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/mayumayupost.json") + body: File.read!("test/fixtures/tesla_mock/mayumayupost.json"), + headers: activitypub_object_headers() }} end @@ -795,7 +829,8 @@ def get( {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/winterdienst_webfinger.json") + body: File.read!("test/fixtures/tesla_mock/winterdienst_webfinger.json"), + headers: activitypub_object_headers() }} end @@ -867,12 +902,21 @@ def get("https://social.heldscal.la/.well-known/host-meta", _, _, _) do end def get("https://mastodon.social/users/lambadalambda", _, _, _) do - {:ok, %Tesla.Env{status: 200, body: File.read!("test/fixtures/lambadalambda.json")}} + {:ok, + %Tesla.Env{ + status: 200, + body: File.read!("test/fixtures/lambadalambda.json"), + headers: activitypub_object_headers() + }} end def get("https://apfed.club/channel/indio", _, _, _) do {:ok, - %Tesla.Env{status: 200, body: File.read!("test/fixtures/tesla_mock/osada-user-indio.json")}} + %Tesla.Env{ + status: 200, + body: File.read!("test/fixtures/tesla_mock/osada-user-indio.json"), + headers: activitypub_object_headers() + }} end def get("https://social.heldscal.la/user/23211", _, _, [{"accept", "application/activity+json"}]) do @@ -895,7 +939,8 @@ def get("http://localhost:4001/users/masto_closed/followers", _, _, _) do {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/users_mock/masto_closed_followers.json") + body: File.read!("test/fixtures/users_mock/masto_closed_followers.json"), + headers: activitypub_object_headers() }} end @@ -903,7 +948,8 @@ def get("http://localhost:4001/users/masto_closed/followers?page=1", _, _, _) do {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/users_mock/masto_closed_followers_page.json") + body: File.read!("test/fixtures/users_mock/masto_closed_followers_page.json"), + headers: activitypub_object_headers() }} end @@ -911,7 +957,8 @@ def get("http://localhost:4001/users/masto_closed/following", _, _, _) do {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/users_mock/masto_closed_following.json") + body: File.read!("test/fixtures/users_mock/masto_closed_following.json"), + headers: activitypub_object_headers() }} end @@ -919,7 +966,8 @@ def get("http://localhost:4001/users/masto_closed/following?page=1", _, _, _) do {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/users_mock/masto_closed_following_page.json") + body: File.read!("test/fixtures/users_mock/masto_closed_following_page.json"), + headers: activitypub_object_headers() }} end @@ -927,7 +975,8 @@ def get("http://localhost:8080/followers/fuser3", _, _, _) do {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/users_mock/friendica_followers.json") + body: File.read!("test/fixtures/users_mock/friendica_followers.json"), + headers: activitypub_object_headers() }} end @@ -935,7 +984,8 @@ def get("http://localhost:8080/following/fuser3", _, _, _) do {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/users_mock/friendica_following.json") + body: File.read!("test/fixtures/users_mock/friendica_following.json"), + headers: activitypub_object_headers() }} end @@ -943,7 +993,8 @@ def get("http://localhost:4001/users/fuser2/followers", _, _, _) do {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/users_mock/pleroma_followers.json") + body: File.read!("test/fixtures/users_mock/pleroma_followers.json"), + headers: activitypub_object_headers() }} end @@ -951,7 +1002,8 @@ def get("http://localhost:4001/users/fuser2/following", _, _, _) do {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/users_mock/pleroma_following.json") + body: File.read!("test/fixtures/users_mock/pleroma_following.json"), + headers: activitypub_object_headers() }} end @@ -1049,7 +1101,8 @@ def get("https://info.pleroma.site/activity.json", _, _, [ {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/https__info.pleroma.site_activity.json") + body: File.read!("test/fixtures/tesla_mock/https__info.pleroma.site_activity.json"), + headers: activitypub_object_headers() }} end @@ -1063,7 +1116,8 @@ def get("https://info.pleroma.site/activity2.json", _, _, [ {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/https__info.pleroma.site_activity2.json") + body: File.read!("test/fixtures/tesla_mock/https__info.pleroma.site_activity2.json"), + headers: activitypub_object_headers() }} end @@ -1077,7 +1131,8 @@ def get("https://info.pleroma.site/activity3.json", _, _, [ {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/https__info.pleroma.site_activity3.json") + body: File.read!("test/fixtures/tesla_mock/https__info.pleroma.site_activity3.json"), + headers: activitypub_object_headers() }} end @@ -1110,7 +1165,12 @@ def get("https://www.patreon.com/posts/mastodon-2-9-and-28121681", _, _, _) do end def get("http://mastodon.example.org/@admin/99541947525187367", _, _, _) do - {:ok, %Tesla.Env{status: 200, body: File.read!("test/fixtures/mastodon-post-activity.json")}} + {:ok, + %Tesla.Env{ + status: 200, + body: File.read!("test/fixtures/mastodon-post-activity.json"), + headers: activitypub_object_headers() + }} end def get("https://info.pleroma.site/activity4.json", _, _, _) do @@ -1137,7 +1197,8 @@ def get("https://skippers-bin.com/notes/7x9tmrp97i", _, _, _) do {:ok, %Tesla.Env{ status: 200, - body: File.read!("test/fixtures/tesla_mock/misskey_poll_no_end_date.json") + body: File.read!("test/fixtures/tesla_mock/misskey_poll_no_end_date.json"), + headers: activitypub_object_headers() }} end @@ -1146,11 +1207,21 @@ def get("https://example.org/emoji/firedfox.png", _, _, _) do end def get("https://skippers-bin.com/users/7v1w1r8ce6", _, _, _) do - {:ok, %Tesla.Env{status: 200, body: File.read!("test/fixtures/tesla_mock/sjw.json")}} + {:ok, + %Tesla.Env{ + status: 200, + body: File.read!("test/fixtures/tesla_mock/sjw.json"), + headers: activitypub_object_headers() + }} end def get("https://patch.cx/users/rin", _, _, _) do - {:ok, %Tesla.Env{status: 200, body: File.read!("test/fixtures/tesla_mock/rin.json")}} + {:ok, + %Tesla.Env{ + status: 200, + body: File.read!("test/fixtures/tesla_mock/rin.json"), + headers: activitypub_object_headers() + }} end def get( @@ -1160,12 +1231,20 @@ def get( _ ) do {:ok, - %Tesla.Env{status: 200, body: File.read!("test/fixtures/tesla_mock/funkwhale_audio.json")}} + %Tesla.Env{ + status: 200, + body: File.read!("test/fixtures/tesla_mock/funkwhale_audio.json"), + headers: activitypub_object_headers() + }} end def get("https://channels.tests.funkwhale.audio/federation/actors/compositions", _, _, _) do {:ok, - %Tesla.Env{status: 200, body: File.read!("test/fixtures/tesla_mock/funkwhale_channel.json")}} + %Tesla.Env{ + status: 200, + body: File.read!("test/fixtures/tesla_mock/funkwhale_channel.json"), + headers: activitypub_object_headers() + }} end def get("http://example.com/rel_me/error", _, _, _) do @@ -1173,7 +1252,12 @@ def get("http://example.com/rel_me/error", _, _, _) do end def get("https://relay.mastodon.host/actor", _, _, _) do - {:ok, %Tesla.Env{status: 200, body: File.read!("test/fixtures/relay/relay.json")}} + {:ok, + %Tesla.Env{ + status: 200, + body: File.read!("test/fixtures/relay/relay.json"), + headers: activitypub_object_headers() + }} end def get("http://localhost:4001/", _, "", [{"accept", "text/html"}]) do From 6166ecdbc8c52d2ef392eda3cc3bd892a2d6ecf3 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Thu, 5 Nov 2020 16:33:51 +0300 Subject: [PATCH 052/362] CHANGELOG.md: Add an entry for the spoofing fix --- CHANGELOG.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d712c3498..034456261 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). -## [2.2.0] - 2020-10-?? +## [2.2.0] - 2020-11-?? + +### Security +- Fixed the possibility of using file uploads to spoof posts. ### Changed From fa1f5d4442560ca7fadc1057d0a1ae34ce4b08e8 Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Thu, 10 Sep 2020 11:03:37 +0200 Subject: [PATCH 053/362] Move TransmogrifierTest for Note to NoteHandlingTest --- .../transmogrifier/note_handling_test.exs | 750 ++++++++++++++++++ .../web/activity_pub/transmogrifier_test.exs | 723 ----------------- 2 files changed, 750 insertions(+), 723 deletions(-) create mode 100644 test/pleroma/web/activity_pub/transmogrifier/note_handling_test.exs diff --git a/test/pleroma/web/activity_pub/transmogrifier/note_handling_test.exs b/test/pleroma/web/activity_pub/transmogrifier/note_handling_test.exs new file mode 100644 index 000000000..2428bf0bf --- /dev/null +++ b/test/pleroma/web/activity_pub/transmogrifier/note_handling_test.exs @@ -0,0 +1,750 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ActivityPub.Transmogrifier.NoteHandlingTest do + use Oban.Testing, repo: Pleroma.Repo + use Pleroma.DataCase + + alias Pleroma.Activity + alias Pleroma.Object + alias Pleroma.User + alias Pleroma.Web.ActivityPub.Transmogrifier + alias Pleroma.Web.CommonAPI + + import Mock + import Pleroma.Factory + import ExUnit.CaptureLog + + setup_all do + Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end) + :ok + end + + setup do: clear_config([:instance, :max_remote_account_fields]) + + describe "handle_incoming" do + test "it works for incoming notices with tag not being an array (kroeg)" do + data = File.read!("test/fixtures/kroeg-array-less-emoji.json") |> Poison.decode!() + + {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) + object = Object.normalize(data["object"]) + + assert object.data["emoji"] == %{ + "icon_e_smile" => "https://puckipedia.com/forum/images/smilies/icon_e_smile.png" + } + + data = File.read!("test/fixtures/kroeg-array-less-hashtag.json") |> Poison.decode!() + + {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) + object = Object.normalize(data["object"]) + + assert "test" in object.data["tag"] + end + + test "it cleans up incoming notices which are not really DMs" do + user = insert(:user) + other_user = insert(:user) + + to = [user.ap_id, other_user.ap_id] + + data = + File.read!("test/fixtures/mastodon-post-activity.json") + |> Poison.decode!() + |> Map.put("to", to) + |> Map.put("cc", []) + + object = + data["object"] + |> Map.put("to", to) + |> Map.put("cc", []) + + data = Map.put(data, "object", object) + + {:ok, %Activity{data: data, local: false} = activity} = Transmogrifier.handle_incoming(data) + + assert data["to"] == [] + assert data["cc"] == to + + object_data = Object.normalize(activity).data + + assert object_data["to"] == [] + assert object_data["cc"] == to + end + + test "it ignores an incoming notice if we already have it" do + activity = insert(:note_activity) + + data = + File.read!("test/fixtures/mastodon-post-activity.json") + |> Poison.decode!() + |> Map.put("object", Object.normalize(activity).data) + + {:ok, returned_activity} = Transmogrifier.handle_incoming(data) + + assert activity == returned_activity + end + + @tag capture_log: true + test "it fetches reply-to activities if we don't have them" do + data = + File.read!("test/fixtures/mastodon-post-activity.json") + |> Poison.decode!() + + object = + data["object"] + |> Map.put("inReplyTo", "https://mstdn.io/users/mayuutann/statuses/99568293732299394") + + data = Map.put(data, "object", object) + {:ok, returned_activity} = Transmogrifier.handle_incoming(data) + returned_object = Object.normalize(returned_activity, false) + + assert %Activity{} = + Activity.get_create_by_object_ap_id( + "https://mstdn.io/users/mayuutann/statuses/99568293732299394" + ) + + assert returned_object.data["inReplyTo"] == + "https://mstdn.io/users/mayuutann/statuses/99568293732299394" + end + + test "it does not fetch reply-to activities beyond max replies depth limit" do + data = + File.read!("test/fixtures/mastodon-post-activity.json") + |> Poison.decode!() + + object = + data["object"] + |> Map.put("inReplyTo", "https://shitposter.club/notice/2827873") + + data = Map.put(data, "object", object) + + with_mock Pleroma.Web.Federator, + allowed_thread_distance?: fn _ -> false end do + {:ok, returned_activity} = Transmogrifier.handle_incoming(data) + + returned_object = Object.normalize(returned_activity, false) + + refute Activity.get_create_by_object_ap_id( + "tag:shitposter.club,2017-05-05:noticeId=2827873:objectType=comment" + ) + + assert returned_object.data["inReplyTo"] == "https://shitposter.club/notice/2827873" + end + end + + test "it does not crash if the object in inReplyTo can't be fetched" do + data = + File.read!("test/fixtures/mastodon-post-activity.json") + |> Poison.decode!() + + object = + data["object"] + |> Map.put("inReplyTo", "https://404.site/whatever") + + data = + data + |> Map.put("object", object) + + assert capture_log(fn -> + {:ok, _returned_activity} = Transmogrifier.handle_incoming(data) + end) =~ "[warn] Couldn't fetch \"https://404.site/whatever\", error: nil" + end + + test "it does not work for deactivated users" do + data = File.read!("test/fixtures/mastodon-post-activity.json") |> Poison.decode!() + + insert(:user, ap_id: data["actor"], deactivated: true) + + assert {:error, _} = Transmogrifier.handle_incoming(data) + end + + test "it works for incoming notices" do + data = File.read!("test/fixtures/mastodon-post-activity.json") |> Poison.decode!() + + {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) + + assert data["id"] == + "http://mastodon.example.org/users/admin/statuses/99512778738411822/activity" + + assert data["context"] == + "tag:mastodon.example.org,2018-02-12:objectId=20:objectType=Conversation" + + assert data["to"] == ["https://www.w3.org/ns/activitystreams#Public"] + + assert data["cc"] == [ + "http://mastodon.example.org/users/admin/followers", + "http://localtesting.pleroma.lol/users/lain" + ] + + assert data["actor"] == "http://mastodon.example.org/users/admin" + + object_data = Object.normalize(data["object"]).data + + assert object_data["id"] == + "http://mastodon.example.org/users/admin/statuses/99512778738411822" + + assert object_data["to"] == ["https://www.w3.org/ns/activitystreams#Public"] + + assert object_data["cc"] == [ + "http://mastodon.example.org/users/admin/followers", + "http://localtesting.pleroma.lol/users/lain" + ] + + assert object_data["actor"] == "http://mastodon.example.org/users/admin" + assert object_data["attributedTo"] == "http://mastodon.example.org/users/admin" + + assert object_data["context"] == + "tag:mastodon.example.org,2018-02-12:objectId=20:objectType=Conversation" + + assert object_data["sensitive"] == true + + user = User.get_cached_by_ap_id(object_data["actor"]) + + assert user.note_count == 1 + end + + test "it works for incoming notices without the sensitive property but an nsfw hashtag" do + data = File.read!("test/fixtures/mastodon-post-activity-nsfw.json") |> Poison.decode!() + + {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) + + object_data = Object.normalize(data["object"], false).data + + assert object_data["sensitive"] == true + end + + test "it works for incoming notices with hashtags" do + data = File.read!("test/fixtures/mastodon-post-activity-hashtag.json") |> Poison.decode!() + + {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) + object = Object.normalize(data["object"]) + + assert Enum.at(object.data["tag"], 2) == "moo" + end + + test "it works for incoming notices with contentMap" do + data = + File.read!("test/fixtures/mastodon-post-activity-contentmap.json") |> Poison.decode!() + + {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) + object = Object.normalize(data["object"]) + + assert object.data["content"] == + "

@lain

" + end + + test "it works for incoming notices with to/cc not being an array (kroeg)" do + data = File.read!("test/fixtures/kroeg-post-activity.json") |> Poison.decode!() + + {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) + object = Object.normalize(data["object"]) + + assert object.data["content"] == + "

henlo from my Psion netBook

message sent from my Psion netBook

" + end + + test "it ensures that as:Public activities make it to their followers collection" do + user = insert(:user) + + data = + File.read!("test/fixtures/mastodon-post-activity.json") + |> Poison.decode!() + |> Map.put("actor", user.ap_id) + |> Map.put("to", ["https://www.w3.org/ns/activitystreams#Public"]) + |> Map.put("cc", []) + + object = + data["object"] + |> Map.put("attributedTo", user.ap_id) + |> Map.put("to", ["https://www.w3.org/ns/activitystreams#Public"]) + |> Map.put("cc", []) + |> Map.put("id", user.ap_id <> "/activities/12345678") + + data = Map.put(data, "object", object) + + {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) + + assert data["cc"] == [User.ap_followers(user)] + end + + test "it ensures that address fields become lists" do + user = insert(:user) + + data = + File.read!("test/fixtures/mastodon-post-activity.json") + |> Poison.decode!() + |> Map.put("actor", user.ap_id) + |> Map.put("to", nil) + |> Map.put("cc", nil) + + object = + data["object"] + |> Map.put("attributedTo", user.ap_id) + |> Map.put("to", nil) + |> Map.put("cc", nil) + |> Map.put("id", user.ap_id <> "/activities/12345678") + + data = Map.put(data, "object", object) + + {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) + + assert !is_nil(data["to"]) + assert !is_nil(data["cc"]) + end + + test "it strips internal likes" do + data = + File.read!("test/fixtures/mastodon-post-activity.json") + |> Poison.decode!() + + likes = %{ + "first" => + "http://mastodon.example.org/objects/dbdbc507-52c8-490d-9b7c-1e1d52e5c132/likes?page=1", + "id" => "http://mastodon.example.org/objects/dbdbc507-52c8-490d-9b7c-1e1d52e5c132/likes", + "totalItems" => 3, + "type" => "OrderedCollection" + } + + object = Map.put(data["object"], "likes", likes) + data = Map.put(data, "object", object) + + {:ok, %Activity{object: object}} = Transmogrifier.handle_incoming(data) + + refute Map.has_key?(object.data, "likes") + end + + test "it strips internal reactions" do + user = insert(:user) + {:ok, activity} = CommonAPI.post(user, %{status: "#cofe"}) + {:ok, _} = CommonAPI.react_with_emoji(activity.id, user, "📢") + + %{object: object} = Activity.get_by_id_with_object(activity.id) + assert Map.has_key?(object.data, "reactions") + assert Map.has_key?(object.data, "reaction_count") + + object_data = Transmogrifier.strip_internal_fields(object.data) + refute Map.has_key?(object_data, "reactions") + refute Map.has_key?(object_data, "reaction_count") + end + + test "it correctly processes messages with non-array to field" do + user = insert(:user) + + message = %{ + "@context" => "https://www.w3.org/ns/activitystreams", + "to" => "https://www.w3.org/ns/activitystreams#Public", + "type" => "Create", + "object" => %{ + "content" => "blah blah blah", + "type" => "Note", + "attributedTo" => user.ap_id, + "inReplyTo" => nil + }, + "actor" => user.ap_id + } + + assert {:ok, activity} = Transmogrifier.handle_incoming(message) + + assert ["https://www.w3.org/ns/activitystreams#Public"] == activity.data["to"] + end + + test "it correctly processes messages with non-array cc field" do + user = insert(:user) + + message = %{ + "@context" => "https://www.w3.org/ns/activitystreams", + "to" => user.follower_address, + "cc" => "https://www.w3.org/ns/activitystreams#Public", + "type" => "Create", + "object" => %{ + "content" => "blah blah blah", + "type" => "Note", + "attributedTo" => user.ap_id, + "inReplyTo" => nil + }, + "actor" => user.ap_id + } + + assert {:ok, activity} = Transmogrifier.handle_incoming(message) + + assert ["https://www.w3.org/ns/activitystreams#Public"] == activity.data["cc"] + assert [user.follower_address] == activity.data["to"] + end + + test "it correctly processes messages with weirdness in address fields" do + user = insert(:user) + + message = %{ + "@context" => "https://www.w3.org/ns/activitystreams", + "to" => [nil, user.follower_address], + "cc" => ["https://www.w3.org/ns/activitystreams#Public", ["¿"]], + "type" => "Create", + "object" => %{ + "content" => "…", + "type" => "Note", + "attributedTo" => user.ap_id, + "inReplyTo" => nil + }, + "actor" => user.ap_id + } + + assert {:ok, activity} = Transmogrifier.handle_incoming(message) + + assert ["https://www.w3.org/ns/activitystreams#Public"] == activity.data["cc"] + assert [user.follower_address] == activity.data["to"] + end + end + + describe "`handle_incoming/2`, Mastodon format `replies` handling" do + setup do: clear_config([:activitypub, :note_replies_output_limit], 5) + setup do: clear_config([:instance, :federation_incoming_replies_max_depth]) + + setup do + data = + "test/fixtures/mastodon-post-activity.json" + |> File.read!() + |> Poison.decode!() + + items = get_in(data, ["object", "replies", "first", "items"]) + assert length(items) > 0 + + %{data: data, items: items} + end + + test "schedules background fetching of `replies` items if max thread depth limit allows", %{ + data: data, + items: items + } do + Pleroma.Config.put([:instance, :federation_incoming_replies_max_depth], 10) + + {:ok, _activity} = Transmogrifier.handle_incoming(data) + + for id <- items do + job_args = %{"op" => "fetch_remote", "id" => id, "depth" => 1} + assert_enqueued(worker: Pleroma.Workers.RemoteFetcherWorker, args: job_args) + end + end + + test "does NOT schedule background fetching of `replies` beyond max thread depth limit allows", + %{data: data} do + Pleroma.Config.put([:instance, :federation_incoming_replies_max_depth], 0) + + {:ok, _activity} = Transmogrifier.handle_incoming(data) + + assert all_enqueued(worker: Pleroma.Workers.RemoteFetcherWorker) == [] + end + end + + describe "`handle_incoming/2`, Pleroma format `replies` handling" do + setup do: clear_config([:activitypub, :note_replies_output_limit], 5) + setup do: clear_config([:instance, :federation_incoming_replies_max_depth]) + + setup do + user = insert(:user) + + {:ok, activity} = CommonAPI.post(user, %{status: "post1"}) + + {:ok, reply1} = + CommonAPI.post(user, %{status: "reply1", in_reply_to_status_id: activity.id}) + + {:ok, reply2} = + CommonAPI.post(user, %{status: "reply2", in_reply_to_status_id: activity.id}) + + replies_uris = Enum.map([reply1, reply2], fn a -> a.object.data["id"] end) + + {:ok, federation_output} = Transmogrifier.prepare_outgoing(activity.data) + + Repo.delete(activity.object) + Repo.delete(activity) + + %{federation_output: federation_output, replies_uris: replies_uris} + end + + test "schedules background fetching of `replies` items if max thread depth limit allows", %{ + federation_output: federation_output, + replies_uris: replies_uris + } do + Pleroma.Config.put([:instance, :federation_incoming_replies_max_depth], 1) + + {:ok, _activity} = Transmogrifier.handle_incoming(federation_output) + + for id <- replies_uris do + job_args = %{"op" => "fetch_remote", "id" => id, "depth" => 1} + assert_enqueued(worker: Pleroma.Workers.RemoteFetcherWorker, args: job_args) + end + end + + test "does NOT schedule background fetching of `replies` beyond max thread depth limit allows", + %{federation_output: federation_output} do + Pleroma.Config.put([:instance, :federation_incoming_replies_max_depth], 0) + + {:ok, _activity} = Transmogrifier.handle_incoming(federation_output) + + assert all_enqueued(worker: Pleroma.Workers.RemoteFetcherWorker) == [] + end + end + + describe "reserialization" do + test "successfully reserializes a message with inReplyTo == nil" do + user = insert(:user) + + message = %{ + "@context" => "https://www.w3.org/ns/activitystreams", + "to" => ["https://www.w3.org/ns/activitystreams#Public"], + "cc" => [], + "type" => "Create", + "object" => %{ + "to" => ["https://www.w3.org/ns/activitystreams#Public"], + "cc" => [], + "type" => "Note", + "content" => "Hi", + "inReplyTo" => nil, + "attributedTo" => user.ap_id + }, + "actor" => user.ap_id + } + + {:ok, activity} = Transmogrifier.handle_incoming(message) + + {:ok, _} = Transmogrifier.prepare_outgoing(activity.data) + end + + test "successfully reserializes a message with AS2 objects in IR" do + user = insert(:user) + + message = %{ + "@context" => "https://www.w3.org/ns/activitystreams", + "to" => ["https://www.w3.org/ns/activitystreams#Public"], + "cc" => [], + "type" => "Create", + "object" => %{ + "to" => ["https://www.w3.org/ns/activitystreams#Public"], + "cc" => [], + "type" => "Note", + "content" => "Hi", + "inReplyTo" => nil, + "attributedTo" => user.ap_id, + "tag" => [ + %{"name" => "#2hu", "href" => "http://example.com/2hu", "type" => "Hashtag"}, + %{"name" => "Bob", "href" => "http://example.com/bob", "type" => "Mention"} + ] + }, + "actor" => user.ap_id + } + + {:ok, activity} = Transmogrifier.handle_incoming(message) + + {:ok, _} = Transmogrifier.prepare_outgoing(activity.data) + end + end + + describe "fix_in_reply_to/2" do + setup do: clear_config([:instance, :federation_incoming_replies_max_depth]) + + setup do + data = Poison.decode!(File.read!("test/fixtures/mastodon-post-activity.json")) + [data: data] + end + + test "returns not modified object when hasn't containts inReplyTo field", %{data: data} do + assert Transmogrifier.fix_in_reply_to(data) == data + end + + test "returns object with inReplyTo when denied incoming reply", %{data: data} do + Pleroma.Config.put([:instance, :federation_incoming_replies_max_depth], 0) + + object_with_reply = + Map.put(data["object"], "inReplyTo", "https://shitposter.club/notice/2827873") + + modified_object = Transmogrifier.fix_in_reply_to(object_with_reply) + assert modified_object["inReplyTo"] == "https://shitposter.club/notice/2827873" + + object_with_reply = + Map.put(data["object"], "inReplyTo", %{"id" => "https://shitposter.club/notice/2827873"}) + + modified_object = Transmogrifier.fix_in_reply_to(object_with_reply) + assert modified_object["inReplyTo"] == %{"id" => "https://shitposter.club/notice/2827873"} + + object_with_reply = + Map.put(data["object"], "inReplyTo", ["https://shitposter.club/notice/2827873"]) + + modified_object = Transmogrifier.fix_in_reply_to(object_with_reply) + assert modified_object["inReplyTo"] == ["https://shitposter.club/notice/2827873"] + + object_with_reply = Map.put(data["object"], "inReplyTo", []) + modified_object = Transmogrifier.fix_in_reply_to(object_with_reply) + assert modified_object["inReplyTo"] == [] + end + + @tag capture_log: true + test "returns modified object when allowed incoming reply", %{data: data} do + object_with_reply = + Map.put( + data["object"], + "inReplyTo", + "https://mstdn.io/users/mayuutann/statuses/99568293732299394" + ) + + Pleroma.Config.put([:instance, :federation_incoming_replies_max_depth], 5) + modified_object = Transmogrifier.fix_in_reply_to(object_with_reply) + + assert modified_object["inReplyTo"] == + "https://mstdn.io/users/mayuutann/statuses/99568293732299394" + + assert modified_object["context"] == + "tag:shitposter.club,2018-02-22:objectType=thread:nonce=e5a7c72d60a9c0e4" + end + end + + describe "fix_attachments/1" do + test "returns not modified object" do + data = Poison.decode!(File.read!("test/fixtures/mastodon-post-activity.json")) + assert Transmogrifier.fix_attachments(data) == data + end + + test "returns modified object when attachment is map" do + assert Transmogrifier.fix_attachments(%{ + "attachment" => %{ + "mediaType" => "video/mp4", + "url" => "https://peertube.moe/stat-480.mp4" + } + }) == %{ + "attachment" => [ + %{ + "mediaType" => "video/mp4", + "type" => "Document", + "url" => [ + %{ + "href" => "https://peertube.moe/stat-480.mp4", + "mediaType" => "video/mp4", + "type" => "Link" + } + ] + } + ] + } + end + + test "returns modified object when attachment is list" do + assert Transmogrifier.fix_attachments(%{ + "attachment" => [ + %{"mediaType" => "video/mp4", "url" => "https://pe.er/stat-480.mp4"}, + %{"mimeType" => "video/mp4", "href" => "https://pe.er/stat-480.mp4"} + ] + }) == %{ + "attachment" => [ + %{ + "mediaType" => "video/mp4", + "type" => "Document", + "url" => [ + %{ + "href" => "https://pe.er/stat-480.mp4", + "mediaType" => "video/mp4", + "type" => "Link" + } + ] + }, + %{ + "mediaType" => "video/mp4", + "type" => "Document", + "url" => [ + %{ + "href" => "https://pe.er/stat-480.mp4", + "mediaType" => "video/mp4", + "type" => "Link" + } + ] + } + ] + } + end + end + + describe "fix_emoji/1" do + test "returns not modified object when object not contains tags" do + data = Poison.decode!(File.read!("test/fixtures/mastodon-post-activity.json")) + assert Transmogrifier.fix_emoji(data) == data + end + + test "returns object with emoji when object contains list tags" do + assert Transmogrifier.fix_emoji(%{ + "tag" => [ + %{"type" => "Emoji", "name" => ":bib:", "icon" => %{"url" => "/test"}}, + %{"type" => "Hashtag"} + ] + }) == %{ + "emoji" => %{"bib" => "/test"}, + "tag" => [ + %{"icon" => %{"url" => "/test"}, "name" => ":bib:", "type" => "Emoji"}, + %{"type" => "Hashtag"} + ] + } + end + + test "returns object with emoji when object contains map tag" do + assert Transmogrifier.fix_emoji(%{ + "tag" => %{"type" => "Emoji", "name" => ":bib:", "icon" => %{"url" => "/test"}} + }) == %{ + "emoji" => %{"bib" => "/test"}, + "tag" => %{"icon" => %{"url" => "/test"}, "name" => ":bib:", "type" => "Emoji"} + } + end + end + + describe "set_replies/1" do + setup do: clear_config([:activitypub, :note_replies_output_limit], 2) + + test "returns unmodified object if activity doesn't have self-replies" do + data = Poison.decode!(File.read!("test/fixtures/mastodon-post-activity.json")) + assert Transmogrifier.set_replies(data) == data + end + + test "sets `replies` collection with a limited number of self-replies" do + [user, another_user] = insert_list(2, :user) + + {:ok, %{id: id1} = activity} = CommonAPI.post(user, %{status: "1"}) + + {:ok, %{id: id2} = self_reply1} = + CommonAPI.post(user, %{status: "self-reply 1", in_reply_to_status_id: id1}) + + {:ok, self_reply2} = + CommonAPI.post(user, %{status: "self-reply 2", in_reply_to_status_id: id1}) + + # Assuming to _not_ be present in `replies` due to :note_replies_output_limit is set to 2 + {:ok, _} = CommonAPI.post(user, %{status: "self-reply 3", in_reply_to_status_id: id1}) + + {:ok, _} = + CommonAPI.post(user, %{ + status: "self-reply to self-reply", + in_reply_to_status_id: id2 + }) + + {:ok, _} = + CommonAPI.post(another_user, %{ + status: "another user's reply", + in_reply_to_status_id: id1 + }) + + object = Object.normalize(activity) + replies_uris = Enum.map([self_reply1, self_reply2], fn a -> a.object.data["id"] end) + + assert %{"type" => "Collection", "items" => ^replies_uris} = + Transmogrifier.set_replies(object.data)["replies"] + end + end + + test "take_emoji_tags/1" do + user = insert(:user, %{emoji: %{"firefox" => "https://example.org/firefox.png"}}) + + assert Transmogrifier.take_emoji_tags(user) == [ + %{ + "icon" => %{"type" => "Image", "url" => "https://example.org/firefox.png"}, + "id" => "https://example.org/firefox.png", + "name" => ":firefox:", + "type" => "Emoji", + "updated" => "1970-01-01T00:00:00Z" + } + ] + end +end diff --git a/test/pleroma/web/activity_pub/transmogrifier_test.exs b/test/pleroma/web/activity_pub/transmogrifier_test.exs index e39af1dfc..333bb4f9b 100644 --- a/test/pleroma/web/activity_pub/transmogrifier_test.exs +++ b/test/pleroma/web/activity_pub/transmogrifier_test.exs @@ -26,310 +26,6 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do setup do: clear_config([:instance, :max_remote_account_fields]) describe "handle_incoming" do - test "it works for incoming notices with tag not being an array (kroeg)" do - data = File.read!("test/fixtures/kroeg-array-less-emoji.json") |> Poison.decode!() - - {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) - object = Object.normalize(data["object"]) - - assert object.data["emoji"] == %{ - "icon_e_smile" => "https://puckipedia.com/forum/images/smilies/icon_e_smile.png" - } - - data = File.read!("test/fixtures/kroeg-array-less-hashtag.json") |> Poison.decode!() - - {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) - object = Object.normalize(data["object"]) - - assert "test" in object.data["tag"] - end - - test "it cleans up incoming notices which are not really DMs" do - user = insert(:user) - other_user = insert(:user) - - to = [user.ap_id, other_user.ap_id] - - data = - File.read!("test/fixtures/mastodon-post-activity.json") - |> Poison.decode!() - |> Map.put("to", to) - |> Map.put("cc", []) - - object = - data["object"] - |> Map.put("to", to) - |> Map.put("cc", []) - - data = Map.put(data, "object", object) - - {:ok, %Activity{data: data, local: false} = activity} = Transmogrifier.handle_incoming(data) - - assert data["to"] == [] - assert data["cc"] == to - - object_data = Object.normalize(activity).data - - assert object_data["to"] == [] - assert object_data["cc"] == to - end - - test "it ignores an incoming notice if we already have it" do - activity = insert(:note_activity) - - data = - File.read!("test/fixtures/mastodon-post-activity.json") - |> Poison.decode!() - |> Map.put("object", Object.normalize(activity).data) - - {:ok, returned_activity} = Transmogrifier.handle_incoming(data) - - assert activity == returned_activity - end - - @tag capture_log: true - test "it fetches reply-to activities if we don't have them" do - data = - File.read!("test/fixtures/mastodon-post-activity.json") - |> Poison.decode!() - - object = - data["object"] - |> Map.put("inReplyTo", "https://mstdn.io/users/mayuutann/statuses/99568293732299394") - - data = Map.put(data, "object", object) - {:ok, returned_activity} = Transmogrifier.handle_incoming(data) - returned_object = Object.normalize(returned_activity, false) - - assert %Activity{} = - Activity.get_create_by_object_ap_id( - "https://mstdn.io/users/mayuutann/statuses/99568293732299394" - ) - - assert returned_object.data["inReplyTo"] == - "https://mstdn.io/users/mayuutann/statuses/99568293732299394" - end - - test "it does not fetch reply-to activities beyond max replies depth limit" do - data = - File.read!("test/fixtures/mastodon-post-activity.json") - |> Poison.decode!() - - object = - data["object"] - |> Map.put("inReplyTo", "https://shitposter.club/notice/2827873") - - data = Map.put(data, "object", object) - - with_mock Pleroma.Web.Federator, - allowed_thread_distance?: fn _ -> false end do - {:ok, returned_activity} = Transmogrifier.handle_incoming(data) - - returned_object = Object.normalize(returned_activity, false) - - refute Activity.get_create_by_object_ap_id( - "tag:shitposter.club,2017-05-05:noticeId=2827873:objectType=comment" - ) - - assert returned_object.data["inReplyTo"] == "https://shitposter.club/notice/2827873" - end - end - - test "it does not crash if the object in inReplyTo can't be fetched" do - data = - File.read!("test/fixtures/mastodon-post-activity.json") - |> Poison.decode!() - - object = - data["object"] - |> Map.put("inReplyTo", "https://404.site/whatever") - - data = - data - |> Map.put("object", object) - - assert capture_log(fn -> - {:ok, _returned_activity} = Transmogrifier.handle_incoming(data) - end) =~ "[warn] Couldn't fetch \"https://404.site/whatever\", error: nil" - end - - test "it does not work for deactivated users" do - data = File.read!("test/fixtures/mastodon-post-activity.json") |> Poison.decode!() - - insert(:user, ap_id: data["actor"], deactivated: true) - - assert {:error, _} = Transmogrifier.handle_incoming(data) - end - - test "it works for incoming notices" do - data = File.read!("test/fixtures/mastodon-post-activity.json") |> Poison.decode!() - - {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) - - assert data["id"] == - "http://mastodon.example.org/users/admin/statuses/99512778738411822/activity" - - assert data["context"] == - "tag:mastodon.example.org,2018-02-12:objectId=20:objectType=Conversation" - - assert data["to"] == ["https://www.w3.org/ns/activitystreams#Public"] - - assert data["cc"] == [ - "http://mastodon.example.org/users/admin/followers", - "http://localtesting.pleroma.lol/users/lain" - ] - - assert data["actor"] == "http://mastodon.example.org/users/admin" - - object_data = Object.normalize(data["object"]).data - - assert object_data["id"] == - "http://mastodon.example.org/users/admin/statuses/99512778738411822" - - assert object_data["to"] == ["https://www.w3.org/ns/activitystreams#Public"] - - assert object_data["cc"] == [ - "http://mastodon.example.org/users/admin/followers", - "http://localtesting.pleroma.lol/users/lain" - ] - - assert object_data["actor"] == "http://mastodon.example.org/users/admin" - assert object_data["attributedTo"] == "http://mastodon.example.org/users/admin" - - assert object_data["context"] == - "tag:mastodon.example.org,2018-02-12:objectId=20:objectType=Conversation" - - assert object_data["sensitive"] == true - - user = User.get_cached_by_ap_id(object_data["actor"]) - - assert user.note_count == 1 - end - - test "it works for incoming notices without the sensitive property but an nsfw hashtag" do - data = File.read!("test/fixtures/mastodon-post-activity-nsfw.json") |> Poison.decode!() - - {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) - - object_data = Object.normalize(data["object"], false).data - - assert object_data["sensitive"] == true - end - - test "it works for incoming notices with hashtags" do - data = File.read!("test/fixtures/mastodon-post-activity-hashtag.json") |> Poison.decode!() - - {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) - object = Object.normalize(data["object"]) - - assert Enum.at(object.data["tag"], 2) == "moo" - end - - test "it works for incoming notices with contentMap" do - data = - File.read!("test/fixtures/mastodon-post-activity-contentmap.json") |> Poison.decode!() - - {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) - object = Object.normalize(data["object"]) - - assert object.data["content"] == - "

@lain

" - end - - test "it works for incoming notices with to/cc not being an array (kroeg)" do - data = File.read!("test/fixtures/kroeg-post-activity.json") |> Poison.decode!() - - {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) - object = Object.normalize(data["object"]) - - assert object.data["content"] == - "

henlo from my Psion netBook

message sent from my Psion netBook

" - end - - test "it ensures that as:Public activities make it to their followers collection" do - user = insert(:user) - - data = - File.read!("test/fixtures/mastodon-post-activity.json") - |> Poison.decode!() - |> Map.put("actor", user.ap_id) - |> Map.put("to", ["https://www.w3.org/ns/activitystreams#Public"]) - |> Map.put("cc", []) - - object = - data["object"] - |> Map.put("attributedTo", user.ap_id) - |> Map.put("to", ["https://www.w3.org/ns/activitystreams#Public"]) - |> Map.put("cc", []) - |> Map.put("id", user.ap_id <> "/activities/12345678") - - data = Map.put(data, "object", object) - - {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) - - assert data["cc"] == [User.ap_followers(user)] - end - - test "it ensures that address fields become lists" do - user = insert(:user) - - data = - File.read!("test/fixtures/mastodon-post-activity.json") - |> Poison.decode!() - |> Map.put("actor", user.ap_id) - |> Map.put("to", nil) - |> Map.put("cc", nil) - - object = - data["object"] - |> Map.put("attributedTo", user.ap_id) - |> Map.put("to", nil) - |> Map.put("cc", nil) - |> Map.put("id", user.ap_id <> "/activities/12345678") - - data = Map.put(data, "object", object) - - {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) - - assert !is_nil(data["to"]) - assert !is_nil(data["cc"]) - end - - test "it strips internal likes" do - data = - File.read!("test/fixtures/mastodon-post-activity.json") - |> Poison.decode!() - - likes = %{ - "first" => - "http://mastodon.example.org/objects/dbdbc507-52c8-490d-9b7c-1e1d52e5c132/likes?page=1", - "id" => "http://mastodon.example.org/objects/dbdbc507-52c8-490d-9b7c-1e1d52e5c132/likes", - "totalItems" => 3, - "type" => "OrderedCollection" - } - - object = Map.put(data["object"], "likes", likes) - data = Map.put(data, "object", object) - - {:ok, %Activity{object: object}} = Transmogrifier.handle_incoming(data) - - refute Map.has_key?(object.data, "likes") - end - - test "it strips internal reactions" do - user = insert(:user) - {:ok, activity} = CommonAPI.post(user, %{status: "#cofe"}) - {:ok, _} = CommonAPI.react_with_emoji(activity.id, user, "📢") - - %{object: object} = Activity.get_by_id_with_object(activity.id) - assert Map.has_key?(object.data, "reactions") - assert Map.has_key?(object.data, "reaction_count") - - object_data = Transmogrifier.strip_internal_fields(object.data) - refute Map.has_key?(object_data, "reactions") - refute Map.has_key?(object_data, "reaction_count") - end - test "it works for incoming unfollows with an existing follow" do user = insert(:user) @@ -387,73 +83,6 @@ test "it accepts Flag activities" do assert activity.data["cc"] == [user.ap_id] end - test "it correctly processes messages with non-array to field" do - user = insert(:user) - - message = %{ - "@context" => "https://www.w3.org/ns/activitystreams", - "to" => "https://www.w3.org/ns/activitystreams#Public", - "type" => "Create", - "object" => %{ - "content" => "blah blah blah", - "type" => "Note", - "attributedTo" => user.ap_id, - "inReplyTo" => nil - }, - "actor" => user.ap_id - } - - assert {:ok, activity} = Transmogrifier.handle_incoming(message) - - assert ["https://www.w3.org/ns/activitystreams#Public"] == activity.data["to"] - end - - test "it correctly processes messages with non-array cc field" do - user = insert(:user) - - message = %{ - "@context" => "https://www.w3.org/ns/activitystreams", - "to" => user.follower_address, - "cc" => "https://www.w3.org/ns/activitystreams#Public", - "type" => "Create", - "object" => %{ - "content" => "blah blah blah", - "type" => "Note", - "attributedTo" => user.ap_id, - "inReplyTo" => nil - }, - "actor" => user.ap_id - } - - assert {:ok, activity} = Transmogrifier.handle_incoming(message) - - assert ["https://www.w3.org/ns/activitystreams#Public"] == activity.data["cc"] - assert [user.follower_address] == activity.data["to"] - end - - test "it correctly processes messages with weirdness in address fields" do - user = insert(:user) - - message = %{ - "@context" => "https://www.w3.org/ns/activitystreams", - "to" => [nil, user.follower_address], - "cc" => ["https://www.w3.org/ns/activitystreams#Public", ["¿"]], - "type" => "Create", - "object" => %{ - "content" => "…", - "type" => "Note", - "attributedTo" => user.ap_id, - "inReplyTo" => nil - }, - "actor" => user.ap_id - } - - assert {:ok, activity} = Transmogrifier.handle_incoming(message) - - assert ["https://www.w3.org/ns/activitystreams#Public"] == activity.data["cc"] - assert [user.follower_address] == activity.data["to"] - end - test "it accepts Move activities" do old_user = insert(:user) new_user = insert(:user) @@ -479,95 +108,6 @@ test "it accepts Move activities" do end end - describe "`handle_incoming/2`, Mastodon format `replies` handling" do - setup do: clear_config([:activitypub, :note_replies_output_limit], 5) - setup do: clear_config([:instance, :federation_incoming_replies_max_depth]) - - setup do - data = - "test/fixtures/mastodon-post-activity.json" - |> File.read!() - |> Poison.decode!() - - items = get_in(data, ["object", "replies", "first", "items"]) - assert length(items) > 0 - - %{data: data, items: items} - end - - test "schedules background fetching of `replies` items if max thread depth limit allows", %{ - data: data, - items: items - } do - Pleroma.Config.put([:instance, :federation_incoming_replies_max_depth], 10) - - {:ok, _activity} = Transmogrifier.handle_incoming(data) - - for id <- items do - job_args = %{"op" => "fetch_remote", "id" => id, "depth" => 1} - assert_enqueued(worker: Pleroma.Workers.RemoteFetcherWorker, args: job_args) - end - end - - test "does NOT schedule background fetching of `replies` beyond max thread depth limit allows", - %{data: data} do - Pleroma.Config.put([:instance, :federation_incoming_replies_max_depth], 0) - - {:ok, _activity} = Transmogrifier.handle_incoming(data) - - assert all_enqueued(worker: Pleroma.Workers.RemoteFetcherWorker) == [] - end - end - - describe "`handle_incoming/2`, Pleroma format `replies` handling" do - setup do: clear_config([:activitypub, :note_replies_output_limit], 5) - setup do: clear_config([:instance, :federation_incoming_replies_max_depth]) - - setup do - user = insert(:user) - - {:ok, activity} = CommonAPI.post(user, %{status: "post1"}) - - {:ok, reply1} = - CommonAPI.post(user, %{status: "reply1", in_reply_to_status_id: activity.id}) - - {:ok, reply2} = - CommonAPI.post(user, %{status: "reply2", in_reply_to_status_id: activity.id}) - - replies_uris = Enum.map([reply1, reply2], fn a -> a.object.data["id"] end) - - {:ok, federation_output} = Transmogrifier.prepare_outgoing(activity.data) - - Repo.delete(activity.object) - Repo.delete(activity) - - %{federation_output: federation_output, replies_uris: replies_uris} - end - - test "schedules background fetching of `replies` items if max thread depth limit allows", %{ - federation_output: federation_output, - replies_uris: replies_uris - } do - Pleroma.Config.put([:instance, :federation_incoming_replies_max_depth], 1) - - {:ok, _activity} = Transmogrifier.handle_incoming(federation_output) - - for id <- replies_uris do - job_args = %{"op" => "fetch_remote", "id" => id, "depth" => 1} - assert_enqueued(worker: Pleroma.Workers.RemoteFetcherWorker, args: job_args) - end - end - - test "does NOT schedule background fetching of `replies` beyond max thread depth limit allows", - %{federation_output: federation_output} do - Pleroma.Config.put([:instance, :federation_incoming_replies_max_depth], 0) - - {:ok, _activity} = Transmogrifier.handle_incoming(federation_output) - - assert all_enqueued(worker: Pleroma.Workers.RemoteFetcherWorker) == [] - end - end - describe "prepare outgoing" do test "it inlines private announced objects" do user = insert(:user) @@ -864,60 +404,6 @@ test "it rejects activities which reference objects that have an incorrect attri end end - describe "reserialization" do - test "successfully reserializes a message with inReplyTo == nil" do - user = insert(:user) - - message = %{ - "@context" => "https://www.w3.org/ns/activitystreams", - "to" => ["https://www.w3.org/ns/activitystreams#Public"], - "cc" => [], - "type" => "Create", - "object" => %{ - "to" => ["https://www.w3.org/ns/activitystreams#Public"], - "cc" => [], - "type" => "Note", - "content" => "Hi", - "inReplyTo" => nil, - "attributedTo" => user.ap_id - }, - "actor" => user.ap_id - } - - {:ok, activity} = Transmogrifier.handle_incoming(message) - - {:ok, _} = Transmogrifier.prepare_outgoing(activity.data) - end - - test "successfully reserializes a message with AS2 objects in IR" do - user = insert(:user) - - message = %{ - "@context" => "https://www.w3.org/ns/activitystreams", - "to" => ["https://www.w3.org/ns/activitystreams#Public"], - "cc" => [], - "type" => "Create", - "object" => %{ - "to" => ["https://www.w3.org/ns/activitystreams#Public"], - "cc" => [], - "type" => "Note", - "content" => "Hi", - "inReplyTo" => nil, - "attributedTo" => user.ap_id, - "tag" => [ - %{"name" => "#2hu", "href" => "http://example.com/2hu", "type" => "Hashtag"}, - %{"name" => "Bob", "href" => "http://example.com/bob", "type" => "Mention"} - ] - }, - "actor" => user.ap_id - } - - {:ok, activity} = Transmogrifier.handle_incoming(message) - - {:ok, _} = Transmogrifier.prepare_outgoing(activity.data) - end - end - describe "fix_explicit_addressing" do setup do user = insert(:user) @@ -983,64 +469,6 @@ test "returns fixed object" do end end - describe "fix_in_reply_to/2" do - setup do: clear_config([:instance, :federation_incoming_replies_max_depth]) - - setup do - data = Poison.decode!(File.read!("test/fixtures/mastodon-post-activity.json")) - [data: data] - end - - test "returns not modified object when hasn't containts inReplyTo field", %{data: data} do - assert Transmogrifier.fix_in_reply_to(data) == data - end - - test "returns object with inReplyTo when denied incoming reply", %{data: data} do - Pleroma.Config.put([:instance, :federation_incoming_replies_max_depth], 0) - - object_with_reply = - Map.put(data["object"], "inReplyTo", "https://shitposter.club/notice/2827873") - - modified_object = Transmogrifier.fix_in_reply_to(object_with_reply) - assert modified_object["inReplyTo"] == "https://shitposter.club/notice/2827873" - - object_with_reply = - Map.put(data["object"], "inReplyTo", %{"id" => "https://shitposter.club/notice/2827873"}) - - modified_object = Transmogrifier.fix_in_reply_to(object_with_reply) - assert modified_object["inReplyTo"] == %{"id" => "https://shitposter.club/notice/2827873"} - - object_with_reply = - Map.put(data["object"], "inReplyTo", ["https://shitposter.club/notice/2827873"]) - - modified_object = Transmogrifier.fix_in_reply_to(object_with_reply) - assert modified_object["inReplyTo"] == ["https://shitposter.club/notice/2827873"] - - object_with_reply = Map.put(data["object"], "inReplyTo", []) - modified_object = Transmogrifier.fix_in_reply_to(object_with_reply) - assert modified_object["inReplyTo"] == [] - end - - @tag capture_log: true - test "returns modified object when allowed incoming reply", %{data: data} do - object_with_reply = - Map.put( - data["object"], - "inReplyTo", - "https://mstdn.io/users/mayuutann/statuses/99568293732299394" - ) - - Pleroma.Config.put([:instance, :federation_incoming_replies_max_depth], 5) - modified_object = Transmogrifier.fix_in_reply_to(object_with_reply) - - assert modified_object["inReplyTo"] == - "https://mstdn.io/users/mayuutann/statuses/99568293732299394" - - assert modified_object["context"] == - "tag:shitposter.club,2018-02-22:objectType=thread:nonce=e5a7c72d60a9c0e4" - end - end - describe "fix_url/1" do test "fixes data for object when url is map" do object = %{ @@ -1076,155 +504,4 @@ test "returns {:ok, %Object{}} for success case" do ) end end - - describe "fix_attachments/1" do - test "returns not modified object" do - data = Poison.decode!(File.read!("test/fixtures/mastodon-post-activity.json")) - assert Transmogrifier.fix_attachments(data) == data - end - - test "returns modified object when attachment is map" do - assert Transmogrifier.fix_attachments(%{ - "attachment" => %{ - "mediaType" => "video/mp4", - "url" => "https://peertube.moe/stat-480.mp4" - } - }) == %{ - "attachment" => [ - %{ - "mediaType" => "video/mp4", - "type" => "Document", - "url" => [ - %{ - "href" => "https://peertube.moe/stat-480.mp4", - "mediaType" => "video/mp4", - "type" => "Link" - } - ] - } - ] - } - end - - test "returns modified object when attachment is list" do - assert Transmogrifier.fix_attachments(%{ - "attachment" => [ - %{"mediaType" => "video/mp4", "url" => "https://pe.er/stat-480.mp4"}, - %{"mimeType" => "video/mp4", "href" => "https://pe.er/stat-480.mp4"} - ] - }) == %{ - "attachment" => [ - %{ - "mediaType" => "video/mp4", - "type" => "Document", - "url" => [ - %{ - "href" => "https://pe.er/stat-480.mp4", - "mediaType" => "video/mp4", - "type" => "Link" - } - ] - }, - %{ - "mediaType" => "video/mp4", - "type" => "Document", - "url" => [ - %{ - "href" => "https://pe.er/stat-480.mp4", - "mediaType" => "video/mp4", - "type" => "Link" - } - ] - } - ] - } - end - end - - describe "fix_emoji/1" do - test "returns not modified object when object not contains tags" do - data = Poison.decode!(File.read!("test/fixtures/mastodon-post-activity.json")) - assert Transmogrifier.fix_emoji(data) == data - end - - test "returns object with emoji when object contains list tags" do - assert Transmogrifier.fix_emoji(%{ - "tag" => [ - %{"type" => "Emoji", "name" => ":bib:", "icon" => %{"url" => "/test"}}, - %{"type" => "Hashtag"} - ] - }) == %{ - "emoji" => %{"bib" => "/test"}, - "tag" => [ - %{"icon" => %{"url" => "/test"}, "name" => ":bib:", "type" => "Emoji"}, - %{"type" => "Hashtag"} - ] - } - end - - test "returns object with emoji when object contains map tag" do - assert Transmogrifier.fix_emoji(%{ - "tag" => %{"type" => "Emoji", "name" => ":bib:", "icon" => %{"url" => "/test"}} - }) == %{ - "emoji" => %{"bib" => "/test"}, - "tag" => %{"icon" => %{"url" => "/test"}, "name" => ":bib:", "type" => "Emoji"} - } - end - end - - describe "set_replies/1" do - setup do: clear_config([:activitypub, :note_replies_output_limit], 2) - - test "returns unmodified object if activity doesn't have self-replies" do - data = Poison.decode!(File.read!("test/fixtures/mastodon-post-activity.json")) - assert Transmogrifier.set_replies(data) == data - end - - test "sets `replies` collection with a limited number of self-replies" do - [user, another_user] = insert_list(2, :user) - - {:ok, %{id: id1} = activity} = CommonAPI.post(user, %{status: "1"}) - - {:ok, %{id: id2} = self_reply1} = - CommonAPI.post(user, %{status: "self-reply 1", in_reply_to_status_id: id1}) - - {:ok, self_reply2} = - CommonAPI.post(user, %{status: "self-reply 2", in_reply_to_status_id: id1}) - - # Assuming to _not_ be present in `replies` due to :note_replies_output_limit is set to 2 - {:ok, _} = CommonAPI.post(user, %{status: "self-reply 3", in_reply_to_status_id: id1}) - - {:ok, _} = - CommonAPI.post(user, %{ - status: "self-reply to self-reply", - in_reply_to_status_id: id2 - }) - - {:ok, _} = - CommonAPI.post(another_user, %{ - status: "another user's reply", - in_reply_to_status_id: id1 - }) - - object = Object.normalize(activity) - replies_uris = Enum.map([self_reply1, self_reply2], fn a -> a.object.data["id"] end) - - assert %{"type" => "Collection", "items" => ^replies_uris} = - Transmogrifier.set_replies(object.data)["replies"] - end - end - - test "take_emoji_tags/1" do - user = insert(:user, %{emoji: %{"firefox" => "https://example.org/firefox.png"}}) - - assert Transmogrifier.take_emoji_tags(user) == [ - %{ - "icon" => %{"type" => "Image", "url" => "https://example.org/firefox.png"}, - "id" => "https://example.org/firefox.png", - "name" => ":firefox:", - "type" => "Emoji", - "updated" => "1970-01-01T00:00:00Z" - } - ] - end end From e010bb292bcc1a2789063b760dea7c195e2ba7a7 Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Fri, 11 Sep 2020 01:59:31 +0200 Subject: [PATCH 054/362] =?UTF-8?q?NoteHandlingTest:=20Poison=20=E2=86=92?= =?UTF-8?q?=20Jason?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../transmogrifier/note_handling_test.exs | 43 +++++++++---------- 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/test/pleroma/web/activity_pub/transmogrifier/note_handling_test.exs b/test/pleroma/web/activity_pub/transmogrifier/note_handling_test.exs index 2428bf0bf..b4a006aec 100644 --- a/test/pleroma/web/activity_pub/transmogrifier/note_handling_test.exs +++ b/test/pleroma/web/activity_pub/transmogrifier/note_handling_test.exs @@ -25,7 +25,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.NoteHandlingTest do describe "handle_incoming" do test "it works for incoming notices with tag not being an array (kroeg)" do - data = File.read!("test/fixtures/kroeg-array-less-emoji.json") |> Poison.decode!() + data = File.read!("test/fixtures/kroeg-array-less-emoji.json") |> Jason.decode!() {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) object = Object.normalize(data["object"]) @@ -34,7 +34,7 @@ test "it works for incoming notices with tag not being an array (kroeg)" do "icon_e_smile" => "https://puckipedia.com/forum/images/smilies/icon_e_smile.png" } - data = File.read!("test/fixtures/kroeg-array-less-hashtag.json") |> Poison.decode!() + data = File.read!("test/fixtures/kroeg-array-less-hashtag.json") |> Jason.decode!() {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) object = Object.normalize(data["object"]) @@ -50,7 +50,7 @@ test "it cleans up incoming notices which are not really DMs" do data = File.read!("test/fixtures/mastodon-post-activity.json") - |> Poison.decode!() + |> Jason.decode!() |> Map.put("to", to) |> Map.put("cc", []) @@ -77,7 +77,7 @@ test "it ignores an incoming notice if we already have it" do data = File.read!("test/fixtures/mastodon-post-activity.json") - |> Poison.decode!() + |> Jason.decode!() |> Map.put("object", Object.normalize(activity).data) {:ok, returned_activity} = Transmogrifier.handle_incoming(data) @@ -89,7 +89,7 @@ test "it ignores an incoming notice if we already have it" do test "it fetches reply-to activities if we don't have them" do data = File.read!("test/fixtures/mastodon-post-activity.json") - |> Poison.decode!() + |> Jason.decode!() object = data["object"] @@ -111,7 +111,7 @@ test "it fetches reply-to activities if we don't have them" do test "it does not fetch reply-to activities beyond max replies depth limit" do data = File.read!("test/fixtures/mastodon-post-activity.json") - |> Poison.decode!() + |> Jason.decode!() object = data["object"] @@ -136,7 +136,7 @@ test "it does not fetch reply-to activities beyond max replies depth limit" do test "it does not crash if the object in inReplyTo can't be fetched" do data = File.read!("test/fixtures/mastodon-post-activity.json") - |> Poison.decode!() + |> Jason.decode!() object = data["object"] @@ -152,7 +152,7 @@ test "it does not crash if the object in inReplyTo can't be fetched" do end test "it does not work for deactivated users" do - data = File.read!("test/fixtures/mastodon-post-activity.json") |> Poison.decode!() + data = File.read!("test/fixtures/mastodon-post-activity.json") |> Jason.decode!() insert(:user, ap_id: data["actor"], deactivated: true) @@ -160,7 +160,7 @@ test "it does not work for deactivated users" do end test "it works for incoming notices" do - data = File.read!("test/fixtures/mastodon-post-activity.json") |> Poison.decode!() + data = File.read!("test/fixtures/mastodon-post-activity.json") |> Jason.decode!() {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) @@ -205,7 +205,7 @@ test "it works for incoming notices" do end test "it works for incoming notices without the sensitive property but an nsfw hashtag" do - data = File.read!("test/fixtures/mastodon-post-activity-nsfw.json") |> Poison.decode!() + data = File.read!("test/fixtures/mastodon-post-activity-nsfw.json") |> Jason.decode!() {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) @@ -215,7 +215,7 @@ test "it works for incoming notices without the sensitive property but an nsfw h end test "it works for incoming notices with hashtags" do - data = File.read!("test/fixtures/mastodon-post-activity-hashtag.json") |> Poison.decode!() + data = File.read!("test/fixtures/mastodon-post-activity-hashtag.json") |> Jason.decode!() {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) object = Object.normalize(data["object"]) @@ -224,8 +224,7 @@ test "it works for incoming notices with hashtags" do end test "it works for incoming notices with contentMap" do - data = - File.read!("test/fixtures/mastodon-post-activity-contentmap.json") |> Poison.decode!() + data = File.read!("test/fixtures/mastodon-post-activity-contentmap.json") |> Jason.decode!() {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) object = Object.normalize(data["object"]) @@ -235,7 +234,7 @@ test "it works for incoming notices with contentMap" do end test "it works for incoming notices with to/cc not being an array (kroeg)" do - data = File.read!("test/fixtures/kroeg-post-activity.json") |> Poison.decode!() + data = File.read!("test/fixtures/kroeg-post-activity.json") |> Jason.decode!() {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) object = Object.normalize(data["object"]) @@ -249,7 +248,7 @@ test "it ensures that as:Public activities make it to their followers collection data = File.read!("test/fixtures/mastodon-post-activity.json") - |> Poison.decode!() + |> Jason.decode!() |> Map.put("actor", user.ap_id) |> Map.put("to", ["https://www.w3.org/ns/activitystreams#Public"]) |> Map.put("cc", []) @@ -273,7 +272,7 @@ test "it ensures that address fields become lists" do data = File.read!("test/fixtures/mastodon-post-activity.json") - |> Poison.decode!() + |> Jason.decode!() |> Map.put("actor", user.ap_id) |> Map.put("to", nil) |> Map.put("cc", nil) @@ -296,7 +295,7 @@ test "it ensures that address fields become lists" do test "it strips internal likes" do data = File.read!("test/fixtures/mastodon-post-activity.json") - |> Poison.decode!() + |> Jason.decode!() likes = %{ "first" => @@ -404,7 +403,7 @@ test "it correctly processes messages with weirdness in address fields" do data = "test/fixtures/mastodon-post-activity.json" |> File.read!() - |> Poison.decode!() + |> Jason.decode!() items = get_in(data, ["object", "replies", "first", "items"]) assert length(items) > 0 @@ -543,7 +542,7 @@ test "successfully reserializes a message with AS2 objects in IR" do setup do: clear_config([:instance, :federation_incoming_replies_max_depth]) setup do - data = Poison.decode!(File.read!("test/fixtures/mastodon-post-activity.json")) + data = Jason.decode!(File.read!("test/fixtures/mastodon-post-activity.json")) [data: data] end @@ -599,7 +598,7 @@ test "returns modified object when allowed incoming reply", %{data: data} do describe "fix_attachments/1" do test "returns not modified object" do - data = Poison.decode!(File.read!("test/fixtures/mastodon-post-activity.json")) + data = Jason.decode!(File.read!("test/fixtures/mastodon-post-activity.json")) assert Transmogrifier.fix_attachments(data) == data end @@ -663,7 +662,7 @@ test "returns modified object when attachment is list" do describe "fix_emoji/1" do test "returns not modified object when object not contains tags" do - data = Poison.decode!(File.read!("test/fixtures/mastodon-post-activity.json")) + data = Jason.decode!(File.read!("test/fixtures/mastodon-post-activity.json")) assert Transmogrifier.fix_emoji(data) == data end @@ -696,7 +695,7 @@ test "returns object with emoji when object contains map tag" do setup do: clear_config([:activitypub, :note_replies_output_limit], 2) test "returns unmodified object if activity doesn't have self-replies" do - data = Poison.decode!(File.read!("test/fixtures/mastodon-post-activity.json")) + data = Jason.decode!(File.read!("test/fixtures/mastodon-post-activity.json")) assert Transmogrifier.set_replies(data) == data end From 60fe4a8393fe874284fbf2f46d598119a5207296 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Fri, 6 Nov 2020 13:00:31 -0600 Subject: [PATCH 055/362] First draft of tips for optimizing BEAM --- docs/configuration/optimizing_beam.md | 60 +++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 docs/configuration/optimizing_beam.md diff --git a/docs/configuration/optimizing_beam.md b/docs/configuration/optimizing_beam.md new file mode 100644 index 000000000..7a3cfda4b --- /dev/null +++ b/docs/configuration/optimizing_beam.md @@ -0,0 +1,60 @@ +# Optimizing the BEAM + +Pleroma is built upon the Erlang/OTP VM known as BEAM. The BEAM VM is highly optimized for latency, but this has drawbacks in environments without dedicated hardware. One of the tricks used by the BEAM VM is [busy waiting](https://en.wikipedia.org/wiki/Busy_waiting). This allows the application to pretend to be busy working so the OS kernel does not pause the application process and switch to another process waiting for the CPU to execute its workload. It does this by busy waiting or spinning for a period of time which inflates the apparent CPU usage of the application as seen in utilities like **top(1)** so it is immediately ready to execute another task. Switching between procesess is a rather expensive operation and also clears CPU caches which further affects latency and performance. + +This strategy is very successful in making a performant and responsive application, but is not desirable on Virtual Machines or hardware with few CPU cores. Pleroma instances are often deployed on the same server as the required PostgreSQL database which can lead to situations where the Pleroma application is holding the CPU in a busy-wait loop and as a result the database cannot process requests in a timely manner. The fewer CPUs available, the more this problem is exacerbated. The latency is further amplified by the OS being installed on a Virtual Machine as the Hypervisor uses CPU time-slicing to pause the entire OS and switch between other tasks. + +More adventerous admins can be creative with CPU affinity (e.g., *taskset* for Linux and *cpuset* on FreeBSD) to pin processes to specific CPUs and eliminate much of this contention. The most important advice is to run as few processes as possible on your server to achieve the best performance. Even idle background processes can occasionally create [software interrupts](https://en.wikipedia.org/wiki/Interrupt) and take attention away from the executing process and latency spikes and invalidation of the CPU caches as they must be cleared when switching between processes for security. + +## VPS Provider Recommendations + +### Good + +* ???? + +### Bad + +* AWS (known to use burst scheduling) + + +## Example configurations + +Tuning the BEAM requires you provide a config file normally called [vm.args](http://erlang.org/doc/man/erl.html#emulator-flags). If you are using systemd to manage the service you can modify the unit file as such: + +`ExecStart=/usr/bin/elixir --erl '-args_file /opt/pleroma/config/vm.args' -S /usr/bin/mix phx.server` + +Check your OS documentation to adopt a similar strategy on other platforms. + +### Virtual Machine and/or few CPU cores + +Disable the busy-waiting + +``` ++sbwt none ++sbwtdcpu none ++sbwtdio none +``` + +### Dedicated Hardware + +Enable more busy waiting, increase the internal maximum limit of BEAM processes and ports + +``` ++P 16777216 ++Q 16777216 ++K true ++A 128 ++sbt db ++sbwt very_long ++swt very_low ++sub true ++Mulmbcs 32767 ++Mumbcgs 1 ++Musmbcs 2047 +``` + +## Additional Reading + +* [WhatsApp: Scaling to Millions of Simultaneous Connections](https://www.erlang-factory.com/upload/presentations/558/efsf2012-whatsapp-scaling.pdf) +* [Preemptive Scheduling and Spinlocks](https://www.uio.no/studier/emner/matnat/ifi/nedlagte-emner/INF3150/h03/annet/slides/preemptive.pdf) +* [The Curious Case of BEAM CPU Usage](https://stressgrid.com/blog/beam_cpu_usage/) From 9e90e49ad2d01744bd5385473f2ebd4b2a442e8a Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Fri, 6 Nov 2020 13:02:07 -0600 Subject: [PATCH 056/362] Grammar --- docs/configuration/optimizing_beam.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/configuration/optimizing_beam.md b/docs/configuration/optimizing_beam.md index 7a3cfda4b..40fa7bfbf 100644 --- a/docs/configuration/optimizing_beam.md +++ b/docs/configuration/optimizing_beam.md @@ -4,7 +4,7 @@ Pleroma is built upon the Erlang/OTP VM known as BEAM. The BEAM VM is highly opt This strategy is very successful in making a performant and responsive application, but is not desirable on Virtual Machines or hardware with few CPU cores. Pleroma instances are often deployed on the same server as the required PostgreSQL database which can lead to situations where the Pleroma application is holding the CPU in a busy-wait loop and as a result the database cannot process requests in a timely manner. The fewer CPUs available, the more this problem is exacerbated. The latency is further amplified by the OS being installed on a Virtual Machine as the Hypervisor uses CPU time-slicing to pause the entire OS and switch between other tasks. -More adventerous admins can be creative with CPU affinity (e.g., *taskset* for Linux and *cpuset* on FreeBSD) to pin processes to specific CPUs and eliminate much of this contention. The most important advice is to run as few processes as possible on your server to achieve the best performance. Even idle background processes can occasionally create [software interrupts](https://en.wikipedia.org/wiki/Interrupt) and take attention away from the executing process and latency spikes and invalidation of the CPU caches as they must be cleared when switching between processes for security. +More adventerous admins can be creative with CPU affinity (e.g., *taskset* for Linux and *cpuset* on FreeBSD) to pin processes to specific CPUs and eliminate much of this contention. The most important advice is to run as few processes as possible on your server to achieve the best performance. Even idle background processes can occasionally create [software interrupts](https://en.wikipedia.org/wiki/Interrupt) and take attention away from the executing process creating latency spikes and invalidation of the CPU caches as they must be cleared when switching between processes for security. ## VPS Provider Recommendations From da1862e1d3fea5488b80bfc46ea878468940238c Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Fri, 6 Nov 2020 13:04:13 -0600 Subject: [PATCH 057/362] Less confusing I hope --- docs/configuration/optimizing_beam.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/configuration/optimizing_beam.md b/docs/configuration/optimizing_beam.md index 40fa7bfbf..00620b35d 100644 --- a/docs/configuration/optimizing_beam.md +++ b/docs/configuration/optimizing_beam.md @@ -1,6 +1,6 @@ # Optimizing the BEAM -Pleroma is built upon the Erlang/OTP VM known as BEAM. The BEAM VM is highly optimized for latency, but this has drawbacks in environments without dedicated hardware. One of the tricks used by the BEAM VM is [busy waiting](https://en.wikipedia.org/wiki/Busy_waiting). This allows the application to pretend to be busy working so the OS kernel does not pause the application process and switch to another process waiting for the CPU to execute its workload. It does this by busy waiting or spinning for a period of time which inflates the apparent CPU usage of the application as seen in utilities like **top(1)** so it is immediately ready to execute another task. Switching between procesess is a rather expensive operation and also clears CPU caches which further affects latency and performance. +Pleroma is built upon the Erlang/OTP VM known as BEAM. The BEAM VM is highly optimized for latency, but this has drawbacks in environments without dedicated hardware. One of the tricks used by the BEAM VM is [busy waiting](https://en.wikipedia.org/wiki/Busy_waiting). This allows the application to pretend to be busy working so the OS kernel does not pause the application process and switch to another process waiting for the CPU to execute its workload. It does this by spinning for a period of time which inflates the apparent CPU usage of the application as seen in utilities like **top(1)** so it is immediately ready to execute another task. Switching between procesess is a rather expensive operation and also clears CPU caches which further affects latency and performance. This strategy is very successful in making a performant and responsive application, but is not desirable on Virtual Machines or hardware with few CPU cores. Pleroma instances are often deployed on the same server as the required PostgreSQL database which can lead to situations where the Pleroma application is holding the CPU in a busy-wait loop and as a result the database cannot process requests in a timely manner. The fewer CPUs available, the more this problem is exacerbated. The latency is further amplified by the OS being installed on a Virtual Machine as the Hypervisor uses CPU time-slicing to pause the entire OS and switch between other tasks. From 620f1d723781ef39079add6326aec24112275253 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Fri, 6 Nov 2020 13:12:13 -0600 Subject: [PATCH 058/362] More grammar fixes --- docs/configuration/optimizing_beam.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/configuration/optimizing_beam.md b/docs/configuration/optimizing_beam.md index 00620b35d..fd89c4e99 100644 --- a/docs/configuration/optimizing_beam.md +++ b/docs/configuration/optimizing_beam.md @@ -1,6 +1,6 @@ # Optimizing the BEAM -Pleroma is built upon the Erlang/OTP VM known as BEAM. The BEAM VM is highly optimized for latency, but this has drawbacks in environments without dedicated hardware. One of the tricks used by the BEAM VM is [busy waiting](https://en.wikipedia.org/wiki/Busy_waiting). This allows the application to pretend to be busy working so the OS kernel does not pause the application process and switch to another process waiting for the CPU to execute its workload. It does this by spinning for a period of time which inflates the apparent CPU usage of the application as seen in utilities like **top(1)** so it is immediately ready to execute another task. Switching between procesess is a rather expensive operation and also clears CPU caches which further affects latency and performance. +Pleroma is built upon the Erlang/OTP VM known as BEAM. The BEAM VM is highly optimized for latency, but this has drawbacks in environments without dedicated hardware. One of the tricks used by the BEAM VM is [busy waiting](https://en.wikipedia.org/wiki/Busy_waiting). This allows the application to pretend to be busy working so the OS kernel does not pause the application process and switch to another process waiting for the CPU to execute its workload. It does this by spinning for a period of time which inflates the apparent CPU usage of the application so it is immediately ready to execute another task. This can be observed with utilities like **top(1)** which will show consistently high CPU usage for the process. Switching between procesess is a rather expensive operation and also clears CPU caches further affecting latency and performance. The goal of busy waiting is to avoid this penalty. This strategy is very successful in making a performant and responsive application, but is not desirable on Virtual Machines or hardware with few CPU cores. Pleroma instances are often deployed on the same server as the required PostgreSQL database which can lead to situations where the Pleroma application is holding the CPU in a busy-wait loop and as a result the database cannot process requests in a timely manner. The fewer CPUs available, the more this problem is exacerbated. The latency is further amplified by the OS being installed on a Virtual Machine as the Hypervisor uses CPU time-slicing to pause the entire OS and switch between other tasks. From 4999549191b1ac7c50bb3a6398b0bad0f0957b73 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Fri, 6 Nov 2020 13:15:21 -0600 Subject: [PATCH 059/362] Make it clearer the settings go into the vm.args file --- docs/configuration/optimizing_beam.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/configuration/optimizing_beam.md b/docs/configuration/optimizing_beam.md index fd89c4e99..64d35ad2c 100644 --- a/docs/configuration/optimizing_beam.md +++ b/docs/configuration/optimizing_beam.md @@ -29,6 +29,7 @@ Check your OS documentation to adopt a similar strategy on other platforms. Disable the busy-waiting +**vm.args:** ``` +sbwt none +sbwtdcpu none @@ -39,6 +40,7 @@ Disable the busy-waiting Enable more busy waiting, increase the internal maximum limit of BEAM processes and ports +**vm.args:** ``` +P 16777216 +Q 16777216 From a9c1f83fd8b2793e6474b14d246e1ef362892467 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Fri, 6 Nov 2020 13:16:22 -0600 Subject: [PATCH 060/362] Markdown, you're drunk --- docs/configuration/optimizing_beam.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/configuration/optimizing_beam.md b/docs/configuration/optimizing_beam.md index 64d35ad2c..de76086f7 100644 --- a/docs/configuration/optimizing_beam.md +++ b/docs/configuration/optimizing_beam.md @@ -30,6 +30,7 @@ Check your OS documentation to adopt a similar strategy on other platforms. Disable the busy-waiting **vm.args:** + ``` +sbwt none +sbwtdcpu none @@ -41,6 +42,7 @@ Disable the busy-waiting Enable more busy waiting, increase the internal maximum limit of BEAM processes and ports **vm.args:** + ``` +P 16777216 +Q 16777216 From cc45c69fff515cb82c4902b67c8edce6b109c819 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Sat, 7 Nov 2020 22:09:28 +0300 Subject: [PATCH 061/362] Remove release_env While taking a final look at instance.gen before releasing I noticed that the release_env task outputs messages in broken english. Upon further inspection it seems to have even more severe issues which, in my opinion, warrant it's at least temporary removal: - We do not explain what it actually does, anywhere. Neither the task docs nor instance.gen, nor installation instructions. - It does not respect FHS on OTP releases (uses /opt/pleroma/config even though we store the config in /etc/pleroma/config.exs). - It doesn't work on OTP releases, which is the main reason it exists. Neither systemd nor openrc service files for OTP include it. - It is not mentioned in install guides other than the ones for Debian and OTP releases. --- .../CLI_tasks/release_environments.md | 9 --- docs/installation/debian_based_en.md | 1 - docs/installation/otp_en.md | 3 - installation/init.d/pleroma | 1 - installation/pleroma.service | 2 - lib/mix/tasks/pleroma/instance.ex | 22 +----- lib/mix/tasks/pleroma/release_env.ex | 76 ------------------- test/mix/tasks/pleroma/instance_test.exs | 11 +-- test/mix/tasks/pleroma/release_env_test.exs | 30 -------- 9 files changed, 2 insertions(+), 153 deletions(-) delete mode 100644 docs/administration/CLI_tasks/release_environments.md delete mode 100644 lib/mix/tasks/pleroma/release_env.ex delete mode 100644 test/mix/tasks/pleroma/release_env_test.exs diff --git a/docs/administration/CLI_tasks/release_environments.md b/docs/administration/CLI_tasks/release_environments.md deleted file mode 100644 index 36ab43864..000000000 --- a/docs/administration/CLI_tasks/release_environments.md +++ /dev/null @@ -1,9 +0,0 @@ -# Generate release environment file - -```sh tab="OTP" - ./bin/pleroma_ctl release_env gen -``` - -```sh tab="From Source" -mix pleroma.release_env gen -``` diff --git a/docs/installation/debian_based_en.md b/docs/installation/debian_based_en.md index b9fc4e112..75ceb6595 100644 --- a/docs/installation/debian_based_en.md +++ b/docs/installation/debian_based_en.md @@ -182,7 +182,6 @@ sudo cp /opt/pleroma/installation/pleroma.service /etc/systemd/system/pleroma.se ``` * Edit the service file and make sure that all paths fit your installation -* Check that `EnvironmentFile` contains the correct path to the env file. Or generate the env file: `sudo -Hu pleroma mix pleroma.release_env gen` * Enable and start `pleroma.service`: ```shell diff --git a/docs/installation/otp_en.md b/docs/installation/otp_en.md index 98360bcf7..63eda63ca 100644 --- a/docs/installation/otp_en.md +++ b/docs/installation/otp_en.md @@ -149,9 +149,6 @@ chown -R pleroma /etc/pleroma # Run the config generator su pleroma -s $SHELL -lc "./bin/pleroma_ctl instance gen --output /etc/pleroma/config.exs --output-psql /tmp/setup_db.psql" -# Run the environment file generator. -su pleroma -s $SHELL -lc "./bin/pleroma_ctl release_env gen" - # Create the postgres database su postgres -s $SHELL -lc "psql -f /tmp/setup_db.psql" diff --git a/installation/init.d/pleroma b/installation/init.d/pleroma index e908cda1b..384536f7e 100755 --- a/installation/init.d/pleroma +++ b/installation/init.d/pleroma @@ -8,7 +8,6 @@ pidfile="/var/run/pleroma.pid" directory=/opt/pleroma healthcheck_delay=60 healthcheck_timer=30 -export $(cat /opt/pleroma/config/pleroma.env) : ${pleroma_port:-4000} diff --git a/installation/pleroma.service b/installation/pleroma.service index 63e83ed6e..8338228d8 100644 --- a/installation/pleroma.service +++ b/installation/pleroma.service @@ -17,8 +17,6 @@ Environment="MIX_ENV=prod" Environment="HOME=/var/lib/pleroma" ; Path to the folder containing the Pleroma installation. WorkingDirectory=/opt/pleroma -; Path to the environment file. the file contains RELEASE_COOKIE and etc -EnvironmentFile=/opt/pleroma/config/pleroma.env ; Path to the Mix binary. ExecStart=/usr/bin/mix phx.server diff --git a/lib/mix/tasks/pleroma/instance.ex b/lib/mix/tasks/pleroma/instance.ex index 1915aacd9..fc21ae062 100644 --- a/lib/mix/tasks/pleroma/instance.ex +++ b/lib/mix/tasks/pleroma/instance.ex @@ -36,9 +36,7 @@ def run(["gen" | rest]) do listen_port: :string, strip_uploads: :string, anonymize_uploads: :string, - dedupe_uploads: :string, - skip_release_env: :boolean, - release_env_file: :string + dedupe_uploads: :string ], aliases: [ o: :output, @@ -243,24 +241,6 @@ def run(["gen" | rest]) do write_robots_txt(static_dir, indexable, template_dir) - if Keyword.get(options, :skip_release_env, false) do - shell_info(""" - Release environment file is skip. Please generate the release env file before start. - `MIX_ENV=#{Mix.env()} mix pleroma.release_env gen` - """) - else - shell_info("Generation the environment file:") - - release_env_args = - with path when not is_nil(path) <- Keyword.get(options, :release_env_file) do - ["gen", "--path", path] - else - _ -> ["gen"] - end - - Mix.Tasks.Pleroma.ReleaseEnv.run(release_env_args) - end - shell_info( "\n All files successfully written! Refer to the installation instructions for your platform for next steps." ) diff --git a/lib/mix/tasks/pleroma/release_env.ex b/lib/mix/tasks/pleroma/release_env.ex deleted file mode 100644 index 9da74ffcf..000000000 --- a/lib/mix/tasks/pleroma/release_env.ex +++ /dev/null @@ -1,76 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Mix.Tasks.Pleroma.ReleaseEnv do - use Mix.Task - import Mix.Pleroma - - @shortdoc "Generate Pleroma environment file." - @moduledoc File.read!("docs/administration/CLI_tasks/release_environments.md") - - def run(["gen" | rest]) do - {options, [], []} = - OptionParser.parse( - rest, - strict: [ - force: :boolean, - path: :string - ], - aliases: [ - p: :path, - f: :force - ] - ) - - file_path = - get_option( - options, - :path, - "Environment file path", - "./config/pleroma.env" - ) - - env_path = Path.expand(file_path) - - proceed? = - if File.exists?(env_path) do - get_option( - options, - :force, - "Environment file already exists. Do you want to overwrite the #{env_path} file? (y/n)", - "n" - ) === "y" - else - true - end - - if proceed? do - case do_generate(env_path) do - {:error, reason} -> - shell_error( - File.Error.message(%{action: "write to file", reason: reason, path: env_path}) - ) - - _ -> - shell_info("\nThe file generated: #{env_path}.\n") - - shell_info(""" - WARNING: before start pleroma app please make sure to make the file read-only and non-modifiable. - Example: - chmod 0444 #{file_path} - chattr +i #{file_path} - """) - end - else - shell_info("\nThe file is exist. #{env_path}.\n") - end - end - - def do_generate(path) do - content = "RELEASE_COOKIE=#{Base.encode32(:crypto.strong_rand_bytes(32))}" - - File.mkdir_p!(Path.dirname(path)) - File.write(path, content) - end -end diff --git a/test/mix/tasks/pleroma/instance_test.exs b/test/mix/tasks/pleroma/instance_test.exs index fe69a2def..8a02710ee 100644 --- a/test/mix/tasks/pleroma/instance_test.exs +++ b/test/mix/tasks/pleroma/instance_test.exs @@ -5,8 +5,6 @@ defmodule Mix.Tasks.Pleroma.InstanceTest do use ExUnit.Case - @release_env_file "./test/pleroma.test.env" - setup do File.mkdir_p!(tmp_path()) @@ -18,8 +16,6 @@ defmodule Mix.Tasks.Pleroma.InstanceTest do File.rm_rf(Path.join(static_dir, "robots.txt")) end - if File.exists?(@release_env_file), do: File.rm_rf(@release_env_file) - Pleroma.Config.put([:instance, :static_dir], static_dir) end) @@ -73,9 +69,7 @@ test "running gen" do "--dedupe-uploads", "n", "--anonymize-uploads", - "n", - "--release-env-file", - @release_env_file + "n" ]) end @@ -97,9 +91,6 @@ test "running gen" do assert generated_config =~ "filters: [Pleroma.Upload.Filter.ExifTool]" assert File.read!(tmp_path() <> "setup.psql") == generated_setup_psql() assert File.exists?(Path.expand("./test/instance/static/robots.txt")) - assert File.exists?(@release_env_file) - - assert File.read!(@release_env_file) =~ ~r/^RELEASE_COOKIE=.*/ end defp generated_setup_psql do diff --git a/test/mix/tasks/pleroma/release_env_test.exs b/test/mix/tasks/pleroma/release_env_test.exs deleted file mode 100644 index 519f1eba9..000000000 --- a/test/mix/tasks/pleroma/release_env_test.exs +++ /dev/null @@ -1,30 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Mix.Tasks.Pleroma.ReleaseEnvTest do - use ExUnit.Case - import ExUnit.CaptureIO, only: [capture_io: 1] - - @path "config/pleroma.test.env" - - def do_clean do - if File.exists?(@path) do - File.rm_rf(@path) - end - end - - setup do - do_clean() - on_exit(fn -> do_clean() end) - :ok - end - - test "generate pleroma.env" do - assert capture_io(fn -> - Mix.Tasks.Pleroma.ReleaseEnv.run(["gen", "--path", @path, "--force"]) - end) =~ "The file generated" - - assert File.read!(@path) =~ "RELEASE_COOKIE=" - end -end From abf2ec2bbe5226d6558ca1918779ee68df1cab84 Mon Sep 17 00:00:00 2001 From: lain Date: Sun, 8 Nov 2020 09:45:35 +0000 Subject: [PATCH 062/362] Update optimizing_beam.md --- docs/configuration/optimizing_beam.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/configuration/optimizing_beam.md b/docs/configuration/optimizing_beam.md index de76086f7..545392f8f 100644 --- a/docs/configuration/optimizing_beam.md +++ b/docs/configuration/optimizing_beam.md @@ -4,7 +4,7 @@ Pleroma is built upon the Erlang/OTP VM known as BEAM. The BEAM VM is highly opt This strategy is very successful in making a performant and responsive application, but is not desirable on Virtual Machines or hardware with few CPU cores. Pleroma instances are often deployed on the same server as the required PostgreSQL database which can lead to situations where the Pleroma application is holding the CPU in a busy-wait loop and as a result the database cannot process requests in a timely manner. The fewer CPUs available, the more this problem is exacerbated. The latency is further amplified by the OS being installed on a Virtual Machine as the Hypervisor uses CPU time-slicing to pause the entire OS and switch between other tasks. -More adventerous admins can be creative with CPU affinity (e.g., *taskset* for Linux and *cpuset* on FreeBSD) to pin processes to specific CPUs and eliminate much of this contention. The most important advice is to run as few processes as possible on your server to achieve the best performance. Even idle background processes can occasionally create [software interrupts](https://en.wikipedia.org/wiki/Interrupt) and take attention away from the executing process creating latency spikes and invalidation of the CPU caches as they must be cleared when switching between processes for security. +More adventurous admins can be creative with CPU affinity (e.g., *taskset* for Linux and *cpuset* on FreeBSD) to pin processes to specific CPUs and eliminate much of this contention. The most important advice is to run as few processes as possible on your server to achieve the best performance. Even idle background processes can occasionally create [software interrupts](https://en.wikipedia.org/wiki/Interrupt) and take attention away from the executing process creating latency spikes and invalidation of the CPU caches as they must be cleared when switching between processes for security. ## VPS Provider Recommendations From e4a21084f0017c873a307ec85d0ef5ea341ce026 Mon Sep 17 00:00:00 2001 From: Sean King Date: Sun, 8 Nov 2020 16:16:20 -0700 Subject: [PATCH 063/362] Fix title on load of Pleroma HTML --- lib/pleroma/web/fallback/redirect_controller.ex | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/pleroma/web/fallback/redirect_controller.ex b/lib/pleroma/web/fallback/redirect_controller.ex index 6f759d559..712991c18 100644 --- a/lib/pleroma/web/fallback/redirect_controller.ex +++ b/lib/pleroma/web/fallback/redirect_controller.ex @@ -37,9 +37,11 @@ def redirector_with_meta(conn, params) do tags = build_tags(conn, params) preloads = preload_data(conn, params) + title = "#{Pleroma.Config.get([:instance, :name])}" response = index_content + |> String.replace(~r/.+?<\/title>/, title) |> String.replace("<!--server-generated-meta-->", tags <> preloads) conn @@ -54,9 +56,11 @@ def redirector_with_preload(conn, %{"path" => ["pleroma", "admin"]}) do def redirector_with_preload(conn, params) do {:ok, index_content} = File.read(index_file_path()) preloads = preload_data(conn, params) + title = "<title>#{Pleroma.Config.get([:instance, :name])}" response = index_content + |> String.replace(~r/.+?<\/title>/, title) |> String.replace("<!--server-generated-meta-->", preloads) conn From 0c68b9ac137e98867cf8aacfef1f264412cc7b3e Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov <alex.strizhakov@gmail.com> Date: Tue, 10 Nov 2020 10:44:22 +0300 Subject: [PATCH 064/362] escaping summary and other fields in xml templates --- lib/pleroma/web/feed/feed_view.ex | 2 +- .../templates/feed/feed/_activity.atom.eex | 2 +- .../web/templates/feed/feed/_activity.rss.eex | 2 +- .../pleroma/web/feed/user_controller_test.exs | 77 +++++++------------ 4 files changed, 29 insertions(+), 54 deletions(-) diff --git a/lib/pleroma/web/feed/feed_view.ex b/lib/pleroma/web/feed/feed_view.ex index 1ae03e7e2..56c024617 100644 --- a/lib/pleroma/web/feed/feed_view.ex +++ b/lib/pleroma/web/feed/feed_view.ex @@ -83,7 +83,7 @@ def activity_content(%{"content" => content}) do def activity_content(_), do: "" - def activity_context(activity), do: activity.data["context"] + def activity_context(activity), do: escape(activity.data["context"]) def attachment_href(attachment) do attachment["url"] diff --git a/lib/pleroma/web/templates/feed/feed/_activity.atom.eex b/lib/pleroma/web/templates/feed/feed/_activity.atom.eex index 78350f2aa..3fd150c4e 100644 --- a/lib/pleroma/web/templates/feed/feed/_activity.atom.eex +++ b/lib/pleroma/web/templates/feed/feed/_activity.atom.eex @@ -12,7 +12,7 @@ <link href="<%= activity_context(@activity) %>" rel="ostatus:conversation"/> <%= if @data["summary"] do %> - <summary><%= @data["summary"] %></summary> + <summary><%= escape(@data["summary"]) %></summary> <% end %> <%= if @activity.local do %> diff --git a/lib/pleroma/web/templates/feed/feed/_activity.rss.eex b/lib/pleroma/web/templates/feed/feed/_activity.rss.eex index a304a16af..42960de7d 100644 --- a/lib/pleroma/web/templates/feed/feed/_activity.rss.eex +++ b/lib/pleroma/web/templates/feed/feed/_activity.rss.eex @@ -12,7 +12,7 @@ <link rel="ostatus:conversation"><%= activity_context(@activity) %></link> <%= if @data["summary"] do %> - <description><%= @data["summary"] %></description> + <description><%= escape(@data["summary"]) %></description> <% end %> <%= if @activity.local do %> diff --git a/test/pleroma/web/feed/user_controller_test.exs b/test/pleroma/web/feed/user_controller_test.exs index eabfe3a63..16f002717 100644 --- a/test/pleroma/web/feed/user_controller_test.exs +++ b/test/pleroma/web/feed/user_controller_test.exs @@ -12,16 +12,17 @@ defmodule Pleroma.Web.Feed.UserControllerTest do alias Pleroma.Object alias Pleroma.User alias Pleroma.Web.CommonAPI + alias Pleroma.Web.Feed.FeedView setup do: clear_config([:static_fe, :enabled], false) describe "feed" do setup do: clear_config([:feed]) - test "gets an atom feed", %{conn: conn} do + setup do Config.put( [:feed, :post_title], - %{max_length: 10, omission: "..."} + %{max_length: 15, omission: "..."} ) activity = insert(:note_activity) @@ -29,7 +30,8 @@ test "gets an atom feed", %{conn: conn} do note = insert(:note, data: %{ - "content" => "This is :moominmamma: note ", + "content" => "This & this is :moominmamma: note ", + "source" => "This & this is :moominmamma: note ", "attachment" => [ %{ "url" => [ @@ -37,7 +39,9 @@ test "gets an atom feed", %{conn: conn} do ] } ], - "inReplyTo" => activity.data["id"] + "inReplyTo" => activity.data["id"], + "context" => "2hu & as", + "summary" => "2hu & as" } ) @@ -48,7 +52,7 @@ test "gets an atom feed", %{conn: conn} do insert(:note, user: user, data: %{ - "content" => "42 This is :moominmamma: note ", + "content" => "42 & This is :moominmamma: note ", "inReplyTo" => activity.data["id"] } ) @@ -56,6 +60,10 @@ test "gets an atom feed", %{conn: conn} do note_activity2 = insert(:note_activity, note: note2) object = Object.normalize(note_activity) + [user: user, object: object, max_id: note_activity2.id] + end + + test "gets an atom feed", %{conn: conn, user: user, object: object, max_id: max_id} do resp = conn |> put_req_header("accept", "application/atom+xml") @@ -67,13 +75,15 @@ test "gets an atom feed", %{conn: conn} do |> SweetXml.parse() |> SweetXml.xpath(~x"//entry/title/text()"l) - assert activity_titles == ['42 This...', 'This is...'] - assert resp =~ object.data["content"] + assert activity_titles == ['42 & Thi...', 'This & t...'] + assert resp =~ FeedView.escape(object.data["content"]) + assert resp =~ FeedView.escape(object.data["summary"]) + assert resp =~ FeedView.escape(object.data["context"]) resp = conn |> put_req_header("accept", "application/atom+xml") - |> get("/users/#{user.nickname}/feed", %{"max_id" => note_activity2.id}) + |> get("/users/#{user.nickname}/feed", %{"max_id" => max_id}) |> response(200) activity_titles = @@ -81,47 +91,10 @@ test "gets an atom feed", %{conn: conn} do |> SweetXml.parse() |> SweetXml.xpath(~x"//entry/title/text()"l) - assert activity_titles == ['This is...'] + assert activity_titles == ['This & t...'] end - test "gets a rss feed", %{conn: conn} do - Pleroma.Config.put( - [:feed, :post_title], - %{max_length: 10, omission: "..."} - ) - - activity = insert(:note_activity) - - note = - insert(:note, - data: %{ - "content" => "This is :moominmamma: note ", - "attachment" => [ - %{ - "url" => [ - %{"mediaType" => "image/png", "href" => "https://pleroma.gov/image.png"} - ] - } - ], - "inReplyTo" => activity.data["id"] - } - ) - - note_activity = insert(:note_activity, note: note) - user = User.get_cached_by_ap_id(note_activity.data["actor"]) - - note2 = - insert(:note, - user: user, - data: %{ - "content" => "42 This is :moominmamma: note ", - "inReplyTo" => activity.data["id"] - } - ) - - note_activity2 = insert(:note_activity, note: note2) - object = Object.normalize(note_activity) - + test "gets a rss feed", %{conn: conn, user: user, object: object, max_id: max_id} do resp = conn |> put_req_header("accept", "application/rss+xml") @@ -133,13 +106,15 @@ test "gets a rss feed", %{conn: conn} do |> SweetXml.parse() |> SweetXml.xpath(~x"//item/title/text()"l) - assert activity_titles == ['42 This...', 'This is...'] - assert resp =~ object.data["content"] + assert activity_titles == ['42 & Thi...', 'This & t...'] + assert resp =~ FeedView.escape(object.data["content"]) + assert resp =~ FeedView.escape(object.data["summary"]) + assert resp =~ FeedView.escape(object.data["context"]) resp = conn |> put_req_header("accept", "application/rss+xml") - |> get("/users/#{user.nickname}/feed.rss", %{"max_id" => note_activity2.id}) + |> get("/users/#{user.nickname}/feed.rss", %{"max_id" => max_id}) |> response(200) activity_titles = @@ -147,7 +122,7 @@ test "gets a rss feed", %{conn: conn} do |> SweetXml.parse() |> SweetXml.xpath(~x"//item/title/text()"l) - assert activity_titles == ['This is...'] + assert activity_titles == ['This & t...'] end test "returns 404 for a missing feed", %{conn: conn} do From 485697d96c6a45127af22b9a5f357c3802dba73c Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov <alex.strizhakov@gmail.com> Date: Tue, 10 Nov 2020 19:18:53 +0300 Subject: [PATCH 065/362] config descriptions for custom MRF policies --- config/description.exs | 302 ------------------ lib/pleroma/docs/json.ex | 6 +- lib/pleroma/web/activity_pub/mrf.ex | 58 +++- .../mrf/activity_expiration_policy.ex | 18 ++ .../web/activity_pub/mrf/hellthread_policy.ex | 27 ++ .../web/activity_pub/mrf/keyword_policy.ex | 42 +++ .../web/activity_pub/mrf/mention_policy.ex | 18 ++ .../web/activity_pub/mrf/normalize_markup.ex | 19 ++ .../web/activity_pub/mrf/object_age_policy.ex | 28 ++ .../web/activity_pub/mrf/reject_non_public.ex | 23 ++ .../web/activity_pub/mrf/simple_policy.ex | 74 +++++ .../web/activity_pub/mrf/subchain_policy.ex | 24 ++ .../mrf/user_allow_list_policy.ex | 14 + .../web/activity_pub/mrf/vocabulary_policy.ex | 28 ++ test/fixtures/modules/good_mrf.ex | 19 ++ test/pleroma/web/activity_pub/mrf_test.exs | 17 + 16 files changed, 412 insertions(+), 305 deletions(-) create mode 100644 test/fixtures/modules/good_mrf.ex diff --git a/config/description.exs b/config/description.exs index 0b651696b..69072312c 100644 --- a/config/description.exs +++ b/config/description.exs @@ -1,5 +1,4 @@ use Mix.Config -alias Pleroma.Docs.Generator websocket_config = [ path: "/websocket", @@ -1589,264 +1588,6 @@ } ] }, - %{ - group: :pleroma, - key: :mrf_simple, - tab: :mrf, - related_policy: "Pleroma.Web.ActivityPub.MRF.SimplePolicy", - label: "MRF Simple", - type: :group, - description: "Simple ingress policies", - children: [ - %{ - key: :media_removal, - type: {:list, :string}, - description: "List of instances to strip media attachments from", - suggestions: ["example.com", "*.example.com"] - }, - %{ - key: :media_nsfw, - label: "Media NSFW", - type: {:list, :string}, - description: "List of instances to tag all media as NSFW (sensitive) from", - suggestions: ["example.com", "*.example.com"] - }, - %{ - key: :federated_timeline_removal, - type: {:list, :string}, - description: - "List of instances to remove from the Federated (aka The Whole Known Network) Timeline", - suggestions: ["example.com", "*.example.com"] - }, - %{ - key: :reject, - type: {:list, :string}, - description: "List of instances to reject activities from (except deletes)", - suggestions: ["example.com", "*.example.com"] - }, - %{ - key: :accept, - type: {:list, :string}, - description: "List of instances to only accept activities from (except deletes)", - suggestions: ["example.com", "*.example.com"] - }, - %{ - key: :followers_only, - type: {:list, :string}, - description: "Force posts from the given instances to be visible by followers only", - suggestions: ["example.com", "*.example.com"] - }, - %{ - key: :report_removal, - type: {:list, :string}, - description: "List of instances to reject reports from", - suggestions: ["example.com", "*.example.com"] - }, - %{ - key: :avatar_removal, - type: {:list, :string}, - description: "List of instances to strip avatars from", - suggestions: ["example.com", "*.example.com"] - }, - %{ - key: :banner_removal, - type: {:list, :string}, - description: "List of instances to strip banners from", - suggestions: ["example.com", "*.example.com"] - }, - %{ - key: :reject_deletes, - type: {:list, :string}, - description: "List of instances to reject deletions from", - suggestions: ["example.com", "*.example.com"] - } - ] - }, - %{ - group: :pleroma, - key: :mrf_activity_expiration, - tab: :mrf, - related_policy: "Pleroma.Web.ActivityPub.MRF.ActivityExpirationPolicy", - label: "MRF Activity Expiration Policy", - type: :group, - description: "Adds automatic expiration to all local activities", - children: [ - %{ - key: :days, - type: :integer, - description: "Default global expiration time for all local activities (in days)", - suggestions: [90, 365] - } - ] - }, - %{ - group: :pleroma, - key: :mrf_subchain, - tab: :mrf, - related_policy: "Pleroma.Web.ActivityPub.MRF.SubchainPolicy", - label: "MRF Subchain", - type: :group, - description: - "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.", - children: [ - %{ - key: :match_actor, - type: {:map, {:list, :string}}, - description: "Matches a series of regular expressions against the actor field", - suggestions: [ - %{ - ~r/https:\/\/example.com/s => [Pleroma.Web.ActivityPub.MRF.DropPolicy] - } - ] - } - ] - }, - %{ - group: :pleroma, - key: :mrf_rejectnonpublic, - tab: :mrf, - related_policy: "Pleroma.Web.ActivityPub.MRF.RejectNonPublic", - description: "RejectNonPublic drops posts with non-public visibility settings.", - label: "MRF Reject Non Public", - type: :group, - children: [ - %{ - key: :allow_followersonly, - label: "Allow followers-only", - type: :boolean, - description: "Whether to allow followers-only posts" - }, - %{ - key: :allow_direct, - type: :boolean, - description: "Whether to allow direct messages" - } - ] - }, - %{ - group: :pleroma, - key: :mrf_hellthread, - tab: :mrf, - related_policy: "Pleroma.Web.ActivityPub.MRF.HellthreadPolicy", - label: "MRF Hellthread", - type: :group, - description: "Block messages with excessive user mentions", - children: [ - %{ - key: :delist_threshold, - type: :integer, - description: - "Number of mentioned users after which the message gets removed from timelines and" <> - "disables notifications. Set to 0 to disable.", - suggestions: [10] - }, - %{ - key: :reject_threshold, - type: :integer, - description: - "Number of mentioned users after which the messaged gets rejected. Set to 0 to disable.", - suggestions: [20] - } - ] - }, - %{ - group: :pleroma, - key: :mrf_keyword, - tab: :mrf, - related_policy: "Pleroma.Web.ActivityPub.MRF.KeywordPolicy", - label: "MRF Keyword", - type: :group, - description: - "Reject or Word-Replace messages matching a keyword or [Regex](https://hexdocs.pm/elixir/Regex.html).", - children: [ - %{ - key: :reject, - type: {:list, :string}, - description: """ - A list of patterns which result in message being rejected. - - Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`. - """, - suggestions: ["foo", ~r/foo/iu] - }, - %{ - key: :federated_timeline_removal, - type: {:list, :string}, - description: """ - A list of patterns which result in message being removed from federated timelines (a.k.a unlisted). - - Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`. - """, - suggestions: ["foo", ~r/foo/iu] - }, - %{ - key: :replace, - type: {:list, :tuple}, - description: """ - **Pattern**: a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`. - - **Replacement**: a string. Leaving the field empty is permitted. - """ - } - ] - }, - %{ - group: :pleroma, - key: :mrf_mention, - tab: :mrf, - related_policy: "Pleroma.Web.ActivityPub.MRF.MentionPolicy", - label: "MRF Mention", - type: :group, - description: "Block messages which mention a specific user", - children: [ - %{ - key: :actors, - type: {:list, :string}, - description: "A list of actors for which any post mentioning them will be dropped", - suggestions: ["actor1", "actor2"] - } - ] - }, - %{ - group: :pleroma, - key: :mrf_vocabulary, - tab: :mrf, - related_policy: "Pleroma.Web.ActivityPub.MRF.VocabularyPolicy", - label: "MRF Vocabulary", - type: :group, - description: "Filter messages which belong to certain activity vocabularies", - children: [ - %{ - key: :accept, - type: {:list, :string}, - description: - "A list of ActivityStreams terms to accept. If empty, all supported messages are accepted.", - suggestions: ["Create", "Follow", "Mention", "Announce", "Like"] - }, - %{ - key: :reject, - type: {:list, :string}, - description: - "A list of ActivityStreams terms to reject. If empty, no messages are rejected.", - suggestions: ["Create", "Follow", "Mention", "Announce", "Like"] - } - ] - }, - # %{ - # group: :pleroma, - # key: :mrf_user_allowlist, - # tab: :mrf, - # related_policy: "Pleroma.Web.ActivityPub.MRF.UserAllowListPolicy", - # type: :map, - # description: - # "The keys in this section are the domain names that the policy should apply to." <> - # " Each key should be assigned a list of users that should be allowed through by their ActivityPub ID", - # suggestions: [ - # %{"example.org" => ["https://example.org/users/admin"]} - # ] - # ] - # }, %{ group: :pleroma, key: :media_proxy, @@ -3159,22 +2900,6 @@ } ] }, - %{ - group: :pleroma, - key: :mrf_normalize_markup, - tab: :mrf, - related_policy: "Pleroma.Web.ActivityPub.MRF.NormalizeMarkup", - label: "MRF Normalize Markup", - description: "MRF NormalizeMarkup settings. Scrub configured hypertext markup.", - type: :group, - children: [ - %{ - key: :scrub_policy, - type: :module, - suggestions: [Pleroma.HTML.Scrubber.Default] - } - ] - }, %{ group: :pleroma, key: Pleroma.User, @@ -3364,33 +3089,6 @@ } ] }, - %{ - group: :pleroma, - key: :mrf_object_age, - tab: :mrf, - related_policy: "Pleroma.Web.ActivityPub.MRF.ObjectAgePolicy", - label: "MRF Object Age", - type: :group, - description: - "Rejects or delists posts based on their timestamp deviance from your server's clock.", - children: [ - %{ - key: :threshold, - type: :integer, - description: "Required age (in seconds) of a post before actions are taken.", - suggestions: [172_800] - }, - %{ - key: :actions, - type: {:list, :atom}, - description: - "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", - suggestions: [:delist, :strip_followers, :reject] - } - ] - }, %{ group: :pleroma, key: :modules, diff --git a/lib/pleroma/docs/json.ex b/lib/pleroma/docs/json.ex index 13618b509..a583e2a5b 100644 --- a/lib/pleroma/docs/json.ex +++ b/lib/pleroma/docs/json.ex @@ -11,7 +11,11 @@ defmodule Pleroma.Docs.JSON do @spec compile :: :ok def compile do - :persistent_term.put(@term, Pleroma.Docs.Generator.convert_to_strings(@raw_descriptions)) + descriptions = + Pleroma.Web.ActivityPub.MRF.config_descriptions() + |> Enum.reduce(@raw_descriptions, fn description, acc -> [description | acc] end) + + :persistent_term.put(@term, Pleroma.Docs.Generator.convert_to_strings(descriptions)) end @spec compiled_descriptions :: Map.t() diff --git a/lib/pleroma/web/activity_pub/mrf.ex b/lib/pleroma/web/activity_pub/mrf.ex index 5e5361082..656e4c7ca 100644 --- a/lib/pleroma/web/activity_pub/mrf.ex +++ b/lib/pleroma/web/activity_pub/mrf.ex @@ -3,7 +3,26 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.MRF do + require Logger + + @default_description %{ + label: "", + description: "", + children: [] + } + + @required_description_keys [:key, :related_policy] + @callback filter(Map.t()) :: {:ok | :reject, Map.t()} + @callback describe() :: {:ok | :error, Map.t()} + @callback config_description() :: %{ + optional(:children) => [map()], + key: atom(), + related_policy: String.t(), + label: String.t(), + description: String.t() + } + @optional_callbacks config_description: 0 def filter(policies, %{} = message) do policies @@ -51,8 +70,6 @@ def subdomain_match?(domains, host) do Enum.any?(domains, fn domain -> Regex.match?(domain, host) end) end - @callback describe() :: {:ok | :error, Map.t()} - def describe(policies) do {:ok, policy_configs} = policies @@ -82,4 +99,41 @@ def describe(policies) do end def describe, do: get_policies() |> describe() + + def config_descriptions do + Pleroma.Web.ActivityPub.MRF + |> Pleroma.Docs.Generator.list_behaviour_implementations() + |> config_descriptions() + end + + def config_descriptions(policies) do + Enum.reduce(policies, [], fn policy, acc -> + if function_exported?(policy, :config_description, 0) do + description = + @default_description + |> Map.merge(policy.config_description) + |> Map.put(:group, :pleroma) + |> Map.put(:tab, :mrf) + |> Map.put(:type, :group) + + if Enum.all?(@required_description_keys, &Map.has_key?(description, &1)) do + [description | acc] + else + Logger.warn( + "#{policy} config description doesn't have one or all required keys #{ + inspect(@required_description_keys) + }" + ) + + acc + end + else + Logger.info( + "#{policy} is excluded from config descriptions, because does not implement `config_description/0` method." + ) + + acc + end + end) + end end 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 bee47b4ed..655a2ced0 100644 --- a/lib/pleroma/web/activity_pub/mrf/activity_expiration_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/activity_expiration_policy.ex @@ -40,4 +40,22 @@ defp maybe_add_expiration(activity) do _ -> Map.put(activity, "expires_at", expires_at) end end + + @impl true + def config_description do + %{ + key: :mrf_activity_expiration, + related_policy: "Pleroma.Web.ActivityPub.MRF.ActivityExpirationPolicy", + label: "MRF Activity Expiration Policy", + description: "Adds automatic expiration to all local activities", + children: [ + %{ + key: :days, + type: :integer, + description: "Default global expiration time for all local activities (in days)", + suggestions: [90, 365] + } + ] + } + end end diff --git a/lib/pleroma/web/activity_pub/mrf/hellthread_policy.ex b/lib/pleroma/web/activity_pub/mrf/hellthread_policy.ex index 9ba07b4e3..3fd5c1e0a 100644 --- a/lib/pleroma/web/activity_pub/mrf/hellthread_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/hellthread_policy.ex @@ -97,4 +97,31 @@ def filter(message), do: {:ok, message} @impl true def describe, do: {:ok, %{mrf_hellthread: Pleroma.Config.get(:mrf_hellthread) |> Enum.into(%{})}} + + @impl true + def config_description do + %{ + key: :mrf_hellthread, + related_policy: "Pleroma.Web.ActivityPub.MRF.HellthreadPolicy", + label: "MRF Hellthread", + description: "Block messages with excessive user mentions", + children: [ + %{ + key: :delist_threshold, + type: :integer, + description: + "Number of mentioned users after which the message gets removed from timelines and" <> + "disables notifications. Set to 0 to disable.", + suggestions: [10] + }, + %{ + key: :reject_threshold, + type: :integer, + description: + "Number of mentioned users after which the messaged gets rejected. Set to 0 to disable.", + suggestions: [20] + } + ] + } + end end diff --git a/lib/pleroma/web/activity_pub/mrf/keyword_policy.ex b/lib/pleroma/web/activity_pub/mrf/keyword_policy.ex index db66cfa3e..ded0fe7f2 100644 --- a/lib/pleroma/web/activity_pub/mrf/keyword_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/keyword_policy.ex @@ -126,4 +126,46 @@ def describe do {:ok, %{mrf_keyword: mrf_keyword}} end + + @impl true + def config_description do + %{ + key: :mrf_keyword, + related_policy: "Pleroma.Web.ActivityPub.MRF.KeywordPolicy", + label: "MRF Keyword", + description: + "Reject or Word-Replace messages matching a keyword or [Regex](https://hexdocs.pm/elixir/Regex.html).", + children: [ + %{ + key: :reject, + type: {:list, :string}, + description: """ + A list of patterns which result in message being rejected. + + Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`. + """, + suggestions: ["foo", ~r/foo/iu] + }, + %{ + key: :federated_timeline_removal, + type: {:list, :string}, + description: """ + A list of patterns which result in message being removed from federated timelines (a.k.a unlisted). + + Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`. + """, + suggestions: ["foo", ~r/foo/iu] + }, + %{ + key: :replace, + type: {:list, :tuple}, + description: """ + **Pattern**: a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`. + + **Replacement**: a string. Leaving the field empty is permitted. + """ + } + ] + } + end end diff --git a/lib/pleroma/web/activity_pub/mrf/mention_policy.ex b/lib/pleroma/web/activity_pub/mrf/mention_policy.ex index 7910ca131..9c096712a 100644 --- a/lib/pleroma/web/activity_pub/mrf/mention_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/mention_policy.ex @@ -25,4 +25,22 @@ def filter(message), do: {:ok, message} @impl true def describe, do: {:ok, %{}} + + @impl true + def config_description do + %{ + key: :mrf_mention, + related_policy: "Pleroma.Web.ActivityPub.MRF.MentionPolicy", + label: "MRF Mention", + description: "Block messages which mention a specific user", + children: [ + %{ + key: :actors, + type: {:list, :string}, + description: "A list of actors for which any post mentioning them will be dropped", + suggestions: ["actor1", "actor2"] + } + ] + } + end end diff --git a/lib/pleroma/web/activity_pub/mrf/normalize_markup.ex b/lib/pleroma/web/activity_pub/mrf/normalize_markup.ex index 7abae37ae..e00575c2a 100644 --- a/lib/pleroma/web/activity_pub/mrf/normalize_markup.ex +++ b/lib/pleroma/web/activity_pub/mrf/normalize_markup.ex @@ -8,6 +8,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.NormalizeMarkup do @behaviour Pleroma.Web.ActivityPub.MRF + @impl true def filter(%{"type" => "Create", "object" => child_object} = object) do scrub_policy = Pleroma.Config.get([:mrf_normalize_markup, :scrub_policy]) @@ -22,5 +23,23 @@ def filter(%{"type" => "Create", "object" => child_object} = object) do def filter(object), do: {:ok, object} + @impl true def describe, do: {:ok, %{}} + + @impl true + def config_description do + %{ + key: :mrf_normalize_markup, + related_policy: "Pleroma.Web.ActivityPub.MRF.NormalizeMarkup", + label: "MRF Normalize Markup", + description: "MRF NormalizeMarkup settings. Scrub configured hypertext markup.", + children: [ + %{ + key: :scrub_policy, + type: :module, + suggestions: [Pleroma.HTML.Scrubber.Default] + } + ] + } + end end 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 d45d2d7e3..eb0481f20 100644 --- a/lib/pleroma/web/activity_pub/mrf/object_age_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/object_age_policy.ex @@ -106,4 +106,32 @@ def describe do {:ok, %{mrf_object_age: mrf_object_age}} end + + @impl true + def config_description do + %{ + key: :mrf_object_age, + related_policy: "Pleroma.Web.ActivityPub.MRF.ObjectAgePolicy", + label: "MRF Object Age", + description: + "Rejects or delists posts based on their timestamp deviance from your server's clock.", + children: [ + %{ + key: :threshold, + type: :integer, + description: "Required age (in seconds) of a post before actions are taken.", + suggestions: [172_800] + }, + %{ + key: :actions, + type: {:list, :atom}, + description: + "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", + suggestions: [:delist, :strip_followers, :reject] + } + ] + } + end end 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 0b9ed2224..cd7665e31 100644 --- a/lib/pleroma/web/activity_pub/mrf/reject_non_public.ex +++ b/lib/pleroma/web/activity_pub/mrf/reject_non_public.ex @@ -48,4 +48,27 @@ def filter(object), do: {:ok, object} @impl true def describe, do: {:ok, %{mrf_rejectnonpublic: Config.get(:mrf_rejectnonpublic) |> Enum.into(%{})}} + + @impl true + def config_description do + %{ + key: :mrf_rejectnonpublic, + related_policy: "Pleroma.Web.ActivityPub.MRF.RejectNonPublic", + description: "RejectNonPublic drops posts with non-public visibility settings.", + label: "MRF Reject Non Public", + children: [ + %{ + key: :allow_followersonly, + label: "Allow followers-only", + type: :boolean, + description: "Whether to allow followers-only posts" + }, + %{ + key: :allow_direct, + type: :boolean, + description: "Whether to allow direct messages" + } + ] + } + end end diff --git a/lib/pleroma/web/activity_pub/mrf/simple_policy.ex b/lib/pleroma/web/activity_pub/mrf/simple_policy.ex index 161177727..6cd91826d 100644 --- a/lib/pleroma/web/activity_pub/mrf/simple_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/simple_policy.ex @@ -244,4 +244,78 @@ def describe do {:ok, %{mrf_simple: mrf_simple}} end + + @impl true + def config_description do + %{ + key: :mrf_simple, + related_policy: "Pleroma.Web.ActivityPub.MRF.SimplePolicy", + label: "MRF Simple", + description: "Simple ingress policies", + children: [ + %{ + key: :media_removal, + type: {:list, :string}, + description: "List of instances to strip media attachments from", + suggestions: ["example.com", "*.example.com"] + }, + %{ + key: :media_nsfw, + label: "Media NSFW", + type: {:list, :string}, + description: "List of instances to tag all media as NSFW (sensitive) from", + suggestions: ["example.com", "*.example.com"] + }, + %{ + key: :federated_timeline_removal, + type: {:list, :string}, + description: + "List of instances to remove from the Federated (aka The Whole Known Network) Timeline", + suggestions: ["example.com", "*.example.com"] + }, + %{ + key: :reject, + type: {:list, :string}, + description: "List of instances to reject activities from (except deletes)", + suggestions: ["example.com", "*.example.com"] + }, + %{ + key: :accept, + type: {:list, :string}, + description: "List of instances to only accept activities from (except deletes)", + suggestions: ["example.com", "*.example.com"] + }, + %{ + key: :followers_only, + type: {:list, :string}, + description: "Force posts from the given instances to be visible by followers only", + suggestions: ["example.com", "*.example.com"] + }, + %{ + key: :report_removal, + type: {:list, :string}, + description: "List of instances to reject reports from", + suggestions: ["example.com", "*.example.com"] + }, + %{ + key: :avatar_removal, + type: {:list, :string}, + description: "List of instances to strip avatars from", + suggestions: ["example.com", "*.example.com"] + }, + %{ + key: :banner_removal, + type: {:list, :string}, + description: "List of instances to strip banners from", + suggestions: ["example.com", "*.example.com"] + }, + %{ + key: :reject_deletes, + type: {:list, :string}, + description: "List of instances to reject deletions from", + suggestions: ["example.com", "*.example.com"] + } + ] + } + end end diff --git a/lib/pleroma/web/activity_pub/mrf/subchain_policy.ex b/lib/pleroma/web/activity_pub/mrf/subchain_policy.ex index 048052da6..2ec45260a 100644 --- a/lib/pleroma/web/activity_pub/mrf/subchain_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/subchain_policy.ex @@ -39,4 +39,28 @@ def filter(message), do: {:ok, message} @impl true def describe, do: {:ok, %{}} + + @impl true + def config_description do + %{ + key: :mrf_subchain, + related_policy: "Pleroma.Web.ActivityPub.MRF.SubchainPolicy", + label: "MRF Subchain", + description: + "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.", + children: [ + %{ + key: :match_actor, + type: {:map, {:list, :string}}, + description: "Matches a series of regular expressions against the actor field", + suggestions: [ + %{ + ~r/https:\/\/example.com/s => [Pleroma.Web.ActivityPub.MRF.DropPolicy] + } + ] + } + ] + } + end end 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 1a28f2ba2..885bcca6f 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 @@ -41,4 +41,18 @@ def describe do {:ok, %{mrf_user_allowlist: mrf_user_allowlist}} end + + @impl true + def config_description do + %{ + key: :mrf_user_allowlist, + related_policy: "Pleroma.Web.ActivityPub.MRF.UserAllowListPolicy", + description: + "The keys in this section are the domain names that the policy should apply to." <> + " Each key should be assigned a list of users that should be allowed through by their ActivityPub ID", + suggestions: [ + %{"example.org" => ["https://example.org/users/admin"]} + ] + } + end end diff --git a/lib/pleroma/web/activity_pub/mrf/vocabulary_policy.ex b/lib/pleroma/web/activity_pub/mrf/vocabulary_policy.ex index a6c545570..f325cb680 100644 --- a/lib/pleroma/web/activity_pub/mrf/vocabulary_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/vocabulary_policy.ex @@ -7,6 +7,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.VocabularyPolicy do @behaviour Pleroma.Web.ActivityPub.MRF + @impl true def filter(%{"type" => "Undo", "object" => child_message} = message) do with {:ok, _} <- filter(child_message) do {:ok, message} @@ -36,6 +37,33 @@ def filter(%{"type" => message_type} = message) do def filter(message), do: {:ok, message} + @impl true def describe, do: {:ok, %{mrf_vocabulary: Pleroma.Config.get(:mrf_vocabulary) |> Enum.into(%{})}} + + @impl true + def config_description do + %{ + key: :mrf_vocabulary, + related_policy: "Pleroma.Web.ActivityPub.MRF.VocabularyPolicy", + label: "MRF Vocabulary", + description: "Filter messages which belong to certain activity vocabularies", + children: [ + %{ + key: :accept, + type: {:list, :string}, + description: + "A list of ActivityStreams terms to accept. If empty, all supported messages are accepted.", + suggestions: ["Create", "Follow", "Mention", "Announce", "Like"] + }, + %{ + key: :reject, + type: {:list, :string}, + description: + "A list of ActivityStreams terms to reject. If empty, no messages are rejected.", + suggestions: ["Create", "Follow", "Mention", "Announce", "Like"] + } + ] + } + end end diff --git a/test/fixtures/modules/good_mrf.ex b/test/fixtures/modules/good_mrf.ex new file mode 100644 index 000000000..39d0f14ec --- /dev/null +++ b/test/fixtures/modules/good_mrf.ex @@ -0,0 +1,19 @@ +defmodule Fixtures.Modules.GoodMRF do + @behaviour Pleroma.Web.ActivityPub.MRF + + @impl true + def filter(a), do: {:ok, a} + + @impl true + def describe, do: %{} + + @impl true + def config_description do + %{ + key: :good_mrf, + related_policy: "Fixtures.Modules.GoodMRF", + label: "Good MRF", + description: "Some description" + } + end +end diff --git a/test/pleroma/web/activity_pub/mrf_test.exs b/test/pleroma/web/activity_pub/mrf_test.exs index e8cdde2e1..17aef2e16 100644 --- a/test/pleroma/web/activity_pub/mrf_test.exs +++ b/test/pleroma/web/activity_pub/mrf_test.exs @@ -87,4 +87,21 @@ test "it works as expected with mock policy" do {:ok, ^expected} = MRF.describe() end end + + test "config_descriptions/0" do + descriptions = MRF.config_descriptions() + + good_mrf = Enum.find(descriptions, fn %{key: key} -> key == :good_mrf end) + + assert good_mrf == %{ + key: :good_mrf, + related_policy: "Fixtures.Modules.GoodMRF", + label: "Good MRF", + description: "Some description", + children: [], + group: :pleroma, + tab: :mrf, + type: :group + } + end end From 2933658446f4172bb77b4d294d032fa4e2d93237 Mon Sep 17 00:00:00 2001 From: feld <feld@feld.me> Date: Tue, 10 Nov 2020 16:44:00 +0000 Subject: [PATCH 066/362] Apply 1 suggestion(s) to 1 file(s) --- docs/configuration/optimizing_beam.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/configuration/optimizing_beam.md b/docs/configuration/optimizing_beam.md index 545392f8f..1753620c9 100644 --- a/docs/configuration/optimizing_beam.md +++ b/docs/configuration/optimizing_beam.md @@ -27,7 +27,7 @@ Check your OS documentation to adopt a similar strategy on other platforms. ### Virtual Machine and/or few CPU cores -Disable the busy-waiting +Disable the busy-waiting. This should generally only be done if you're on a platform that does burst scheduling, like AWS. **vm.args:** From 952a8c213e37b38c48890813f80e8792cb0cebe2 Mon Sep 17 00:00:00 2001 From: feld <feld@feld.me> Date: Tue, 10 Nov 2020 16:44:08 +0000 Subject: [PATCH 067/362] Apply 1 suggestion(s) to 1 file(s) --- docs/configuration/optimizing_beam.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/configuration/optimizing_beam.md b/docs/configuration/optimizing_beam.md index 1753620c9..ecfae86d9 100644 --- a/docs/configuration/optimizing_beam.md +++ b/docs/configuration/optimizing_beam.md @@ -39,7 +39,7 @@ Disable the busy-waiting. This should generally only be done if you're on a plat ### Dedicated Hardware -Enable more busy waiting, increase the internal maximum limit of BEAM processes and ports +Enable more busy waiting, increase the internal maximum limit of BEAM processes and ports. You can use this if you run on dedicated hardware, but it is not necessary. **vm.args:** From 776067a9a32fd2b536c6782a0aa7c2dfd8444280 Mon Sep 17 00:00:00 2001 From: feld <feld@feld.me> Date: Tue, 10 Nov 2020 16:44:17 +0000 Subject: [PATCH 068/362] Apply 1 suggestion(s) to 1 file(s) --- docs/configuration/optimizing_beam.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/configuration/optimizing_beam.md b/docs/configuration/optimizing_beam.md index ecfae86d9..a79d188ca 100644 --- a/docs/configuration/optimizing_beam.md +++ b/docs/configuration/optimizing_beam.md @@ -6,6 +6,8 @@ This strategy is very successful in making a performant and responsive applicati More adventurous admins can be creative with CPU affinity (e.g., *taskset* for Linux and *cpuset* on FreeBSD) to pin processes to specific CPUs and eliminate much of this contention. The most important advice is to run as few processes as possible on your server to achieve the best performance. Even idle background processes can occasionally create [software interrupts](https://en.wikipedia.org/wiki/Interrupt) and take attention away from the executing process creating latency spikes and invalidation of the CPU caches as they must be cleared when switching between processes for security. +Please only change these settings if you are experiencing issues or really know what you are doing. In general, there's no need to change these settings. + ## VPS Provider Recommendations ### Good From 7681b4c5cd683bcc8c91b1d296261e7e2b11fd88 Mon Sep 17 00:00:00 2001 From: feld <feld@feld.me> Date: Tue, 10 Nov 2020 16:44:23 +0000 Subject: [PATCH 069/362] Apply 1 suggestion(s) to 1 file(s) --- docs/configuration/optimizing_beam.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/configuration/optimizing_beam.md b/docs/configuration/optimizing_beam.md index a79d188ca..e336bd36c 100644 --- a/docs/configuration/optimizing_beam.md +++ b/docs/configuration/optimizing_beam.md @@ -12,7 +12,7 @@ Please only change these settings if you are experiencing issues or really know ### Good -* ???? +* Hetzner Cloud ### Bad From efc27f64643f24e97c604efa02c15bfe3210cf3b Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov <alex.strizhakov@gmail.com> Date: Wed, 11 Nov 2020 10:10:57 +0300 Subject: [PATCH 070/362] fix for adminFE - revert UserAllowPolicy description - MRF descriptions order --- config/description.exs | 34 --------------- lib/pleroma/web/activity_pub/mrf.ex | 42 +++++++++++++++++-- .../mrf/user_allow_list_policy.ex | 32 ++++++++------ 3 files changed, 58 insertions(+), 50 deletions(-) diff --git a/config/description.exs b/config/description.exs index 69072312c..0552b37e0 100644 --- a/config/description.exs +++ b/config/description.exs @@ -1554,40 +1554,6 @@ } ] }, - %{ - group: :pleroma, - key: :mrf, - tab: :mrf, - label: "MRF", - type: :group, - description: "General MRF settings", - children: [ - %{ - key: :policies, - type: [:module, {:list, :module}], - description: - "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.", - suggestions: {:list_behaviour_implementations, Pleroma.Web.ActivityPub.MRF} - }, - %{ - key: :transparency, - label: "MRF transparency", - type: :boolean, - description: - "Make the content of your Message Rewrite Facility settings public (via nodeinfo)" - }, - %{ - key: :transparency_exclusions, - label: "MRF transparency exclusions", - type: {:list, :string}, - description: - "Exclude specific instance names from MRF transparency. The use of the exclusions feature will be disclosed in nodeinfo as a boolean value.", - suggestions: [ - "exclusion.com" - ] - } - ] - }, %{ group: :pleroma, key: :media_proxy, diff --git a/lib/pleroma/web/activity_pub/mrf.ex b/lib/pleroma/web/activity_pub/mrf.ex index 656e4c7ca..ce125a696 100644 --- a/lib/pleroma/web/activity_pub/mrf.ex +++ b/lib/pleroma/web/activity_pub/mrf.ex @@ -5,10 +5,46 @@ defmodule Pleroma.Web.ActivityPub.MRF do require Logger + @mrf_config_descriptions [ + %{ + group: :pleroma, + key: :mrf, + tab: :mrf, + label: "MRF", + type: :group, + description: "General MRF settings", + children: [ + %{ + key: :policies, + type: [:module, {:list, :module}], + description: + "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.", + suggestions: {:list_behaviour_implementations, Pleroma.Web.ActivityPub.MRF} + }, + %{ + key: :transparency, + label: "MRF transparency", + type: :boolean, + description: + "Make the content of your Message Rewrite Facility settings public (via nodeinfo)" + }, + %{ + key: :transparency_exclusions, + label: "MRF transparency exclusions", + type: {:list, :string}, + description: + "Exclude specific instance names from MRF transparency. The use of the exclusions feature will be disclosed in nodeinfo as a boolean value.", + suggestions: [ + "exclusion.com" + ] + } + ] + } + ] + @default_description %{ label: "", - description: "", - children: [] + description: "" } @required_description_keys [:key, :related_policy] @@ -107,7 +143,7 @@ def config_descriptions do end def config_descriptions(policies) do - Enum.reduce(policies, [], fn policy, acc -> + Enum.reduce(policies, @mrf_config_descriptions, fn policy, acc -> if function_exported?(policy, :config_description, 0) do description = @default_description 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 885bcca6f..f2859abde 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 @@ -42,17 +42,23 @@ def describe do {:ok, %{mrf_user_allowlist: mrf_user_allowlist}} end - @impl true - def config_description do - %{ - key: :mrf_user_allowlist, - related_policy: "Pleroma.Web.ActivityPub.MRF.UserAllowListPolicy", - description: - "The keys in this section are the domain names that the policy should apply to." <> - " Each key should be assigned a list of users that should be allowed through by their ActivityPub ID", - suggestions: [ - %{"example.org" => ["https://example.org/users/admin"]} - ] - } - end + # TODO: change way of getting settings on `lib/pleroma/web/activity_pub/mrf/user_allow_list_policy.ex:18` to use `hosts` subkey + # @impl true + # def config_description do + # %{ + # key: :mrf_user_allowlist, + # related_policy: "Pleroma.Web.ActivityPub.MRF.UserAllowListPolicy", + # description: "Accept-list of users from specified instances", + # children: [ + # %{ + # key: :hosts, + # type: :map, + # description: + # "The keys in this section are the domain names that the policy should apply to." <> + # " Each key should be assigned a list of users that should be allowed through by their ActivityPub ID", + # suggestions: [%{"example.org" => ["https://example.org/users/admin"]}] + # } + # ] + # } + # end end From f97f24b067b6d0205f093b04aeb08c3d56faa7b4 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov <alex.strizhakov@gmail.com> Date: Wed, 11 Nov 2020 10:48:03 +0300 Subject: [PATCH 071/362] making credo happy and test fix --- lib/pleroma/web/activity_pub/mrf/user_allow_list_policy.ex | 3 ++- test/pleroma/web/activity_pub/mrf_test.exs | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) 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 f2859abde..e9d0d0503 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 @@ -55,7 +55,8 @@ def describe do # type: :map, # description: # "The keys in this section are the domain names that the policy should apply to." <> - # " Each key should be assigned a list of users that should be allowed through by their ActivityPub ID", + # " Each key should be assigned a list of users that should be allowed " <> + # "through by their ActivityPub ID", # suggestions: [%{"example.org" => ["https://example.org/users/admin"]}] # } # ] diff --git a/test/pleroma/web/activity_pub/mrf_test.exs b/test/pleroma/web/activity_pub/mrf_test.exs index 17aef2e16..44a9cf086 100644 --- a/test/pleroma/web/activity_pub/mrf_test.exs +++ b/test/pleroma/web/activity_pub/mrf_test.exs @@ -98,7 +98,6 @@ test "config_descriptions/0" do related_policy: "Fixtures.Modules.GoodMRF", label: "Good MRF", description: "Some description", - children: [], group: :pleroma, tab: :mrf, type: :group From e58ea7f99cf8a70d8da879294fe5b7f05376a7e0 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov <alex.strizhakov@gmail.com> Date: Sat, 19 Sep 2020 21:25:01 +0300 Subject: [PATCH 072/362] changes after rebase --- .../instance_document_controller_test.exs | 106 ------------------ 1 file changed, 106 deletions(-) delete mode 100644 test/web/admin_api/controllers/instance_document_controller_test.exs diff --git a/test/web/admin_api/controllers/instance_document_controller_test.exs b/test/web/admin_api/controllers/instance_document_controller_test.exs deleted file mode 100644 index 5f7b042f6..000000000 --- a/test/web/admin_api/controllers/instance_document_controller_test.exs +++ /dev/null @@ -1,106 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/> -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.AdminAPI.InstanceDocumentControllerTest do - use Pleroma.Web.ConnCase, async: true - import Pleroma.Factory - alias Pleroma.Config - - @dir "test/tmp/instance_static" - @default_instance_panel ~s(<p>Welcome to <a href="https://pleroma.social" target="_blank">Pleroma!</a></p>) - - setup do - File.mkdir_p!(@dir) - on_exit(fn -> File.rm_rf(@dir) end) - end - - setup do: clear_config([:instance, :static_dir], @dir) - - setup do - admin = insert(:user, is_admin: true) - token = insert(:oauth_admin_token, user: admin) - - conn = - build_conn() - |> assign(:user, admin) - |> assign(:token, token) - - {:ok, %{admin: admin, token: token, conn: conn}} - end - - describe "GET /api/pleroma/admin/instance_document/:name" do - test "return the instance document url", %{conn: conn} do - conn = get(conn, "/api/pleroma/admin/instance_document/instance-panel") - - assert content = html_response(conn, 200) - assert String.contains?(content, @default_instance_panel) - end - - test "it returns 403 if requested by a non-admin" do - non_admin_user = insert(:user) - token = insert(:oauth_token, user: non_admin_user) - - conn = - build_conn() - |> assign(:user, non_admin_user) - |> assign(:token, token) - |> get("/api/pleroma/admin/instance_document/instance-panel") - - assert json_response(conn, :forbidden) - end - - test "it returns 404 if the instance document with the given name doesn't exist", %{ - conn: conn - } do - conn = get(conn, "/api/pleroma/admin/instance_document/1234") - - assert json_response_and_validate_schema(conn, 404) - end - end - - describe "PATCH /api/pleroma/admin/instance_document/:name" do - test "uploads the instance document", %{conn: conn} do - image = %Plug.Upload{ - content_type: "text/html", - path: Path.absname("test/fixtures/custom_instance_panel.html"), - filename: "custom_instance_panel.html" - } - - conn = - conn - |> put_req_header("content-type", "multipart/form-data") - |> patch("/api/pleroma/admin/instance_document/instance-panel", %{ - "file" => image - }) - - assert %{"url" => url} = json_response_and_validate_schema(conn, 200) - index = get(build_conn(), url) - assert html_response(index, 200) == "<h2>Custom instance panel</h2>" - end - end - - describe "DELETE /api/pleroma/admin/instance_document/:name" do - test "deletes the instance document", %{conn: conn} do - File.mkdir!(@dir <> "/instance/") - File.write!(@dir <> "/instance/panel.html", "Custom instance panel") - - conn_resp = - conn - |> get("/api/pleroma/admin/instance_document/instance-panel") - - assert html_response(conn_resp, 200) == "Custom instance panel" - - conn - |> delete("/api/pleroma/admin/instance_document/instance-panel") - |> json_response_and_validate_schema(200) - - conn_resp = - conn - |> get("/api/pleroma/admin/instance_document/instance-panel") - - assert content = html_response(conn_resp, 200) - assert String.contains?(content, @default_instance_panel) - end - end -end From 8d218ebaf5ab0b72e419068340c40a5ef9744924 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov <alex.strizhakov@gmail.com> Date: Thu, 10 Sep 2020 10:54:57 +0300 Subject: [PATCH 073/362] Moving some background jobs into simple tasks - fetching activity data - attachment prefetching - using limiter to prevent overload --- lib/pleroma/application.ex | 6 +++++ lib/pleroma/web/activity_pub/activity_pub.ex | 4 +++- .../mrf/media_proxy_warming_policy.ex | 19 +++++++++++----- lib/pleroma/web/activity_pub/side_effects.ex | 5 +++-- lib/pleroma/web/rich_media/helpers.ex | 5 ----- lib/pleroma/workers/background_worker.ex | 15 ------------- .../20200915095704_remove_background_jobs.exs | 22 +++++++++++++++++++ .../config/deprecation_warnings_test.exs | 2 +- .../mrf/media_proxy_warming_policy_test.exs | 12 +++++----- .../controllers/status_controller_test.exs | 6 ++--- .../chat_message_reference_view_test.exs | 2 +- 11 files changed, 58 insertions(+), 40 deletions(-) create mode 100644 priv/repo/migrations/20200915095704_remove_background_jobs.exs diff --git a/lib/pleroma/application.ex b/lib/pleroma/application.ex index 7c4cd9626..769af1806 100644 --- a/lib/pleroma/application.ex +++ b/lib/pleroma/application.ex @@ -57,6 +57,7 @@ def start(_type, _args) do setup_instrumenters() load_custom_modules() Pleroma.Docs.JSON.compile() + limiters_setup() adapter = Application.get_env(:tesla, :adapter) @@ -273,4 +274,9 @@ defp http_children(Tesla.Adapter.Gun, _) do end defp http_children(_, _), do: [] + + def limiters_setup do + [Pleroma.Web.RichMedia.Helpers, Pleroma.Web.MediaProxy] + |> Enum.each(&ConcurrentLimiter.new(&1, 1, 0)) + end end diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index d8f685d38..6008f2f4a 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -123,7 +123,9 @@ def insert(map, local \\ true, fake \\ false, bypass_actor_check \\ false) when # Splice in the child object if we have one. activity = Maps.put_if_present(activity, :object, object) - BackgroundWorker.enqueue("fetch_data_for_activity", %{"activity_id" => activity.id}) + ConcurrentLimiter.limit(Pleroma.Web.RichMedia.Helpers, fn -> + Task.start(fn -> Pleroma.Web.RichMedia.Helpers.fetch_data_for_activity(activity) end) + end) {:ok, activity} else 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 0fb05d3c4..816cc89bf 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 @@ -8,7 +8,6 @@ defmodule Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy do alias Pleroma.HTTP alias Pleroma.Web.MediaProxy - alias Pleroma.Workers.BackgroundWorker require Logger @@ -17,7 +16,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy do recv_timeout: 10_000 ] - def perform(:prefetch, url) do + defp prefetch(url) do # Fetching only proxiable resources if MediaProxy.enabled?() and MediaProxy.url_proxiable?(url) do # If preview proxy is enabled, it'll also hit media proxy (so we're caching both requests) @@ -25,17 +24,25 @@ def perform(:prefetch, url) do Logger.debug("Prefetching #{inspect(url)} as #{inspect(prefetch_url)}") - HTTP.get(prefetch_url, [], @adapter_options) + if Pleroma.Config.get(:env) == :test do + fetch(prefetch_url) + else + ConcurrentLimiter.limit(MediaProxy, fn -> + Task.start(fn -> fetch(prefetch_url) end) + end) + end end end - def perform(:preload, %{"object" => %{"attachment" => attachments}} = _message) do + defp fetch(url), do: HTTP.get(url, [], @adapter_options) + + defp preload(%{"object" => %{"attachment" => attachments}} = _message) do Enum.each(attachments, fn %{"url" => url} when is_list(url) -> url |> Enum.each(fn %{"href" => href} -> - BackgroundWorker.enqueue("media_proxy_prefetch", %{"url" => href}) + prefetch(href) x -> Logger.debug("Unhandled attachment URL object #{inspect(x)}") @@ -51,7 +58,7 @@ def filter( %{"type" => "Create", "object" => %{"attachment" => attachments} = _object} = message ) when is_list(attachments) and length(attachments) > 0 do - BackgroundWorker.enqueue("media_proxy_preload", %{"message" => message}) + preload(message) {:ok, message} end diff --git a/lib/pleroma/web/activity_pub/side_effects.ex b/lib/pleroma/web/activity_pub/side_effects.ex index bbff35c36..4d8fb721e 100644 --- a/lib/pleroma/web/activity_pub/side_effects.ex +++ b/lib/pleroma/web/activity_pub/side_effects.ex @@ -24,7 +24,6 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do alias Pleroma.Web.ActivityPub.Utils alias Pleroma.Web.Push alias Pleroma.Web.Streamer - alias Pleroma.Workers.BackgroundWorker require Logger @@ -191,7 +190,9 @@ def handle(%{data: %{"type" => "Create"}} = activity, meta) do Object.increase_replies_count(in_reply_to) end - BackgroundWorker.enqueue("fetch_data_for_activity", %{"activity_id" => activity.id}) + ConcurrentLimiter.limit(Pleroma.Web.RichMedia.Helpers, fn -> + Task.start(fn -> Pleroma.Web.RichMedia.Helpers.fetch_data_for_activity(activity) end) + end) meta = meta diff --git a/lib/pleroma/web/rich_media/helpers.ex b/lib/pleroma/web/rich_media/helpers.ex index d67b594b5..442bf9995 100644 --- a/lib/pleroma/web/rich_media/helpers.ex +++ b/lib/pleroma/web/rich_media/helpers.ex @@ -78,11 +78,6 @@ def fetch_data_for_activity(%Activity{data: %{"type" => "Create"}} = activity) d def fetch_data_for_activity(_), do: %{} - def perform(:fetch, %Activity{} = activity) do - fetch_data_for_activity(activity) - :ok - end - def rich_media_get(url) do headers = [{"user-agent", Pleroma.Application.user_agent() <> "; Bot"}] diff --git a/lib/pleroma/workers/background_worker.ex b/lib/pleroma/workers/background_worker.ex index 55b5a13d9..0647c65ae 100644 --- a/lib/pleroma/workers/background_worker.ex +++ b/lib/pleroma/workers/background_worker.ex @@ -3,9 +3,7 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Workers.BackgroundWorker do - alias Pleroma.Activity alias Pleroma.User - alias Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy use Pleroma.Workers.WorkerHelper, queue: "background" @@ -32,19 +30,6 @@ def perform(%Job{args: %{"op" => op, "user_id" => user_id, "identifiers" => iden {:ok, User.Import.perform(String.to_atom(op), user, identifiers)} end - def perform(%Job{args: %{"op" => "media_proxy_preload", "message" => message}}) do - MediaProxyWarmingPolicy.perform(:preload, message) - end - - def perform(%Job{args: %{"op" => "media_proxy_prefetch", "url" => url}}) do - MediaProxyWarmingPolicy.perform(:prefetch, url) - end - - def perform(%Job{args: %{"op" => "fetch_data_for_activity", "activity_id" => activity_id}}) do - activity = Activity.get_by_id(activity_id) - Pleroma.Web.RichMedia.Helpers.perform(:fetch, activity) - end - def perform(%Job{ args: %{"op" => "move_following", "origin_id" => origin_id, "target_id" => target_id} }) do diff --git a/priv/repo/migrations/20200915095704_remove_background_jobs.exs b/priv/repo/migrations/20200915095704_remove_background_jobs.exs new file mode 100644 index 000000000..9785bfb8a --- /dev/null +++ b/priv/repo/migrations/20200915095704_remove_background_jobs.exs @@ -0,0 +1,22 @@ +defmodule Pleroma.Repo.Migrations.RemoveBackgroundJobs do + use Ecto.Migration + + import Ecto.Query, only: [from: 2] + + def up do + from(j in "oban_jobs", + where: + j.queue == ^"background" and + fragment("?->>'op'", j.args) in ^[ + "fetch_data_for_activity", + "media_proxy_prefetch", + "media_proxy_preload" + ] and + j.worker == ^"Pleroma.Workers.BackgroundWorker", + select: [:id] + ) + |> Pleroma.Repo.delete_all() + end + + def down, do: :ok +end diff --git a/test/pleroma/config/deprecation_warnings_test.exs b/test/pleroma/config/deprecation_warnings_test.exs index 0cfed4555..f52629f8a 100644 --- a/test/pleroma/config/deprecation_warnings_test.exs +++ b/test/pleroma/config/deprecation_warnings_test.exs @@ -12,7 +12,7 @@ defmodule Pleroma.Config.DeprecationWarningsTest do alias Pleroma.Config.DeprecationWarnings test "check_old_mrf_config/0" do - clear_config([:instance, :rewrite_policy], Pleroma.Web.ActivityPub.MRF.NoOpPolicy) + clear_config([:instance, :rewrite_policy], []) clear_config([:instance, :mrf_transparency], true) clear_config([:instance, :mrf_transparency_exclusions], []) diff --git a/test/pleroma/web/activity_pub/mrf/media_proxy_warming_policy_test.exs b/test/pleroma/web/activity_pub/mrf/media_proxy_warming_policy_test.exs index 1710c4d2a..84362ce78 100644 --- a/test/pleroma/web/activity_pub/mrf/media_proxy_warming_policy_test.exs +++ b/test/pleroma/web/activity_pub/mrf/media_proxy_warming_policy_test.exs @@ -3,10 +3,10 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicyTest do - use Pleroma.DataCase + use ExUnit.Case + use Pleroma.Tests.Helpers alias Pleroma.HTTP - alias Pleroma.Tests.ObanHelpers alias Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy import Mock @@ -25,13 +25,13 @@ defmodule Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicyTest do setup do: clear_config([:media_proxy, :enabled], true) test "it prefetches media proxy URIs" do + Tesla.Mock.mock(fn %{method: :get, url: "http://example.com/image.jpg"} -> + {:ok, %Tesla.Env{status: 200, body: ""}} + end) + with_mock HTTP, get: fn _, _, _ -> {:ok, []} end do MediaProxyWarmingPolicy.filter(@message) - ObanHelpers.perform_all() - # Performing jobs which has been just enqueued - ObanHelpers.perform_all() - assert called(HTTP.get(:_, :_, :_)) end end diff --git a/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs index 436608e51..252cae6a9 100644 --- a/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs @@ -328,7 +328,7 @@ test "fake statuses' preview card is not cached", %{conn: conn} do end test "posting a status with OGP link preview", %{conn: conn} do - Tesla.Mock.mock(fn env -> apply(HttpRequestMock, :request, [env]) end) + Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end) clear_config([:rich_media, :enabled], true) conn = @@ -1197,7 +1197,7 @@ test "on pin removes deletion job, on unpin reschedule deletion" do end test "returns rich-media card", %{conn: conn, user: user} do - Tesla.Mock.mock(fn env -> apply(HttpRequestMock, :request, [env]) end) + Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end) {:ok, activity} = CommonAPI.post(user, %{status: "https://example.com/ogp"}) @@ -1242,7 +1242,7 @@ test "returns rich-media card", %{conn: conn, user: user} do end test "replaces missing description with an empty string", %{conn: conn, user: user} do - Tesla.Mock.mock(fn env -> apply(HttpRequestMock, :request, [env]) end) + Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end) {:ok, activity} = CommonAPI.post(user, %{status: "https://example.com/ogp-missing-data"}) diff --git a/test/pleroma/web/pleroma_api/views/chat_message_reference_view_test.exs b/test/pleroma/web/pleroma_api/views/chat_message_reference_view_test.exs index ae8257870..93eef00a2 100644 --- a/test/pleroma/web/pleroma_api/views/chat_message_reference_view_test.exs +++ b/test/pleroma/web/pleroma_api/views/chat_message_reference_view_test.exs @@ -48,7 +48,7 @@ test "it displays a chat message" do clear_config([:rich_media, :enabled], true) - Tesla.Mock.mock(fn + Tesla.Mock.mock_global(fn %{url: "https://example.com/ogp"} -> %Tesla.Env{status: 200, body: File.read!("test/fixtures/rich_media/ogp.html")} end) From 0118ccb53cd1f33cb91b28fc7f5b6378f2424ffc Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn <egor@kislitsyn.com> Date: Wed, 11 Nov 2020 18:47:57 +0400 Subject: [PATCH 074/362] Add `local` visibility --- docs/API/differences_in_mastoapi_responses.md | 6 ++-- lib/pleroma/activity.ex | 10 ------ lib/pleroma/web/activity_pub/builder.ex | 2 +- lib/pleroma/web/activity_pub/pipeline.ex | 3 +- lib/pleroma/web/activity_pub/utils.ex | 2 +- lib/pleroma/web/activity_pub/visibility.ex | 11 ++++++ .../api_spec/operations/status_operation.ex | 4 --- .../web/api_spec/schemas/visibility_scope.ex | 2 +- lib/pleroma/web/common_api.ex | 2 +- lib/pleroma/web/common_api/utils.ex | 15 ++++---- .../web/mastodon_api/views/status_view.ex | 3 +- test/pleroma/web/common_api_test.exs | 34 +++++++++---------- .../controllers/status_controller_test.exs | 4 +-- .../mastodon_api/views/status_view_test.exs | 3 +- 14 files changed, 49 insertions(+), 52 deletions(-) diff --git a/docs/API/differences_in_mastoapi_responses.md b/docs/API/differences_in_mastoapi_responses.md index 1e932d908..c6d822bfc 100644 --- a/docs/API/differences_in_mastoapi_responses.md +++ b/docs/API/differences_in_mastoapi_responses.md @@ -14,7 +14,7 @@ Adding the parameter `reply_visibility` to the public and home timelines queries ## Statuses -- `visibility`: has an additional possible value `list` +- `visibility`: has additional possible values `list` and `local` (for local-only statuses) Has these additional fields under the `pleroma` object: @@ -28,7 +28,6 @@ Has these additional fields under the `pleroma` object: - `thread_muted`: true if the thread the post belongs to is muted - `emoji_reactions`: A list with emoji / reaction maps. The format is `{name: "☕", count: 1, me: true}`. Contains no information about the reacting users, for that use the `/statuses/:id/reactions` endpoint. - `parent_visible`: If the parent of this post is visible to the user or not. -- `local_only`: true for local-only, non-federated posts. ## Media Attachments @@ -152,10 +151,9 @@ Additional parameters can be added to the JSON body/Form data: - `preview`: boolean, if set to `true` the post won't be actually posted, but the status entitiy would still be rendered back. This could be useful for previewing rich text/custom emoji, for example. - `content_type`: string, contain the MIME type of the status, it is transformed into HTML by the backend. You can get the list of the supported MIME types with the nodeinfo endpoint. - `to`: A list of nicknames (like `lain@soykaf.club` or `lain` on the local server) that will be used to determine who is going to be addressed by this post. Using this will disable the implicit addressing by mentioned names in the `status` body, only the people in the `to` list will be addressed. The normal rules for for post visibility are not affected by this and will still apply. -- `visibility`: string, besides standard MastoAPI values (`direct`, `private`, `unlisted` or `public`) it can be used to address a List by setting it to `list:LIST_ID`. +- `visibility`: string, besides standard MastoAPI values (`direct`, `private`, `unlisted`, `local` or `public`) it can be used to address a List by setting it to `list:LIST_ID`. - `expires_in`: The number of seconds the posted activity should expire in. When a posted activity expires it will be deleted from the server, and a delete request for it will be federated. This needs to be longer than an hour. - `in_reply_to_conversation_id`: Will reply to a given conversation, addressing only the people who are part of the recipient set of that conversation. Sets the visibility to `direct`. -- `local_only`: boolean, if set to `true` the post won't be federated. ## GET `/api/v1/statuses` diff --git a/lib/pleroma/activity.ex b/lib/pleroma/activity.ex index 648cfb623..553834da0 100644 --- a/lib/pleroma/activity.ex +++ b/lib/pleroma/activity.ex @@ -19,8 +19,6 @@ defmodule Pleroma.Activity do import Ecto.Changeset import Ecto.Query - require Pleroma.Constants - @type t :: %__MODULE__{} @type actor :: String.t() @@ -358,12 +356,4 @@ def pinned_by_actor?(%Activity{} = activity) do actor = user_actor(activity) activity.id in actor.pinned_activities end - - def local_only?(activity) do - recipients = Enum.concat(activity.data["to"], Map.get(activity.data, "cc", [])) - public = Pleroma.Constants.as_public() - local = Pleroma.Constants.as_local_public() - - Enum.member?(recipients, local) and not Enum.member?(recipients, public) - end end diff --git a/lib/pleroma/web/activity_pub/builder.ex b/lib/pleroma/web/activity_pub/builder.ex index c9200a3f0..e99f6fd83 100644 --- a/lib/pleroma/web/activity_pub/builder.ex +++ b/lib/pleroma/web/activity_pub/builder.ex @@ -222,7 +222,7 @@ def announce(actor, object, options \\ []) do actor.ap_id == Relay.ap_id() -> [actor.follower_address] - public? and Pleroma.Activity.local_only?(object) -> + public? and Visibility.is_local_public?(object) -> [actor.follower_address, object.data["actor"], Pleroma.Constants.as_local_public()] public? -> diff --git a/lib/pleroma/web/activity_pub/pipeline.ex b/lib/pleroma/web/activity_pub/pipeline.ex index 559c8387e..98c32a42b 100644 --- a/lib/pleroma/web/activity_pub/pipeline.ex +++ b/lib/pleroma/web/activity_pub/pipeline.ex @@ -11,6 +11,7 @@ defmodule Pleroma.Web.ActivityPub.Pipeline do alias Pleroma.Web.ActivityPub.MRF alias Pleroma.Web.ActivityPub.ObjectValidator alias Pleroma.Web.ActivityPub.SideEffects + alias Pleroma.Web.ActivityPub.Visibility alias Pleroma.Web.Federator @spec common_pipeline(map(), keyword()) :: @@ -55,7 +56,7 @@ defp maybe_federate(%Activity{} = activity, meta) do with {:ok, local} <- Keyword.fetch(meta, :local) do do_not_federate = meta[:do_not_federate] || !Config.get([:instance, :federating]) - if !do_not_federate and local and not Activity.local_only?(activity) do + if !do_not_federate and local and not Visibility.is_local_public?(activity) do activity = if object = Keyword.get(meta, :object_data) do %{activity | data: Map.put(activity.data, "object", object)} diff --git a/lib/pleroma/web/activity_pub/utils.ex b/lib/pleroma/web/activity_pub/utils.ex index faf3bea00..46002bec2 100644 --- a/lib/pleroma/web/activity_pub/utils.ex +++ b/lib/pleroma/web/activity_pub/utils.ex @@ -176,7 +176,7 @@ def maybe_federate(%Activity{local: true, data: %{"type" => type}} = activity) d with true <- Config.get!([:instance, :federating]), true <- type != "Block" || outgoing_blocks, - false <- Activity.local_only?(activity) do + false <- Visibility.is_local_public?(activity) do Pleroma.Web.Federator.publish(activity) end diff --git a/lib/pleroma/web/activity_pub/visibility.ex b/lib/pleroma/web/activity_pub/visibility.ex index b3b23a38b..2cb5a2bd0 100644 --- a/lib/pleroma/web/activity_pub/visibility.ex +++ b/lib/pleroma/web/activity_pub/visibility.ex @@ -23,6 +23,14 @@ def is_public?(data) do Utils.label_in_message?(Pleroma.Constants.as_local_public(), data) end + def is_local_public?(%Object{data: data}), do: is_local_public?(data) + def is_local_public?(%Activity{data: data}), do: is_local_public?(data) + + def is_local_public?(data) do + Utils.label_in_message?(Pleroma.Constants.as_local_public(), data) and + not Utils.label_in_message?(Pleroma.Constants.as_public(), data) + end + def is_private?(activity) do with false <- is_public?(activity), %User{follower_address: follower_address} <- @@ -118,6 +126,9 @@ def get_visibility(object) do Pleroma.Constants.as_public() in cc -> "unlisted" + Pleroma.Constants.as_local_public() in to -> + "local" + # this should use the sql for the object's activity Enum.any?(to, &String.contains?(&1, "/followers")) -> "private" diff --git a/lib/pleroma/web/api_spec/operations/status_operation.ex b/lib/pleroma/web/api_spec/operations/status_operation.ex index e989e4f5f..d7ebde6f6 100644 --- a/lib/pleroma/web/api_spec/operations/status_operation.ex +++ b/lib/pleroma/web/api_spec/operations/status_operation.ex @@ -475,10 +475,6 @@ defp create_request do type: :string, description: "Will reply to a given conversation, addressing only the people who are part of the recipient set of that conversation. Sets the visibility to `direct`." - }, - local_only: %Schema{ - type: :boolean, - description: "Post the status as local only" } }, example: %{ diff --git a/lib/pleroma/web/api_spec/schemas/visibility_scope.ex b/lib/pleroma/web/api_spec/schemas/visibility_scope.ex index 831734e27..633269a92 100644 --- a/lib/pleroma/web/api_spec/schemas/visibility_scope.ex +++ b/lib/pleroma/web/api_spec/schemas/visibility_scope.ex @@ -9,6 +9,6 @@ defmodule Pleroma.Web.ApiSpec.Schemas.VisibilityScope do title: "VisibilityScope", description: "Status visibility", type: :string, - enum: ["public", "unlisted", "private", "direct", "list"] + enum: ["public", "unlisted", "local", "private", "direct", "list"] }) end diff --git a/lib/pleroma/web/common_api.ex b/lib/pleroma/web/common_api.ex index 4df37b695..31d9ea677 100644 --- a/lib/pleroma/web/common_api.ex +++ b/lib/pleroma/web/common_api.ex @@ -359,7 +359,7 @@ def public_announce?(object, _) do def get_visibility(_, _, %Participation{}), do: {"direct", "direct"} def get_visibility(%{visibility: visibility}, in_reply_to, _) - when visibility in ~w{public unlisted private direct}, + when visibility in ~w{public local unlisted private direct}, do: {visibility, get_replied_to_visibility(in_reply_to)} def get_visibility(%{visibility: "list:" <> list_id}, in_reply_to, _) do diff --git a/lib/pleroma/web/common_api/utils.ex b/lib/pleroma/web/common_api/utils.ex index abf6c40d5..ae133b54f 100644 --- a/lib/pleroma/web/common_api/utils.ex +++ b/lib/pleroma/web/common_api/utils.ex @@ -65,8 +65,14 @@ def get_to_and_cc(%{in_reply_to_conversation: %Participation{} = participation}) {Enum.map(participation.recipients, & &1.ap_id), []} end - def get_to_and_cc(%{visibility: "public"} = draft) do - to = [public_uri(draft) | draft.mentions] + def get_to_and_cc(%{visibility: visibility} = draft) when visibility in ["public", "local"] do + + to = + case visibility do + "public" -> [Pleroma.Constants.as_public() | draft.mentions] + "local" -> [Pleroma.Constants.as_local_public() | draft.mentions] + end + cc = [draft.user.follower_address] if draft.in_reply_to do @@ -78,7 +84,7 @@ def get_to_and_cc(%{visibility: "public"} = draft) do def get_to_and_cc(%{visibility: "unlisted"} = draft) do to = [draft.user.follower_address | draft.mentions] - cc = [public_uri(draft)] + cc = [Pleroma.Constants.as_public()] if draft.in_reply_to do {Enum.uniq([draft.in_reply_to.data["actor"] | to]), cc} @@ -103,9 +109,6 @@ def get_to_and_cc(%{visibility: "direct"} = draft) do def get_to_and_cc(%{visibility: {:list, _}, mentions: mentions}), do: {mentions, []} - defp public_uri(%{params: %{local_only: true}}), do: Pleroma.Constants.as_local_public() - defp public_uri(_), do: Pleroma.Constants.as_public() - def get_addressed_users(_, to) when is_list(to) do User.get_ap_ids_by_nicknames(to) end diff --git a/lib/pleroma/web/mastodon_api/views/status_view.ex b/lib/pleroma/web/mastodon_api/views/status_view.ex index 0fc78972e..435bcde15 100644 --- a/lib/pleroma/web/mastodon_api/views/status_view.ex +++ b/lib/pleroma/web/mastodon_api/views/status_view.ex @@ -368,8 +368,7 @@ def render("show.json", %{activity: %{data: %{"object" => _object}} = activity} direct_conversation_id: direct_conversation_id, thread_muted: thread_muted?, emoji_reactions: emoji_reactions, - parent_visible: visible_for_user?(reply_to, opts[:for]), - local_only: Activity.local_only?(activity) + parent_visible: visible_for_user?(reply_to, opts[:for]) } } end diff --git a/test/pleroma/web/common_api_test.exs b/test/pleroma/web/common_api_test.exs index e1dddd21a..598ff87de 100644 --- a/test/pleroma/web/common_api_test.exs +++ b/test/pleroma/web/common_api_test.exs @@ -1256,16 +1256,16 @@ test "fallback" do end end - describe "with `local_only` enabled" do + describe "with `local` visibility" do setup do: clear_config([:instance, :federating], true) test "post" do user = insert(:user) with_mock Pleroma.Web.Federator, publish: fn _ -> :ok end do - {:ok, activity} = CommonAPI.post(user, %{status: "#2hu #2HU", local_only: true}) + {:ok, activity} = CommonAPI.post(user, %{status: "#2hu #2HU", visibility: "local"}) - assert Activity.local_only?(activity) + assert Visibility.is_local_public?(activity) assert_not_called(Pleroma.Web.Federator.publish(activity)) end end @@ -1274,13 +1274,13 @@ test "delete" do user = insert(:user) {:ok, %Activity{id: activity_id}} = - CommonAPI.post(user, %{status: "#2hu #2HU", local_only: true}) + CommonAPI.post(user, %{status: "#2hu #2HU", visibility: "local"}) with_mock Pleroma.Web.Federator, publish: fn _ -> :ok end do assert {:ok, %Activity{data: %{"deleted_activity_id" => ^activity_id}} = activity} = CommonAPI.delete(activity_id, user) - assert Activity.local_only?(activity) + assert Visibility.is_local_public?(activity) assert_not_called(Pleroma.Web.Federator.publish(activity)) end end @@ -1290,13 +1290,13 @@ test "repeat" do other_user = insert(:user) {:ok, %Activity{id: activity_id}} = - CommonAPI.post(other_user, %{status: "cofe", local_only: true}) + CommonAPI.post(other_user, %{status: "cofe", visibility: "local"}) with_mock Pleroma.Web.Federator, publish: fn _ -> :ok end do assert {:ok, %Activity{data: %{"type" => "Announce"}} = activity} = CommonAPI.repeat(activity_id, user) - assert Activity.local_only?(activity) + assert Visibility.is_local_public?(activity) refute called(Pleroma.Web.Federator.publish(activity)) end end @@ -1306,7 +1306,7 @@ test "unrepeat" do other_user = insert(:user) {:ok, %Activity{id: activity_id}} = - CommonAPI.post(other_user, %{status: "cofe", local_only: true}) + CommonAPI.post(other_user, %{status: "cofe", visibility: "local"}) assert {:ok, _} = CommonAPI.repeat(activity_id, user) @@ -1314,7 +1314,7 @@ test "unrepeat" do assert {:ok, %Activity{data: %{"type" => "Undo"}} = activity} = CommonAPI.unrepeat(activity_id, user) - assert Activity.local_only?(activity) + assert Visibility.is_local_public?(activity) refute called(Pleroma.Web.Federator.publish(activity)) end end @@ -1323,13 +1323,13 @@ test "favorite" do user = insert(:user) other_user = insert(:user) - {:ok, activity} = CommonAPI.post(other_user, %{status: "cofe", local_only: true}) + {:ok, activity} = CommonAPI.post(other_user, %{status: "cofe", visibility: "local"}) with_mock Pleroma.Web.Federator, publish: fn _ -> :ok end do assert {:ok, %Activity{data: %{"type" => "Like"}} = activity} = CommonAPI.favorite(user, activity.id) - assert Activity.local_only?(activity) + assert Visibility.is_local_public?(activity) refute called(Pleroma.Web.Federator.publish(activity)) end end @@ -1338,13 +1338,13 @@ test "unfavorite" do user = insert(:user) other_user = insert(:user) - {:ok, activity} = CommonAPI.post(other_user, %{status: "cofe", local_only: true}) + {:ok, activity} = CommonAPI.post(other_user, %{status: "cofe", visibility: "local"}) {:ok, %Activity{}} = CommonAPI.favorite(user, activity.id) with_mock Pleroma.Web.Federator, publish: fn _ -> :ok end do assert {:ok, activity} = CommonAPI.unfavorite(activity.id, user) - assert Activity.local_only?(activity) + assert Visibility.is_local_public?(activity) refute called(Pleroma.Web.Federator.publish(activity)) end end @@ -1352,13 +1352,13 @@ test "unfavorite" do test "react_with_emoji" do user = insert(:user) other_user = insert(:user) - {:ok, activity} = CommonAPI.post(other_user, %{status: "cofe", local_only: true}) + {:ok, activity} = CommonAPI.post(other_user, %{status: "cofe", visibility: "local"}) with_mock Pleroma.Web.Federator, publish: fn _ -> :ok end do assert {:ok, %Activity{data: %{"type" => "EmojiReact"}} = activity} = CommonAPI.react_with_emoji(activity.id, user, "👍") - assert Activity.local_only?(activity) + assert Visibility.is_local_public?(activity) refute called(Pleroma.Web.Federator.publish(activity)) end end @@ -1366,7 +1366,7 @@ test "react_with_emoji" do test "unreact_with_emoji" do user = insert(:user) other_user = insert(:user) - {:ok, activity} = CommonAPI.post(other_user, %{status: "cofe", local_only: true}) + {:ok, activity} = CommonAPI.post(other_user, %{status: "cofe", visibility: "local"}) {:ok, _reaction} = CommonAPI.react_with_emoji(activity.id, user, "👍") @@ -1374,7 +1374,7 @@ test "unreact_with_emoji" do assert {:ok, %Activity{data: %{"type" => "Undo"}} = activity} = CommonAPI.unreact_with_emoji(activity.id, user, "👍") - assert Activity.local_only?(activity) + assert Visibility.is_local_public?(activity) refute called(Pleroma.Web.Federator.publish(activity)) end end diff --git a/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs index ddddd0ea0..d95200f99 100644 --- a/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs @@ -1749,12 +1749,12 @@ test "posting a local only status" do |> put_req_header("content-type", "application/json") |> post("/api/v1/statuses", %{ "status" => "cofe", - "local_only" => "true" + "visibility" => "local" }) local = Pleroma.Constants.as_local_public() - assert %{"content" => "cofe", "id" => id, "pleroma" => %{"local_only" => true}} = + assert %{"content" => "cofe", "id" => id, "visibility" => "local"} = json_response(conn_one, 200) assert %Activity{id: ^id, data: %{"to" => [^local]}} = Activity.get_by_id(id) diff --git a/test/pleroma/web/mastodon_api/views/status_view_test.exs b/test/pleroma/web/mastodon_api/views/status_view_test.exs index 03b0cdf15..70d829979 100644 --- a/test/pleroma/web/mastodon_api/views/status_view_test.exs +++ b/test/pleroma/web/mastodon_api/views/status_view_test.exs @@ -245,8 +245,7 @@ test "a note activity" do direct_conversation_id: nil, thread_muted: false, emoji_reactions: [], - parent_visible: false, - local_only: false + parent_visible: false } } From af3f00292c6cb37580a6bf93d7e779316bc44c6a Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn <egor@kislitsyn.com> Date: Wed, 11 Nov 2020 19:12:46 +0400 Subject: [PATCH 075/362] Fix formatting --- CHANGELOG.md | 1 - lib/pleroma/web/common_api/utils.ex | 1 - 2 files changed, 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b7ca47949..49c0ffdb1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,7 +18,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Account backup - Configuration: Add `:instance, autofollowing_nicknames` setting to provide a way to make accounts automatically follow new users that register on the local Pleroma instance. - ### Changed - **Breaking** Requires `libmagic` (or `file`) to guess file types. diff --git a/lib/pleroma/web/common_api/utils.ex b/lib/pleroma/web/common_api/utils.ex index ae133b54f..1c74ea787 100644 --- a/lib/pleroma/web/common_api/utils.ex +++ b/lib/pleroma/web/common_api/utils.ex @@ -66,7 +66,6 @@ def get_to_and_cc(%{in_reply_to_conversation: %Participation{} = participation}) end def get_to_and_cc(%{visibility: visibility} = draft) when visibility in ["public", "local"] do - to = case visibility do "public" -> [Pleroma.Constants.as_public() | draft.mentions] From 8da9f919f82ac45c4519910a7e24cac2b797061f Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov <alex.strizhakov@gmail.com> Date: Wed, 11 Nov 2020 18:49:15 +0300 Subject: [PATCH 076/362] little changes for MRF config descriptions - log level reduction, if policy doesn't implement config_description method - docs in dev.md --- docs/dev.md | 23 +++++++++++++++++++++++ lib/pleroma/web/activity_pub/mrf.ex | 2 +- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/docs/dev.md b/docs/dev.md index 22e0691f1..aa89a941f 100644 --- a/docs/dev.md +++ b/docs/dev.md @@ -21,3 +21,26 @@ This document contains notes and guidelines for Pleroma developers. ## Auth-related configuration, OAuth consumer mode etc. See `Authentication` section of [the configuration cheatsheet](configuration/cheatsheet.md#authentication). + +## MRF policies descriptions + +If MRF policy depends on config, it can be added into MRF tab to adminFE by adding `config_description/0` method, which returns map with special structure. + +Example: + +```elixir +%{ + key: :mrf_activity_expiration, + related_policy: "Pleroma.Web.ActivityPub.MRF.ActivityExpirationPolicy", + label: "MRF Activity Expiration Policy", + description: "Adds automatic expiration to all local activities", + children: [ + %{ + key: :days, + type: :integer, + description: "Default global expiration time for all local activities (in days)", + suggestions: [90, 365] + } + ] + } +``` diff --git a/lib/pleroma/web/activity_pub/mrf.ex b/lib/pleroma/web/activity_pub/mrf.ex index ce125a696..6e73b2f22 100644 --- a/lib/pleroma/web/activity_pub/mrf.ex +++ b/lib/pleroma/web/activity_pub/mrf.ex @@ -164,7 +164,7 @@ def config_descriptions(policies) do acc end else - Logger.info( + Logger.debug( "#{policy} is excluded from config descriptions, because does not implement `config_description/0` method." ) From 631def2df228ceb0ec8921c63b90867758e0c308 Mon Sep 17 00:00:00 2001 From: lain <lain@soykaf.club> Date: Wed, 11 Nov 2020 17:10:59 +0100 Subject: [PATCH 077/362] RedirectController: Don't replace title, but inject into the meta --- lib/pleroma/web/fallback/redirect_controller.ex | 6 ++---- test/pleroma/web/fallback_test.exs | 16 +++++++++++++++- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/lib/pleroma/web/fallback/redirect_controller.ex b/lib/pleroma/web/fallback/redirect_controller.ex index 712991c18..1ac1319f8 100644 --- a/lib/pleroma/web/fallback/redirect_controller.ex +++ b/lib/pleroma/web/fallback/redirect_controller.ex @@ -41,8 +41,7 @@ def redirector_with_meta(conn, params) do response = index_content - |> String.replace(~r/<title>.+?<\/title>/, title) - |> String.replace("<!--server-generated-meta-->", tags <> preloads) + |> String.replace("<!--server-generated-meta-->", tags <> preloads <> title) conn |> put_resp_content_type("text/html") @@ -60,8 +59,7 @@ def redirector_with_preload(conn, params) do response = index_content - |> String.replace(~r/<title>.+?<\/title>/, title) - |> String.replace("<!--server-generated-meta-->", preloads) + |> String.replace("<!--server-generated-meta-->", preloads <> title) conn |> put_resp_content_type("text/html") diff --git a/test/pleroma/web/fallback_test.exs b/test/pleroma/web/fallback_test.exs index a65865860..46c7bad1c 100644 --- a/test/pleroma/web/fallback_test.exs +++ b/test/pleroma/web/fallback_test.exs @@ -20,15 +20,26 @@ test "GET /*path", %{conn: conn} do end end + test "GET /*path adds a title", %{conn: conn} do + clear_config([:instance, :name], "a cool title") + + assert conn + |> get("/") + |> html_response(200) =~ "<title>a cool title" + end + describe "preloaded data and metadata attached to" do test "GET /:maybe_nickname_or_id", %{conn: conn} do + clear_config([:instance, :name], "a cool title") + user = insert(:user) user_missing = get(conn, "/foo") user_present = get(conn, "/#{user.nickname}") - assert(html_response(user_missing, 200) =~ "") + assert html_response(user_missing, 200) =~ "" refute html_response(user_present, 200) =~ "" assert html_response(user_present, 200) =~ "initial-results" + assert html_response(user_present, 200) =~ "a cool title" end test "GET /*path", %{conn: conn} do @@ -44,10 +55,13 @@ test "GET /*path", %{conn: conn} do describe "preloaded data is attached to" do test "GET /main/public", %{conn: conn} do + clear_config([:instance, :name], "a cool title") + public_page = get(conn, "/main/public") refute html_response(public_page, 200) =~ "" assert html_response(public_page, 200) =~ "initial-results" + assert html_response(public_page, 200) =~ "a cool title" end test "GET /main/all", %{conn: conn} do From 435bf1f9450954eab5f753a983dee202aa11bac1 Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Wed, 11 Nov 2020 20:12:35 +0400 Subject: [PATCH 078/362] Remove FrontendInstallerWorker --- config/config.exs | 2 -- .../controllers/frontend_controller.ex | 3 +-- .../workers/frontend_installer_worker.ex | 21 ------------------ .../controllers/frontend_controller_test.exs | 22 ------------------- 4 files changed, 1 insertion(+), 47 deletions(-) delete mode 100644 lib/pleroma/workers/frontend_installer_worker.ex diff --git a/config/config.exs b/config/config.exs index 1d09a0238..0b8a75aad 100644 --- a/config/config.exs +++ b/config/config.exs @@ -563,9 +563,7 @@ remote_fetcher: 2, attachments_cleanup: 5, new_users_digest: 1, - frontend_installer: 1, mute_expire: 5 - ], plugins: [Oban.Plugins.Pruner], crontab: [ diff --git a/lib/pleroma/web/admin_api/controllers/frontend_controller.ex b/lib/pleroma/web/admin_api/controllers/frontend_controller.ex index 59c69aba1..4518bed5a 100644 --- a/lib/pleroma/web/admin_api/controllers/frontend_controller.ex +++ b/lib/pleroma/web/admin_api/controllers/frontend_controller.ex @@ -7,7 +7,6 @@ defmodule Pleroma.Web.AdminAPI.FrontendController do alias Pleroma.Config alias Pleroma.Web.Plugs.OAuthScopesPlug - alias Pleroma.Workers.FrontendInstallerWorker plug(Pleroma.Web.ApiSpec.CastAndValidate) plug(OAuthScopesPlug, %{scopes: ["write"], admin: true} when action == :install) @@ -30,7 +29,7 @@ def index(conn, _params) do end def install(%{body_params: params} = conn, _params) do - FrontendInstallerWorker.install(params.name, Map.delete(params, :name)) + Pleroma.Frontend.install(params.name, Map.delete(params, :name)) index(conn, %{}) end diff --git a/lib/pleroma/workers/frontend_installer_worker.ex b/lib/pleroma/workers/frontend_installer_worker.ex deleted file mode 100644 index 38688c63b..000000000 --- a/lib/pleroma/workers/frontend_installer_worker.ex +++ /dev/null @@ -1,21 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Workers.FrontendInstallerWorker do - use Oban.Worker, queue: :frontend_installer, max_attempts: 1 - - alias Oban.Job - alias Pleroma.Frontend - - def install(name, opts \\ []) do - %{"name" => name, "opts" => Map.new(opts)} - |> new() - |> Oban.insert() - end - - def perform(%Job{args: %{"name" => name, "opts" => opts}}) do - opts = Keyword.new(opts, fn {key, value} -> {String.to_existing_atom(key), value} end) - Frontend.install(name, opts) - end -end diff --git a/test/pleroma/web/admin_api/controllers/frontend_controller_test.exs b/test/pleroma/web/admin_api/controllers/frontend_controller_test.exs index afe82ddf5..1d4fbfa03 100644 --- a/test/pleroma/web/admin_api/controllers/frontend_controller_test.exs +++ b/test/pleroma/web/admin_api/controllers/frontend_controller_test.exs @@ -4,13 +4,10 @@ defmodule Pleroma.Web.AdminAPI.FrontendControllerTest do use Pleroma.Web.ConnCase - use Oban.Testing, repo: Pleroma.Repo import Pleroma.Factory alias Pleroma.Config - alias Pleroma.Tests.ObanHelpers - alias Pleroma.Workers.FrontendInstallerWorker @dir "test/frontend_static_test" @@ -66,13 +63,6 @@ test "from available frontends", %{conn: conn} do |> post("/api/pleroma/admin/frontends", %{name: "pleroma"}) |> json_response_and_validate_schema(:ok) - assert_enqueued( - worker: FrontendInstallerWorker, - args: %{"name" => "pleroma", "opts" => %{}} - ) - - ObanHelpers.perform(all_enqueued(worker: FrontendInstallerWorker)) - assert File.exists?(Path.join([@dir, "frontends", "pleroma", "fantasy", "test.txt"])) response = @@ -108,16 +98,6 @@ test "from a file", %{conn: conn} do }) |> json_response_and_validate_schema(:ok) - assert_enqueued( - worker: FrontendInstallerWorker, - args: %{ - "name" => "pleroma", - "opts" => %{"file" => "test/fixtures/tesla_mock/frontend.zip"} - } - ) - - ObanHelpers.perform(all_enqueued(worker: FrontendInstallerWorker)) - assert File.exists?(Path.join([@dir, "frontends", "pleroma", "fantasy", "test.txt"])) end @@ -136,8 +116,6 @@ test "from an URL", %{conn: conn} do }) |> json_response_and_validate_schema(:ok) - ObanHelpers.perform(all_enqueued(worker: FrontendInstallerWorker)) - assert File.exists?(Path.join([@dir, "frontends", "unknown", "baka", "test.txt"])) end end From 25bd64b03ac78857dc4d560be0c75ea096080c33 Mon Sep 17 00:00:00 2001 From: lain Date: Wed, 11 Nov 2020 17:17:41 +0100 Subject: [PATCH 079/362] Bundled FE: Remove title tag --- priv/static/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/priv/static/index.html b/priv/static/index.html index f5690a8d6..e848c5f8c 100644 --- a/priv/static/index.html +++ b/priv/static/index.html @@ -1 +1 @@ -Pleroma
\ No newline at end of file +
From b0e4e0cf2a151900d29da56424f596f3defa23e3 Mon Sep 17 00:00:00 2001 From: lain Date: Wed, 11 Nov 2020 17:19:09 +0100 Subject: [PATCH 080/362] Changelog: Add info about title injection --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b15ddb943..b619bd891 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Account backup - Configuration: Add `:instance, autofollowing_nicknames` setting to provide a way to make accounts automatically follow new users that register on the local Pleroma instance. - Ability to view remote timelines, with ex. `/api/v1/timelines/public?instance=lain.com` and streams `public:remote` and `public:remote:media` +- The site title is now injected as a `title` tag like preloads or metadata. ### Changed From d26a4493960cc9d99183dfcd18464040213ac91e Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Wed, 11 Nov 2020 20:39:57 +0400 Subject: [PATCH 081/362] Change endpoint path --- docs/API/admin_api.md | 3 +-- lib/pleroma/web/router.ex | 2 +- .../admin_api/controllers/frontend_controller_test.exs | 8 ++++---- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/docs/API/admin_api.md b/docs/API/admin_api.md index cbf4b9134..e18d5e513 100644 --- a/docs/API/admin_api.md +++ b/docs/API/admin_api.md @@ -1525,8 +1525,7 @@ Returns the content of the document ] ``` - -## `POST /api/pleroma/admin/frontends +## `POST /api/pleroma/admin/frontends/install ### Install a frontend diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index f497a96b7..75a885377 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -245,7 +245,7 @@ defmodule Pleroma.Web.Router do delete("/chats/:id/messages/:message_id", ChatController, :delete_message) get("/frontends", FrontendController, :index) - post("/frontends", FrontendController, :install) + post("/frontends/install", FrontendController, :install) post("/backups", AdminAPIController, :create_backup) end diff --git a/test/pleroma/web/admin_api/controllers/frontend_controller_test.exs b/test/pleroma/web/admin_api/controllers/frontend_controller_test.exs index 1d4fbfa03..db28a27b6 100644 --- a/test/pleroma/web/admin_api/controllers/frontend_controller_test.exs +++ b/test/pleroma/web/admin_api/controllers/frontend_controller_test.exs @@ -44,7 +44,7 @@ test "it lists available frontends", %{conn: conn} do end end - describe "POST /api/pleroma/admin/frontends" do + describe "POST /api/pleroma/admin/frontends/install" do test "from available frontends", %{conn: conn} do clear_config([:frontends, :available], %{ "pleroma" => %{ @@ -60,7 +60,7 @@ test "from available frontends", %{conn: conn} do conn |> put_req_header("content-type", "application/json") - |> post("/api/pleroma/admin/frontends", %{name: "pleroma"}) + |> post("/api/pleroma/admin/frontends/install", %{name: "pleroma"}) |> json_response_and_validate_schema(:ok) assert File.exists?(Path.join([@dir, "frontends", "pleroma", "fantasy", "test.txt"])) @@ -92,7 +92,7 @@ test "from a file", %{conn: conn} do conn |> put_req_header("content-type", "application/json") - |> post("/api/pleroma/admin/frontends", %{ + |> post("/api/pleroma/admin/frontends/install", %{ name: "pleroma", file: "test/fixtures/tesla_mock/frontend.zip" }) @@ -108,7 +108,7 @@ test "from an URL", %{conn: conn} do conn |> put_req_header("content-type", "application/json") - |> post("/api/pleroma/admin/frontends", %{ + |> post("/api/pleroma/admin/frontends/install", %{ name: "unknown", ref: "baka", build_url: "http://gensokyo.2hu/madeup.zip", From 81145ecdf52c74147c842ab6c099abf5e1ad1eff Mon Sep 17 00:00:00 2001 From: Egor Kislitsyn Date: Wed, 11 Nov 2020 20:42:05 +0400 Subject: [PATCH 082/362] Fix markdown --- docs/API/admin_api.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/API/admin_api.md b/docs/API/admin_api.md index e18d5e513..4c72d3d61 100644 --- a/docs/API/admin_api.md +++ b/docs/API/admin_api.md @@ -1525,7 +1525,7 @@ Returns the content of the document ] ``` -## `POST /api/pleroma/admin/frontends/install +## `POST /api/pleroma/admin/frontends/install` ### Install a frontend From 6fd72e9e8526680836e1bf34c58e10b66dcfee8c Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Wed, 11 Nov 2020 12:27:51 -0600 Subject: [PATCH 083/362] Ingest blurhash for attachments if they were federated --- .../activity_pub/object_validators/attachment_validator.ex | 3 ++- .../object_validators/attachment_validator_test.exs | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) 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 df102a134..f96fd54bf 100644 --- a/lib/pleroma/web/activity_pub/object_validators/attachment_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/attachment_validator.ex @@ -15,6 +15,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.AttachmentValidator do field(:type, :string) field(:mediaType, :string, default: "application/octet-stream") field(:name, :string) + field(:blurhash, :string) embeds_many :url, UrlObjectValidator, primary_key: false do field(:type, :string) @@ -41,7 +42,7 @@ def changeset(struct, data) do |> fix_url() struct - |> cast(data, [:type, :mediaType, :name]) + |> cast(data, [:type, :mediaType, :name, :blurhash]) |> cast_embed(:url, with: &url_changeset/2) |> validate_inclusion(:type, ~w[Link Document Audio Image Video]) |> validate_required([:type, :mediaType, :url]) diff --git a/test/pleroma/web/activity_pub/object_validators/attachment_validator_test.exs b/test/pleroma/web/activity_pub/object_validators/attachment_validator_test.exs index 760388e80..2e1975a79 100644 --- a/test/pleroma/web/activity_pub/object_validators/attachment_validator_test.exs +++ b/test/pleroma/web/activity_pub/object_validators/attachment_validator_test.exs @@ -33,7 +33,8 @@ test "it turns mastodon attachments into our attachments" do "http://mastodon.example.org/system/media_attachments/files/000/000/002/original/334ce029e7bfb920.jpg", "type" => "Document", "name" => nil, - "mediaType" => "image/jpeg" + "mediaType" => "image/jpeg", + "blurhash" => "UD9jJz~VSbR#xT$~%KtQX9R,WAs9RjWBs:of" } {:ok, attachment} = @@ -50,6 +51,7 @@ test "it turns mastodon attachments into our attachments" do ] = attachment.url assert attachment.mediaType == "image/jpeg" + assert attachment.blurhash == "UD9jJz~VSbR#xT$~%KtQX9R,WAs9RjWBs:of" end test "it handles our own uploads" do From 2254e5e5958803beef94e2d01bdb04647a1f82c9 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Wed, 11 Nov 2020 12:51:13 -0600 Subject: [PATCH 084/362] Render blurhashes in Mastodon API --- lib/pleroma/web/mastodon_api/views/status_view.ex | 3 ++- test/pleroma/web/mastodon_api/views/status_view_test.exs | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/web/mastodon_api/views/status_view.ex b/lib/pleroma/web/mastodon_api/views/status_view.ex index 435bcde15..7cbbd3750 100644 --- a/lib/pleroma/web/mastodon_api/views/status_view.ex +++ b/lib/pleroma/web/mastodon_api/views/status_view.ex @@ -435,7 +435,8 @@ def render("attachment.json", %{attachment: attachment}) do text_url: href, type: type, description: attachment["name"], - pleroma: %{mime_type: media_type} + pleroma: %{mime_type: media_type}, + blurhash: attachment["blurhash"] } end diff --git a/test/pleroma/web/mastodon_api/views/status_view_test.exs b/test/pleroma/web/mastodon_api/views/status_view_test.exs index 70d829979..665199f97 100644 --- a/test/pleroma/web/mastodon_api/views/status_view_test.exs +++ b/test/pleroma/web/mastodon_api/views/status_view_test.exs @@ -420,6 +420,7 @@ test "attachments" do "href" => "someurl" } ], + "blurhash" => "UJJ8X[xYW,%Jtq%NNFbXB5j]IVM|9GV=WHRn", "uuid" => 6 } @@ -431,7 +432,8 @@ test "attachments" do preview_url: "someurl", text_url: "someurl", description: nil, - pleroma: %{mime_type: "image/png"} + pleroma: %{mime_type: "image/png"}, + blurhash: "UJJ8X[xYW,%Jtq%NNFbXB5j]IVM|9GV=WHRn" } api_spec = Pleroma.Web.ApiSpec.spec() From 2156de2feef373eecdf8e16f21ac7c4b1ee99995 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Wed, 11 Nov 2020 13:39:02 -0600 Subject: [PATCH 085/362] Ingest blurhash field during transmogrification --- lib/pleroma/web/activity_pub/transmogrifier.ex | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index 39c8f7e39..0bcd1db22 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -252,6 +252,7 @@ def fix_attachments(%{"attachment" => attachment} = object) when is_list(attachm } |> Maps.put_if_present("mediaType", media_type) |> Maps.put_if_present("name", data["name"]) + |> Maps.put_if_present("blurhash", data["blurhash"]) else nil end From 99edfba3da2a8cd174a46005192cad1f97602287 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Wed, 11 Nov 2020 23:12:52 +0300 Subject: [PATCH 086/362] Polish the changelog a bit and specify release date --- CHANGELOG.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 034456261..051050a94 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). -## [2.2.0] - 2020-11-?? +## [2.2.0] - 2020-11-12 ### Security - Fixed the possibility of using file uploads to spoof posts. @@ -14,7 +14,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - **Breaking:** App metrics endpoint (`/api/pleroma/app_metrics`) is disabled by default, check `docs/API/prometheus.md` on enabling and configuring. - **Breaking:** Pleroma Admin API: emoji packs and files routes changed. - **Breaking:** Sensitive/NSFW statuses no longer disable link previews. -- API: Empty parameter values for integer parameters are now ignored in non-strict validaton mode. - Search: Users are now findable by their urls. - Renamed `:await_up_timeout` in `:connections_pool` namespace to `:connect_timeout`, old name is deprecated. - Renamed `:timeout` in `pools` namespace to `:recv_timeout`, old name is deprecated. @@ -22,6 +21,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Users with the `discoverable` field set to false will not show up in searches. - Minimum lifetime for ephmeral activities changed to 10 minutes and made configurable (`:min_lifetime` option). - Introduced optional dependencies on `ffmpeg`, `ImageMagick`, `exiftool` software packages. Please refer to `docs/installation/optional/media_graphics_packages.md`. +-
+ API Changes +- API: Empty parameter values for integer parameters are now ignored in non-strict validaton mode. +
### Removed @@ -33,18 +36,15 @@ switched to a new configuration mechanism, however it was not officially removed ### Added - Media preview proxy (requires `ffmpeg` and `ImageMagick` to be installed and media proxy to be enabled; see `:media_preview_proxy` config for more details). -- Pleroma API: Importing the mutes users from CSV files. - Mix tasks for controlling user account confirmation status in bulk (`mix pleroma.user confirm_all` and `mix pleroma.user unconfirm_all`) - Mix task for sending confirmation emails to all unconfirmed users (`mix pleroma.email send_confirmation_mails`) - Mix task option for force-unfollowing relays - App metrics: ability to restrict access to specified IP whitelist. - - -
+-
API Changes -- Pleroma API: Importing the mutes users from CSV files. - Admin API: Importing emoji from a zip file +- Pleroma API: Importing the mutes users from CSV files. - Pleroma API: Pagination for remote/local packs and emoji.
From b4c6b262d6dc12362f0014a864e8aed6c727c39c Mon Sep 17 00:00:00 2001 From: rinpatch Date: Wed, 11 Nov 2020 23:28:15 +0300 Subject: [PATCH 087/362] pleroma-fe bundle: update to 8e87e3d88bef3691b625c0a25407aa08bdf983ad --- priv/static/index.html | 2 +- priv/static/static/config.json | 3 +- .../css/app.77b1644622e3bae24b6b.css.map | 1 - ...24b6b.css => app.9a4c5ede37b2f0230836.css} | 6 +- .../css/app.9a4c5ede37b2f0230836.css.map | 1 + .../static/font/fontello.1600365488745.eot | Bin 24796 -> 0 bytes .../static/font/fontello.1600365488745.svg | 140 ------ .../static/font/fontello.1600365488745.ttf | Bin 24628 -> 0 bytes .../static/font/fontello.1600365488745.woff | Bin 15108 -> 0 bytes .../static/font/fontello.1600365488745.woff2 | Bin 12736 -> 0 bytes priv/static/static/fontello.1600365488745.css | 160 ------- priv/static/static/fontello.json | 416 ------------------ ...800f349b.js => 10.46f441b948010eda4403.js} | 4 +- ....js.map => 10.46f441b948010eda4403.js.map} | 2 +- ...879a92cc.js => 11.8ff1ed54814f2d34cb3e.js} | 4 +- ....js.map => 11.8ff1ed54814f2d34cb3e.js.map} | 2 +- .../static/js/12.13204bdd0ad5703a3ea3.js | 2 + ....js.map => 12.13204bdd0ad5703a3ea3.js.map} | 2 +- .../static/js/12.b3bf0bc313861d6ec36b.js | 2 - ...735722c4.js => 13.e27c3eeddcc4b11c1f54.js} | 4 +- ....js.map => 13.e27c3eeddcc4b11c1f54.js.map} | 2 +- .../static/js/14.273855b3e4e27ce80219.js | 2 + .../static/js/14.273855b3e4e27ce80219.js.map | 1 + .../static/js/14.d015d9b2ea16407e389c.js | 2 - .../static/js/14.d015d9b2ea16407e389c.js.map | 1 - .../static/js/15.19866e6a366ccf982284.js.map | 1 - ...cf982284.js => 15.afbe29b6665fcd015b2d.js} | 4 +- .../static/js/15.afbe29b6665fcd015b2d.js.map | 1 + .../static/js/16.38a984effd54736f6a2c.js.map | 1 - ...736f6a2c.js => 16.5e3f20da470591d0cabf.js} | 4 +- .../static/js/16.5e3f20da470591d0cabf.js.map | 1 + ...0db2e85b.js => 17.44e90ef82ee2ef12dc3f.js} | 4 +- .../static/js/17.44e90ef82ee2ef12dc3f.js.map | 1 + .../static/js/17.9c25507194320db2e85b.js.map | 1 - .../static/js/18.94946caca48930c224c7.js.map | 1 - ...30c224c7.js => 18.9a5b877f94b2b53065e1.js} | 4 +- .../static/js/18.9a5b877f94b2b53065e1.js.map | 1 + ...d55e9f13.js => 19.1fd4da643df0abf89122.js} | 4 +- .../static/js/19.1fd4da643df0abf89122.js.map | 1 + .../static/js/19.233c81ac2c28d55e9f13.js.map | 1 - .../static/js/2.422e6c756ac673a6fd44.js | 2 + .../static/js/2.422e6c756ac673a6fd44.js.map | 1 + .../static/js/2.e852a6b4b3bba752b838.js | 2 - .../static/js/2.e852a6b4b3bba752b838.js.map | 1 - .../static/js/20.818c38d27369c3a4d677.js.map | 1 - ...c3a4d677.js => 20.a64fd29da59076399a27.js} | 4 +- .../static/js/20.a64fd29da59076399a27.js.map | 1 + ...8ca6bc2a.js => 21.243d9e6ebf469a2dc740.js} | 4 +- .../static/js/21.243d9e6ebf469a2dc740.js.map | 1 + .../static/js/21.ce4cda179d888ca6bc2a.js.map | 1 - .../static/js/22.2ea93c6cc569ef0256ab.js.map | 1 - ...ef0256ab.js => 22.e20ef7e5fefc0964cdd1.js} | 4 +- .../static/js/22.e20ef7e5fefc0964cdd1.js.map | 1 + ...fafd06d1.js => 23.614a35f9ded445292f4a.js} | 4 +- .../static/js/23.614a35f9ded445292f4a.js.map | 1 + .../static/js/23.a57a7845cc20fafd06d1.js.map | 1 - .../static/js/24.35eb55a657b5485f8491.js.map | 1 - ...485f8491.js => 24.6ae9ca51e51e023afbe4.js} | 4 +- .../static/js/24.6ae9ca51e51e023afbe4.js.map | 1 + .../static/js/25.5a9efe20e3ae1352e6d2.js | 2 - .../static/js/25.5a9efe20e3ae1352e6d2.js.map | 1 - .../static/js/25.eadae0d48ee5be52a16c.js | 2 + .../static/js/25.eadae0d48ee5be52a16c.js.map | 1 + ...5ca3b3e6.js => 26.8fd0027b982c4bcdc88f.js} | 4 +- .../static/js/26.8fd0027b982c4bcdc88f.js.map | 1 + .../static/js/26.cf13231d524e5ca3b3e6.js.map | 1 - ...bd14f376.js => 27.6d90a54efba08d261d69.js} | 4 +- .../static/js/27.6d90a54efba08d261d69.js.map | 1 + .../static/js/27.fca8d4f6e444bd14f376.js.map | 1 - .../static/js/28.e0f9f164e0bfd890dc61.js.map | 1 - ...d890dc61.js => 28.f1353aa382a104262d1a.js} | 4 +- .../static/js/28.f1353aa382a104262d1a.js.map | 1 + .../static/js/29.0b69359f0fe5c0785746.js.map | 1 - ...c0785746.js => 29.39c1e87a689c840395b2.js} | 4 +- .../static/js/29.39c1e87a689c840395b2.js.map | 1 + ...bd07e3ebf.js => 3.a0df8a5bcd120d1f8581.js} | 8 +- ...f.js.map => 3.a0df8a5bcd120d1f8581.js.map} | 2 +- .../static/js/30.64736585965c63c2b5d4.js | 2 + .../static/js/30.64736585965c63c2b5d4.js.map | 1 + .../static/js/30.fce58be0b52ca3e32fa4.js | 2 - .../static/js/30.fce58be0b52ca3e32fa4.js.map | 1 - ...07145346d.js => 4.4cde7fdd1fe6bf2a9499.js} | 4 +- ...d.js.map => 4.4cde7fdd1fe6bf2a9499.js.map} | 2 +- ...ac890ae35.js => 5.2e165bc072548e533dd4.js} | 4 +- ...5.js.map => 5.2e165bc072548e533dd4.js.map} | 2 +- .../static/js/6.260ccd84f8cd2af27970.js | 2 + ...1.js.map => 6.260ccd84f8cd2af27970.js.map} | 2 +- .../static/js/6.ecfd3302a692de148391.js | 2 - ...9dced093d.js => 7.1c41eff6cfc75a00bde4.js} | 4 +- ...d.js.map => 7.1c41eff6cfc75a00bde4.js.map} | 2 +- ...10a1754f8.js => 8.9b35c2fee24ab7481e00.js} | 4 +- ...8.js.map => 8.9b35c2fee24ab7481e00.js.map} | 2 +- .../static/js/9.3a29094f1886648a0af3.js | 2 + .../static/js/9.3a29094f1886648a0af3.js.map | 1 + .../static/js/9.6010dbcce7b4d7c05a18.js | 2 - .../static/js/9.6010dbcce7b4d7c05a18.js.map | 1 - .../static/js/app.45547c05212c403dd77c.js | 2 + .../static/js/app.45547c05212c403dd77c.js.map | 1 + .../static/js/app.826c44232e0a76bbd9ba.js | 2 - .../static/js/app.826c44232e0a76bbd9ba.js.map | 1 - .../js/vendors~app.90c4af83c1ae68f4cd95.js | 49 --- .../vendors~app.90c4af83c1ae68f4cd95.js.map | 1 - .../js/vendors~app.952124344a84613dbac0.js | 64 +++ .../vendors~app.952124344a84613dbac0.js.map | 1 + priv/static/static/logo.png | Bin 1304 -> 0 bytes priv/static/static/logo.svg | 71 +++ priv/static/static/terms-of-service.html | 2 +- priv/static/sw-pleroma.js | 10 +- priv/static/sw-pleroma.js.map | 2 +- 109 files changed, 242 insertions(+), 871 deletions(-) delete mode 100644 priv/static/static/css/app.77b1644622e3bae24b6b.css.map rename priv/static/static/css/{app.77b1644622e3bae24b6b.css => app.9a4c5ede37b2f0230836.css} (98%) create mode 100644 priv/static/static/css/app.9a4c5ede37b2f0230836.css.map delete mode 100644 priv/static/static/font/fontello.1600365488745.eot delete mode 100644 priv/static/static/font/fontello.1600365488745.svg delete mode 100644 priv/static/static/font/fontello.1600365488745.ttf delete mode 100644 priv/static/static/font/fontello.1600365488745.woff delete mode 100644 priv/static/static/font/fontello.1600365488745.woff2 delete mode 100644 priv/static/static/fontello.1600365488745.css delete mode 100644 priv/static/static/fontello.json rename priv/static/static/js/{10.46fbbdfaf0d4800f349b.js => 10.46f441b948010eda4403.js} (71%) rename priv/static/static/js/{10.46fbbdfaf0d4800f349b.js.map => 10.46f441b948010eda4403.js.map} (56%) rename priv/static/static/js/{11.708cc2513c53879a92cc.js => 11.8ff1ed54814f2d34cb3e.js} (99%) rename priv/static/static/js/{11.708cc2513c53879a92cc.js.map => 11.8ff1ed54814f2d34cb3e.js.map} (56%) create mode 100644 priv/static/static/js/12.13204bdd0ad5703a3ea3.js rename priv/static/static/js/{12.b3bf0bc313861d6ec36b.js.map => 12.13204bdd0ad5703a3ea3.js.map} (56%) delete mode 100644 priv/static/static/js/12.b3bf0bc313861d6ec36b.js rename priv/static/static/js/{13.adb8a942514d735722c4.js => 13.e27c3eeddcc4b11c1f54.js} (76%) rename priv/static/static/js/{13.adb8a942514d735722c4.js.map => 13.e27c3eeddcc4b11c1f54.js.map} (56%) create mode 100644 priv/static/static/js/14.273855b3e4e27ce80219.js create mode 100644 priv/static/static/js/14.273855b3e4e27ce80219.js.map delete mode 100644 priv/static/static/js/14.d015d9b2ea16407e389c.js delete mode 100644 priv/static/static/js/14.d015d9b2ea16407e389c.js.map delete mode 100644 priv/static/static/js/15.19866e6a366ccf982284.js.map rename priv/static/static/js/{15.19866e6a366ccf982284.js => 15.afbe29b6665fcd015b2d.js} (98%) create mode 100644 priv/static/static/js/15.afbe29b6665fcd015b2d.js.map delete mode 100644 priv/static/static/js/16.38a984effd54736f6a2c.js.map rename priv/static/static/js/{16.38a984effd54736f6a2c.js => 16.5e3f20da470591d0cabf.js} (99%) create mode 100644 priv/static/static/js/16.5e3f20da470591d0cabf.js.map rename priv/static/static/js/{17.9c25507194320db2e85b.js => 17.44e90ef82ee2ef12dc3f.js} (94%) create mode 100644 priv/static/static/js/17.44e90ef82ee2ef12dc3f.js.map delete mode 100644 priv/static/static/js/17.9c25507194320db2e85b.js.map delete mode 100644 priv/static/static/js/18.94946caca48930c224c7.js.map rename priv/static/static/js/{18.94946caca48930c224c7.js => 18.9a5b877f94b2b53065e1.js} (57%) create mode 100644 priv/static/static/js/18.9a5b877f94b2b53065e1.js.map rename priv/static/static/js/{19.233c81ac2c28d55e9f13.js => 19.1fd4da643df0abf89122.js} (99%) create mode 100644 priv/static/static/js/19.1fd4da643df0abf89122.js.map delete mode 100644 priv/static/static/js/19.233c81ac2c28d55e9f13.js.map create mode 100644 priv/static/static/js/2.422e6c756ac673a6fd44.js create mode 100644 priv/static/static/js/2.422e6c756ac673a6fd44.js.map delete mode 100644 priv/static/static/js/2.e852a6b4b3bba752b838.js delete mode 100644 priv/static/static/js/2.e852a6b4b3bba752b838.js.map delete mode 100644 priv/static/static/js/20.818c38d27369c3a4d677.js.map rename priv/static/static/js/{20.818c38d27369c3a4d677.js => 20.a64fd29da59076399a27.js} (99%) create mode 100644 priv/static/static/js/20.a64fd29da59076399a27.js.map rename priv/static/static/js/{21.ce4cda179d888ca6bc2a.js => 21.243d9e6ebf469a2dc740.js} (99%) create mode 100644 priv/static/static/js/21.243d9e6ebf469a2dc740.js.map delete mode 100644 priv/static/static/js/21.ce4cda179d888ca6bc2a.js.map delete mode 100644 priv/static/static/js/22.2ea93c6cc569ef0256ab.js.map rename priv/static/static/js/{22.2ea93c6cc569ef0256ab.js => 22.e20ef7e5fefc0964cdd1.js} (99%) create mode 100644 priv/static/static/js/22.e20ef7e5fefc0964cdd1.js.map rename priv/static/static/js/{23.a57a7845cc20fafd06d1.js => 23.614a35f9ded445292f4a.js} (99%) create mode 100644 priv/static/static/js/23.614a35f9ded445292f4a.js.map delete mode 100644 priv/static/static/js/23.a57a7845cc20fafd06d1.js.map delete mode 100644 priv/static/static/js/24.35eb55a657b5485f8491.js.map rename priv/static/static/js/{24.35eb55a657b5485f8491.js => 24.6ae9ca51e51e023afbe4.js} (99%) create mode 100644 priv/static/static/js/24.6ae9ca51e51e023afbe4.js.map delete mode 100644 priv/static/static/js/25.5a9efe20e3ae1352e6d2.js delete mode 100644 priv/static/static/js/25.5a9efe20e3ae1352e6d2.js.map create mode 100644 priv/static/static/js/25.eadae0d48ee5be52a16c.js create mode 100644 priv/static/static/js/25.eadae0d48ee5be52a16c.js.map rename priv/static/static/js/{26.cf13231d524e5ca3b3e6.js => 26.8fd0027b982c4bcdc88f.js} (99%) create mode 100644 priv/static/static/js/26.8fd0027b982c4bcdc88f.js.map delete mode 100644 priv/static/static/js/26.cf13231d524e5ca3b3e6.js.map rename priv/static/static/js/{27.fca8d4f6e444bd14f376.js => 27.6d90a54efba08d261d69.js} (94%) create mode 100644 priv/static/static/js/27.6d90a54efba08d261d69.js.map delete mode 100644 priv/static/static/js/27.fca8d4f6e444bd14f376.js.map delete mode 100644 priv/static/static/js/28.e0f9f164e0bfd890dc61.js.map rename priv/static/static/js/{28.e0f9f164e0bfd890dc61.js => 28.f1353aa382a104262d1a.js} (98%) create mode 100644 priv/static/static/js/28.f1353aa382a104262d1a.js.map delete mode 100644 priv/static/static/js/29.0b69359f0fe5c0785746.js.map rename priv/static/static/js/{29.0b69359f0fe5c0785746.js => 29.39c1e87a689c840395b2.js} (99%) create mode 100644 priv/static/static/js/29.39c1e87a689c840395b2.js.map rename priv/static/static/js/{3.7d21accf4e5bd07e3ebf.js => 3.a0df8a5bcd120d1f8581.js} (99%) rename priv/static/static/js/{3.7d21accf4e5bd07e3ebf.js.map => 3.a0df8a5bcd120d1f8581.js.map} (99%) create mode 100644 priv/static/static/js/30.64736585965c63c2b5d4.js create mode 100644 priv/static/static/js/30.64736585965c63c2b5d4.js.map delete mode 100644 priv/static/static/js/30.fce58be0b52ca3e32fa4.js delete mode 100644 priv/static/static/js/30.fce58be0b52ca3e32fa4.js.map rename priv/static/static/js/{4.5719922a4e807145346d.js => 4.4cde7fdd1fe6bf2a9499.js} (77%) rename priv/static/static/js/{4.5719922a4e807145346d.js.map => 4.4cde7fdd1fe6bf2a9499.js.map} (99%) rename priv/static/static/js/{5.cf05c5ddbdbac890ae35.js => 5.2e165bc072548e533dd4.js} (98%) rename priv/static/static/js/{5.cf05c5ddbdbac890ae35.js.map => 5.2e165bc072548e533dd4.js.map} (57%) create mode 100644 priv/static/static/js/6.260ccd84f8cd2af27970.js rename priv/static/static/js/{6.ecfd3302a692de148391.js.map => 6.260ccd84f8cd2af27970.js.map} (57%) delete mode 100644 priv/static/static/js/6.ecfd3302a692de148391.js rename priv/static/static/js/{7.dd44c3d58fb9dced093d.js => 7.1c41eff6cfc75a00bde4.js} (99%) rename priv/static/static/js/{7.dd44c3d58fb9dced093d.js.map => 7.1c41eff6cfc75a00bde4.js.map} (57%) rename priv/static/static/js/{8.636322a87bb10a1754f8.js => 8.9b35c2fee24ab7481e00.js} (99%) rename priv/static/static/js/{8.636322a87bb10a1754f8.js.map => 8.9b35c2fee24ab7481e00.js.map} (57%) create mode 100644 priv/static/static/js/9.3a29094f1886648a0af3.js create mode 100644 priv/static/static/js/9.3a29094f1886648a0af3.js.map delete mode 100644 priv/static/static/js/9.6010dbcce7b4d7c05a18.js delete mode 100644 priv/static/static/js/9.6010dbcce7b4d7c05a18.js.map create mode 100644 priv/static/static/js/app.45547c05212c403dd77c.js create mode 100644 priv/static/static/js/app.45547c05212c403dd77c.js.map delete mode 100644 priv/static/static/js/app.826c44232e0a76bbd9ba.js delete mode 100644 priv/static/static/js/app.826c44232e0a76bbd9ba.js.map delete mode 100644 priv/static/static/js/vendors~app.90c4af83c1ae68f4cd95.js delete mode 100644 priv/static/static/js/vendors~app.90c4af83c1ae68f4cd95.js.map create mode 100644 priv/static/static/js/vendors~app.952124344a84613dbac0.js create mode 100644 priv/static/static/js/vendors~app.952124344a84613dbac0.js.map delete mode 100644 priv/static/static/logo.png create mode 100644 priv/static/static/logo.svg diff --git a/priv/static/index.html b/priv/static/index.html index f5690a8d6..9b774959a 100644 --- a/priv/static/index.html +++ b/priv/static/index.html @@ -1 +1 @@ -Pleroma
\ No newline at end of file +Pleroma
\ No newline at end of file diff --git a/priv/static/static/config.json b/priv/static/static/config.json index 0030f78f1..f59e645ac 100644 --- a/priv/static/static/config.json +++ b/priv/static/static/config.json @@ -10,9 +10,10 @@ "hideSitename": false, "hideUserStats": false, "loginMethod": "password", - "logo": "/static/logo.png", + "logo": "/static/logo.svg", "logoMargin": ".1em", "logoMask": true, + "logoLeft": false, "minimalScopesMode": false, "nsfwCensorImage": "", "postContentType": "text/plain", diff --git a/priv/static/static/css/app.77b1644622e3bae24b6b.css.map b/priv/static/static/css/app.77b1644622e3bae24b6b.css.map deleted file mode 100644 index 4b042ef35..000000000 --- a/priv/static/static/css/app.77b1644622e3bae24b6b.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.77b1644622e3bae24b6b.css","sourcesContent":[".tab-switcher {\n display: -ms-flexbox;\n display: flex;\n}\n.tab-switcher .tab-icon {\n font-size: 2em;\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: 1em;\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.77b1644622e3bae24b6b.css b/priv/static/static/css/app.9a4c5ede37b2f0230836.css similarity index 98% rename from priv/static/static/css/app.77b1644622e3bae24b6b.css rename to priv/static/static/css/app.9a4c5ede37b2f0230836.css index 8038882c0..22b9fdbe7 100644 --- a/priv/static/static/css/app.77b1644622e3bae24b6b.css +++ b/priv/static/static/css/app.9a4c5ede37b2f0230836.css @@ -3,7 +3,7 @@ .tab-switcher { display: flex; } .tab-switcher .tab-icon { - font-size: 2em; + margin: 0.2em auto; display: block; } .tab-switcher.top-tabs { @@ -97,7 +97,7 @@ .tab-switcher.side-tabs > .tabs .tab-wrapper { } @media all and (max-width: 800px) { .tab-switcher.side-tabs > .tabs .tab-wrapper { - min-width: 1em; + min-width: 4em; } } .tab-switcher.side-tabs > .tabs .tab-wrapper:not(.active)::after { @@ -243,4 +243,4 @@ .with-load-more-footer a { cursor: pointer; } -/*# sourceMappingURL=app.77b1644622e3bae24b6b.css.map*/ \ No newline at end of file +/*# sourceMappingURL=app.9a4c5ede37b2f0230836.css.map*/ \ 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 new file mode 100644 index 000000000..f54bd9ee6 --- /dev/null +++ b/priv/static/static/css/app.9a4c5ede37b2f0230836.css.map @@ -0,0 +1 @@ +{"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/font/fontello.1600365488745.eot b/priv/static/static/font/fontello.1600365488745.eot deleted file mode 100644 index 255f503728cee8b339cb9a2d46ac63034b892b04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24796 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 - - -Copyright (C) 2020 by original authors @ fontello.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/priv/static/static/font/fontello.1600365488745.ttf b/priv/static/static/font/fontello.1600365488745.ttf deleted file mode 100644 index 6bda99d50ec6c3474da825e450cac7eb7182c4fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24628 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 diff --git a/priv/static/static/font/fontello.1600365488745.woff b/priv/static/static/font/fontello.1600365488745.woff deleted file mode 100644 index 11c866ae00fb19196fc2ccfd78000476016422d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15108 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 diff --git a/priv/static/static/font/fontello.1600365488745.woff2 b/priv/static/static/font/fontello.1600365488745.woff2 deleted file mode 100644 index 06151d28c78df3cdb3a13f4036203d4a15ee93b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12736 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

J1P%u>L0rtJJdI} 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 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 entrada)",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 entradas 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"},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"},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"},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",revoke_admin:"Revocar permisos de Administrador",grant_moderator:"Conceder permisos de Moderador",revoke_moderator:"Revocar permisos de Moderador",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"},user_profile:{timeline_title:"Linea 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 moderadores 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 Medios",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"},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 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 "Toda la red conocida":',ftl_removal:'Eliminar de la línea de tiempo "Toda La Red Conocida"',quarantine_desc:"Esta instancia enviará solo publicaciones públicas a las siguientes instancias:",simple_policies:"Políticas sobre instancias específicas",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.46fbbdfaf0d4800f349b.js.map \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[10],{576:function(e){e.exports={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"},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:"Ojear",close:"Cerrar",dismiss:"Descartar",retry:"Inténtalo de nuevo",error_retry:"Por favor, inténtalo de nuevo",loading:"Cargando…"},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"},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"},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"},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 entradas 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 - Entradas visibles en las Líneas Temporales Públicas",unlisted:"Sin listar - Entradas 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"},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"}},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 entradas 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 administrador 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 entradas (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:"Me gustan (Likes)",notification_visibility_mentions:"Menciones",notification_visibility_repeats:"Repeticiones (Repeats)",no_rich_text_description:"Eliminar el formato de texto enriquecido de todas las entradas",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 en mi perfil",show_moderator_badge:"Mostrar la insignia de Moderador en mi perfil",nsfw_clickthrough:"Activar el clic para ocultar los adjuntos NSFW",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:"Fondo del Perfil",profile_banner:"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 entradas 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"},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 entrada)",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 entradas 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"},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"},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"},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",revoke_admin:"Revocar permisos de Administrador",grant_moderator:"Conceder permisos de Moderador",revoke_moderator:"Revocar permisos de Moderador",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"},user_profile:{timeline_title:"Linea 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 moderadores 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 Medios",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"},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 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 "Toda la red conocida":',ftl_removal:'Eliminar de la línea de tiempo "Toda La 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.46f441b948010eda4403.js.map \ No newline at end of file diff --git a/priv/static/static/js/10.46fbbdfaf0d4800f349b.js.map b/priv/static/static/js/10.46f441b948010eda4403.js.map similarity index 56% rename from priv/static/static/js/10.46fbbdfaf0d4800f349b.js.map rename to priv/static/static/js/10.46f441b948010eda4403.js.map index bee2feb10..e0623e6bf 100644 --- a/priv/static/static/js/10.46fbbdfaf0d4800f349b.js.map +++ b/priv/static/static/js/10.46f441b948010eda4403.js.map @@ -1 +1 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/10.46fbbdfaf0d4800f349b.js","sourceRoot":""} \ No newline at end of file +{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/10.46f441b948010eda4403.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/11.708cc2513c53879a92cc.js b/priv/static/static/js/11.8ff1ed54814f2d34cb3e.js similarity index 99% rename from priv/static/static/js/11.708cc2513c53879a92cc.js rename to priv/static/static/js/11.8ff1ed54814f2d34cb3e.js index 4fe316ecf..cb57f2a65 100644 --- a/priv/static/static/js/11.708cc2513c53879a92cc.js +++ b/priv/static/static/js/11.8ff1ed54814f2d34cb3e.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[11],{569:function(e){e.exports={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.708cc2513c53879a92cc.js.map \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[11],{577:function(e){e.exports={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.8ff1ed54814f2d34cb3e.js.map \ No newline at end of file diff --git a/priv/static/static/js/11.708cc2513c53879a92cc.js.map b/priv/static/static/js/11.8ff1ed54814f2d34cb3e.js.map similarity index 56% rename from priv/static/static/js/11.708cc2513c53879a92cc.js.map rename to priv/static/static/js/11.8ff1ed54814f2d34cb3e.js.map index 64c9320c4..4ce6d7227 100644 --- a/priv/static/static/js/11.708cc2513c53879a92cc.js.map +++ b/priv/static/static/js/11.8ff1ed54814f2d34cb3e.js.map @@ -1 +1 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/11.708cc2513c53879a92cc.js","sourceRoot":""} \ No newline at end of file +{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/11.8ff1ed54814f2d34cb3e.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/12.13204bdd0ad5703a3ea3.js b/priv/static/static/js/12.13204bdd0ad5703a3ea3.js new file mode 100644 index 000000000..a89bfeb67 --- /dev/null +++ b/priv/static/static/js/12.13204bdd0ad5703a3ea3.js @@ -0,0 +1,2 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{578:function(a){a.exports={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"},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…"},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"},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"},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:"Avatarra (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",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.13204bdd0ad5703a3ea3.js.map \ No newline at end of file diff --git a/priv/static/static/js/12.b3bf0bc313861d6ec36b.js.map b/priv/static/static/js/12.13204bdd0ad5703a3ea3.js.map similarity index 56% rename from priv/static/static/js/12.b3bf0bc313861d6ec36b.js.map rename to priv/static/static/js/12.13204bdd0ad5703a3ea3.js.map index 28545ac96..366ec2927 100644 --- a/priv/static/static/js/12.b3bf0bc313861d6ec36b.js.map +++ b/priv/static/static/js/12.13204bdd0ad5703a3ea3.js.map @@ -1 +1 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/12.b3bf0bc313861d6ec36b.js","sourceRoot":""} \ No newline at end of file +{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/12.13204bdd0ad5703a3ea3.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/12.b3bf0bc313861d6ec36b.js b/priv/static/static/js/12.b3bf0bc313861d6ec36b.js deleted file mode 100644 index 4890ca10a..000000000 --- a/priv/static/static/js/12.b3bf0bc313861d6ec36b.js +++ /dev/null @@ -1,2 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{570:function(a){a.exports={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"},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"},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"},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"},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"},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"},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:"Avatarra (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 den 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"},federation:"Federazioa"}}}}}]); -//# sourceMappingURL=12.b3bf0bc313861d6ec36b.js.map \ No newline at end of file diff --git a/priv/static/static/js/13.adb8a942514d735722c4.js b/priv/static/static/js/13.e27c3eeddcc4b11c1f54.js similarity index 76% rename from priv/static/static/js/13.adb8a942514d735722c4.js rename to priv/static/static/js/13.e27c3eeddcc4b11c1f54.js index 41abcb5a6..8cd482b41 100644 --- a/priv/static/static/js/13.adb8a942514d735722c4.js +++ b/priv/static/static/js/13.e27c3eeddcc4b11c1f54.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[13],{571:function(t){t.exports={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ö"},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.adb8a942514d735722c4.js.map \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[13],{579:function(t){t.exports={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.e27c3eeddcc4b11c1f54.js.map \ No newline at end of file diff --git a/priv/static/static/js/13.adb8a942514d735722c4.js.map b/priv/static/static/js/13.e27c3eeddcc4b11c1f54.js.map similarity index 56% rename from priv/static/static/js/13.adb8a942514d735722c4.js.map rename to priv/static/static/js/13.e27c3eeddcc4b11c1f54.js.map index 2b8ff6d6c..0c61c3fca 100644 --- a/priv/static/static/js/13.adb8a942514d735722c4.js.map +++ b/priv/static/static/js/13.e27c3eeddcc4b11c1f54.js.map @@ -1 +1 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/13.adb8a942514d735722c4.js","sourceRoot":""} \ No newline at end of file +{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/13.e27c3eeddcc4b11c1f54.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/14.273855b3e4e27ce80219.js b/priv/static/static/js/14.273855b3e4e27ce80219.js new file mode 100644 index 000000000..78c0bfebc --- /dev/null +++ b/priv/static/static/js/14.273855b3e4e27ce80219.js @@ -0,0 +1,2 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{580:function(e){e.exports={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 média",scope_options:"Options de visibilité",text_limit:"Limite de texte",title:"Caractéristiques",who_to_follow:"Personnes à suivre",pleroma_chat_messages:"Chat Pleroma"},finder:{error_fetching_user:"Erreur lors de la recherche de l'utilisateur·ice",find_user:"Chercher un-e utilisateur·ice"},general:{apply:"Appliquer",submit:"Envoyer",more:"Plus",generic_error:"Une erreur s'est produite",optional:"optionnel",show_more:"Montrer plus",show_less:"Montrer moins",cancel:"Annuler",disable:"Désactiver",enable:"Activer",confirm:"Confirmer",verify:"Vérifier",dismiss:"Rejeter",peek:"Jeter un coup d'œil",close:"Fermer",retry:"Réessayez",error_retry:"Veuillez réessayer",loading:"Chargement…"},image_cropper:{crop_picture:"Rogner l'image",save:"Sauvegarder",save_without_cropping:"Sauvegarder sans rogner",cancel:"Annuler"},importer:{submit:"Soumettre",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:"p.e. 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 authentification",recovery_code:"Code de récupération",heading:{totp:"Authentification à double authentification",recovery:"Récuperation de la double authentification"}},media_modal:{previous:"Précédent",next:"Suivant"},nav:{about:"À propos",back:"Retour",chat:"Chat local",friend_requests:"Demandes de suivi",mentions:"Notifications",interactions:"Interactions",dms:"Messages directs",public_tl:"Fil d'actualité public",timeline:"Fil d'actualité",twkn:"Réseau connu",user_search:"Recherche d'utilisateur·ice",who_to_follow:"Qui suivre",preferences:"Préférences",search:"Recherche",administration:"Administration",chats:"Chats",bookmarks:"Marques-Pages"},notifications:{broken_favorite:"Message inconnu, chargement…",favorited_you:"a aimé votre statut",followed_you:"a commencé à vous suivre",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"},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 le média 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 Fil d'actualité public et l'Ensemble du réseau connu"},scope:{direct:"Direct - N'envoyer qu'aux personnes mentionnées",private:"Abonné·e·s uniquement - Seul·e·s vos abonné·e·s verront vos billets",public:"Publique - Afficher dans les fils publics",unlisted:"Non-Listé - Ne pas afficher dans les fils publics"},media_description_error:"Échec de téléversement du media, essayez encore",empty_status_error:"Impossible de poster un statut vide sans attachements",preview_empty:"Vide",preview:"Prévisualisation",media_description:"Description de l'attachement"},registration:{bio:"Biographie",email:"Adresse mail",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:"p.e. lain",fullname_placeholder:"p.e. Lain Iwakura",bio_placeholder:"p.e.\nSalut, je suis Lain\nJe suis une héroïne d'animé 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"}},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:"Double authentification",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 nouveauc 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 les codes ou sauvez les quelquepart 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 vérouillé en dehors de votre compte.",authentication_methods:"Methodes d'authentification",scan:{title:"Scanner",desc:"En utilisant votre application de double authentification, scannez ce QR code ou entrez la clé textuelle :",secret_code:"Clé"},verify:{desc:"Pour activer la double authentification, entrez le code depuis 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:"Blocks 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'administrateur⋅ice 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:"Filtre",filtering_explanation:"Tous les statuts contenant ces mots seront masqués. Un mot par ligne",follow_export:"Exporter les abonnements",follow_export_button:"Exporter les abonnements en csv",follow_import:"Importer des abonnements",follow_import_error:"Erreur lors de l'importation des abonnements",follows_imported:"Abonnements 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 journal",hide_muted_posts:"Masquer les statuts des utilisateurs masqués",max_thumbnails:"Nombre maximum de miniatures par statuts",hide_isp:"Masquer le panneau spécifique a l'instance",preload_images:"Précharger les images",use_one_click_nsfw:"Ouvrir les pièces-jointes NSFW avec un seul clic",hide_post_stats:"Masquer les statistiques de publication (le nombre de favoris)",hide_user_stats:"Masquer les statistiques de profil (le nombre d'amis)",hide_filtered_statuses:"Masquer les statuts filtrés",import_blocks_from_a_csv_file:"Importer les blocages depuis un fichier csv",import_followers_from_a_csv_file:"Importer des abonnements 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:"Abonnements",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'Administrateur⋅ice sur mon profil",show_moderator_badge:"Afficher le badge de Modérateur⋅ice sur mon profil",nsfw_clickthrough:"Masquer les images marquées comme contenu adulte ou sensible",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",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 au journal",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 copier le champ de 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'un version antérieure. Nous essayons de maximizer la compatibilité mais il peu 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"},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 a la fois les ombres internes et non-internes sur les avatars peut fournir des résultats innatendus 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:"Rajouter un espace autour de l'émoji après l’avoir choisit",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:"Écrire les domaines à masquer",fun:"Rigolo",greentext:"greentexting",allow_following_move:"Suivre automatiquement quand ce compte migre",change_email_error:"Il y a eu un problème pour charger 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:"Importer les 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"},timeline:{collapse:"Fermer",conversation:"Conversation",error_fetching:"Erreur en cherchant les mises à jour",load_older:"Afficher plus",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"},status:{favorites:"Favoris",repeats:"Partages",delete:"Supprimer statuts",pin:"Agraffer sur le profil",unpin:"Dégraffer 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"},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"},user_profile:{timeline_title:"Journal de l'utilisateur⋅ice",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"},upload:{error:{base:"L'envoi a échoué.",file_too_big:"Fichier trop gros [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]",default:"Réessayez plus tard"},file_size_units:{B:"O",KiB:"KiO",MiB:"MiO",GiB:"GiO",TiB:"TiO"}},about:{mrf:{keyword:{reject:"Rejeté",replace:"Remplacer",keyword_policies:"Politiques par mot-clés",ftl_removal:"Suppression du flux fédéré",is_replaced_by:"→"},simple:{simple_policies:"Politiques par instances",accept:"Accepter",accept_desc:"Cette instance accepte des messages seulement depuis ces instances :",reject:"Rejeter",reject_desc:"Cette instance n'acceptera pas de message de ces instances :",quarantine:"Quarantaine",quarantine_desc:"Cette instance enverras seulement des messages publics à ces instances :",ftl_removal_desc:"Cette instance supprime ces instance du flux fédéré :",media_removal:"Suppression multimédia",media_removal_desc:"Cette instance supprime le contenu multimédia des instances suivantes :",media_nsfw:"Force le contenu multimédia comme sensible",ftl_removal:"Suppression du flux fédéré",media_nsfw_desc:"Cette instance force le contenu multimédia comme sensible pour les messages des instances suivantes :"},federation:"Fédération",mrf_policies:"Politiques MRF activées",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:"Muet",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}"},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 le sélecteur ouvert"},remote_user_resolver:{error:"Non trouvé.",searching_for:"Rechercher",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"}}}}]); +//# sourceMappingURL=14.273855b3e4e27ce80219.js.map \ No newline at end of file diff --git a/priv/static/static/js/14.273855b3e4e27ce80219.js.map b/priv/static/static/js/14.273855b3e4e27ce80219.js.map new file mode 100644 index 000000000..9ee527eaa --- /dev/null +++ b/priv/static/static/js/14.273855b3e4e27ce80219.js.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/14.273855b3e4e27ce80219.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/14.d015d9b2ea16407e389c.js b/priv/static/static/js/14.d015d9b2ea16407e389c.js deleted file mode 100644 index 200a79625..000000000 --- a/priv/static/static/js/14.d015d9b2ea16407e389c.js +++ /dev/null @@ -1,2 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{572:function(e){e.exports={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 média",scope_options:"Options de visibilité",text_limit:"Limite de texte",title:"Caractéristiques",who_to_follow:"Personnes à suivre"},finder:{error_fetching_user:"Erreur lors de la recherche de l'utilisateur·ice",find_user:"Chercher un-e utilisateur·ice"},general:{apply:"Appliquer",submit:"Envoyer",more:"Plus",generic_error:"Une erreur s'est produite",optional:"optionnel",show_more:"Montrer plus",show_less:"Montrer moins",cancel:"Annuler",disable:"Désactiver",enable:"Activer",confirm:"Confirmer",verify:"Vérifier",dismiss:"Rejeter"},image_cropper:{crop_picture:"Rogner l'image",save:"Sauvegarder",save_without_cropping:"Sauvegarder sans rogner",cancel:"Annuler"},importer:{submit:"Soumettre",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:"p.e. 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 authentification",recovery_code:"Code de récupération",heading:{totp:"Authentification à double authentification",recovery:"Récuperation de la double authentification"}},media_modal:{previous:"Précédent",next:"Suivant"},nav:{about:"À propos",back:"Retour",chat:"Chat local",friend_requests:"Demandes de suivi",mentions:"Notifications",interactions:"Interactions",dms:"Messages directs",public_tl:"Fil d'actualité public",timeline:"Fil d'actualité",twkn:"Ensemble du réseau connu",user_search:"Recherche d'utilisateur·ice",who_to_follow:"Qui suivre",preferences:"Préférences",search:"Recherche",administration:"Administration"},notifications:{broken_favorite:"Chargement d'un message inconnu…",favorited_you:"a aimé votre statut",followed_you:"a commencé à vous suivre",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"},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 le média comme sensible",content_type:{"text/plain":"Texte brut","text/html":"HTML","text/markdown":"Markdown","text/bbcode":"BBCode"},content_warning:"Sujet (optionnel)",default:"Écrivez ici votre prochain statut.",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 Fil d'actualité public et l'Ensemble du réseau connu"},scope:{direct:"Direct - N'envoyer qu'aux personnes mentionnées",private:"Abonné·e·s uniquement - Seul·e·s vos abonné·e·s verront vos billets",public:"Publique - Afficher dans les fils publics",unlisted:"Non-Listé - Ne pas afficher dans les fils publics"}},registration:{bio:"Biographie",email:"Adresse mail",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:"p.e. lain",fullname_placeholder:"p.e. Lain Iwakura",bio_placeholder:"p.e.\nSalut, je suis Lain\nJe suis une héroïne d'animé 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"}},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:"Double authentification",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 nouveauc 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 les codes ou sauvez les quelquepart 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 vérouillé en dehors de votre compte.",authentication_methods:"Methodes d'authentification",scan:{title:"Scanner",desc:"En utilisant votre application de double authentification, scannez ce QR code ou entrez la clé textuelle :",secret_code:"Clé"},verify:{desc:"Pour activer la double authentification, entrez le code depuis 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:"Blocks 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'administrateur⋅ice 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:"Filtre",filtering_explanation:"Tous les statuts contenant ces mots seront masqués. Un mot par ligne",follow_export:"Exporter les abonnements",follow_export_button:"Exporter les abonnements en csv",follow_import:"Importer des abonnements",follow_import_error:"Erreur lors de l'importation des abonnements",follows_imported:"Abonnements 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 journal",hide_muted_posts:"Masquer les statuts des utilisateurs masqués",max_thumbnails:"Nombre maximum de miniatures par statuts",hide_isp:"Masquer le panneau spécifique a l'instance",preload_images:"Précharger les images",use_one_click_nsfw:"Ouvrir les pièces-jointes NSFW avec un seul clic",hide_post_stats:"Masquer les statistiques de publication (le nombre de favoris)",hide_user_stats:"Masquer les statistiques de profil (le nombre d'amis)",hide_filtered_statuses:"Masquer les statuts filtrés",import_blocks_from_a_csv_file:"Importer les blocages depuis un fichier csv",import_followers_from_a_csv_file:"Importer des abonnements 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:"Abonnements",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'Administrateur⋅ice sur mon profil",show_moderator_badge:"Afficher le badge de Modérateur⋅ice sur mon profil",nsfw_clickthrough:"Masquer les images marquées comme contenu adulte ou sensible",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",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 au journal",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 copier le champ de 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'un version antérieure. Nous essayons de maximizer la compatibilité mais il peu 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"},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 a la fois les ombres internes et non-internes sur les avatars peut fournir des résultats innatendus 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:"Rajouter un espace autour de l'émoji après l’avoir choisit",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:"Écrire les domaines à masquer",fun:"Rigolo",greentext:"greentexting",allow_following_move:"Suivre automatiquement quand ce compte migre",change_email_error:"Il y a eu un problème pour charger 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"},timeline:{collapse:"Fermer",conversation:"Conversation",error_fetching:"Erreur en cherchant les mises à jour",load_older:"Afficher plus",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"},status:{favorites:"Favoris",repeats:"Partages",delete:"Supprimer statuts",pin:"Agraffer sur le profil",unpin:"Dégraffer 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"},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"},user_profile:{timeline_title:"Journal de l'utilisateur⋅ice",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"},upload:{error:{base:"L'envoi a échoué.",file_too_big:"Fichier trop gros [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]",default:"Réessayez plus tard"},file_size_units:{B:"O",KiB:"KiO",MiB:"MiO",GiB:"GiO",TiB:"TiO"}},about:{mrf:{keyword:{reject:"Rejeté",replace:"Remplacer",keyword_policies:"Politiques par mot-clés",ftl_removal:"Suppression du flux fédéré",is_replaced_by:"→"},simple:{simple_policies:"Politiques par instances",accept:"Accepter",accept_desc:"Cette instance accepte des messages seulement depuis ces instances :",reject:"Rejeter",reject_desc:"Cette instance n'acceptera pas de message de ces instances :",quarantine:"Quarantaine",quarantine_desc:"Cette instance enverras seulement des messages publics à ces instances :",ftl_removal_desc:"Cette instance supprime ces instance du flux fédéré :",media_removal:"Suppression multimédia",media_removal_desc:"Cette instance supprime le contenu multimédia des instances suivantes :",media_nsfw:"Force le contenu multimédia comme sensible",ftl_removal:"Suppression du flux fédéré",media_nsfw_desc:"Cette instance force le contenu multimédia comme sensible pour les messages des instances suivantes :"},federation:"Fédération",mrf_policies:"Politiques MRF activées",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:"Muet",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}"},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 le sélecteur ouvert"},remote_user_resolver:{error:"Non trouvé.",searching_for:"Rechercher",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."}}}}]); -//# sourceMappingURL=14.d015d9b2ea16407e389c.js.map \ No newline at end of file diff --git a/priv/static/static/js/14.d015d9b2ea16407e389c.js.map b/priv/static/static/js/14.d015d9b2ea16407e389c.js.map deleted file mode 100644 index 49dab13f7..000000000 --- a/priv/static/static/js/14.d015d9b2ea16407e389c.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/14.d015d9b2ea16407e389c.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/15.19866e6a366ccf982284.js.map b/priv/static/static/js/15.19866e6a366ccf982284.js.map deleted file mode 100644 index 561ab7dcf..000000000 --- a/priv/static/static/js/15.19866e6a366ccf982284.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/15.19866e6a366ccf982284.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/15.19866e6a366ccf982284.js b/priv/static/static/js/15.afbe29b6665fcd015b2d.js similarity index 98% rename from priv/static/static/js/15.19866e6a366ccf982284.js rename to priv/static/static/js/15.afbe29b6665fcd015b2d.js index 0cc2e266a..b83752240 100644 --- a/priv/static/static/js/15.19866e6a366ccf982284.js +++ b/priv/static/static/js/15.afbe29b6665fcd015b2d.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[15],{573:function(a){a.exports={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.19866e6a366ccf982284.js.map \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[15],{581:function(a){a.exports={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.afbe29b6665fcd015b2d.js.map \ No newline at end of file diff --git a/priv/static/static/js/15.afbe29b6665fcd015b2d.js.map b/priv/static/static/js/15.afbe29b6665fcd015b2d.js.map new file mode 100644 index 000000000..c7a0be582 --- /dev/null +++ b/priv/static/static/js/15.afbe29b6665fcd015b2d.js.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/15.afbe29b6665fcd015b2d.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/16.38a984effd54736f6a2c.js.map b/priv/static/static/js/16.38a984effd54736f6a2c.js.map deleted file mode 100644 index 68ee95f97..000000000 --- a/priv/static/static/js/16.38a984effd54736f6a2c.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/16.38a984effd54736f6a2c.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/16.38a984effd54736f6a2c.js b/priv/static/static/js/16.5e3f20da470591d0cabf.js similarity index 99% rename from priv/static/static/js/16.38a984effd54736f6a2c.js rename to priv/static/static/js/16.5e3f20da470591d0cabf.js index b3cebb0bd..e90ed4ca1 100644 --- a/priv/static/static/js/16.38a984effd54736f6a2c.js +++ b/priv/static/static/js/16.5e3f20da470591d0cabf.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[16],{574:function(e){e.exports={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"}}}}}]); -//# sourceMappingURL=16.38a984effd54736f6a2c.js.map \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[16],{582:function(e){e.exports={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"}}}}}]); +//# sourceMappingURL=16.5e3f20da470591d0cabf.js.map \ No newline at end of file diff --git a/priv/static/static/js/16.5e3f20da470591d0cabf.js.map b/priv/static/static/js/16.5e3f20da470591d0cabf.js.map new file mode 100644 index 000000000..0c4d0e385 --- /dev/null +++ b/priv/static/static/js/16.5e3f20da470591d0cabf.js.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/16.5e3f20da470591d0cabf.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/17.9c25507194320db2e85b.js b/priv/static/static/js/17.44e90ef82ee2ef12dc3f.js similarity index 94% rename from priv/static/static/js/17.9c25507194320db2e85b.js rename to priv/static/static/js/17.44e90ef82ee2ef12dc3f.js index 451bf8bd3..9b5adfd12 100644 --- a/priv/static/static/js/17.9c25507194320db2e85b.js +++ b/priv/static/static/js/17.44e90ef82ee2ef12dc3f.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{575:function(e){e.exports={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.9c25507194320db2e85b.js.map \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{583:function(e){e.exports={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.44e90ef82ee2ef12dc3f.js.map \ No newline at end of file diff --git a/priv/static/static/js/17.44e90ef82ee2ef12dc3f.js.map b/priv/static/static/js/17.44e90ef82ee2ef12dc3f.js.map new file mode 100644 index 000000000..1d191b94a --- /dev/null +++ b/priv/static/static/js/17.44e90ef82ee2ef12dc3f.js.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/17.44e90ef82ee2ef12dc3f.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/17.9c25507194320db2e85b.js.map b/priv/static/static/js/17.9c25507194320db2e85b.js.map deleted file mode 100644 index f843d4400..000000000 --- a/priv/static/static/js/17.9c25507194320db2e85b.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/17.9c25507194320db2e85b.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/18.94946caca48930c224c7.js.map b/priv/static/static/js/18.94946caca48930c224c7.js.map deleted file mode 100644 index ad04b99ab..000000000 --- a/priv/static/static/js/18.94946caca48930c224c7.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/18.94946caca48930c224c7.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/18.94946caca48930c224c7.js b/priv/static/static/js/18.9a5b877f94b2b53065e1.js similarity index 57% rename from priv/static/static/js/18.94946caca48930c224c7.js rename to priv/static/static/js/18.9a5b877f94b2b53065e1.js index 5a1f40c6d..c4aea5b25 100644 --- a/priv/static/static/js/18.94946caca48930c224c7.js +++ b/priv/static/static/js/18.9a5b877f94b2b53065e1.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[18],{576:function(e){e.exports={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…"},nav:{mentions:"Menzioni",public_tl:"Sequenza pubblica",timeline:"Sequenza personale",twkn:"Sequenza globale",chat:"Chat della stanza",friend_requests:"Vogliono seguirti",about:"Informazioni",administration:"Amministrazione",back:"Indietro",interactions:"Interazioni",dms:"Messaggi diretti",user_search:"Ricerca utenti",search:"Ricerca",who_to_follow:"Chi seguire",preferences:"Preferenze",bookmarks:"Segnalibri",chats:"Conversazioni",timelines:"Sequenze"},notifications:{followed_you:"ti segue",notifications:"Notifiche",read:"Letto!",broken_favorite:"Stato sconosciuto, lo sto cercando…",favorited_you:"ha gradito il tuo messaggio",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}"},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:"Stendardo del tuo profilo",set_new_avatar:"Scegli una nuova icona",set_new_profile_background:"Scegli un nuovo sfondo per la tua pagina",set_new_profile_banner:"Scegli un nuovo stendardo per il tuo profilo",settings:"Impostazioni",theme:"Tema",user_settings:"Impostazioni Utente",attachmentRadius:"Allegati",avatarAltRadius:"Icone utente (Notifiche)",avatarRadius:"Icone utente",background:"Sfondo",btnRadius:"Pulsanti",cBlue:"Blu (risposte, seguire)",cGreen:"Verde (ripeti)",cOrange:"Arancione (gradire)",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 confermare l'eliminazione del 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 dei tuoi 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:"Limita il tuo account solo a seguaci approvati",loop_video:"Riproduci video in ciclo continuo",loop_video_silent_only:'Riproduci solo video senza audio in ciclo continuo (es. le "gif" di Mastodon)',new_password:"Nuova password",notification_visibility:"Tipi di notifiche da mostrare",notification_visibility_follows:"Nuove persone ti seguono",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 nella sequenza personale",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 codici colore 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 da 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",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 questo QR o inserisci il codice manualmente:",title:"Acquisisci"},authentication_methods:"Metodi di accesso",recovery_codes_warning:"Appuntati i codici o salvali in un posto sicuro, altrimenti rischi di non rivederli mai più. 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 prima.",upgraded_from_v2:"L'interfaccia è stata aggiornata, il tema potrebbe essere diverso da come lo intendevi.",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 ad una versione precedente e poi aggiornata di nuovo. Se hai modificato il tema con una versione precedente dell'interfaccia, usa la vecchia versione del tema, altrimenti puoi usare la nuova.",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 grande (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 evidenziati",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"}},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:"Peso (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, zittiscilo.",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 zittire",theme_help_v2_2:"Le icone dietro alcuni elementi sono indicatori del contrasto fra testo e sfondo, passaci sopra col puntatore per ulteriori informazioni. Se si usano delle 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 zittire",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 zittito",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:"Zittiti",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 zittiti",accent:"Accento",emoji_reactions_on_timeline:"Mostra emoji di reazione sulle 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:"Zittiti e bloccati",profile_fields:{value:"Contenuto",name:"Etichetta",add_field:"Aggiungi campo",label:"Metadati profilo"},bot:"Questo profilo è di un robot",version:{frontend_version:"Versione interfaccia",backend_version:"Versione backend",title:"Versione"},reset_avatar:"Azzera icona",reset_profile_background:"Azzera sfondo profilo",reset_profile_banner:"Azzera stendardo profilo",reset_avatar_confirm:"Vuoi veramente azzerare l'icona?",reset_banner_confirm:"Vuoi veramente azzerare lo stendardo?",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"},timeline:{error_fetching:"Errore nell'aggiornamento",load_older:"Carica messaggi più vecchi",show_new:"Mostra nuovi",up_to_date:"Aggiornato",collapse:"Riduci",conversation:"Conversazione",no_retweet_hint:"Il messaggio è diretto o solo per seguaci e non può essere condiviso",repeated:"condiviso",no_statuses:"Nessun messaggio",no_more_statuses:"Fine dei messaggi",reload:"Ricarica"},user_card:{follow:"Segui",followees:"Chi stai seguendo",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? Quest'azione non può essere annullata.",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:"Rendi tutti i messaggi invisibili",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:"Zittisco…",unmute_progress:"Riabilito…",unmute:"Riabilita",block_progress:"Blocco…",unblock_progress:"Sblocco…",unblock:"Sblocca",unsubscribe:"Disdici",subscribe:"Abbònati",report:"Segnala",mention:"Menzioni",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"},chat:{title:"Chat"},features_panel:{chat:"Chat",gopher:"Gopher",media_proxy:"Proxy multimedia",scope_options:"Opzioni visibilità",text_limit:"Lunghezza massima",title:"Caratteristiche",who_to_follow:"Chi seguire",pleroma_chat_messages:"Chiacchiere"},finder:{error_fetching_user:"Errore nel recupero dell'utente",find_user:"Trova utente"},login:{login:"Accedi",logout:"Disconnettiti",password:"Password",placeholder:"es. Lupo Lucio",register:"Registrati",username:"Nome utente",description:"Accedi con OAuth",hint:"Accedi per partecipare alla discussione",authentication_code:"Codice di autenticazione",enter_recovery_code:"Inserisci un codice di recupero",enter_two_factor_code:"Inserisci un codice two-factor",recovery_code:"Codice di recupero",heading:{totp:"Autenticazione two-factor",recovery:"Recupero two-factor"}},post_status:{account_not_locked_warning:"Il tuo profilo non è {0}. Chiunque può seguirti e vedere i tuoi messaggi riservati ai tuoi 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 Fiumicino.",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:"Non elencato - 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 all'inizio.",direct_warning_to_all:"Questo messaggio sarà visibile a tutti i menzionati.",new_status:"Nuovo messaggio",empty_status_error:"Non puoi pubblicare messaggi vuoti senza allegati",preview_empty:"Vuoto",preview:"Anteprima",media_description_error:"Allegati non caricati, riprova",media_description:"Descrizione allegati"},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 l'immagine per avere un altro captcha",captcha:"CAPTCHA"},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 globale"},simple:{reject:"Rifiuta",accept:"Accetta",simple_policies:"Regole specifiche alla stanza",accept_desc:"Questa stanza accetta messaggi solo dalle seguenti stanze:",reject_desc:"Questa stanza non accetterà messaggi dalle stanze seguenti:",quarantine:"Quarantena",quarantine_desc:"Questa stanza inoltrerà solo messaggi pubblici alle seguenti stanze:",ftl_removal:"Rimozione dalla sequenza globale",ftl_removal_desc:"Questa stanza rimuove le seguenti stanze dalla sequenza globale:",media_removal:"Rimozione multimedia",media_removal_desc:"Questa istanza rimuove gli allegati dalle seguenti stanze:",media_nsfw:"Allegati oscurati forzatamente",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:"Equipaggio"},domain_mute_card:{mute:"Zittisci",mute_progress:"Zittisco…",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:"Alternativa",option:"Opzione",votes:"voti",vote:"Vota",type:"Tipo di sondaggio",single_choice:"Scelta singola",multiple_choices:"Scelta multipla",expiry:"Scadenza",expires_in:"Scade fra {0}",expired:"Scaduto {0} fa",not_enough_options:"Aggiungi altre risposte"},interactions:{favs_repeats:"Condivisi e preferiti",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 personale",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 ha potuto accedere ai dati del tuo browser. Le tue credenziali o le tue impostazioni locali non potranno essere 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 intero oggetto",show_full_subject:"Mostra intero oggetto",thread_muted_and_words:", contiene:",thread_muted:"Discussione zittita",copy_link:"Copia collegamento",status_unavailable:"Messaggio non disponibile",unmute_conversation:"Riabilita conversazione",mute_conversation:"Zittisci conversazione",replies_list:"Risposte:",reply_to:"Rispondi a",delete_confirm:"Vuoi veramente eliminare questo messaggio?",unbookmark:"Rimuovi segnalibro",bookmark:"Aggiungi segnalibro"},time:{years_short:"{0}a",year_short:"{0}a",years:"{0} anni",year:"{0} anno",weeks_short:"{0}set",week_short:"{0}set",seconds_short:"{0}sec",second_short:"{0}sec",weeks:"{0} settimane",week:"{0} settimana",seconds:"{0} secondi",second:"{0} secondo",now_short:"ora",now:"adesso",months_short:"{0}me",month_short:"{0}me",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 il tuo 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."}},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:"Ripeti",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.94946caca48930c224c7.js.map \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[18],{584:function(e){e.exports={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…"},nav:{mentions:"Menzioni",public_tl:"Sequenza pubblica",timeline:"Sequenza personale",twkn:"Sequenza globale",chat:"Chat della stanza",friend_requests:"Vogliono seguirti",about:"Informazioni",administration:"Amministrazione",back:"Indietro",interactions:"Interazioni",dms:"Messaggi diretti",user_search:"Ricerca utenti",search:"Ricerca",who_to_follow:"Chi seguire",preferences:"Preferenze",bookmarks:"Segnalibri",chats:"Conversazioni",timelines:"Sequenze"},notifications:{followed_you:"ti segue",notifications:"Notifiche",read:"Letto!",broken_favorite:"Stato sconosciuto, lo sto cercando…",favorited_you:"ha gradito il tuo messaggio",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}"},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:"Stendardo del tuo profilo",set_new_avatar:"Scegli una nuova icona",set_new_profile_background:"Scegli un nuovo sfondo per la tua pagina",set_new_profile_banner:"Scegli un nuovo stendardo per il tuo profilo",settings:"Impostazioni",theme:"Tema",user_settings:"Impostazioni Utente",attachmentRadius:"Allegati",avatarAltRadius:"Icone utente (Notifiche)",avatarRadius:"Icone utente",background:"Sfondo",btnRadius:"Pulsanti",cBlue:"Blu (risposte, seguire)",cGreen:"Verde (ripeti)",cOrange:"Arancione (gradire)",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 confermare l'eliminazione del 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 dei tuoi 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:"Limita il tuo account solo a seguaci approvati",loop_video:"Riproduci video in ciclo continuo",loop_video_silent_only:'Riproduci solo video senza audio in ciclo continuo (es. le "gif" di Mastodon)',new_password:"Nuova password",notification_visibility:"Tipi di notifiche da mostrare",notification_visibility_follows:"Nuove persone ti seguono",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 nella sequenza personale",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 codici colore 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 da 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",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 questo QR o inserisci il codice manualmente:",title:"Acquisisci"},authentication_methods:"Metodi di accesso",recovery_codes_warning:"Appuntati i codici o salvali in un posto sicuro, altrimenti rischi di non rivederli mai più. 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 prima.",upgraded_from_v2:"L'interfaccia è stata aggiornata, il tema potrebbe essere diverso da come lo intendevi.",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 ad una versione precedente e poi aggiornata di nuovo. Se hai modificato il tema con una versione precedente dell'interfaccia, usa la vecchia versione del tema, altrimenti puoi usare la nuova.",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 grande (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 evidenziati",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"}},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:"Peso (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, zittiscilo.",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 zittire",theme_help_v2_2:"Le icone dietro alcuni elementi sono indicatori del contrasto fra testo e sfondo, passaci sopra col puntatore per ulteriori informazioni. Se si usano delle 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 zittire",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 zittito",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:"Zittiti",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 zittiti",accent:"Accento",emoji_reactions_on_timeline:"Mostra emoji di reazione sulle 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:"Zittiti e bloccati",profile_fields:{value:"Contenuto",name:"Etichetta",add_field:"Aggiungi campo",label:"Metadati profilo"},bot:"Questo profilo è di un robot",version:{frontend_version:"Versione interfaccia",backend_version:"Versione backend",title:"Versione"},reset_avatar:"Azzera icona",reset_profile_background:"Azzera sfondo profilo",reset_profile_banner:"Azzera stendardo profilo",reset_avatar_confirm:"Vuoi veramente azzerare l'icona?",reset_banner_confirm:"Vuoi veramente azzerare lo stendardo?",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! Saranno elaborati a breve.",mute_import_error:"Errore nell'importazione",mute_import:"Importa silenziati",mute_export_button:"Esporta la tua lista di silenziati in un file CSV",mute_export:"Esporta silenziati"},timeline:{error_fetching:"Errore nell'aggiornamento",load_older:"Carica messaggi più vecchi",show_new:"Mostra nuovi",up_to_date:"Aggiornato",collapse:"Riduci",conversation:"Conversazione",no_retweet_hint:"Il messaggio è diretto o solo per seguaci e non può essere condiviso",repeated:"condiviso",no_statuses:"Nessun messaggio",no_more_statuses:"Fine dei messaggi",reload:"Ricarica"},user_card:{follow:"Segui",followees:"Chi stai seguendo",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? Quest'azione non può essere annullata.",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:"Rendi tutti i messaggi invisibili",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:"Zittisco…",unmute_progress:"Riabilito…",unmute:"Riabilita",block_progress:"Blocco…",unblock_progress:"Sblocco…",unblock:"Sblocca",unsubscribe:"Disdici",subscribe:"Abbònati",report:"Segnala",mention:"Menzioni",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"},chat:{title:"Chat"},features_panel:{chat:"Chat",gopher:"Gopher",media_proxy:"Proxy multimedia",scope_options:"Opzioni visibilità",text_limit:"Lunghezza massima",title:"Caratteristiche",who_to_follow:"Chi seguire",pleroma_chat_messages:"Chiacchiere"},finder:{error_fetching_user:"Errore nel recupero dell'utente",find_user:"Trova utente"},login:{login:"Accedi",logout:"Disconnettiti",password:"Password",placeholder:"es. Lupo Lucio",register:"Registrati",username:"Nome utente",description:"Accedi con OAuth",hint:"Accedi per partecipare alla discussione",authentication_code:"Codice di autenticazione",enter_recovery_code:"Inserisci un codice di recupero",enter_two_factor_code:"Inserisci un codice two-factor",recovery_code:"Codice di recupero",heading:{totp:"Autenticazione two-factor",recovery:"Recupero two-factor"}},post_status:{account_not_locked_warning:"Il tuo profilo non è {0}. Chiunque può seguirti e vedere i tuoi messaggi riservati ai tuoi 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 Fiumicino.",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:"Non elencato - 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 all'inizio.",direct_warning_to_all:"Questo messaggio sarà visibile a tutti i menzionati.",new_status:"Nuovo messaggio",empty_status_error:"Non puoi pubblicare messaggi vuoti senza allegati",preview_empty:"Vuoto",preview:"Anteprima",media_description_error:"Allegati non caricati, riprova",media_description:"Descrizione allegati"},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 l'immagine per avere un altro captcha",captcha:"CAPTCHA"},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 globale"},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 globale",ftl_removal_desc:"Questa stanza rimuove le seguenti dalla sequenza globale:",media_removal:"Rimozione multimedia",media_removal_desc:"Questa istanza rimuove gli allegati dalle seguenti stanze:",media_nsfw:"Allegati oscurati forzatamente",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:"Equipaggio"},domain_mute_card:{mute:"Zittisci",mute_progress:"Zittisco…",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:"Alternativa",option:"Opzione",votes:"voti",vote:"Vota",type:"Tipo di sondaggio",single_choice:"Scelta singola",multiple_choices:"Scelta multipla",expiry:"Scadenza",expires_in:"Scade fra {0}",expired:"Scaduto {0} fa",not_enough_options:"Aggiungi altre risposte"},interactions:{favs_repeats:"Condivisi e preferiti",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 personale",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 ha potuto accedere ai dati del tuo browser. Le tue credenziali o le tue impostazioni locali non potranno essere 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 intero oggetto",show_full_subject:"Mostra intero oggetto",thread_muted_and_words:", contiene:",thread_muted:"Discussione zittita",copy_link:"Copia collegamento",status_unavailable:"Messaggio non disponibile",unmute_conversation:"Riabilita conversazione",mute_conversation:"Zittisci conversazione",replies_list:"Risposte:",reply_to:"Rispondi a",delete_confirm:"Vuoi veramente eliminare questo messaggio?",unbookmark:"Rimuovi segnalibro",bookmark:"Aggiungi segnalibro",status_deleted:"Questo messagio è stato cancellato"},time:{years_short:"{0}a",year_short:"{0}a",years:"{0} anni",year:"{0} anno",weeks_short:"{0}set",week_short:"{0}set",seconds_short:"{0}sec",second_short:"{0}sec",weeks:"{0} settimane",week:"{0} settimana",seconds:"{0} secondi",second:"{0} secondo",now_short:"ora",now:"adesso",months_short:"{0}me",month_short:"{0}me",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 il tuo 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."}},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:"Ripeti",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.9a5b877f94b2b53065e1.js.map \ No newline at end of file diff --git a/priv/static/static/js/18.9a5b877f94b2b53065e1.js.map b/priv/static/static/js/18.9a5b877f94b2b53065e1.js.map new file mode 100644 index 000000000..61d9a7d41 --- /dev/null +++ b/priv/static/static/js/18.9a5b877f94b2b53065e1.js.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/18.9a5b877f94b2b53065e1.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/19.233c81ac2c28d55e9f13.js b/priv/static/static/js/19.1fd4da643df0abf89122.js similarity index 99% rename from priv/static/static/js/19.233c81ac2c28d55e9f13.js rename to priv/static/static/js/19.1fd4da643df0abf89122.js index ace0a1d41..c1ca1643b 100644 --- a/priv/static/static/js/19.233c81ac2c28d55e9f13.js +++ b/priv/static/static/js/19.1fd4da643df0abf89122.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{578:function(e){e.exports={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.233c81ac2c28d55e9f13.js.map \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{586:function(e){e.exports={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.1fd4da643df0abf89122.js.map \ No newline at end of file diff --git a/priv/static/static/js/19.1fd4da643df0abf89122.js.map b/priv/static/static/js/19.1fd4da643df0abf89122.js.map new file mode 100644 index 000000000..010c8674d --- /dev/null +++ b/priv/static/static/js/19.1fd4da643df0abf89122.js.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/19.1fd4da643df0abf89122.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/19.233c81ac2c28d55e9f13.js.map b/priv/static/static/js/19.233c81ac2c28d55e9f13.js.map deleted file mode 100644 index cd3f7354d..000000000 --- a/priv/static/static/js/19.233c81ac2c28d55e9f13.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/19.233c81ac2c28d55e9f13.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/2.422e6c756ac673a6fd44.js b/priv/static/static/js/2.422e6c756ac673a6fd44.js new file mode 100644 index 000000000..9fb47e2bf --- /dev/null +++ b/priv/static/static/js/2.422e6c756ac673a6fd44.js @@ -0,0 +1,2 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{599:function(t,e,s){var a=s(600);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(7).default)("a45e17ec",a,!0,{})},600: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{margin-bottom:.5em}.settings_tab-switcher .setting-item>div:last-child{margin-bottom:0}.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}",""])},601:function(t,e,s){var a=s(602);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(7).default)("5bed876c",a,!0,{})},602:function(t,e,s){(t.exports=s(6)(!1)).push([t.i,".importer-uploading{font-size:1.5em;margin:.25em}",""])},603:function(t,e,s){var a=s(604);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(7).default)("432fc7c6",a,!0,{})},604:function(t,e,s){(t.exports=s(6)(!1)).push([t.i,".exporter-processing{margin:.25em}",""])},605:function(t,e,s){var a=s(606);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(7).default)("33ca0d90",a,!0,{})},606: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}",""])},607:function(t,e,s){var a=s(608);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(7).default)("3a9ec1bf",a,!0,{})},608: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}",""])},609:function(t,e,s){var a=s(610);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(7).default)("211aa67c",a,!0,{})},610: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}",""])},611:function(t,e,s){var a=s(612);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(7).default)("7ea980e0",a,!0,{})},612: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}",""])},613:function(t,e,s){var a=s(614);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(7).default)("39a942c3",a,!0,{})},614: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}",""])},615:function(t,e,s){var a=s(616);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(7).default)("3724291e",a,!0,{})},616: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}",""])},617:function(t,e,s){},621:function(t,e,s){var a=s(622);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(7).default)("a588473e",a,!0,{})},622: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}",""])},623:function(t,e,s){var a=s(624);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(7).default)("4065bf15",a,!0,{})},624: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)}",""])},626:function(t,e,s){var a=s(627);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(7).default)("27925ae8",a,!0,{})},627: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>.icon-container{width:20px;-ms-flex-item-align:center;-ms-grid-row-align:center;align-self:center;margin:0 .2em .5em}",""])},628:function(t,e,s){var a=s(629);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(7).default)("0dfd0b33",a,!0,{})},629: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}",""])},632:function(t,e,s){var a=s(633);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(7).default)("4fafab12",a,!0,{})},633: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: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}",""])},634:function(t,e,s){var a=s(635);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(7).default)("7e57f952",a,!0,{})},635: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}',""])},636:function(t,e,s){var a=s(637);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(7).default)("6c632637",a,!0,{})},637: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}",""])},638:function(t,e,s){var a=s(639);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(7).default)("d219da80",a,!0,{})},639: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 .btn,.shadow-control .shadow-tweak .id-control .select{min-width:1px;margin-right:5px}.shadow-control .shadow-tweak .id-control .btn{padding:0 .4em;margin:0 .1em}.shadow-control .shadow-tweak .id-control .select{-ms-flex:1;flex:1}.shadow-control .shadow-tweak .id-control .select select{-ms-flex-item-align:initial;-ms-grid-row-align:initial;align-self:auto}",""])},640:function(t,e,s){var a=s(641);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(7).default)("d9c0acde",a,!0,{})},641:function(t,e,s){(t.exports=s(6)(!1)).push([t.i,".font-control input.custom-font{min-width:10em}.font-control.custom .select{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}",""])},642:function(t,e,s){var a=s(643);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(7).default)("b94bc120",a,!0,{})},643: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}",""])},644:function(t,e,s){var a=s(645);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(7).default)("66a4eaba",a,!0,{})},645:function(t,e,s){(t.exports=s(6)(!1)).push([t.i,".import-export-container{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:baseline;align-items:baseline;-ms-flex-pack:center;justify-content:center}",""])},646:function(t,e,s){var a=s(647);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(7).default)("6fe23c76",a,!0,{})},647: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}",""])},649:function(t,e,s){"use strict";s.r(e);var a=s(145),n=s(2),o=s.n(n),i=s(3),r=s(1);i.c.add(r.m,r.db);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(601)},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 btn-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(603)},v=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 btn-default",on:{click:t.process}},[t._v("\n "+t._s(t.exportButtonLabel)+"\n ")])])},[],!1,m,null,null).exports,h=s(59),f=s(5);function b(t,e){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),s.push.apply(s,a)}return s}var g={data:function(){return{activeTab:"profile",newDomainToMute:""}},created:function(){this.$store.dispatch("fetchTokens")},components:{Importer:d,Exporter:v,Checkbox:h.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),I={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 S=function(t){s(609)},j=Object(c.a)(I,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 btn-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 btn-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,S,null,null).exports,F={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 E=function(t){s(611)},R=Object(c.a)(F,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 btn-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 btn-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,E,null,null).exports,B=s(84),A={props:["domain"],components:{ProgressButton:B.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(613)},U=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 btn-default",attrs:{click:t.unmuteDomain}},[t._v("\n "+t._s(t.$t("domain_mute_card.unmute"))+"\n "),s("template",{slot:"progress"},[t._v("\n "+t._s(t.$t("domain_mute_card.unmute_progress"))+"\n ")])],2):s("ProgressButton",{staticClass:"btn btn-default",attrs:{click:t.muteDomain}},[t._v("\n "+t._s(t.$t("domain_mute_card.mute"))+"\n "),s("template",{slot:"progress"},[t._v("\n "+t._s(t.$t("domain_mute_card.mute_progress"))+"\n ")])],2)],1)},[],!1,M,null,null).exports,D={components:{List:s(57).a,Checkbox:h.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 V=function(t){s(615)},N=Object(c.a)(D,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 a=e.item;return[s("div",{staticClass:"selectable-list-item-inner",class:{"selectable-list-item-selected-inner":t.isSelected(a)}},[s("div",{staticClass:"selectable-list-checkbox-wrapper"},[s("Checkbox",{attrs:{checked:t.isSelected(a)},on:{change:function(e){return t.toggle(e,a)}}})],1),t._v(" "),t._t("item",null,{item:a})],2)]}}],null,!0)},[t._v(" "),s("template",{slot:"empty"},[t._t("empty")],2)],2)],1)},[],!1,V,null,null).exports,W=s(195),z=s.n(W),q=s(9),G=s.n(q),H=s(12),K=s.n(H),J=s(8),X=s.n(J),Q=s(196),Y=s.n(Q),Z=s(197),tt=(s(617),s(56));function et(t,e){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),s.push.apply(s,a)}return s}function st(t){for(var e=1;e0?s("ProgressButton",{staticClass:"btn btn-default bulk-action-button",attrs:{click:function(){return t.blockUsers(a)}}},[t._v("\n "+t._s(t.$t("user_card.block"))+"\n "),s("template",{slot:"progress"},[t._v("\n "+t._s(t.$t("user_card.block_progress"))+"\n ")])],2):t._e(),t._v(" "),a.length>0?s("ProgressButton",{staticClass:"btn btn-default",attrs:{click:function(){return t.unblockUsers(a)}}},[t._v("\n "+t._s(t.$t("user_card.unblock"))+"\n "),s("template",{slot:"progress"},[t._v("\n "+t._s(t.$t("user_card.unblock_progress"))+"\n ")])],2):t._e()],1)]}},{key:"item",fn:function(t){var e=t.item;return[s("BlockCard",{attrs:{"user-id":e}})]}}])},[t._v(" "),t._v(" "),s("template",{slot:"empty"},[t._v("\n "+t._s(t.$t("settings.no_blocks"))+"\n ")])],2)],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 a=e.selected;return[s("div",{staticClass:"bulk-actions"},[a.length>0?s("ProgressButton",{staticClass:"btn btn-default",attrs:{click:function(){return t.muteUsers(a)}}},[t._v("\n "+t._s(t.$t("user_card.mute"))+"\n "),s("template",{slot:"progress"},[t._v("\n "+t._s(t.$t("user_card.mute_progress"))+"\n ")])],2):t._e(),t._v(" "),a.length>0?s("ProgressButton",{staticClass:"btn btn-default",attrs:{click:function(){return t.unmuteUsers(a)}}},[t._v("\n "+t._s(t.$t("user_card.unmute"))+"\n "),s("template",{slot:"progress"},[t._v("\n "+t._s(t.$t("user_card.unmute_progress"))+"\n ")])],2):t._e()],1)]}},{key:"item",fn:function(t){var e=t.item;return[s("MuteCard",{attrs:{"user-id":e}})]}}])},[t._v(" "),t._v(" "),s("template",{slot:"empty"},[t._v("\n "+t._s(t.$t("settings.no_mutes"))+"\n ")])],2)],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 a=e.selected;return[s("div",{staticClass:"bulk-actions"},[a.length>0?s("ProgressButton",{staticClass:"btn btn-default",attrs:{click:function(){return t.unmuteDomains(a)}}},[t._v("\n "+t._s(t.$t("domain_mute_card.unmute"))+"\n "),s("template",{slot:"progress"},[t._v("\n "+t._s(t.$t("domain_mute_card.unmute_progress"))+"\n ")])],2):t._e()],1)]}},{key:"item",fn:function(t){var e=t.item;return[s("DomainMuteCard",{attrs:{domain:e}})]}}])},[t._v(" "),t._v(" "),s("template",{slot:"empty"},[t._v("\n "+t._s(t.$t("settings.no_mutes"))+"\n ")])],2)],1)])],1)])},[],!1,lt,null,null).exports,ut={data:function(){return{activeTab:"profile",notificationSettings:this.$store.state.users.currentUser.notification_settings,newDomainToMute:""}},components:{Checkbox:h.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 btn-default",on:{click:t.updateNotificationSettings}},[t._v("\n "+t._s(t.$t("general.submit"))+"\n ")])])])},[],!1,null,null,null).exports,pt=s(618),mt=s.n(pt),vt=s(40),ht=s.n(vt),ft=s(101);function bt(t,e){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),s.push.apply(s,a)}return s}function gt(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")}}},Ct=Object(c.a)(xt,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("Checkbox",{model:{value:t.notificationVisibility.likes,callback:function(e){t.$set(t.notificationVisibility,"likes",e)},expression:"notificationVisibility.likes"}},[t._v("\n "+t._s(t.$t("settings.notification_visibility_likes"))+"\n ")])],1),t._v(" "),s("li",[s("Checkbox",{model:{value:t.notificationVisibility.repeats,callback:function(e){t.$set(t.notificationVisibility,"repeats",e)},expression:"notificationVisibility.repeats"}},[t._v("\n "+t._s(t.$t("settings.notification_visibility_repeats"))+"\n ")])],1),t._v(" "),s("li",[s("Checkbox",{model:{value:t.notificationVisibility.follows,callback:function(e){t.$set(t.notificationVisibility,"follows",e)},expression:"notificationVisibility.follows"}},[t._v("\n "+t._s(t.$t("settings.notification_visibility_follows"))+"\n ")])],1),t._v(" "),s("li",[s("Checkbox",{model:{value:t.notificationVisibility.mentions,callback:function(e){t.$set(t.notificationVisibility,"mentions",e)},expression:"notificationVisibility.mentions"}},[t._v("\n "+t._s(t.$t("settings.notification_visibility_mentions"))+"\n ")])],1),t._v(" "),s("li",[s("Checkbox",{model:{value:t.notificationVisibility.moves,callback:function(e){t.$set(t.notificationVisibility,"moves",e)},expression:"notificationVisibility.moves"}},[t._v("\n "+t._s(t.$t("settings.notification_visibility_moves"))+"\n ")])],1),t._v(" "),s("li",[s("Checkbox",{model:{value:t.notificationVisibility.emojiReactions,callback:function(e){t.$set(t.notificationVisibility,"emojiReactions",e)},expression:"notificationVisibility.emojiReactions"}},[t._v("\n "+t._s(t.$t("settings.notification_visibility_emoji_reactions"))+"\n ")])],1)])]),t._v(" "),s("div",[t._v("\n "+t._s(t.$t("settings.replies_in_timeline"))+"\n "),s("label",{staticClass:"select",attrs:{for:"replyVisibility"}},[s("select",{directives:[{name:"model",rawName:"v-model",value:t.replyVisibility,expression:"replyVisibility"}],attrs:{id:"replyVisibility"},on:{change:function(e){var s=Array.prototype.filter.call(e.target.options,function(t){return t.selected}).map(function(t){return"_value"in t?t._value:t.value});t.replyVisibility=e.target.multiple?s:s[0]}}},[s("option",{attrs:{value:"all",selected:""}},[t._v(t._s(t.$t("settings.reply_visibility_all")))]),t._v(" "),s("option",{attrs:{value:"following"}},[t._v(t._s(t.$t("settings.reply_visibility_following")))]),t._v(" "),s("option",{attrs:{value:"self"}},[t._v(t._s(t.$t("settings.reply_visibility_self")))])]),t._v(" "),s("FAIcon",{staticClass:"select-down-icon",attrs:{icon:"chevron-down"}})],1)]),t._v(" "),s("div",[s("Checkbox",{model:{value:t.hidePostStats,callback:function(e){t.hidePostStats=e},expression:"hidePostStats"}},[t._v("\n "+t._s(t.$t("settings.hide_post_stats"))+" "+t._s(t.$t("settings.instance_default",{value:t.hidePostStatsLocalizedValue}))+"\n ")])],1),t._v(" "),s("div",[s("Checkbox",{model:{value:t.hideUserStats,callback:function(e){t.hideUserStats=e},expression:"hideUserStats"}},[t._v("\n "+t._s(t.$t("settings.hide_user_stats"))+" "+t._s(t.$t("settings.instance_default",{value:t.hideUserStatsLocalizedValue}))+"\n ")])],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"}],attrs:{id:"muteWords"},domProps:{value:t.muteWordsString},on:{input:function(e){e.target.composing||(t.muteWordsString=e.target.value)}}})]),t._v(" "),s("div",[s("Checkbox",{model:{value:t.hideFilteredStatuses,callback:function(e){t.hideFilteredStatuses=e},expression:"hideFilteredStatuses"}},[t._v("\n "+t._s(t.$t("settings.hide_filtered_statuses"))+" "+t._s(t.$t("settings.instance_default",{value:t.hideFilteredStatusesLocalizedValue}))+"\n ")])],1)])])},[],!1,null,null,null).exports,kt=s(4),yt=s.n(kt),$t={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 Lt=function(t){s(623)},Tt=Object(c.a)($t,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,Lt,null,null).exports,Ot={props:["disabled"],data:function(){return{}},methods:{confirm:function(){this.$emit("confirm")},cancel:function(){this.$emit("cancel")}}},Pt=Object(c.a)(Ot,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",[t._t("default"),t._v(" "),s("button",{staticClass:"btn btn-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 btn-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 It(t,e){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),s.push.apply(s,a)}return s}var St={props:["settings"],data:function(){return{error:!1,currentPassword:"",deactivate:!1,inProgress:!1}},components:{confirm:Pt},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 yt.a.async(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,yt.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 Et=function(t){s(621)},Rt=Object(c.a)(Ft,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 btn-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 btn-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 btn-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 btn-default",on:{click:t.doConfirmOTP}},[t._v("\n "+t._s(t.$t("settings.mfa.confirm_and_enable"))+"\n ")]),t._v(" "),s("button",{staticClass:"btn btn-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,Et,null,null).exports,Bt={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:B.a,Mfa:Rt,Checkbox:h.a},computed:{user:function(){return this.$store.state.users.currentUser},pleromaBackend:function(){return this.$store.state.instance.pleromaBackend},oauthTokens:function(){return this.$store.state.oauthTokens.tokens.map(function(t){return{id:t.id,appName:t.app_name,validUntil:new Date(t.valid_until).toLocaleDateString()}})}},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)}}},At=Object(c.a)(Bt,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 btn-default",on:{click:t.changeEmail}},[t._v("\n "+t._s(t.$t("general.submit"))+"\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 btn-default",on:{click:t.changePassword}},[t._v("\n "+t._s(t.$t("general.submit"))+"\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 btn-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 btn-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 btn-default",on:{click:t.confirmDelete}},[t._v("\n "+t._s(t.$t("general.submit"))+"\n ")])])],1)},[],!1,null,null,null).exports,Mt=s(193),Ut=s.n(Mt),Dt=s(102),Vt=s.n(Dt),Nt=s(24),Wt=s.n(Nt),zt=s(630);s(631);i.c.add(r.db,r.m);var qt={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,submitError:null}},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")},submitErrorMsg:function(){return this.submitError&&this.submitError instanceof Error?this.submitError.toString():this.submitError}},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.avatarUploadError=null,this.submitHandler(e&&this.cropper,this.file).then(function(){return t.destroy()}).catch(function(e){t.submitError=e}).finally(function(){t.submitting=!1})},pickImage:function(){this.$refs.input.click()},createCropper:function(){this.cropper=new zt.a(this.$refs.img,this.cropperOptions)},getTriggerDOM:function(){return"object"===Wt()(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)}},clearError:function(){this.submitError=null}},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 Gt=function(t){s(628)},Ht=Object(c.a)(qt,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:"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:"btn",attrs:{type:"button",disabled:t.submitting},domProps:{textContent:t._s(t.cancelText)},on:{click:t.destroy}}),t._v(" "),s("button",{staticClass:"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._v(" "),t.submitError?s("div",{staticClass:"alert error"},[t._v("\n "+t._s(t.submitErrorMsg)+"\n "),s("FAIcon",{staticClass:"fa-scale-110 fa-old-padding",attrs:{icon:"times"},on:{click:t.clearError}})],1):t._e()]):t._e(),t._v(" "),s("input",{ref:"input",staticClass:"image-cropper-img-input",attrs:{type:"file",accept:t.mimes}})])},[],!1,Gt,null,null).exports,Kt=s(201),Jt=s(138),Xt=s(200),Qt=s(139);i.c.add(r.db,r.L,r.m);var Yt={data:function(){return{newName:this.$store.state.users.currentUser.name,newBio:Ut()(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,bannerUploadError:null,backgroundUploadError:null}},components:{ScopeSelector:Kt.a,ImageCropper:Ht,EmojiInput:Xt.a,Autosuggest:O,ProgressButton:B.a,Checkbox:h.a},computed:{user:function(){return this.$store.state.users.currentUser},emojiUserSuggestor:function(){var t=this;return Object(Qt.a)({emoji:[].concat(K()(this.$store.state.instance.emoji),K()(this.$store.state.instance.customEmoji)),users:this.$store.state.users.users,updateUsersList:function(e){return t.$store.dispatch("searchUsers",{query:e})}})},emojiSuggestor:function(){return Object(Qt.a)({emoji:[].concat(K()(this.$store.state.instance.emoji),K()(this.$store.state.instance.customEmoji))})},userSuggestor:function(){var t=this;return Object(Qt.a)({users:this.$store.state.users.users,updateUsersList:function(e){return t.$store.dispatch("searchUsers",{query:e})}})},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),Vt()(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 n=Jt.a.fileSizeFormat(a.size),o=Jt.a.fileSizeFormat(this.$store.state.instance[t+"limit"]);this[t+"UploadError"]=[this.$t("upload.error.base"),this.$t("upload.error.file_too_big",{filesize:n.num,filesizeunit:n.unit,allowedsize:o.num,allowedsizeunit:o.unit})].join(" ")}else{var i=new FileReader;i.onload=function(e){var n=e.target.result;s[t+"Preview"]=n,s[t]=a},i.readAsDataURL(a)}},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(a,n){function o(t){s.$store.state.api.backendInteractor.updateProfileImages({avatar:t}).then(function(t){s.$store.commit("addNewUsers",[t]),s.$store.commit("setCurrentUser",t),a()}).catch(function(t){n(new Error(s.$t("upload.error.base")+" "+t.message))})}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(function(t){e.bannerUploadError=e.$t("upload.error.base")+" "+t.message}).then(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){t.error?e.backgroundUploadError=e.$t("upload.error.base")+t.error:(e.$store.commit("addNewUsers",[t]),e.$store.commit("setCurrentUser",t),e.backgroundPreview=null),e.backgroundUploading=!1}))}}};var Zt=function(t){s(626)},te=Object(c.a)(Yt,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"}],attrs:{id:"username",classname:"name-changer"},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"}],attrs:{classname:"bio"},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,a){return s("div",{key:a,staticClass:"profile-fields"},[s("EmojiInput",{attrs:{"enable-emoji-picker":"","hide-emoji-button":"",suggest:t.userSuggestor},model:{value:t.newFields[a].name,callback:function(e){t.$set(t.newFields[a],"name",e)},expression:"newFields[i].name"}},[s("input",{directives:[{name:"model",rawName:"v-model",value:t.newFields[a].name,expression:"newFields[i].name"}],attrs:{placeholder:t.$t("settings.profile_fields.name")},domProps:{value:t.newFields[a].name},on:{input:function(e){e.target.composing||t.$set(t.newFields[a],"name",e.target.value)}}})]),t._v(" "),s("EmojiInput",{attrs:{"enable-emoji-picker":"","hide-emoji-button":"",suggest:t.userSuggestor},model:{value:t.newFields[a].value,callback:function(e){t.$set(t.newFields[a],"value",e)},expression:"newFields[i].value"}},[s("input",{directives:[{name:"model",rawName:"v-model",value:t.newFields[a].value,expression:"newFields[i].value"}],attrs:{placeholder:t.$t("settings.profile_fields.value")},domProps:{value:t.newFields[a].value},on:{input:function(e){e.target.composing||t.$set(t.newFields[a],"value",e.target.value)}}})]),t._v(" "),s("div",{staticClass:"icon-container"},[s("FAIcon",{directives:[{name:"show",rawName:"v-show",value:t.newFields.length>1,expression:"newFields.length > 1"}],attrs:{icon:"times"},on:{click:function(e){return t.deleteField(a)}}})],1)],1)}),t._v(" "),t.newFields.length0?s("li",[s("div",[t._v("\n "+t._s(t.$t("settings.post_status_content_type"))+"\n "),s("label",{staticClass:"select",attrs:{for:"postContentType"}},[s("select",{directives:[{name:"model",rawName:"v-model",value:t.postContentType,expression:"postContentType"}],attrs:{id:"postContentType"},on:{change:function(e){var s=Array.prototype.filter.call(e.target.options,function(t){return t.selected}).map(function(t){return"_value"in t?t._value:t.value});t.postContentType=e.target.multiple?s:s[0]}}},t._l(t.postFormats,function(e){return s("option",{key:e,domProps:{value:e}},[t._v("\n "+t._s(t.$t('post_status.content_type["'+e+'"]'))+"\n "+t._s(t.postContentTypeDefaultValue===e?t.$t("settings.instance_default_simple"):"")+"\n ")])}),0),t._v(" "),s("FAIcon",{staticClass:"select-down-icon",attrs:{icon:"chevron-down"}})],1)])]):t._e(),t._v(" "),s("li",[s("Checkbox",{model:{value:t.minimalScopesMode,callback:function(e){t.minimalScopesMode=e},expression:"minimalScopesMode"}},[t._v("\n "+t._s(t.$t("settings.minimal_scopes_mode"))+" "+t._s(t.$t("settings.instance_default",{value:t.minimalScopesModeLocalizedValue}))+"\n ")])],1),t._v(" "),s("li",[s("Checkbox",{model:{value:t.autohideFloatingPostButton,callback:function(e){t.autohideFloatingPostButton=e},expression:"autohideFloatingPostButton"}},[t._v("\n "+t._s(t.$t("settings.autohide_floating_post_button"))+"\n ")])],1),t._v(" "),s("li",[s("Checkbox",{model:{value:t.padEmoji,callback:function(e){t.padEmoji=e},expression:"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("Checkbox",{model:{value:t.hideAttachments,callback:function(e){t.hideAttachments=e},expression:"hideAttachments"}},[t._v("\n "+t._s(t.$t("settings.hide_attachments_in_tl"))+"\n ")])],1),t._v(" "),s("li",[s("Checkbox",{model:{value:t.hideAttachmentsInConv,callback:function(e){t.hideAttachmentsInConv=e},expression:"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",{directives:[{name:"model",rawName:"v-model.number",value:t.maxThumbnails,expression:"maxThumbnails",modifiers:{number:!0}}],staticClass:"number-input",attrs:{id:"maxThumbnails",type:"number",min:"0",step:"1"},domProps:{value:t.maxThumbnails},on:{input:function(e){e.target.composing||(t.maxThumbnails=t._n(e.target.value))},blur:function(e){return t.$forceUpdate()}}})]),t._v(" "),s("li",[s("Checkbox",{model:{value:t.hideNsfw,callback:function(e){t.hideNsfw=e},expression:"hideNsfw"}},[t._v("\n "+t._s(t.$t("settings.nsfw_clickthrough"))+"\n ")])],1),t._v(" "),s("ul",{staticClass:"setting-list suboptions"},[s("li",[s("Checkbox",{attrs:{disabled:!t.hideNsfw},model:{value:t.preloadImage,callback:function(e){t.preloadImage=e},expression:"preloadImage"}},[t._v("\n "+t._s(t.$t("settings.preload_images"))+"\n ")])],1),t._v(" "),s("li",[s("Checkbox",{attrs:{disabled:!t.hideNsfw},model:{value:t.useOneClickNsfw,callback:function(e){t.useOneClickNsfw=e},expression:"useOneClickNsfw"}},[t._v("\n "+t._s(t.$t("settings.use_one_click_nsfw"))+"\n ")])],1)]),t._v(" "),s("li",[s("Checkbox",{model:{value:t.stopGifs,callback:function(e){t.stopGifs=e},expression:"stopGifs"}},[t._v("\n "+t._s(t.$t("settings.stop_gifs"))+"\n ")])],1),t._v(" "),s("li",[s("Checkbox",{model:{value:t.loopVideo,callback:function(e){t.loopVideo=e},expression:"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("Checkbox",{attrs:{disabled:!t.loopVideo||!t.loopSilentAvailable},model:{value:t.loopVideoSilentOnly,callback:function(e){t.loopVideoSilentOnly=e},expression:"loopVideoSilentOnly"}},[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("Checkbox",{model:{value:t.playVideosInModal,callback:function(e){t.playVideosInModal=e},expression:"playVideosInModal"}},[t._v("\n "+t._s(t.$t("settings.play_videos_in_modal"))+"\n ")])],1),t._v(" "),s("li",[s("Checkbox",{model:{value:t.useContainFit,callback:function(e){t.useContainFit=e},expression:"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("Checkbox",{model:{value:t.webPushNotifications,callback:function(e){t.webPushNotifications=e},expression:"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("Checkbox",{model:{value:t.greentext,callback:function(e){t.greentext=e},expression:"greentext"}},[t._v("\n "+t._s(t.$t("settings.greentext"))+" "+t._s(t.$t("settings.instance_default",{value:t.greentextLocalizedValue}))+"\n ")])],1)])])])},[],!1,null,null,null).exports,le={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}}},ce=Object(c.a)(le,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,ue=s(11),de=s(34),pe=s(31),me=s(43),ve={components:{Checkbox:h.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(ue.f)(this.value||this.fallback)},transparentColor:function(){return"transparent"===this.value},computedColor:function(){return this.value&&this.value.startsWith("--")}}};var he=function(t){s(634),s(636)},fe=Object(c.a)(ve,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,he,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,ge={components:{Checkbox:h.a},props:["name","value","fallback","disabled"],computed:{present:function(){return void 0!==this.value}}},_e=Object(c.a)(ge,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 we(t,e){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),s.push.apply(s,a)}return s}i.c.add(r.i,r.l,r.db,r.L);var xe=function(){return function(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:{})},Ce={props:["value","fallback","ready"],data:function(){return{selectedId:0,cValue:(this.value||this.fallback||[]).map(xe)}},components:{ColorInput:fe,OpacityInput:_e},methods:{add:function(){this.cValue.push(xe(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]:xe({})},currentFallback:function(){return this.ready&&this.anyShadowsFallback?this.fallback[this.selectedId]:xe({})},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,a=e.target,n=!!a.checked;if(Array.isArray(s)){var o=t._i(s,null);a.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",n)}}}),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,ke,null,null).exports;i.c.add(r.i);var $e={props:["name","label","value","fallback","options","no-inherit"],data:function(){return{lValue:this.value,availableOptions:[this.noInherit?"":"inherit","custom"].concat(K()(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 Le=function(t){s(640)},Te=Object(c.a)($e,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("label",{staticClass:"select",attrs:{for:t.name+"-font-switcher",disabled:!t.present}},[s("select",{directives:[{name:"model",rawName:"v-model",value:t.preset,expression:"preset"}],staticClass:"font-switcher",attrs:{id:t.name+"-font-switcher",disabled:!t.present},on:{change:function(e){var s=Array.prototype.filter.call(e.target.options,function(t){return t.selected}).map(function(t){return"_value"in t?t._value:t.value});t.preset=e.target.multiple?s:s[0]}}},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(" "),s("FAIcon",{staticClass:"select-down-icon",attrs:{icon:"chevron-down"}})],1),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,Le,null,null).exports;i.c.add(r.a,r.t,r.bb);var Oe={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"),a=this.contrast.text;return this.$t("settings.style.common.contrast.hint",{level:e,context:s,ratio:a})},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"),a=this.contrast.text;return this.$t("settings.style.common.contrast.hint",{level:e,context:s,ratio:a})}}};var Pe=function(t){s(642)},Ie=Object(c.a)(Oe,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,Pe,null,null).exports,Se={props:["exportObject","importLabel","exportLabel","importFailedText","validator","onImport","onImportFailure"],data:function(){return{importFailed:!1}},methods:{exportData:function(){var t=JSON.stringify(this.exportObject,null,2),e=document.createElement("a");e.setAttribute("download","pleroma_theme.json"),e.setAttribute("href","data:application/json;base64,"+window.btoa(t)),e.style.display="none",document.body.appendChild(e),e.click(),document.body.removeChild(e)},importData:function(){var t=this;this.importFailed=!1;var e=document.createElement("input");e.setAttribute("type","file"),e.setAttribute("accept",".json"),e.addEventListener("change",function(e){if(e.target.files[0]){var s=new FileReader;s.onload=function(e){var s=e.target;try{var a=JSON.parse(s.result);t.validator(a)?t.onImport(a):t.importFailed=!0}catch(e){t.importFailed=!0}},s.readAsText(e.target.files[0])}}),document.body.appendChild(e),e.click(),document.body.removeChild(e)}}};var je=function(t){s(644)},Fe=Object(c.a)(Se,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"import-export-container"},[t._t("before"),t._v(" "),s("button",{staticClass:"btn",on:{click:t.exportData}},[t._v("\n "+t._s(t.exportLabel)+"\n ")]),t._v(" "),s("button",{staticClass:"btn",on:{click:t.importData}},[t._v("\n "+t._s(t.importLabel)+"\n ")]),t._v(" "),t._t("afterButtons"),t._v(" "),t.importFailed?s("p",{staticClass:"alert error"},[t._v("\n "+t._s(t.importFailedText)+"\n ")]):t._e(),t._v(" "),t._t("afterError")],2)},[],!1,je,null,null).exports;i.c.add(r.db,r.X,r.P,r.O);var Ee=function(t){s(646)},Re=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"},[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"},[t._v("\n "+t._s(t.$t("settings.style.preview.button"))+"\n ")])])])])])},[],!1,Ee,null,null).exports;function Be(t,e){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),s.push.apply(s,a)}return s}function Ae(t){for(var e=1;eme.a)return t(e+"future_version_imported")+" "+t(i?e+"snapshot_missing":e+"snapshot_present");if(nme.a)return t(e+"fe_downgraded")+" "+t(i?e+"migration_snapshot_ok":e+"migration_snapshot_gone");if(n=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(K()(Object.values(this.preview.rules)),["color: var(--text)","font-family: var(--interfaceFont, sans-serif)"]).join(";"):""},shadowsAvailable:function(){return Object.keys(de.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:me.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:Ae({themeEngineVersion:me.a},this.previewTheme),source:e}}},components:{ColorInput:fe,OpacityInput:_e,RangeInput:be,ContrastRatio:Ie,ShadowControl:ye,FontControl:Te,TabSwitcher:a.a,Preview:Re,ExportImport:Fe,Checkbox:h.a},methods:{loadTheme:function(t,e){var s=t.theme,a=t.source,n=t._pleroma_theme_version,o=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(this.dismissWarning(),!a&&!s)throw new Error("Can't load theme: empty");var i="localStorage"!==e||s.colors?n:"l1",r=(s||{}).themeEngineVersion,l=(a||{}).themeEngineVersion||2,c=l===me.a,u=void 0!==s&&void 0!==a&&l!==r,d=a&&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:!a,themeEngineVersion:l,type:"wrong_version"}):this.themeWarning={origin:e,noActionsPossible:!0,themeEngineVersion:l,type:"no_snapshot_old_version"}),this.normalizeLocalState(s,i,a,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,a=s.customTheme,n=s.customThemeSource;a||n?this.loadTheme({theme:a,source:e?a:n},"localStorage",t):this.loadTheme(this.$store.state.instance.themeData,"defaults",t)},setCustomTheme:function(){this.$store.dispatch("setOption",{name:"customTheme",value:Ae({themeEngineVersion:me.a},this.previewTheme)}),this.$store.dispatch("setOption",{name:"customThemeSource",value:{themeEngineVersion:me.a,shadows:this.shadowsLocal,fonts:this.fontsLocal,opacity:this.currentOpacity,colors:this.currentColors,radii:this.currentRadii}})},updatePreviewColorsAndShadows:function(){this.previewColors=Object(de.e)({opacity:this.currentOpacity,colors:this.currentColors}),this.previewShadows=Object(de.h)({shadows:this.shadowsLocal,opacity:this.previewTheme.opacity,themeEngineVersion:this.engineVersion},this.previewColors.theme.colors,this.previewColors.mod)},onImport:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.tempImportFile=t,this.loadTheme(t,"file",e)},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!Me.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,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2?arguments[2]:void 0,o=arguments.length>3&&void 0!==arguments[3]&&arguments[3];void 0!==n&&(o||n.themeEngineVersion===me.a)?(e=n,a=n.themeEngineVersion):e=t;var i=e.radii||e,r=e.opacity,l=e.shadows||{},c=e.fonts||{},u=e.themeEngineVersion?e.colors||e:Object(de.c)(e.colors||e);if(0===a&&(e.version&&(a=e.version),void 0===u.text&&void 0!==u.fg&&(a=1),void 0!==u.text&&void 0!==u.fg&&(a=2)),this.engineVersion=a,1===a&&(this.fgColorLocal=Object(ue.i)(u.btn),this.textColorLocal=Object(ue.i)(u.fg)),!this.keepColor){this.clearV1();var d=new Set(1!==a?Object.keys(pe.c):[]);1!==a&&"l1"!==a||d.add("bg").add("link").add("cRed").add("cBlue").add("cGreen").add("cOrange"),d.forEach(function(t){var e=u[t],a=Object(ue.i)(u[t]);s[t+"ColorLocal"]="#aN"===a?e:a})}r&&!this.keepOpacity&&(this.clearOpacity(),Object.entries(r).forEach(function(t){var e=G()(t,2),a=e[0],n=e[1];null==n||Number.isNaN(n)||(s[a+"OpacityLocal"]=n)})),this.keepRoundness||(this.clearRoundness(),Object.entries(i).forEach(function(t){var e=G()(t,2),a=e[0],n=e[1],o=a.endsWith("Radius")?a.split("Radius")[0]:a;s[o+"RadiusLocal"]=n})),this.keepShadows||(this.clearShadows(),this.shadowsLocal=2===a?Object(de.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(de.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(de.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(){this.dismissWarning(),1===this.selectedVersion?(this.keepRoundness||this.clearRoundness(),this.keepShadows||this.clearShadows(),this.keepOpacity||this.clearOpacity(),this.keepColor||(this.clearV1(),this.bgColorLocal=this.selected[1],this.fgColorLocal=this.selected[2],this.textColorLocal=this.selected[3],this.linkColorLocal=this.selected[4],this.cRedColorLocal=this.selected[5],this.cGreenColorLocal=this.selected[6],this.cBlueColorLocal=this.selected[7],this.cOrangeColorLocal=this.selected[8])):this.selectedVersion>=2&&this.normalizeLocalState(this.selected.theme,2,this.selected.source)}}};var De=function(t){s(632)},Ve=Object(c.a)(Ue,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",on:{click:t.forceLoad}},[t._v("\n "+t._s(t.$t("settings.style.switcher.use_source"))+"\n ")]),t._v(" "),s("button",{staticClass:"btn",on:{click:t.forceSnapshot}},[t._v("\n "+t._s(t.$t("settings.style.switcher.use_snapshot"))+"\n ")])]:t.themeWarning.noActionsPossible?[s("button",{staticClass:"btn",on:{click:t.dismissWarning}},[t._v("\n "+t._s(t.$t("general.dismiss"))+"\n ")])]:[s("button",{staticClass:"btn",on:{click:t.forceLoad}},[t._v("\n "+t._s(t.$t("settings.style.switcher.load_theme"))+"\n ")]),t._v(" "),s("button",{staticClass:"btn",on:{click:t.dismissWarning}},[t._v("\n "+t._s(t.$t("settings.style.switcher.keep_as_is"))+"\n ")])]],2)]):t._e(),t._v(" "),s("ExportImport",{attrs:{"export-object":t.exportedTheme,"export-label":t.$t("settings.export_theme"),"import-label":t.$t("settings.import_theme"),"import-failed-text":t.$t("settings.invalid_theme_imported"),"on-import":t.onImport,validator:t.importValidator}},[s("template",{slot:"before"},[s("div",{staticClass:"presets"},[t._v("\n "+t._s(t.$t("settings.presets"))+"\n "),s("label",{staticClass:"select",attrs:{for:"preset-switcher"}},[s("select",{directives:[{name:"model",rawName:"v-model",value:t.selected,expression:"selected"}],staticClass:"preset-switcher",attrs:{id:"preset-switcher"},on:{change:function(e){var s=Array.prototype.filter.call(e.target.options,function(t){return t.selected}).map(function(t){return"_value"in t?t._value:t.value});t.selected=e.target.multiple?s:s[0]}}},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}},[t._v("\n "+t._s(e[0]||e.name)+"\n ")])}),0),t._v(" "),s("FAIcon",{staticClass:"select-down-icon",attrs:{icon:"chevron-down"}})],1)])])],2)],1),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",on:{click:t.clearOpacity}},[t._v("\n "+t._s(t.$t("settings.style.switcher.clear_opacity"))+"\n ")]),t._v(" "),s("button",{staticClass:"btn",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",on:{click:t.clearOpacity}},[t._v("\n "+t._s(t.$t("settings.style.switcher.clear_opacity"))+"\n ")]),t._v(" "),s("button",{staticClass:"btn",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.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",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("label",{staticClass:"select",attrs:{for:"shadow-switcher"}},[s("select",{directives:[{name:"model",rawName:"v-model",value:t.shadowSelected,expression:"shadowSelected"}],staticClass:"shadow-switcher",attrs:{id:"shadow-switcher"},on:{change:function(e){var s=Array.prototype.filter.call(e.target.options,function(t){return t.selected}).map(function(t){return"_value"in t?t._value:t.value});t.shadowSelected=e.target.multiple?s:s[0]}}},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),t._v(" "),s("FAIcon",{staticClass:"select-down-icon",attrs:{icon:"chevron-down"}})],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,a=e.target,n=!!a.checked;if(Array.isArray(s)){var o=t._i(s,null);a.checked?o<0&&(t.currentShadowOverriden=s.concat([null])):o>-1&&(t.currentShadowOverriden=s.slice(0,o).concat(s.slice(o+1)))}else t.currentShadowOverriden=n}}}),t._v(" "),s("label",{staticClass:"checkbox-label",attrs:{for:"override"}})]),t._v(" "),s("button",{staticClass:"btn",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",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 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",on:{click:t.clearAll}},[t._v("\n "+t._s(t.$t("settings.style.switcher.reset"))+"\n ")])])],1)},[],!1,De,null,null).exports;i.c.add(r.jb,r.fb,r.z,r.J,r.d,r.p,r.x,r.D);var Ne={components:{TabSwitcher:a.a,DataImportExportTab:_,MutesAndBlocksTab:ct,NotificationsTab:dt,FilteringTab:Ct,SecurityTab:At,ProfileTab:te,GeneralTab:re,VersionTab:ce,ThemeTab:Ve},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 We=function(t){s(599)},ze=Object(c.a)(Ne,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,We,null,null);e.default=ze.exports}}]); +//# sourceMappingURL=2.422e6c756ac673a6fd44.js.map \ No newline at end of file diff --git a/priv/static/static/js/2.422e6c756ac673a6fd44.js.map b/priv/static/static/js/2.422e6c756ac673a6fd44.js.map new file mode 100644 index 000000000..92fdb4d2c --- /dev/null +++ b/priv/static/static/js/2.422e6c756ac673a6fd44.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/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/export_import/export_import.vue?5952","webpack:///./src/components/export_import/export_import.vue?aed6","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?0113","webpack:///./src/components/exporter/exporter.js","webpack:///./src/components/exporter/exporter.vue","webpack:///./src/components/exporter/exporter.vue?f896","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?7b44","webpack:///./src/components/mute_card/mute_card.js","webpack:///./src/components/mute_card/mute_card.vue","webpack:///./src/components/mute_card/mute_card.vue?6bc9","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?7cf0","webpack:///./src/components/selectable_list/selectable_list.js","webpack:///./src/components/selectable_list/selectable_list.vue","webpack:///./src/components/selectable_list/selectable_list.vue?5686","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?0687","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?6dcc","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?4eb6","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?da03","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?cdbe","webpack:///./src/components/settings_modal/tabs/security_tab/mfa.vue","webpack:///./src/components/settings_modal/tabs/security_tab/mfa.vue?8795","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?0d38","webpack:///./src/components/image_cropper/image_cropper.js","webpack:///./src/components/image_cropper/image_cropper.vue","webpack:///./src/components/image_cropper/image_cropper.vue?2185","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?f2c5","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?92a6","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?cca1","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?3162","webpack:///./src/components/font_control/font_control.js","webpack:///./src/components/font_control/font_control.vue","webpack:///./src/components/font_control/font_control.vue?6356","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/export_import/export_import.vue","webpack:///./src/components/export_import/export_import.vue","webpack:///./src/components/export_import/export_import.vue?9130","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?bd89","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?6680","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","__webpack_require__","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","_this","dismiss","then","__vue_styles__","context","importer_importer","Object","component_normalizer","importer","_vm","_h","$createElement","_c","_self","staticClass","ref","attrs","on","_v","spin","icon","click","_s","_e","Exporter","getContent","filename","exportButtonLabel","processingMessage","processing","process","fileToDownload","document","createElement","setAttribute","encodeURIComponent","style","display","body","appendChild","removeChild","setTimeout","exporter_vue_styles_","exporter_exporter","exporter","size","DataImportExportTab","activeTab","newDomainToMute","created","$store","dispatch","components","Checkbox","computed","_objectSpread","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","tabs_data_import_export_tab","data_import_export_tab","label","submit-handler","success-message","error-message","get-content","export-button-label","autosuggest","query","filter","placeholder","term","timeout","results","resultsVisible","filtered","watch","val","fetchResults","clearTimeout","onInputClick","onClickOutside","autosuggest_vue_styles_","autosuggest_autosuggest","directives","name","rawName","value","expression","domProps","$event","target","composing","length","_l","item","_t","BlockCard","progress","getters","findUser","userId","relationship","blocked","blocking","BasicUserCard","unblockUser","blockUser","_this2","block_card_vue_styles_","block_card_block_card","block_card","disabled","MuteCard","muted","muting","unmuteUser","muteUser","mute_card_vue_styles_","mute_card_mute_card","mute_card","DomainMuteCard","ProgressButton","domainMutes","includes","domain","unmuteDomain","muteDomain","domain_mute_card_vue_styles_","domain_mute_card_domain_mute_card","domain_mute_card","slot","SelectableList","List","items","Array","getKey","selected","allKeys","filteredSelected","key","indexOf","allSelected","noneSelected","someSelected","isSelected","toggle","checked","splice","toggleAll","slice","selectable_list_vue_styles_","selectable_list_selectable_list","selectable_list","indeterminate","get-key","scopedSlots","_u","fn","class","selectable-list-item-selected-inner","withSubscription","_ref","fetch","select","_ref$childPropName","childPropName","_ref$additionalPropNa","additionalPropNames","WrappedComponent","keys","getComponentProps","v","concat","Vue","component","toConsumableArray_default","loading","fetchedData","$props","refresh","isEmpty","fetchData","render","h","vue_fontawesome_index_es","with_subscription_objectSpread","defineProperty_default","$listeners","$scopedSlots","children","entries","$slots","_ref2","_ref3","slicedToArray_default","helper_default","BlockList","get","MuteList","DomainMuteList","MutesAndBlocks","TabSwitcher","Autosuggest","knownDomains","instance","activateTab","tabName","filterUnblockedUsers","userIds","reject","filterUnMutedUsers","queryUserIds","blockUsers","ids","unblockUsers","muteUsers","unmuteUsers","filterUnMutedDomains","urls","_this3","url","queryKnownDomains","_this4","Promise","resolve","toLowerCase","unmuteDomains","domains","mutes_and_blocks_tab_vue_styles_","tabs_mutes_and_blocks_tab","mutes_and_blocks_tab","scrollable-tabs","row","user-id","NotificationsTab","notificationSettings","notification_settings","updateNotificationSettings","settings","tabs_notifications_tab","notifications_tab","model","callback","$$v","$set","SharedComputedObject","shared_computed_object_objectSpread","instanceDefaultProperties","multiChoiceProperties","instanceDefaultConfig","reduce","acc","_ref4","configDefaultState","mergedConfig","set","_ref5","_ref6","useStreamingApi","e","console","faChevronDown","FilteringTab","muteWordsStringLocal","muteWords","filtering_tab_objectSpread","muteWordsString","filter_default","split","word","trim_default","notificationVisibility","handler","deep","replyVisibility","tabs_filtering_tab","filtering_tab","for","$$selectedVal","prototype","call","options","o","_value","multiple","hidePostStats","hidePostStatsLocalizedValue","hideUserStats","hideUserStatsLocalizedValue","hideFilteredStatuses","hideFilteredStatusesLocalizedValue","mfa_backup_codes","backupCodes","inProgress","codes","ready","displayTitle","mfa_backup_codes_vue_styles_","security_tab_mfa_backup_codes","code","Confirm","confirm","$emit","cancel","tabs_security_tab_confirm","security_tab_confirm","mfa_totp","currentPassword","deactivate","mfa_totp_objectSpread","isActivated","totp","doActivate","cancelDeactivate","doDeactivate","confirmDeactivate","mfaDisableOTP","password","res","Mfa","available","enabled","setupState","setupOTPState","getNewCodes","otpSettings","provisioning_uri","otpConfirmToken","readyInit","recovery-codes","RecoveryCodes","totp-item","qrcode","VueQrcode","mfa_objectSpread","canSetupOTP","setupInProgress","backupCodesPrepared","setupOTPInProgress","completedOTP","prepareOTP","confirmOTP","confirmNewBackupCodes","activateOTP","fetchBackupCodes","generateMfaBackupCodes","getBackupCodes","confirmBackupCodes","cancelBackupCodes","setupOTP","mfaSetupOTP","doConfirmOTP","mfaConfirmOTP","token","completeSetup","fetchSettings","cancelSetup","result","regenerator_default","a","async","_context","prev","next","awrap","settingsMFA","sent","abrupt","stop","mounted","_this5","mfa_vue_styles_","security_tab_mfa","mfa","activate","backup-codes","width","SecurityTab","newEmail","changeEmailError","changeEmailPassword","changedEmail","deletingAccount","deleteAccountConfirmPasswordInput","deleteAccountError","changePasswordInputs","changedPassword","changePasswordError","pleromaBackend","oauthTokens","tokens","oauthToken","appName","app_name","validUntil","Date","valid_until","toLocaleDateString","confirmDelete","deleteAccount","$router","changePassword","params","newPassword","newPasswordConfirmation","logout","changeEmail","email","replace","revokeToken","window","$i18n","t","security_tab_security_tab","security_tab","autocomplete","ImageCropper","trigger","Element","cropperOptions","aspectRatio","autoCropArea","viewMode","movable","zoomable","guides","mimes","saveButtonLabel","saveWithoutCroppingButtonlabel","cancelButtonLabel","cropper","undefined","dataUrl","submitError","saveText","saveWithoutCroppingText","cancelText","submitErrorMsg","toString","destroy","cropping","arguments","avatarUploadError","err","pickImage","createCropper","Cropper","img","getTriggerDOM","typeof_default","querySelector","readFile","fileInput","reader","FileReader","onload","readAsDataURL","clearError","addEventListener","beforeDestroy","removeEventListener","image_cropper_vue_styles_","image_cropper_image_cropper","image_cropper","src","alt","load","stopPropagation","textContent","accept","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","bannerUploadError","backgroundUploadError","ScopeSelector","EmojiInput","emojiUserSuggestor","suggestor","emoji","customEmoji","updateUsersList","emojiSuggestor","userSuggestor","fieldsLimits","maxFields","defaultAvatar","server","defaultBanner","isDefaultAvatar","baseAvatar","profile_image_url","isDefaultBanner","baseBanner","cover_photo","isDefaultBackground","background_image","avatarImgSrc","profile_image_url_original","bannerImgSrc","updateProfile","note","display_name","fields_attributes","el","merge","commit","changeVis","visibility","addField","deleteField","index","event","$delete","uploadFile","filesize","fileSizeFormatService","fileSizeFormat","allowedsize","num","filesizeunit","unit","allowedsizeunit","resetAvatar","submitAvatar","resetBanner","submitBanner","resetBackground","submitBackground","that","updateAvatar","avatar","updateProfileImages","message","getCroppedCanvas","toBlob","_this6","profile_tab_vue_styles_","tabs_profile_tab","profile_tab","enable-emoji-picker","suggest","classname","show-all","user-default","initial-scope","on-scope-change","_","hide-emoji-button","title","open","close","clearUploadError","index_es","free_solid_svg_icons_index_es","interface_language_switcher","languageCodes","messages","languages","languageNames","map_default","getLanguageName","language","interfaceLanguage","ja","ja_easy","zh","getName","interface_language_switcher_interface_language_switcher","langCode","faGlobe","GeneralTab","loopSilentAvailable","getOwnPropertyDescriptor","HTMLVideoElement","HTMLMediaElement","InterfaceLanguageSwitcher","general_tab_objectSpread","postFormats","instanceSpecificPanelPresent","showInstanceSpecificPanel","tabs_general_tab","general_tab","hideISP","hideMutedPosts","hideMutedPostsLocalizedValue","collapseMessageWithSubject","collapseMessageWithSubjectLocalizedValue","streaming","pauseOnUnfocused","emojiReactionsOnTimeline","virtualScrolling","scopeCopy","scopeCopyLocalizedValue","alwaysShowSubjectInput","alwaysShowSubjectInputLocalizedValue","subjectLineBehavior","subjectLineBehaviorDefaultValue","postContentType","postFormat","postContentTypeDefaultValue","minimalScopesMode","minimalScopesModeLocalizedValue","autohideFloatingPostButton","padEmoji","hideAttachments","hideAttachmentsInConv","modifiers","number","min","step","maxThumbnails","_n","blur","$forceUpdate","hideNsfw","preloadImage","useOneClickNsfw","stopGifs","loopVideo","loopVideoSilentOnly","playVideosInModal","useContainFit","webPushNotifications","greentext","greentextLocalizedValue","VersionTab","backendVersion","frontendVersion","frontendVersionLink","backendVersionLink","versionString","matches","match","tabs_version_tab","version_tab","href","color_input","checkbox_checkbox","fallback","Boolean","showOptionalTickbox","present","validColor","color_convert","transparentColor","computedColor","startsWith","color_input_vue_styles_","color_input_color_input","backgroundColor","range_input_range_input","max","hardMax","hardMin","opacity_input","opacity_input_opacity_input","faChevronUp","toModel","shadow_control_objectSpread","x","y","spread","inset","color","alpha","shadow_control","selectedId","cValue","ColorInput","OpacityInput","del","Math","moveUp","moveDn","beforeUpdate","anyShadows","anyShadowsFallback","currentFallback","moveUpValid","moveDnValid","usingFallback","rgb","hex2rgb","boxShadow","getCssShadow","shadow_control_vue_styles_","shadow_control_shadow_control","__r","shadow","fixed-width","isArray","_i","$$a","$$el","$$c","$$i","show-optional-tickbox","path","tag","font_control","lValue","availableOptions","noInherit","dValue","family","isCustom","preset","font_control_vue_styles_","font_control_font_control","custom","option","contrast_ratio","large","contrast","hint","levelVal","aaa","aa","level","ratio","text","hint_18pt","laaa","laa","contrast_ratio_vue_styles_","contrast_ratio_contrast_ratio","export_import","importFailed","exportData","stringified","JSON","stringify","exportObject","btoa","importData","filePicker","parsed","parse","validator","onImport","readAsText","export_import_vue_styles_","export_import_export_import","exportLabel","importLabel","importFailedText","preview_vue_styles_","tabs_theme_tab_preview","staticStyle","font-family","v1OnlyNames","theme_tab","theme_tab_objectSpread","availableStyles","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","_ref7","_ref8","themesComplete","loadThemeFromLocalStorage","shadowsAvailable","themeWarningHelp","pre","_this$themeWarning","origin","themeEngineVersion","noActionsPossible","CURRENT_VERSION","selectedVersion","currentColors","_ref9","_ref10","currentOpacity","_ref11","_ref12","currentRadii","btn","checkbox","panel","avatarAlt","tooltip","attachment","chatMessage","preview","composePreset","previewTheme","colors","opacity","radii","shadows","fonts","previewContrast","bg","colorsConverted","_ref13","_ref14","ratios","_ref15","_ref16","slotIsBaseText","textColor","_ref17","layer","variant","opacitySlot","getOpacitySlot","textColors","layers","getLayers","textColorKey","newKey","toUpperCase","getContrastRatioLayers","_ref18","_ref19","toPrecision","warn","previewRules","rules","values","DEFAULT_SHADOWS","sort","currentShadowOverriden","currentShadow","currentShadowFallback","assign","themeValid","exportedTheme","saveEverything","source","_pleroma_theme_version","RangeInput","ContrastRatio","ShadowControl","FontControl","Preview","ExportImport","loadTheme","_ref20","fileVersion","forceUseSource","dismissWarning","version","snapshotEngineVersion","versionsMatch","sourceSnapshotMismatch","forcedSourceLoad","normalizeLocalState","forceLoadLocalStorage","forceLoad","forceSnapshot","confirmLoadSource","_this$$store$getters$","customTheme","customThemeSource","themeData","setCustomTheme","updatePreviewColorsAndShadows","generateColors","generateShadows","mod","forceSource","importValidator","clearAll","clearV1","$data","endsWith","forEach","clearRoundness","clearOpacity","clearShadows","clearFonts","colors2to3","fg","fgColorLocal","rgb2hex","textColorLocal","Set","hex","_ref21","_ref22","Number","isNaN","_ref23","_ref24","shadows2to3","generateRadii","getOwnPropertyNames","generateFonts","fontsInvalid","bgColorLocal","linkColorLocal","cRedColorLocal","cGreenColorLocal","cBlueColorLocal","cOrangeColorLocal","theme_tab_vue_styles_","theme_tab_theme_tab","export-object","export-label","import-label","import-failed-text","on-import","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","poll","pollColorLocal","pollText","pollTextColorLocal","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","hard-min","interface","no-inherit","post","postCode","faWrench","faUser","faFilter","faPaintBrush","faBell","faDownload","faEyeSlash","faInfo","SettingsModalContent","MutesAndBlocksTab","ThemeTab","isLoggedIn","settingsModalState","onOpen","targetTab","settingsModalTargetTab","tabIndex","tabSwitcher","findIndex","elm","setTab","settings_modal_content_vue_styles_","settings_modal_content_Component","settings_modal_content","side-tab-bar","data-tab-name","fullHeight","__webpack_exports__"],"mappings":"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","file":"static/js/2.422e6c756ac673a6fd44.js","sourcesContent":["// style-loader: Adds some css to the DOM by adding a \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 { 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 },\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-11891cb3\\\",\\\"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('label',{staticClass:\"select\",attrs:{\"for\":\"shadow-switcher\",\"disabled\":!_vm.ready || _vm.usingFallback}},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selectedId),expression:\"selectedId\"}],staticClass:\"shadow-switcher\",attrs:{\"id\":\"shadow-switcher\",\"disabled\":!_vm.ready || _vm.usingFallback},on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.selectedId=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},_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('FAIcon',{staticClass:\"select-down-icon\",attrs:{\"icon\":\"chevron-down\"}})],1),_vm._v(\" \"),_c('button',{staticClass:\"btn btn-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 btn-default\",attrs:{\"disabled\":!_vm.moveUpValid},on:{\"click\":_vm.moveUp}},[_c('FAIcon',{attrs:{\"fixed-width\":\"\",\"icon\":\"chevron-up\"}})],1),_vm._v(\" \"),_c('button',{staticClass:\"btn btn-default\",attrs:{\"disabled\":!_vm.moveDnValid},on:{\"click\":_vm.moveDn}},[_c('FAIcon',{attrs:{\"fixed-width\":\"\",\"icon\":\"chevron-down\"}})],1),_vm._v(\" \"),_c('button',{staticClass:\"btn btn-default\",attrs:{\"disabled\":_vm.usingFallback},on:{\"click\":_vm.add}},[_c('FAIcon',{attrs:{\"fixed-width\":\"\",\"icon\":\"plus\"}})],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 { 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 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-bac53e46\\\",\\\"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('label',{staticClass:\"select\",attrs:{\"for\":_vm.name + '-font-switcher',\"disabled\":!_vm.present}},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.preset),expression:\"preset\"}],staticClass:\"font-switcher\",attrs:{\"id\":_vm.name + '-font-switcher',\"disabled\":!_vm.present},on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.preset=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},_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(\" \"),_c('FAIcon',{staticClass:\"select-down-icon\",attrs:{\"icon\":\"chevron-down\"}})],1),_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()])}\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!./export_import.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./export_import.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./export_import.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-3d9b5a74\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./export_import.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:\"import-export-container\"},[_vm._t(\"before\"),_vm._v(\" \"),_c('button',{staticClass:\"btn\",on:{\"click\":_vm.exportData}},[_vm._v(\"\\n \"+_vm._s(_vm.exportLabel)+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn\",on:{\"click\":_vm.importData}},[_vm._v(\"\\n \"+_vm._s(_vm.importLabel)+\"\\n \")]),_vm._v(\" \"),_vm._t(\"afterButtons\"),_vm._v(\" \"),(_vm.importFailed)?_c('p',{staticClass:\"alert error\"},[_vm._v(\"\\n \"+_vm._s(_vm.importFailedText)+\"\\n \")]):_vm._e(),_vm._v(\" \"),_vm._t(\"afterError\")],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!./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-c31e920a\\\",\\\"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\"},[_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\"},[_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 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 ExportImport from 'src/components/export_import/export_import.vue'\nimport Checkbox from 'src/components/checkbox/checkbox.vue'\n\nimport Preview from './preview.vue'\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport {\n faChevronDown\n} from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(\n faChevronDown\n)\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 availableStyles: [],\n selected: 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.selected) ? 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 ExportImport,\n Checkbox\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 onImport (parsed, forceSource = false) {\n this.tempImportFile = parsed\n this.loadTheme(parsed, 'file', forceSource)\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.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.selected[1]\n this.fgColorLocal = this.selected[2]\n this.textColorLocal = this.selected[3]\n this.linkColorLocal = this.selected[4]\n this.cRedColorLocal = this.selected[5]\n this.cGreenColorLocal = this.selected[6]\n this.cBlueColorLocal = this.selected[7]\n this.cOrangeColorLocal = this.selected[8]\n }\n } else if (this.selectedVersion >= 2) {\n this.normalizeLocalState(this.selected.theme, 2, this.selected.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-3291daef\\\",\\\"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\",on:{\"click\":_vm.forceLoad}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.use_source'))+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn\",on:{\"click\":_vm.forceSnapshot}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.use_snapshot'))+\"\\n \")])]:(_vm.themeWarning.noActionsPossible)?[_c('button',{staticClass:\"btn\",on:{\"click\":_vm.dismissWarning}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('general.dismiss'))+\"\\n \")])]:[_c('button',{staticClass:\"btn\",on:{\"click\":_vm.forceLoad}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.load_theme'))+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn\",on:{\"click\":_vm.dismissWarning}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.keep_as_is'))+\"\\n \")])]],2)]):_vm._e(),_vm._v(\" \"),_c('ExportImport',{attrs:{\"export-object\":_vm.exportedTheme,\"export-label\":_vm.$t(\"settings.export_theme\"),\"import-label\":_vm.$t(\"settings.import_theme\"),\"import-failed-text\":_vm.$t(\"settings.invalid_theme_imported\"),\"on-import\":_vm.onImport,\"validator\":_vm.importValidator}},[_c('template',{slot:\"before\"},[_c('div',{staticClass:\"presets\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.presets'))+\"\\n \"),_c('label',{staticClass:\"select\",attrs:{\"for\":\"preset-switcher\"}},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selected),expression:\"selected\"}],staticClass:\"preset-switcher\",attrs:{\"id\":\"preset-switcher\"},on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.selected=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},_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}},[_vm._v(\"\\n \"+_vm._s(style[0] || style.name)+\"\\n \")])}),0),_vm._v(\" \"),_c('FAIcon',{staticClass:\"select-down-icon\",attrs:{\"icon\":\"chevron-down\"}})],1)])])],2)],1),_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\",on:{\"click\":_vm.clearOpacity}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.clear_opacity'))+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn\",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\",on:{\"click\":_vm.clearOpacity}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.clear_opacity'))+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn\",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.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\",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('label',{staticClass:\"select\",attrs:{\"for\":\"shadow-switcher\"}},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.shadowSelected),expression:\"shadowSelected\"}],staticClass:\"shadow-switcher\",attrs:{\"id\":\"shadow-switcher\"},on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.shadowSelected=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},_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),_vm._v(\" \"),_c('FAIcon',{staticClass:\"select-down-icon\",attrs:{\"icon\":\"chevron-down\"}})],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\",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\",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 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\",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.e852a6b4b3bba752b838.js b/priv/static/static/js/2.e852a6b4b3bba752b838.js deleted file mode 100644 index 42e446575..000000000 --- a/priv/static/static/js/2.e852a6b4b3bba752b838.js +++ /dev/null @@ -1,2 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{591:function(t,e,s){var a=s(592);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("a45e17ec",a,!0,{})},592:function(t,e,s){(t.exports=s(4)(!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{margin-bottom:.5em}.settings_tab-switcher .setting-item>div:last-child{margin-bottom:0}.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 i{color:var(--cRed,red);color:red}.settings_tab-switcher .setting-item .number-input{max-width:6em}",""])},593:function(t,e,s){var a=s(594);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("5bed876c",a,!0,{})},594:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".importer-uploading{font-size:1.5em;margin:.25em}",""])},595:function(t,e,s){var a=s(596);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("432fc7c6",a,!0,{})},596:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".exporter-processing{font-size:1.5em;margin:.25em}",""])},597:function(t,e,s){var a=s(598);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("33ca0d90",a,!0,{})},598:function(t,e,s){(t.exports=s(4)(!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}",""])},599:function(t,e,s){var a=s(600);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("3a9ec1bf",a,!0,{})},600:function(t,e,s){(t.exports=s(4)(!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}",""])},601:function(t,e,s){var a=s(602);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("211aa67c",a,!0,{})},602:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".block-card-content-container{margin-top:.5em;text-align:right}.block-card-content-container button{width:10em}",""])},603:function(t,e,s){var a=s(604);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("7ea980e0",a,!0,{})},604:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".mute-card-content-container{margin-top:.5em;text-align:right}.mute-card-content-container button{width:10em}",""])},605:function(t,e,s){var a=s(606);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("39a942c3",a,!0,{})},606:function(t,e,s){(t.exports=s(4)(!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}",""])},607:function(t,e,s){var a=s(608);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("3724291e",a,!0,{})},608:function(t,e,s){(t.exports=s(4)(!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}",""])},609:function(t,e,s){},613:function(t,e,s){var a=s(614);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("a588473e",a,!0,{})},614:function(t,e,s){(t.exports=s(4)(!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}",""])},615:function(t,e,s){var a=s(616);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("4065bf15",a,!0,{})},616:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".mfa-backup-codes .warning{color:orange;color:var(--cOrange,orange)}.mfa-backup-codes .backup-codes{font-family:var(--postCodeFont,monospace)}",""])},618:function(t,e,s){var a=s(619);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("27925ae8",a,!0,{})},619:function(t,e,s){(t.exports=s(4)(!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>.icon-container{width:20px}.profile-tab .profile-fields>.icon-container>.icon-cancel{vertical-align:sub}",""])},620:function(t,e,s){var a=s(621);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("0dfd0b33",a,!0,{})},621:function(t,e,s){(t.exports=s(4)(!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}",""])},624:function(t,e,s){var a=s(625);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("4fafab12",a,!0,{})},625:function(t,e,s){(t.exports=s(4)(!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: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}",""])},626:function(t,e,s){var a=s(627);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("7e57f952",a,!0,{})},627:function(t,e,s){(t.exports=s(4)(!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}',""])},628:function(t,e,s){var a=s(629);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("6c632637",a,!0,{})},629:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".color-control input.text-input{max-width:7em;-ms-flex:1;flex:1}",""])},630:function(t,e,s){var a=s(631);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("d219da80",a,!0,{})},631:function(t,e,s){(t.exports=s(4)(!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 .btn,.shadow-control .shadow-tweak .id-control .select{min-width:1px;margin-right:5px}.shadow-control .shadow-tweak .id-control .btn{padding:0 .4em;margin:0 .1em}.shadow-control .shadow-tweak .id-control .select{-ms-flex:1;flex:1}.shadow-control .shadow-tweak .id-control .select select{-ms-flex-item-align:initial;-ms-grid-row-align:initial;align-self:auto}",""])},632:function(t,e,s){var a=s(633);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("d9c0acde",a,!0,{})},633:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".font-control input.custom-font{min-width:10em}.font-control.custom .select{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}",""])},634:function(t,e,s){var a=s(635);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("b94bc120",a,!0,{})},635:function(t,e,s){(t.exports=s(4)(!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}",""])},636:function(t,e,s){var a=s(637);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("66a4eaba",a,!0,{})},637:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".import-export-container{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:baseline;align-items:baseline;-ms-flex-pack:center;justify-content:center}",""])},638:function(t,e,s){var a=s(639);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);(0,s(5).default)("6fe23c76",a,!0,{})},639:function(t,e,s){(t.exports=s(4)(!1)).push([t.i,".preview-container{position:relative}.underlay-preview{position:absolute;top:0;bottom:0;left:10px;right:10px}",""])},641:function(t,e,s){"use strict";s.r(e);var a=s(141),n={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}}},o=s(0);var i=function(t){s(593)},r=Object(o.a)(n,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("i",{staticClass:"icon-spin4 animate-spin importer-uploading"}):s("button",{staticClass:"btn btn-default",on:{click:t.submit}},[t._v("\n "+t._s(t.submitButtonLabel)+"\n ")]),t._v(" "),t.success?s("div",[s("i",{staticClass:"icon-cross",on:{click:t.dismiss}}),t._v(" "),s("p",[t._v(t._s(t.successMessage))])]):t.error?s("div",[s("i",{staticClass:"icon-cross",on:{click:t.dismiss}}),t._v(" "),s("p",[t._v(t._s(t.errorMessage))])]):t._e()])},[],!1,i,null,null).exports,l={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 c=function(t){s(595)},u=Object(o.a)(l,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"exporter"},[t.processing?s("div",[s("i",{staticClass:"icon-spin4 animate-spin exporter-processing"}),t._v(" "),s("span",[t._v(t._s(t.processingMessage))])]):s("button",{staticClass:"btn btn-default",on:{click:t.process}},[t._v("\n "+t._s(t.exportButtonLabel)+"\n ")])])},[],!1,c,null,null).exports,d=s(54),p={data:function(){return{activeTab:"profile",newDomainToMute:""}},created:function(){this.$store.dispatch("fetchTokens")},components:{Importer:r,Exporter:u,Checkbox:d.a},computed:{user:function(){return this.$store.state.users.currentUser}},methods:{getFollowsContent:function(){return this.$store.state.api.backendInteractor.exportFriends({id:this.$store.state.users.currentUser.id}).then(this.generateExportableUsersContent)},getBlocksContent:function(){return this.$store.state.api.backendInteractor.fetchBlocks().then(this.generateExportableUsersContent)},importFollows:function(t){return this.$store.state.api.backendInteractor.importFollows({file:t}).then(function(t){if(!t)throw new Error("failed")})},importBlocks:function(t){return this.$store.state.api.backendInteractor.importBlocks({file:t}).then(function(t){if(!t)throw new Error("failed")})},generateExportableUsersContent:function(t){return t.map(function(t){return t&&t.is_local?t.screen_name+"@"+location.hostname:t.screen_name}).join("\n")}}},m=Object(o.a)(p,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{attrs:{label:t.$t("settings.data_import_export_tab")}},[s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.follow_import")))]),t._v(" "),s("p",[t._v(t._s(t.$t("settings.import_followers_from_a_csv_file")))]),t._v(" "),s("Importer",{attrs:{"submit-handler":t.importFollows,"success-message":t.$t("settings.follows_imported"),"error-message":t.$t("settings.follow_import_error")}})],1),t._v(" "),s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.follow_export")))]),t._v(" "),s("Exporter",{attrs:{"get-content":t.getFollowsContent,filename:"friends.csv","export-button-label":t.$t("settings.follow_export_button")}})],1),t._v(" "),s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.block_import")))]),t._v(" "),s("p",[t._v(t._s(t.$t("settings.import_blocks_from_a_csv_file")))]),t._v(" "),s("Importer",{attrs:{"submit-handler":t.importBlocks,"success-message":t.$t("settings.blocks_imported"),"error-message":t.$t("settings.block_import_error")}})],1),t._v(" "),s("div",{staticClass:"setting-item"},[s("h2",[t._v(t._s(t.$t("settings.block_export")))]),t._v(" "),s("Exporter",{attrs:{"get-content":t.getBlocksContent,filename:"blocks.csv","export-button-label":t.$t("settings.block_export_button")}})],1)])},[],!1,null,null,null).exports,v=s(12),h=s.n(v),b=s(15),f=s.n(b),g=s(189),_=s.n(g),w={props:{query:{type:Function,required:!0},filter:{type:Function},placeholder:{type:String,default:"Search..."}},data:function(){return{term:"",timeout:null,results:[],resultsVisible:!1}},computed:{filtered:function(){return this.filter?this.filter(this.results):this.results}},watch:{term:function(t){this.fetchResults(t)}},methods:{fetchResults:function(t){var e=this;clearTimeout(this.timeout),this.timeout=setTimeout(function(){e.results=[],t&&e.query(t).then(function(t){e.results=t})},500)},onInputClick:function(){this.resultsVisible=!0},onClickOutside:function(){this.resultsVisible=!1}}};var C=function(t){s(599)},x=Object(o.a)(w,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{directives:[{name:"click-outside",rawName:"v-click-outside",value:t.onClickOutside,expression:"onClickOutside"}],staticClass:"autosuggest"},[s("input",{directives:[{name:"model",rawName:"v-model",value:t.term,expression:"term"}],staticClass:"autosuggest-input",attrs:{placeholder:t.placeholder},domProps:{value:t.term},on:{click:t.onInputClick,input:function(e){e.target.composing||(t.term=e.target.value)}}}),t._v(" "),t.resultsVisible&&t.filtered.length>0?s("div",{staticClass:"autosuggest-results"},[t._l(t.filtered,function(e){return t._t("default",null,{item:e})})],2):t._e()])},[],!1,C,null,null).exports,k=s(38),y={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:k.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 $=function(t){s(601)},L=Object(o.a)(y,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 btn-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 btn-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,$,null,null).exports,T={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:k.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 O=function(t){s(603)},P=Object(o.a)(T,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 btn-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 btn-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,O,null,null).exports,S=s(78),I={props:["domain"],components:{ProgressButton:S.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 j=function(t){s(605)},E=Object(o.a)(I,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 btn-default",attrs:{click:t.unmuteDomain}},[t._v("\n "+t._s(t.$t("domain_mute_card.unmute"))+"\n "),s("template",{slot:"progress"},[t._v("\n "+t._s(t.$t("domain_mute_card.unmute_progress"))+"\n ")])],2):s("ProgressButton",{staticClass:"btn btn-default",attrs:{click:t.muteDomain}},[t._v("\n "+t._s(t.$t("domain_mute_card.mute"))+"\n "),s("template",{slot:"progress"},[t._v("\n "+t._s(t.$t("domain_mute_card.mute_progress"))+"\n ")])],2)],1)},[],!1,j,null,null).exports,R={components:{List:s(52).a,Checkbox:d.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 B=function(t){s(607)},F=Object(o.a)(R,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 a=e.item;return[s("div",{staticClass:"selectable-list-item-inner",class:{"selectable-list-item-selected-inner":t.isSelected(a)}},[s("div",{staticClass:"selectable-list-checkbox-wrapper"},[s("Checkbox",{attrs:{checked:t.isSelected(a)},on:{change:function(e){return t.toggle(e,a)}}})],1),t._v(" "),t._t("item",null,{item:a})],2)]}}],null,!0)},[t._v(" "),s("template",{slot:"empty"},[t._t("empty")],2)],2)],1)},[],!1,B,null,null).exports,M=s(190),U=s.n(M),V=s(7),A=s.n(V),D=s(1),N=s.n(D),W=s(10),z=s.n(W),q=s(6),G=s.n(q),H=s(191),K=s.n(H),J=s(192);s(609);function Q(t,e){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),s.push.apply(s,a)}return s}function X(t){for(var e=1;e0?s("ProgressButton",{staticClass:"btn btn-default bulk-action-button",attrs:{click:function(){return t.blockUsers(a)}}},[t._v("\n "+t._s(t.$t("user_card.block"))+"\n "),s("template",{slot:"progress"},[t._v("\n "+t._s(t.$t("user_card.block_progress"))+"\n ")])],2):t._e(),t._v(" "),a.length>0?s("ProgressButton",{staticClass:"btn btn-default",attrs:{click:function(){return t.unblockUsers(a)}}},[t._v("\n "+t._s(t.$t("user_card.unblock"))+"\n "),s("template",{slot:"progress"},[t._v("\n "+t._s(t.$t("user_card.unblock_progress"))+"\n ")])],2):t._e()],1)]}},{key:"item",fn:function(t){var e=t.item;return[s("BlockCard",{attrs:{"user-id":e}})]}}])},[t._v(" "),t._v(" "),s("template",{slot:"empty"},[t._v("\n "+t._s(t.$t("settings.no_blocks"))+"\n ")])],2)],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 a=e.selected;return[s("div",{staticClass:"bulk-actions"},[a.length>0?s("ProgressButton",{staticClass:"btn btn-default",attrs:{click:function(){return t.muteUsers(a)}}},[t._v("\n "+t._s(t.$t("user_card.mute"))+"\n "),s("template",{slot:"progress"},[t._v("\n "+t._s(t.$t("user_card.mute_progress"))+"\n ")])],2):t._e(),t._v(" "),a.length>0?s("ProgressButton",{staticClass:"btn btn-default",attrs:{click:function(){return t.unmuteUsers(a)}}},[t._v("\n "+t._s(t.$t("user_card.unmute"))+"\n "),s("template",{slot:"progress"},[t._v("\n "+t._s(t.$t("user_card.unmute_progress"))+"\n ")])],2):t._e()],1)]}},{key:"item",fn:function(t){var e=t.item;return[s("MuteCard",{attrs:{"user-id":e}})]}}])},[t._v(" "),t._v(" "),s("template",{slot:"empty"},[t._v("\n "+t._s(t.$t("settings.no_mutes"))+"\n ")])],2)],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 a=e.selected;return[s("div",{staticClass:"bulk-actions"},[a.length>0?s("ProgressButton",{staticClass:"btn btn-default",attrs:{click:function(){return t.unmuteDomains(a)}}},[t._v("\n "+t._s(t.$t("domain_mute_card.unmute"))+"\n "),s("template",{slot:"progress"},[t._v("\n "+t._s(t.$t("domain_mute_card.unmute_progress"))+"\n ")])],2):t._e()],1)]}},{key:"item",fn:function(t){var e=t.item;return[s("DomainMuteCard",{attrs:{domain:e}})]}}])},[t._v(" "),t._v(" "),s("template",{slot:"empty"},[t._v("\n "+t._s(t.$t("settings.no_mutes"))+"\n ")])],2)],1)])],1)])},[],!1,at,null,null).exports,ot={data:function(){return{activeTab:"profile",notificationSettings:this.$store.state.users.currentUser.notification_settings,newDomainToMute:""}},components:{Checkbox:d.a},computed:{user:function(){return this.$store.state.users.currentUser}},methods:{updateNotificationSettings:function(){this.$store.state.api.backendInteractor.updateNotificationSettings({settings:this.notificationSettings})}}},it=Object(o.a)(ot,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 btn-default",on:{click:t.updateNotificationSettings}},[t._v("\n "+t._s(t.$t("general.submit"))+"\n ")])])])},[],!1,null,null,null).exports,rt=s(610),lt=s.n(rt),ct=s(37),ut=s.n(ct),dt=s(95);function pt(t,e){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),s.push.apply(s,a)}return s}function mt(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")}}},ft=Object(o.a)(bt,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("Checkbox",{model:{value:t.notificationVisibility.likes,callback:function(e){t.$set(t.notificationVisibility,"likes",e)},expression:"notificationVisibility.likes"}},[t._v("\n "+t._s(t.$t("settings.notification_visibility_likes"))+"\n ")])],1),t._v(" "),s("li",[s("Checkbox",{model:{value:t.notificationVisibility.repeats,callback:function(e){t.$set(t.notificationVisibility,"repeats",e)},expression:"notificationVisibility.repeats"}},[t._v("\n "+t._s(t.$t("settings.notification_visibility_repeats"))+"\n ")])],1),t._v(" "),s("li",[s("Checkbox",{model:{value:t.notificationVisibility.follows,callback:function(e){t.$set(t.notificationVisibility,"follows",e)},expression:"notificationVisibility.follows"}},[t._v("\n "+t._s(t.$t("settings.notification_visibility_follows"))+"\n ")])],1),t._v(" "),s("li",[s("Checkbox",{model:{value:t.notificationVisibility.mentions,callback:function(e){t.$set(t.notificationVisibility,"mentions",e)},expression:"notificationVisibility.mentions"}},[t._v("\n "+t._s(t.$t("settings.notification_visibility_mentions"))+"\n ")])],1),t._v(" "),s("li",[s("Checkbox",{model:{value:t.notificationVisibility.moves,callback:function(e){t.$set(t.notificationVisibility,"moves",e)},expression:"notificationVisibility.moves"}},[t._v("\n "+t._s(t.$t("settings.notification_visibility_moves"))+"\n ")])],1),t._v(" "),s("li",[s("Checkbox",{model:{value:t.notificationVisibility.emojiReactions,callback:function(e){t.$set(t.notificationVisibility,"emojiReactions",e)},expression:"notificationVisibility.emojiReactions"}},[t._v("\n "+t._s(t.$t("settings.notification_visibility_emoji_reactions"))+"\n ")])],1)])]),t._v(" "),s("div",[t._v("\n "+t._s(t.$t("settings.replies_in_timeline"))+"\n "),s("label",{staticClass:"select",attrs:{for:"replyVisibility"}},[s("select",{directives:[{name:"model",rawName:"v-model",value:t.replyVisibility,expression:"replyVisibility"}],attrs:{id:"replyVisibility"},on:{change:function(e){var s=Array.prototype.filter.call(e.target.options,function(t){return t.selected}).map(function(t){return"_value"in t?t._value:t.value});t.replyVisibility=e.target.multiple?s:s[0]}}},[s("option",{attrs:{value:"all",selected:""}},[t._v(t._s(t.$t("settings.reply_visibility_all")))]),t._v(" "),s("option",{attrs:{value:"following"}},[t._v(t._s(t.$t("settings.reply_visibility_following")))]),t._v(" "),s("option",{attrs:{value:"self"}},[t._v(t._s(t.$t("settings.reply_visibility_self")))])]),t._v(" "),s("i",{staticClass:"icon-down-open"})])]),t._v(" "),s("div",[s("Checkbox",{model:{value:t.hidePostStats,callback:function(e){t.hidePostStats=e},expression:"hidePostStats"}},[t._v("\n "+t._s(t.$t("settings.hide_post_stats"))+" "+t._s(t.$t("settings.instance_default",{value:t.hidePostStatsLocalizedValue}))+"\n ")])],1),t._v(" "),s("div",[s("Checkbox",{model:{value:t.hideUserStats,callback:function(e){t.hideUserStats=e},expression:"hideUserStats"}},[t._v("\n "+t._s(t.$t("settings.hide_user_stats"))+" "+t._s(t.$t("settings.instance_default",{value:t.hideUserStatsLocalizedValue}))+"\n ")])],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"}],attrs:{id:"muteWords"},domProps:{value:t.muteWordsString},on:{input:function(e){e.target.composing||(t.muteWordsString=e.target.value)}}})]),t._v(" "),s("div",[s("Checkbox",{model:{value:t.hideFilteredStatuses,callback:function(e){t.hideFilteredStatuses=e},expression:"hideFilteredStatuses"}},[t._v("\n "+t._s(t.$t("settings.hide_filtered_statuses"))+" "+t._s(t.$t("settings.instance_default",{value:t.hideFilteredStatusesLocalizedValue}))+"\n ")])],1)])])},[],!1,null,null,null).exports,gt=s(3),_t=s.n(gt),wt={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 Ct=function(t){s(615)},xt=Object(o.a)(wt,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,Ct,null,null).exports,kt={props:["disabled"],data:function(){return{}},methods:{confirm:function(){this.$emit("confirm")},cancel:function(){this.$emit("cancel")}}},yt=Object(o.a)(kt,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",[t._t("default"),t._v(" "),s("button",{staticClass:"btn btn-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 btn-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,$t=s(2);function Lt(t,e){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),s.push.apply(s,a)}return s}var Tt={props:["settings"],data:function(){return{error:!1,currentPassword:"",deactivate:!1,inProgress:!1}},components:{confirm:yt},computed:function(t){for(var e=1;e0},confirmNewBackupCodes:function(){return this.backupCodes.getNewCodes}},Object($t.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 _t.a.async(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,_t.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 St=function(t){s(613)},It=Object(o.a)(Pt,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 btn-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 btn-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 btn-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 btn-default",on:{click:t.doConfirmOTP}},[t._v("\n "+t._s(t.$t("settings.mfa.confirm_and_enable"))+"\n ")]),t._v(" "),s("button",{staticClass:"btn btn-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,St,null,null).exports,jt={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:S.a,Mfa:It,Checkbox:d.a},computed:{user:function(){return this.$store.state.users.currentUser},pleromaBackend:function(){return this.$store.state.instance.pleromaBackend},oauthTokens:function(){return this.$store.state.oauthTokens.tokens.map(function(t){return{id:t.id,appName:t.app_name,validUntil:new Date(t.valid_until).toLocaleDateString()}})}},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)}}},Et=Object(o.a)(jt,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 btn-default",on:{click:t.changeEmail}},[t._v("\n "+t._s(t.$t("general.submit"))+"\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 btn-default",on:{click:t.changePassword}},[t._v("\n "+t._s(t.$t("general.submit"))+"\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 btn-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 btn-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 btn-default",on:{click:t.confirmDelete}},[t._v("\n "+t._s(t.$t("general.submit"))+"\n ")])])],1)},[],!1,null,null,null).exports,Rt=s(188),Bt=s.n(Rt),Ft=s(96),Mt=s.n(Ft),Ut=s(27),Vt=s.n(Ut),At=s(622),Dt=(s(623),{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,submitError:null}},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")},submitErrorMsg:function(){return this.submitError&&this.submitError instanceof Error?this.submitError.toString():this.submitError}},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.avatarUploadError=null,this.submitHandler(e&&this.cropper,this.file).then(function(){return t.destroy()}).catch(function(e){t.submitError=e}).finally(function(){t.submitting=!1})},pickImage:function(){this.$refs.input.click()},createCropper:function(){this.cropper=new At.a(this.$refs.img,this.cropperOptions)},getTriggerDOM:function(){return"object"===Vt()(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)}},clearError:function(){this.submitError=null}},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 Nt=function(t){s(620)},Wt=Object(o.a)(Dt,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:"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:"btn",attrs:{type:"button",disabled:t.submitting},domProps:{textContent:t._s(t.cancelText)},on:{click:t.destroy}}),t._v(" "),s("button",{staticClass:"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("i",{staticClass:"icon-spin4 animate-spin"}):t._e()]),t._v(" "),t.submitError?s("div",{staticClass:"alert error"},[t._v("\n "+t._s(t.submitErrorMsg)+"\n "),s("i",{staticClass:"button-icon icon-cancel",on:{click:t.clearError}})]):t._e()]):t._e(),t._v(" "),s("input",{ref:"input",staticClass:"image-cropper-img-input",attrs:{type:"file",accept:t.mimes}})])},[],!1,Nt,null,null).exports,zt=s(196),qt=s(134),Gt=s(195),Ht=s(135),Kt={data:function(){return{newName:this.$store.state.users.currentUser.name,newBio:Bt()(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,bannerUploadError:null,backgroundUploadError:null}},components:{ScopeSelector:zt.a,ImageCropper:Wt,EmojiInput:Gt.a,Autosuggest:x,ProgressButton:S.a,Checkbox:d.a},computed:{user:function(){return this.$store.state.users.currentUser},emojiUserSuggestor:function(){var t=this;return Object(Ht.a)({emoji:[].concat(z()(this.$store.state.instance.emoji),z()(this.$store.state.instance.customEmoji)),users:this.$store.state.users.users,updateUsersList:function(e){return t.$store.dispatch("searchUsers",{query:e})}})},emojiSuggestor:function(){return Object(Ht.a)({emoji:[].concat(z()(this.$store.state.instance.emoji),z()(this.$store.state.instance.customEmoji))})},userSuggestor:function(){var t=this;return Object(Ht.a)({users:this.$store.state.users.users,updateUsersList:function(e){return t.$store.dispatch("searchUsers",{query:e})}})},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),Mt()(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 n=qt.a.fileSizeFormat(a.size),o=qt.a.fileSizeFormat(this.$store.state.instance[t+"limit"]);this[t+"UploadError"]=[this.$t("upload.error.base"),this.$t("upload.error.file_too_big",{filesize:n.num,filesizeunit:n.unit,allowedsize:o.num,allowedsizeunit:o.unit})].join(" ")}else{var i=new FileReader;i.onload=function(e){var n=e.target.result;s[t+"Preview"]=n,s[t]=a},i.readAsDataURL(a)}},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(a,n){function o(t){s.$store.state.api.backendInteractor.updateProfileImages({avatar:t}).then(function(t){s.$store.commit("addNewUsers",[t]),s.$store.commit("setCurrentUser",t),a()}).catch(function(t){n(new Error(s.$t("upload.error.base")+" "+t.message))})}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(function(t){e.bannerUploadError=e.$t("upload.error.base")+" "+t.message}).then(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){t.error?e.backgroundUploadError=e.$t("upload.error.base")+t.error:(e.$store.commit("addNewUsers",[t]),e.$store.commit("setCurrentUser",t),e.backgroundPreview=null),e.backgroundUploading=!1}))}}};var Jt=function(t){s(618)},Qt=Object(o.a)(Kt,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"}],attrs:{id:"username",classname:"name-changer"},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"}],attrs:{classname:"bio"},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,a){return s("div",{key:a,staticClass:"profile-fields"},[s("EmojiInput",{attrs:{"enable-emoji-picker":"","hide-emoji-button":"",suggest:t.userSuggestor},model:{value:t.newFields[a].name,callback:function(e){t.$set(t.newFields[a],"name",e)},expression:"newFields[i].name"}},[s("input",{directives:[{name:"model",rawName:"v-model",value:t.newFields[a].name,expression:"newFields[i].name"}],attrs:{placeholder:t.$t("settings.profile_fields.name")},domProps:{value:t.newFields[a].name},on:{input:function(e){e.target.composing||t.$set(t.newFields[a],"name",e.target.value)}}})]),t._v(" "),s("EmojiInput",{attrs:{"enable-emoji-picker":"","hide-emoji-button":"",suggest:t.userSuggestor},model:{value:t.newFields[a].value,callback:function(e){t.$set(t.newFields[a],"value",e)},expression:"newFields[i].value"}},[s("input",{directives:[{name:"model",rawName:"v-model",value:t.newFields[a].value,expression:"newFields[i].value"}],attrs:{placeholder:t.$t("settings.profile_fields.value")},domProps:{value:t.newFields[a].value},on:{input:function(e){e.target.composing||t.$set(t.newFields[a],"value",e.target.value)}}})]),t._v(" "),s("div",{staticClass:"icon-container"},[s("i",{directives:[{name:"show",rawName:"v-show",value:t.newFields.length>1,expression:"newFields.length > 1"}],staticClass:"icon-cancel",on:{click:function(e){return t.deleteField(a)}}})])],1)}),t._v(" "),t.newFields.length0?s("li",[s("div",[t._v("\n "+t._s(t.$t("settings.post_status_content_type"))+"\n "),s("label",{staticClass:"select",attrs:{for:"postContentType"}},[s("select",{directives:[{name:"model",rawName:"v-model",value:t.postContentType,expression:"postContentType"}],attrs:{id:"postContentType"},on:{change:function(e){var s=Array.prototype.filter.call(e.target.options,function(t){return t.selected}).map(function(t){return"_value"in t?t._value:t.value});t.postContentType=e.target.multiple?s:s[0]}}},t._l(t.postFormats,function(e){return s("option",{key:e,domProps:{value:e}},[t._v("\n "+t._s(t.$t('post_status.content_type["'+e+'"]'))+"\n "+t._s(t.postContentTypeDefaultValue===e?t.$t("settings.instance_default_simple"):"")+"\n ")])}),0),t._v(" "),s("i",{staticClass:"icon-down-open"})])])]):t._e(),t._v(" "),s("li",[s("Checkbox",{model:{value:t.minimalScopesMode,callback:function(e){t.minimalScopesMode=e},expression:"minimalScopesMode"}},[t._v("\n "+t._s(t.$t("settings.minimal_scopes_mode"))+" "+t._s(t.$t("settings.instance_default",{value:t.minimalScopesModeLocalizedValue}))+"\n ")])],1),t._v(" "),s("li",[s("Checkbox",{model:{value:t.autohideFloatingPostButton,callback:function(e){t.autohideFloatingPostButton=e},expression:"autohideFloatingPostButton"}},[t._v("\n "+t._s(t.$t("settings.autohide_floating_post_button"))+"\n ")])],1),t._v(" "),s("li",[s("Checkbox",{model:{value:t.padEmoji,callback:function(e){t.padEmoji=e},expression:"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("Checkbox",{model:{value:t.hideAttachments,callback:function(e){t.hideAttachments=e},expression:"hideAttachments"}},[t._v("\n "+t._s(t.$t("settings.hide_attachments_in_tl"))+"\n ")])],1),t._v(" "),s("li",[s("Checkbox",{model:{value:t.hideAttachmentsInConv,callback:function(e){t.hideAttachmentsInConv=e},expression:"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",{directives:[{name:"model",rawName:"v-model.number",value:t.maxThumbnails,expression:"maxThumbnails",modifiers:{number:!0}}],staticClass:"number-input",attrs:{id:"maxThumbnails",type:"number",min:"0",step:"1"},domProps:{value:t.maxThumbnails},on:{input:function(e){e.target.composing||(t.maxThumbnails=t._n(e.target.value))},blur:function(e){return t.$forceUpdate()}}})]),t._v(" "),s("li",[s("Checkbox",{model:{value:t.hideNsfw,callback:function(e){t.hideNsfw=e},expression:"hideNsfw"}},[t._v("\n "+t._s(t.$t("settings.nsfw_clickthrough"))+"\n ")])],1),t._v(" "),s("ul",{staticClass:"setting-list suboptions"},[s("li",[s("Checkbox",{attrs:{disabled:!t.hideNsfw},model:{value:t.preloadImage,callback:function(e){t.preloadImage=e},expression:"preloadImage"}},[t._v("\n "+t._s(t.$t("settings.preload_images"))+"\n ")])],1),t._v(" "),s("li",[s("Checkbox",{attrs:{disabled:!t.hideNsfw},model:{value:t.useOneClickNsfw,callback:function(e){t.useOneClickNsfw=e},expression:"useOneClickNsfw"}},[t._v("\n "+t._s(t.$t("settings.use_one_click_nsfw"))+"\n ")])],1)]),t._v(" "),s("li",[s("Checkbox",{model:{value:t.stopGifs,callback:function(e){t.stopGifs=e},expression:"stopGifs"}},[t._v("\n "+t._s(t.$t("settings.stop_gifs"))+"\n ")])],1),t._v(" "),s("li",[s("Checkbox",{model:{value:t.loopVideo,callback:function(e){t.loopVideo=e},expression:"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("Checkbox",{attrs:{disabled:!t.loopVideo||!t.loopSilentAvailable},model:{value:t.loopVideoSilentOnly,callback:function(e){t.loopVideoSilentOnly=e},expression:"loopVideoSilentOnly"}},[t._v("\n "+t._s(t.$t("settings.loop_video_silent_only"))+"\n ")]),t._v(" "),t.loopSilentAvailable?t._e():s("div",{staticClass:"unavailable"},[s("i",{staticClass:"icon-globe"}),t._v("! "+t._s(t.$t("settings.limited_availability"))+"\n ")])],1)])],1),t._v(" "),s("li",[s("Checkbox",{model:{value:t.playVideosInModal,callback:function(e){t.playVideosInModal=e},expression:"playVideosInModal"}},[t._v("\n "+t._s(t.$t("settings.play_videos_in_modal"))+"\n ")])],1),t._v(" "),s("li",[s("Checkbox",{model:{value:t.useContainFit,callback:function(e){t.useContainFit=e},expression:"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("Checkbox",{model:{value:t.webPushNotifications,callback:function(e){t.webPushNotifications=e},expression:"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("Checkbox",{model:{value:t.greentext,callback:function(e){t.greentext=e},expression:"greentext"}},[t._v("\n "+t._s(t.$t("settings.greentext"))+" "+t._s(t.$t("settings.instance_default",{value:t.greentextLocalizedValue}))+"\n ")])],1)])])])},[],!1,null,null,null).exports,ne={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}}},oe=Object(o.a)(ne,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,ie=s(9),re=s(32),le=s(29),ce=s(39),ue={components:{Checkbox:d.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(ie.f)(this.value||this.fallback)},transparentColor:function(){return"transparent"===this.value},computedColor:function(){return this.value&&this.value.startsWith("--")}}};var de=function(t){s(626),s(628)},pe=Object(o.a)(ue,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,de,null,null).exports,me=Object(o.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,ve={components:{Checkbox:d.a},props:["name","value","fallback","disabled"],computed:{present:function(){return void 0!==this.value}}},he=Object(o.a)(ve,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 be(t,e){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),s.push.apply(s,a)}return s}var fe=function(){return function(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:{})},ge={props:["value","fallback","ready"],data:function(){return{selectedId:0,cValue:(this.value||this.fallback||[]).map(fe)}},components:{ColorInput:pe,OpacityInput:he},methods:{add:function(){this.cValue.push(fe(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]:fe({})},currentFallback:function(){return this.ready&&this.anyShadowsFallback?this.fallback[this.selectedId]:fe({})},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,a=e.target,n=!!a.checked;if(Array.isArray(s)){var o=t._i(s,null);a.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",n)}}}),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,_e,null,null).exports,Ce={props:["name","label","value","fallback","options","no-inherit"],data:function(){return{lValue:this.value,availableOptions:[this.noInherit?"":"inherit","custom"].concat(z()(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(q.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 xe=function(t){s(632)},ke=Object(o.a)(Ce,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("label",{staticClass:"select",attrs:{for:t.name+"-font-switcher",disabled:!t.present}},[s("select",{directives:[{name:"model",rawName:"v-model",value:t.preset,expression:"preset"}],staticClass:"font-switcher",attrs:{id:t.name+"-font-switcher",disabled:!t.present},on:{change:function(e){var s=Array.prototype.filter.call(e.target.options,function(t){return t.selected}).map(function(t){return"_value"in t?t._value:t.value});t.preset=e.target.multiple?s:s[0]}}},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(" "),s("i",{staticClass:"icon-down-open"})]),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,xe,null,null).exports,ye={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"),a=this.contrast.text;return this.$t("settings.style.common.contrast.hint",{level:e,context:s,ratio:a})},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"),a=this.contrast.text;return this.$t("settings.style.common.contrast.hint",{level:e,context:s,ratio:a})}}};var $e=function(t){s(634)},Le=Object(o.a)(ye,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("i",{staticClass:"icon-thumbs-up-alt"})]):t._e(),t._v(" "),!t.contrast.aaa&&t.contrast.aa?s("span",[s("i",{staticClass:"icon-adjust"})]):t._e(),t._v(" "),t.contrast.aaa||t.contrast.aa?t._e():s("span",[s("i",{staticClass:"icon-attention"})])]),t._v(" "),t.contrast&&t.large?s("span",{staticClass:"rating",attrs:{title:t.hint_18pt}},[t.contrast.laaa?s("span",[s("i",{staticClass:"icon-thumbs-up-alt"})]):t._e(),t._v(" "),!t.contrast.laaa&&t.contrast.laa?s("span",[s("i",{staticClass:"icon-adjust"})]):t._e(),t._v(" "),t.contrast.laaa||t.contrast.laa?t._e():s("span",[s("i",{staticClass:"icon-attention"})])]):t._e()]):t._e()},[],!1,$e,null,null).exports,Te={props:["exportObject","importLabel","exportLabel","importFailedText","validator","onImport","onImportFailure"],data:function(){return{importFailed:!1}},methods:{exportData:function(){var t=JSON.stringify(this.exportObject,null,2),e=document.createElement("a");e.setAttribute("download","pleroma_theme.json"),e.setAttribute("href","data:application/json;base64,"+window.btoa(t)),e.style.display="none",document.body.appendChild(e),e.click(),document.body.removeChild(e)},importData:function(){var t=this;this.importFailed=!1;var e=document.createElement("input");e.setAttribute("type","file"),e.setAttribute("accept",".json"),e.addEventListener("change",function(e){if(e.target.files[0]){var s=new FileReader;s.onload=function(e){var s=e.target;try{var a=JSON.parse(s.result);t.validator(a)?t.onImport(a):t.importFailed=!0}catch(e){t.importFailed=!0}},s.readAsText(e.target.files[0])}}),document.body.appendChild(e),e.click(),document.body.removeChild(e)}}};var Oe=function(t){s(636)},Pe=Object(o.a)(Te,function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"import-export-container"},[t._t("before"),t._v(" "),s("button",{staticClass:"btn",on:{click:t.exportData}},[t._v("\n "+t._s(t.exportLabel)+"\n ")]),t._v(" "),s("button",{staticClass:"btn",on:{click:t.importData}},[t._v("\n "+t._s(t.importLabel)+"\n ")]),t._v(" "),t._t("afterButtons"),t._v(" "),t.importFailed?s("p",{staticClass:"alert error"},[t._v("\n "+t._s(t.importFailedText)+"\n ")]):t._e(),t._v(" "),t._t("afterError")],2)},[],!1,Oe,null,null).exports;var Se=function(t){s(638)},Ie=Object(o.a)(null,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"},[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(" "),t._m(0)],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"},[t._v("\n "+t._s(t.$t("settings.style.preview.button"))+"\n ")])])])])])},[function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"icons"},[e("i",{staticClass:"button-icon icon-reply",staticStyle:{color:"var(--cBlue)"}}),this._v(" "),e("i",{staticClass:"button-icon icon-retweet",staticStyle:{color:"var(--cGreen)"}}),this._v(" "),e("i",{staticClass:"button-icon icon-star",staticStyle:{color:"var(--cOrange)"}}),this._v(" "),e("i",{staticClass:"button-icon icon-cancel",staticStyle:{color:"var(--cRed)"}})])}],!1,Se,null,null).exports;function je(t,e){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),s.push.apply(s,a)}return s}function Ee(t){for(var e=1;ece.a)return t(e+"future_version_imported")+" "+t(i?e+"snapshot_missing":e+"snapshot_present");if(nce.a)return t(e+"fe_downgraded")+" "+t(i?e+"migration_snapshot_ok":e+"migration_snapshot_gone");if(n=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(z()(Object.values(this.preview.rules)),["color: var(--text)","font-family: var(--interfaceFont, sans-serif)"]).join(";"):""},shadowsAvailable:function(){return Object.keys(re.a).sort()},currentShadowOverriden:{get:function(){return!!this.currentShadow},set:function(t){t?Object(q.set)(this.shadowsLocal,this.shadowSelected,this.currentShadowFallback.map(function(t){return Object.assign({},t)})):Object(q.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(q.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:ce.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:Ee({themeEngineVersion:ce.a},this.previewTheme),source:e}}},components:{ColorInput:pe,OpacityInput:he,RangeInput:me,ContrastRatio:Le,ShadowControl:we,FontControl:ke,TabSwitcher:a.a,Preview:Ie,ExportImport:Pe,Checkbox:d.a},methods:{loadTheme:function(t,e){var s=t.theme,a=t.source,n=t._pleroma_theme_version,o=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(this.dismissWarning(),!a&&!s)throw new Error("Can't load theme: empty");var i="localStorage"!==e||s.colors?n:"l1",r=(s||{}).themeEngineVersion,l=(a||{}).themeEngineVersion||2,c=l===ce.a,u=void 0!==s&&void 0!==a&&l!==r,d=a&&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:!a,themeEngineVersion:l,type:"wrong_version"}):this.themeWarning={origin:e,noActionsPossible:!0,themeEngineVersion:l,type:"no_snapshot_old_version"}),this.normalizeLocalState(s,i,a,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,a=s.customTheme,n=s.customThemeSource;a||n?this.loadTheme({theme:a,source:e?a:n},"localStorage",t):this.loadTheme(this.$store.state.instance.themeData,"defaults",t)},setCustomTheme:function(){this.$store.dispatch("setOption",{name:"customTheme",value:Ee({themeEngineVersion:ce.a},this.previewTheme)}),this.$store.dispatch("setOption",{name:"customThemeSource",value:{themeEngineVersion:ce.a,shadows:this.shadowsLocal,fonts:this.fontsLocal,opacity:this.currentOpacity,colors:this.currentColors,radii:this.currentRadii}})},updatePreviewColorsAndShadows:function(){this.previewColors=Object(re.e)({opacity:this.currentOpacity,colors:this.currentColors}),this.previewShadows=Object(re.h)({shadows:this.shadowsLocal,opacity:this.previewTheme.opacity,themeEngineVersion:this.engineVersion},this.previewColors.theme.colors,this.previewColors.mod)},onImport:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.tempImportFile=t,this.loadTheme(t,"file",e)},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!Re.includes(t)}).forEach(function(e){Object(q.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(q.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(q.set)(t.$data,e,void 0)})},clearShadows:function(){this.shadowsLocal={}},clearFonts:function(){this.fontsLocal={}},normalizeLocalState:function(t){var e,s=this,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2?arguments[2]:void 0,o=arguments.length>3&&void 0!==arguments[3]&&arguments[3];void 0!==n&&(o||n.themeEngineVersion===ce.a)?(e=n,a=n.themeEngineVersion):e=t;var i=e.radii||e,r=e.opacity,l=e.shadows||{},c=e.fonts||{},u=e.themeEngineVersion?e.colors||e:Object(re.c)(e.colors||e);if(0===a&&(e.version&&(a=e.version),void 0===u.text&&void 0!==u.fg&&(a=1),void 0!==u.text&&void 0!==u.fg&&(a=2)),this.engineVersion=a,1===a&&(this.fgColorLocal=Object(ie.i)(u.btn),this.textColorLocal=Object(ie.i)(u.fg)),!this.keepColor){this.clearV1();var d=new Set(1!==a?Object.keys(le.c):[]);1!==a&&"l1"!==a||d.add("bg").add("link").add("cRed").add("cBlue").add("cGreen").add("cOrange"),d.forEach(function(t){var e=u[t],a=Object(ie.i)(u[t]);s[t+"ColorLocal"]="#aN"===a?e:a})}r&&!this.keepOpacity&&(this.clearOpacity(),Object.entries(r).forEach(function(t){var e=A()(t,2),a=e[0],n=e[1];null==n||Number.isNaN(n)||(s[a+"OpacityLocal"]=n)})),this.keepRoundness||(this.clearRoundness(),Object.entries(i).forEach(function(t){var e=A()(t,2),a=e[0],n=e[1],o=a.endsWith("Radius")?a.split("Radius")[0]:a;s[o+"RadiusLocal"]=n})),this.keepShadows||(this.clearShadows(),this.shadowsLocal=2===a?Object(re.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(re.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(re.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(){this.dismissWarning(),1===this.selectedVersion?(this.keepRoundness||this.clearRoundness(),this.keepShadows||this.clearShadows(),this.keepOpacity||this.clearOpacity(),this.keepColor||(this.clearV1(),this.bgColorLocal=this.selected[1],this.fgColorLocal=this.selected[2],this.textColorLocal=this.selected[3],this.linkColorLocal=this.selected[4],this.cRedColorLocal=this.selected[5],this.cGreenColorLocal=this.selected[6],this.cBlueColorLocal=this.selected[7],this.cOrangeColorLocal=this.selected[8])):this.selectedVersion>=2&&this.normalizeLocalState(this.selected.theme,2,this.selected.source)}}};var Fe=function(t){s(624)},Me=Object(o.a)(Be,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",on:{click:t.forceLoad}},[t._v("\n "+t._s(t.$t("settings.style.switcher.use_source"))+"\n ")]),t._v(" "),s("button",{staticClass:"btn",on:{click:t.forceSnapshot}},[t._v("\n "+t._s(t.$t("settings.style.switcher.use_snapshot"))+"\n ")])]:t.themeWarning.noActionsPossible?[s("button",{staticClass:"btn",on:{click:t.dismissWarning}},[t._v("\n "+t._s(t.$t("general.dismiss"))+"\n ")])]:[s("button",{staticClass:"btn",on:{click:t.forceLoad}},[t._v("\n "+t._s(t.$t("settings.style.switcher.load_theme"))+"\n ")]),t._v(" "),s("button",{staticClass:"btn",on:{click:t.dismissWarning}},[t._v("\n "+t._s(t.$t("settings.style.switcher.keep_as_is"))+"\n ")])]],2)]):t._e(),t._v(" "),s("ExportImport",{attrs:{"export-object":t.exportedTheme,"export-label":t.$t("settings.export_theme"),"import-label":t.$t("settings.import_theme"),"import-failed-text":t.$t("settings.invalid_theme_imported"),"on-import":t.onImport,validator:t.importValidator}},[s("template",{slot:"before"},[s("div",{staticClass:"presets"},[t._v("\n "+t._s(t.$t("settings.presets"))+"\n "),s("label",{staticClass:"select",attrs:{for:"preset-switcher"}},[s("select",{directives:[{name:"model",rawName:"v-model",value:t.selected,expression:"selected"}],staticClass:"preset-switcher",attrs:{id:"preset-switcher"},on:{change:function(e){var s=Array.prototype.filter.call(e.target.options,function(t){return t.selected}).map(function(t){return"_value"in t?t._value:t.value});t.selected=e.target.multiple?s:s[0]}}},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}},[t._v("\n "+t._s(e[0]||e.name)+"\n ")])}),0),t._v(" "),s("i",{staticClass:"icon-down-open"})])])])],2)],1),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",on:{click:t.clearOpacity}},[t._v("\n "+t._s(t.$t("settings.style.switcher.clear_opacity"))+"\n ")]),t._v(" "),s("button",{staticClass:"btn",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",on:{click:t.clearOpacity}},[t._v("\n "+t._s(t.$t("settings.style.switcher.clear_opacity"))+"\n ")]),t._v(" "),s("button",{staticClass:"btn",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.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",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("label",{staticClass:"select",attrs:{for:"shadow-switcher"}},[s("select",{directives:[{name:"model",rawName:"v-model",value:t.shadowSelected,expression:"shadowSelected"}],staticClass:"shadow-switcher",attrs:{id:"shadow-switcher"},on:{change:function(e){var s=Array.prototype.filter.call(e.target.options,function(t){return t.selected}).map(function(t){return"_value"in t?t._value:t.value});t.shadowSelected=e.target.multiple?s:s[0]}}},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),t._v(" "),s("i",{staticClass:"icon-down-open"})])]),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,a=e.target,n=!!a.checked;if(Array.isArray(s)){var o=t._i(s,null);a.checked?o<0&&(t.currentShadowOverriden=s.concat([null])):o>-1&&(t.currentShadowOverriden=s.slice(0,o).concat(s.slice(o+1)))}else t.currentShadowOverriden=n}}}),t._v(" "),s("label",{staticClass:"checkbox-label",attrs:{for:"override"}})]),t._v(" "),s("button",{staticClass:"btn",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",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 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",on:{click:t.clearAll}},[t._v("\n "+t._s(t.$t("settings.style.switcher.reset"))+"\n ")])])],1)},[],!1,Fe,null,null).exports,Ue={components:{TabSwitcher:a.a,DataImportExportTab:m,MutesAndBlocksTab:nt,NotificationsTab:it,FilteringTab:ft,SecurityTab:Et,ProfileTab:Qt,GeneralTab:ae,VersionTab:oe,ThemeTab:Me},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 Ve=function(t){s(591)},Ae=Object(o.a)(Ue,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:"brush","data-tab-name":"theme"}},[s("ThemeTab")],1),t._v(" "),t.isLoggedIn?s("div",{attrs:{label:t.$t("settings.notifications"),icon:"bell-ringing-o","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-off","data-tab-name":"mutesAndBlocks"}},[s("MutesAndBlocksTab")],1):t._e(),t._v(" "),s("div",{attrs:{label:t.$t("settings.version.title"),icon:"info-circled","data-tab-name":"version"}},[s("VersionTab")],1)])},[],!1,Ve,null,null);e.default=Ae.exports}}]); -//# sourceMappingURL=2.e852a6b4b3bba752b838.js.map \ No newline at end of file diff --git a/priv/static/static/js/2.e852a6b4b3bba752b838.js.map b/priv/static/static/js/2.e852a6b4b3bba752b838.js.map deleted file mode 100644 index d698f09e1..000000000 --- a/priv/static/static/js/2.e852a6b4b3bba752b838.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/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/export_import/export_import.vue?5952","webpack:///./src/components/export_import/export_import.vue?aed6","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?320c","webpack:///./src/components/exporter/exporter.js","webpack:///./src/components/exporter/exporter.vue","webpack:///./src/components/exporter/exporter.vue?7e42","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?40b4","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?7b44","webpack:///./src/components/mute_card/mute_card.js","webpack:///./src/components/mute_card/mute_card.vue","webpack:///./src/components/mute_card/mute_card.vue?6bc9","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?7cf0","webpack:///./src/components/selectable_list/selectable_list.js","webpack:///./src/components/selectable_list/selectable_list.vue","webpack:///./src/components/selectable_list/selectable_list.vue?5686","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?0687","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?6dcc","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?3af7","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?da03","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?cdbe","webpack:///./src/components/settings_modal/tabs/security_tab/mfa.vue","webpack:///./src/components/settings_modal/tabs/security_tab/mfa.vue?8795","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?0d38","webpack:///./src/components/image_cropper/image_cropper.js","webpack:///./src/components/image_cropper/image_cropper.vue","webpack:///./src/components/image_cropper/image_cropper.vue?017e","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?4eea","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?d9d4","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?2e10","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?c9d6","webpack:///./src/components/font_control/font_control.js","webpack:///./src/components/font_control/font_control.vue","webpack:///./src/components/font_control/font_control.vue?184b","webpack:///src/components/contrast_ratio/contrast_ratio.vue","webpack:///./src/components/contrast_ratio/contrast_ratio.vue","webpack:///./src/components/contrast_ratio/contrast_ratio.vue?efc3","webpack:///src/components/export_import/export_import.vue","webpack:///./src/components/export_import/export_import.vue","webpack:///./src/components/export_import/export_import.vue?9130","webpack:///./src/components/settings_modal/tabs/theme_tab/preview.vue","webpack:///./src/components/settings_modal/tabs/theme_tab/preview.vue?4c36","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?1515","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?458b"],"names":["content","__webpack_require__","module","i","locals","exports","add","default","push","Importer","props","submitHandler","type","Function","required","submitButtonLabel","String","this","$t","successMessage","errorMessage","data","file","error","success","submitting","methods","change","$refs","input","files","submit","_this","dismiss","then","__vue_styles__","context","importer_importer","Object","component_normalizer","importer","_vm","_h","$createElement","_c","_self","staticClass","ref","attrs","on","_v","click","_s","_e","Exporter","getContent","filename","exportButtonLabel","processingMessage","processing","process","fileToDownload","document","createElement","setAttribute","encodeURIComponent","style","display","body","appendChild","removeChild","setTimeout","exporter_vue_styles_","exporter_exporter","exporter","DataImportExportTab","activeTab","newDomainToMute","created","$store","dispatch","components","Checkbox","computed","user","state","users","currentUser","getFollowsContent","api","backendInteractor","exportFriends","id","generateExportableUsersContent","getBlocksContent","fetchBlocks","importFollows","status","Error","importBlocks","map","is_local","screen_name","location","hostname","join","tabs_data_import_export_tab","data_import_export_tab","label","submit-handler","success-message","error-message","get-content","export-button-label","autosuggest","query","filter","placeholder","term","timeout","results","resultsVisible","filtered","watch","val","fetchResults","clearTimeout","onInputClick","onClickOutside","autosuggest_vue_styles_","autosuggest_autosuggest","directives","name","rawName","value","expression","domProps","$event","target","composing","length","_l","item","_t","BlockCard","progress","getters","findUser","userId","relationship","blocked","blocking","BasicUserCard","unblockUser","blockUser","_this2","block_card_vue_styles_","block_card_block_card","block_card","disabled","MuteCard","muted","muting","unmuteUser","muteUser","mute_card_vue_styles_","mute_card_mute_card","mute_card","DomainMuteCard","ProgressButton","domainMutes","includes","domain","unmuteDomain","muteDomain","domain_mute_card_vue_styles_","domain_mute_card_domain_mute_card","domain_mute_card","slot","SelectableList","List","items","Array","getKey","selected","allKeys","filteredSelected","key","indexOf","allSelected","noneSelected","someSelected","isSelected","toggle","checked","splice","toggleAll","slice","selectable_list_vue_styles_","selectable_list_selectable_list","selectable_list","indeterminate","get-key","scopedSlots","_u","fn","class","selectable-list-item-selected-inner","withSubscription","_ref","fetch","select","_ref$childPropName","childPropName","_ref$additionalPropNa","additionalPropNames","WrappedComponent","keys","getComponentProps","v","concat","Vue","component","toConsumableArray_default","loading","fetchedData","$props","refresh","isEmpty","fetchData","render","h","_objectSpread","defineProperty_default","$listeners","$scopedSlots","children","entries","$slots","_ref2","_ref3","slicedToArray_default","helper_default","BlockList","get","MuteList","DomainMuteList","MutesAndBlocks","TabSwitcher","Autosuggest","knownDomains","instance","activateTab","tabName","filterUnblockedUsers","userIds","reject","filterUnMutedUsers","queryUserIds","blockUsers","ids","unblockUsers","muteUsers","unmuteUsers","filterUnMutedDomains","urls","_this3","url","queryKnownDomains","_this4","Promise","resolve","toLowerCase","unmuteDomains","domains","mutes_and_blocks_tab_vue_styles_","tabs_mutes_and_blocks_tab","mutes_and_blocks_tab","scrollable-tabs","row","user-id","NotificationsTab","notificationSettings","notification_settings","updateNotificationSettings","settings","tabs_notifications_tab","notifications_tab","model","callback","$$v","$set","SharedComputedObject","shared_computed_object_objectSpread","instanceDefaultProperties","multiChoiceProperties","instanceDefaultConfig","reduce","acc","_ref4","configDefaultState","mergedConfig","set","_ref5","_ref6","useStreamingApi","e","console","FilteringTab","muteWordsStringLocal","muteWords","filtering_tab_objectSpread","muteWordsString","filter_default","split","word","trim_default","notificationVisibility","handler","deep","replyVisibility","tabs_filtering_tab","filtering_tab","for","$$selectedVal","prototype","call","options","o","_value","multiple","hidePostStats","hidePostStatsLocalizedValue","hideUserStats","hideUserStatsLocalizedValue","hideFilteredStatuses","hideFilteredStatusesLocalizedValue","mfa_backup_codes","backupCodes","inProgress","codes","ready","displayTitle","mfa_backup_codes_vue_styles_","security_tab_mfa_backup_codes","code","Confirm","confirm","$emit","cancel","tabs_security_tab_confirm","security_tab_confirm","mfa_totp","currentPassword","deactivate","mfa_totp_objectSpread","isActivated","totp","mapState","doActivate","cancelDeactivate","doDeactivate","confirmDeactivate","mfaDisableOTP","password","res","Mfa","available","enabled","setupState","setupOTPState","getNewCodes","otpSettings","provisioning_uri","otpConfirmToken","readyInit","recovery-codes","RecoveryCodes","totp-item","qrcode","VueQrcode","mfa_objectSpread","canSetupOTP","setupInProgress","backupCodesPrepared","setupOTPInProgress","completedOTP","prepareOTP","confirmOTP","confirmNewBackupCodes","activateOTP","fetchBackupCodes","generateMfaBackupCodes","getBackupCodes","confirmBackupCodes","cancelBackupCodes","setupOTP","mfaSetupOTP","doConfirmOTP","mfaConfirmOTP","token","completeSetup","fetchSettings","cancelSetup","result","regenerator_default","a","async","_context","prev","next","awrap","settingsMFA","sent","abrupt","stop","mounted","_this5","mfa_vue_styles_","security_tab_mfa","mfa","activate","backup-codes","width","SecurityTab","newEmail","changeEmailError","changeEmailPassword","changedEmail","deletingAccount","deleteAccountConfirmPasswordInput","deleteAccountError","changePasswordInputs","changedPassword","changePasswordError","pleromaBackend","oauthTokens","tokens","oauthToken","appName","app_name","validUntil","Date","valid_until","toLocaleDateString","confirmDelete","deleteAccount","$router","changePassword","params","newPassword","newPasswordConfirmation","logout","changeEmail","email","replace","revokeToken","window","$i18n","t","security_tab_security_tab","security_tab","autocomplete","ImageCropper","trigger","Element","cropperOptions","aspectRatio","autoCropArea","viewMode","movable","zoomable","guides","mimes","saveButtonLabel","saveWithoutCroppingButtonlabel","cancelButtonLabel","cropper","undefined","dataUrl","submitError","saveText","saveWithoutCroppingText","cancelText","submitErrorMsg","toString","destroy","cropping","arguments","avatarUploadError","err","pickImage","createCropper","Cropper","img","getTriggerDOM","typeof_default","querySelector","readFile","fileInput","reader","FileReader","onload","readAsDataURL","clearError","addEventListener","beforeDestroy","removeEventListener","image_cropper_vue_styles_","image_cropper_image_cropper","image_cropper","src","alt","load","stopPropagation","textContent","accept","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","bannerUploadError","backgroundUploadError","ScopeSelector","EmojiInput","emojiUserSuggestor","suggestor","emoji","customEmoji","updateUsersList","emojiSuggestor","userSuggestor","fieldsLimits","maxFields","defaultAvatar","server","defaultBanner","isDefaultAvatar","baseAvatar","profile_image_url","isDefaultBanner","baseBanner","cover_photo","isDefaultBackground","background_image","avatarImgSrc","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","num","filesizeunit","unit","allowedsizeunit","resetAvatar","submitAvatar","resetBanner","submitBanner","resetBackground","submitBackground","that","updateAvatar","avatar","updateProfileImages","message","getCroppedCanvas","toBlob","_this6","profile_tab_vue_styles_","tabs_profile_tab","profile_tab","enable-emoji-picker","suggest","classname","show-all","user-default","initial-scope","on-scope-change","_","hide-emoji-button","title","open","close","clearUploadError","interface_language_switcher","languageCodes","messages","languages","languageNames","map_default","getLanguageName","language","interfaceLanguage","ja","ja_easy","zh","getName","interface_language_switcher_interface_language_switcher","langCode","GeneralTab","loopSilentAvailable","getOwnPropertyDescriptor","HTMLVideoElement","HTMLMediaElement","InterfaceLanguageSwitcher","general_tab_objectSpread","postFormats","instanceSpecificPanelPresent","showInstanceSpecificPanel","tabs_general_tab","general_tab","hideISP","hideMutedPosts","hideMutedPostsLocalizedValue","collapseMessageWithSubject","collapseMessageWithSubjectLocalizedValue","streaming","pauseOnUnfocused","emojiReactionsOnTimeline","scopeCopy","scopeCopyLocalizedValue","alwaysShowSubjectInput","alwaysShowSubjectInputLocalizedValue","subjectLineBehavior","subjectLineBehaviorDefaultValue","postContentType","postFormat","postContentTypeDefaultValue","minimalScopesMode","minimalScopesModeLocalizedValue","autohideFloatingPostButton","padEmoji","hideAttachments","hideAttachmentsInConv","modifiers","number","min","step","maxThumbnails","_n","blur","$forceUpdate","hideNsfw","preloadImage","useOneClickNsfw","stopGifs","loopVideo","loopVideoSilentOnly","playVideosInModal","useContainFit","webPushNotifications","greentext","greentextLocalizedValue","VersionTab","backendVersion","frontendVersion","frontendVersionLink","backendVersionLink","versionString","matches","match","tabs_version_tab","version_tab","href","color_input","checkbox_checkbox","fallback","Boolean","showOptionalTickbox","present","validColor","color_convert","transparentColor","computedColor","startsWith","color_input_vue_styles_","color_input_color_input","backgroundColor","range_input_range_input","max","hardMax","hardMin","opacity_input","opacity_input_opacity_input","toModel","shadow_control_objectSpread","x","y","spread","inset","color","alpha","shadow_control","selectedId","cValue","ColorInput","OpacityInput","del","Math","moveUp","moveDn","beforeUpdate","anyShadows","anyShadowsFallback","currentFallback","moveUpValid","moveDnValid","usingFallback","rgb","hex2rgb","boxShadow","getCssShadow","shadow_control_vue_styles_","shadow_control_shadow_control","__r","shadow","isArray","_i","$$a","$$el","$$c","$$i","show-optional-tickbox","path","tag","font_control","lValue","availableOptions","noInherit","dValue","family","isCustom","preset","font_control_vue_styles_","font_control_font_control","custom","option","contrast_ratio","large","contrast","hint","levelVal","aaa","aa","level","ratio","text","hint_18pt","laaa","laa","contrast_ratio_vue_styles_","contrast_ratio_contrast_ratio","export_import","importFailed","exportData","stringified","JSON","stringify","exportObject","btoa","importData","filePicker","parsed","parse","validator","onImport","readAsText","export_import_vue_styles_","export_import_export_import","exportLabel","importLabel","importFailedText","preview_vue_styles_","theme_tab_preview","staticStyle","font-family","_m","v1OnlyNames","theme_tab","theme_tab_objectSpread","availableStyles","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","_ref7","_ref8","themesComplete","loadThemeFromLocalStorage","shadowsAvailable","themeWarningHelp","pre","_this$themeWarning","origin","themeEngineVersion","noActionsPossible","CURRENT_VERSION","selectedVersion","currentColors","_ref9","_ref10","currentOpacity","_ref11","_ref12","currentRadii","btn","checkbox","panel","avatarAlt","tooltip","attachment","chatMessage","preview","composePreset","previewTheme","colors","opacity","radii","shadows","fonts","previewContrast","bg","colorsConverted","_ref13","_ref14","ratios","_ref15","_ref16","slotIsBaseText","textColor","_ref17","layer","variant","opacitySlot","getOpacitySlot","textColors","layers","getLayers","textColorKey","newKey","toUpperCase","getContrastRatioLayers","_ref18","_ref19","toPrecision","warn","previewRules","rules","values","DEFAULT_SHADOWS","sort","currentShadowOverriden","currentShadow","currentShadowFallback","assign","themeValid","exportedTheme","saveEverything","source","_pleroma_theme_version","RangeInput","ContrastRatio","ShadowControl","FontControl","Preview","ExportImport","loadTheme","_ref20","fileVersion","forceUseSource","dismissWarning","version","snapshotEngineVersion","versionsMatch","sourceSnapshotMismatch","forcedSourceLoad","normalizeLocalState","forceLoadLocalStorage","forceLoad","forceSnapshot","confirmLoadSource","_this$$store$getters$","customTheme","customThemeSource","themeData","setCustomTheme","updatePreviewColorsAndShadows","generateColors","generateShadows","mod","forceSource","importValidator","clearAll","clearV1","$data","endsWith","forEach","clearRoundness","clearOpacity","clearShadows","clearFonts","colors2to3","fg","fgColorLocal","rgb2hex","textColorLocal","Set","hex","_ref21","_ref22","Number","isNaN","_ref23","_ref24","shadows2to3","generateRadii","getOwnPropertyNames","generateFonts","fontsInvalid","bgColorLocal","linkColorLocal","cRedColorLocal","cGreenColorLocal","cBlueColorLocal","cOrangeColorLocal","theme_tab_vue_styles_","theme_tab_theme_tab","export-object","export-label","import-label","import-failed-text","on-import","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","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","hard-min","interface","no-inherit","post","postCode","SettingsModalContent","MutesAndBlocksTab","ThemeTab","isLoggedIn","settingsModalState","onOpen","targetTab","settingsModalTargetTab","tabIndex","tabSwitcher","findIndex","elm","setTab","settings_modal_content_vue_styles_","settings_modal_content_Component","settings_modal_content","side-tab-bar","data-tab-name","fullHeight","__webpack_exports__"],"mappings":"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","file":"static/js/2.e852a6b4b3bba752b838.js","sourcesContent":["// style-loader: Adds some css to the DOM by adding a \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 { getCssShadow } from '../../services/style_setter/style_setter.js'\nimport { hex2rgb } from '../../services/color_convert/color_convert.js'\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 },\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-5c532734\\\",\\\"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('label',{staticClass:\"select\",attrs:{\"for\":\"shadow-switcher\",\"disabled\":!_vm.ready || _vm.usingFallback}},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selectedId),expression:\"selectedId\"}],staticClass:\"shadow-switcher\",attrs:{\"id\":\"shadow-switcher\",\"disabled\":!_vm.ready || _vm.usingFallback},on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.selectedId=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},_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('i',{staticClass:\"icon-down-open\"})]),_vm._v(\" \"),_c('button',{staticClass:\"btn btn-default\",attrs:{\"disabled\":!_vm.ready || !_vm.present},on:{\"click\":_vm.del}},[_c('i',{staticClass:\"icon-cancel\"})]),_vm._v(\" \"),_c('button',{staticClass:\"btn btn-default\",attrs:{\"disabled\":!_vm.moveUpValid},on:{\"click\":_vm.moveUp}},[_c('i',{staticClass:\"icon-up-open\"})]),_vm._v(\" \"),_c('button',{staticClass:\"btn btn-default\",attrs:{\"disabled\":!_vm.moveDnValid},on:{\"click\":_vm.moveDn}},[_c('i',{staticClass:\"icon-down-open\"})]),_vm._v(\" \"),_c('button',{staticClass:\"btn btn-default\",attrs:{\"disabled\":_vm.usingFallback},on:{\"click\":_vm.add}},[_c('i',{staticClass:\"icon-plus\"})])]),_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'\n\nexport default {\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-0edf8dfc\\\",\\\"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('label',{staticClass:\"select\",attrs:{\"for\":_vm.name + '-font-switcher',\"disabled\":!_vm.present}},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.preset),expression:\"preset\"}],staticClass:\"font-switcher\",attrs:{\"id\":_vm.name + '-font-switcher',\"disabled\":!_vm.present},on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.preset=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},_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(\" \"),_c('i',{staticClass:\"icon-down-open\"})]),_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()])}\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-7974f5b3\\\",\\\"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('i',{staticClass:\"icon-thumbs-up-alt\"})]):_vm._e(),_vm._v(\" \"),(!_vm.contrast.aaa && _vm.contrast.aa)?_c('span',[_c('i',{staticClass:\"icon-adjust\"})]):_vm._e(),_vm._v(\" \"),(!_vm.contrast.aaa && !_vm.contrast.aa)?_c('span',[_c('i',{staticClass:\"icon-attention\"})]):_vm._e()]),_vm._v(\" \"),(_vm.contrast && _vm.large)?_c('span',{staticClass:\"rating\",attrs:{\"title\":_vm.hint_18pt}},[(_vm.contrast.laaa)?_c('span',[_c('i',{staticClass:\"icon-thumbs-up-alt\"})]):_vm._e(),_vm._v(\" \"),(!_vm.contrast.laaa && _vm.contrast.laa)?_c('span',[_c('i',{staticClass:\"icon-adjust\"})]):_vm._e(),_vm._v(\" \"),(!_vm.contrast.laaa && !_vm.contrast.laa)?_c('span',[_c('i',{staticClass:\"icon-attention\"})]):_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!./export_import.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./export_import.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./export_import.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-3d9b5a74\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./export_import.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:\"import-export-container\"},[_vm._t(\"before\"),_vm._v(\" \"),_c('button',{staticClass:\"btn\",on:{\"click\":_vm.exportData}},[_vm._v(\"\\n \"+_vm._s(_vm.exportLabel)+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn\",on:{\"click\":_vm.importData}},[_vm._v(\"\\n \"+_vm._s(_vm.importLabel)+\"\\n \")]),_vm._v(\" \"),_vm._t(\"afterButtons\"),_vm._v(\" \"),(_vm.importFailed)?_c('p',{staticClass:\"alert error\"},[_vm._v(\"\\n \"+_vm._s(_vm.importFailedText)+\"\\n \")]):_vm._e(),_vm._v(\" \"),_vm._t(\"afterError\")],2)}\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!./preview.vue\")\n}\n/* script */\nvar __vue_script__ = null\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-1a88be74\\\",\\\"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\"},[_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(\" \"),_vm._m(0)],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\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.preview.button'))+\"\\n \")])])])])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"icons\"},[_c('i',{staticClass:\"button-icon icon-reply\",staticStyle:{\"color\":\"var(--cBlue)\"}}),_vm._v(\" \"),_c('i',{staticClass:\"button-icon icon-retweet\",staticStyle:{\"color\":\"var(--cGreen)\"}}),_vm._v(\" \"),_c('i',{staticClass:\"button-icon icon-star\",staticStyle:{\"color\":\"var(--cOrange)\"}}),_vm._v(\" \"),_c('i',{staticClass:\"button-icon icon-cancel\",staticStyle:{\"color\":\"var(--cRed)\"}})])}]\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 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 ExportImport from 'src/components/export_import/export_import.vue'\nimport Checkbox from 'src/components/checkbox/checkbox.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 availableStyles: [],\n selected: 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.selected) ? 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 ExportImport,\n Checkbox\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 onImport (parsed, forceSource = false) {\n this.tempImportFile = parsed\n this.loadTheme(parsed, 'file', forceSource)\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.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.selected[1]\n this.fgColorLocal = this.selected[2]\n this.textColorLocal = this.selected[3]\n this.linkColorLocal = this.selected[4]\n this.cRedColorLocal = this.selected[5]\n this.cGreenColorLocal = this.selected[6]\n this.cBlueColorLocal = this.selected[7]\n this.cOrangeColorLocal = this.selected[8]\n }\n } else if (this.selectedVersion >= 2) {\n this.normalizeLocalState(this.selected.theme, 2, this.selected.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-03c6cfba\\\",\\\"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\",on:{\"click\":_vm.forceLoad}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.use_source'))+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn\",on:{\"click\":_vm.forceSnapshot}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.use_snapshot'))+\"\\n \")])]:(_vm.themeWarning.noActionsPossible)?[_c('button',{staticClass:\"btn\",on:{\"click\":_vm.dismissWarning}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('general.dismiss'))+\"\\n \")])]:[_c('button',{staticClass:\"btn\",on:{\"click\":_vm.forceLoad}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.load_theme'))+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn\",on:{\"click\":_vm.dismissWarning}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.keep_as_is'))+\"\\n \")])]],2)]):_vm._e(),_vm._v(\" \"),_c('ExportImport',{attrs:{\"export-object\":_vm.exportedTheme,\"export-label\":_vm.$t(\"settings.export_theme\"),\"import-label\":_vm.$t(\"settings.import_theme\"),\"import-failed-text\":_vm.$t(\"settings.invalid_theme_imported\"),\"on-import\":_vm.onImport,\"validator\":_vm.importValidator}},[_c('template',{slot:\"before\"},[_c('div',{staticClass:\"presets\"},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.presets'))+\"\\n \"),_c('label',{staticClass:\"select\",attrs:{\"for\":\"preset-switcher\"}},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selected),expression:\"selected\"}],staticClass:\"preset-switcher\",attrs:{\"id\":\"preset-switcher\"},on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.selected=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},_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}},[_vm._v(\"\\n \"+_vm._s(style[0] || style.name)+\"\\n \")])}),0),_vm._v(\" \"),_c('i',{staticClass:\"icon-down-open\"})])])])],2)],1),_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\",on:{\"click\":_vm.clearOpacity}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.clear_opacity'))+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn\",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\",on:{\"click\":_vm.clearOpacity}},[_vm._v(\"\\n \"+_vm._s(_vm.$t('settings.style.switcher.clear_opacity'))+\"\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn\",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.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\",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('label',{staticClass:\"select\",attrs:{\"for\":\"shadow-switcher\"}},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.shadowSelected),expression:\"shadowSelected\"}],staticClass:\"shadow-switcher\",attrs:{\"id\":\"shadow-switcher\"},on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.shadowSelected=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},_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),_vm._v(\" \"),_c('i',{staticClass:\"icon-down-open\"})])]),_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\",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\",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 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\",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\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-da72a86e\\\",\\\"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\":\"brush\",\"data-tab-name\":\"theme\"}},[_c('ThemeTab')],1),_vm._v(\" \"),(_vm.isLoggedIn)?_c('div',{attrs:{\"label\":_vm.$t('settings.notifications'),\"icon\":\"bell-ringing-o\",\"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-off\",\"data-tab-name\":\"mutesAndBlocks\"}},[_c('MutesAndBlocksTab')],1):_vm._e(),_vm._v(\" \"),_c('div',{attrs:{\"label\":_vm.$t('settings.version.title'),\"icon\":\"info-circled\",\"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.818c38d27369c3a4d677.js.map b/priv/static/static/js/20.818c38d27369c3a4d677.js.map deleted file mode 100644 index 696eab20f..000000000 --- a/priv/static/static/js/20.818c38d27369c3a4d677.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/20.818c38d27369c3a4d677.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/20.818c38d27369c3a4d677.js b/priv/static/static/js/20.a64fd29da59076399a27.js similarity index 99% rename from priv/static/static/js/20.818c38d27369c3a4d677.js rename to priv/static/static/js/20.a64fd29da59076399a27.js index 133eac52d..eae5b3947 100644 --- a/priv/static/static/js/20.818c38d27369c3a4d677.js +++ b/priv/static/static/js/20.a64fd29da59076399a27.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[20],{577:function(e){e.exports={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:"このインスタンスについて",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:"Unicode絵文字"},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私はアニメのキャラクターで、日本の郊外に住んでいます。私をWiredで見たことがあるかもしれません。",validations:{username_required:"必須",fullname_required:"必須",email_required:"必須",password_required:"必須",password_confirmation_required:"必須",password_confirmation_match:"パスワードが違います"}},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:"透明度をクリア"},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:"薄いテキスト"},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:"フォローされました!",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:"あなたの精神状態に何か問題はございませんか? この操作を取り消すことはできません。"}},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:"このインスタンスではパスワードリセットは無効になっています。インスタンスの管理者に連絡してください。"}}}}]); -//# sourceMappingURL=20.818c38d27369c3a4d677.js.map \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[20],{585:function(e){e.exports={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:"このインスタンスについて",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:"Unicode絵文字"},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私はアニメのキャラクターで、日本の郊外に住んでいます。私をWiredで見たことがあるかもしれません。",validations:{username_required:"必須",fullname_required:"必須",email_required:"必須",password_required:"必須",password_confirmation_required:"必須",password_confirmation_match:"パスワードが違います"}},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:"透明度をクリア"},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:"薄いテキスト"},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:"フォローされました!",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:"あなたの精神状態に何か問題はございませんか? この操作を取り消すことはできません。"}},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:"このインスタンスではパスワードリセットは無効になっています。インスタンスの管理者に連絡してください。"}}}}]); +//# sourceMappingURL=20.a64fd29da59076399a27.js.map \ No newline at end of file diff --git a/priv/static/static/js/20.a64fd29da59076399a27.js.map b/priv/static/static/js/20.a64fd29da59076399a27.js.map new file mode 100644 index 000000000..b2917fa10 --- /dev/null +++ b/priv/static/static/js/20.a64fd29da59076399a27.js.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/20.a64fd29da59076399a27.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/21.ce4cda179d888ca6bc2a.js b/priv/static/static/js/21.243d9e6ebf469a2dc740.js similarity index 99% rename from priv/static/static/js/21.ce4cda179d888ca6bc2a.js rename to priv/static/static/js/21.243d9e6ebf469a2dc740.js index 49700403c..61633519b 100644 --- a/priv/static/static/js/21.ce4cda179d888ca6bc2a.js +++ b/priv/static/static/js/21.243d9e6ebf469a2dc740.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[21],{579:function(e){e.exports={chat:{title:"챗"},features_panel:{chat:"챗",gopher:"고퍼",media_proxy:"미디어 프록시",scope_options:"범위 옵션",text_limit:"텍스트 제한",title:"기능",who_to_follow:"팔로우 추천"},finder:{error_fetching_user:"사용자 정보 불러오기 실패",find_user:"사용자 찾기"},general:{apply:"적용",submit:"보내기"},login:{login:"로그인",description:"OAuth로 로그인",logout:"로그아웃",password:"암호",placeholder:"예시: lain",register:"가입",username:"사용자 이름"},nav:{about:"About",back:"뒤로",chat:"로컬 챗",friend_requests:"팔로우 요청",mentions:"멘션",dms:"다이렉트 메시지",public_tl:"공개 타임라인",timeline:"타임라인",twkn:"모든 알려진 네트워크",user_search:"사용자 검색",preferences:"환경설정"},notifications:{broken_favorite:"알 수 없는 게시물입니다, 검색 합니다...",favorited_you:"당신의 게시물을 즐겨찾기",followed_you:"당신을 팔로우",load_older:"오래 된 알림 불러오기",notifications:"알림",read:"읽음!",repeated_you:"당신의 게시물을 리핏"},post_status:{new_status:"새 게시물 게시",account_not_locked_warning:"당신의 계정은 {0} 상태가 아닙니다. 누구나 당신을 팔로우 하고 팔로워 전용 게시물을 볼 수 있습니다.",account_not_locked_warning_link:"잠김",attachments_sensitive:"첨부물을 민감함으로 설정",content_type:{"text/plain":"평문"},content_warning:"주제 (필수 아님)",default:"LA에 도착!",direct_warning:"이 게시물을 멘션 된 사용자들에게만 보여집니다",posting:"게시",scope:{direct:"다이렉트 - 멘션 된 사용자들에게만",private:"팔로워 전용 - 팔로워들에게만",public:"공개 - 공개 타임라인으로",unlisted:"비공개 - 공개 타임라인에 게시 안 함"}},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:"패스워드와 일치해야 합니다"}},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:"흐려진 텍스트"},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:"LA에 막 도착!",faint_link:"도움 되는 설명서",fine_print:"우리의 {0} 를 읽고 도움 되지 않는 것들을 배우자!",header_faint:"이건 괜찮아",checkbox:"나는 약관을 대충 훑어보았습니다",link:"작고 귀여운 링크"}}},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:"테비바이트"}}}}}]); -//# sourceMappingURL=21.ce4cda179d888ca6bc2a.js.map \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[21],{587:function(e){e.exports={chat:{title:"챗"},features_panel:{chat:"챗",gopher:"고퍼",media_proxy:"미디어 프록시",scope_options:"범위 옵션",text_limit:"텍스트 제한",title:"기능",who_to_follow:"팔로우 추천"},finder:{error_fetching_user:"사용자 정보 불러오기 실패",find_user:"사용자 찾기"},general:{apply:"적용",submit:"보내기"},login:{login:"로그인",description:"OAuth로 로그인",logout:"로그아웃",password:"암호",placeholder:"예시: lain",register:"가입",username:"사용자 이름"},nav:{about:"About",back:"뒤로",chat:"로컬 챗",friend_requests:"팔로우 요청",mentions:"멘션",dms:"다이렉트 메시지",public_tl:"공개 타임라인",timeline:"타임라인",twkn:"모든 알려진 네트워크",user_search:"사용자 검색",preferences:"환경설정"},notifications:{broken_favorite:"알 수 없는 게시물입니다, 검색 합니다...",favorited_you:"당신의 게시물을 즐겨찾기",followed_you:"당신을 팔로우",load_older:"오래 된 알림 불러오기",notifications:"알림",read:"읽음!",repeated_you:"당신의 게시물을 리핏"},post_status:{new_status:"새 게시물 게시",account_not_locked_warning:"당신의 계정은 {0} 상태가 아닙니다. 누구나 당신을 팔로우 하고 팔로워 전용 게시물을 볼 수 있습니다.",account_not_locked_warning_link:"잠김",attachments_sensitive:"첨부물을 민감함으로 설정",content_type:{"text/plain":"평문"},content_warning:"주제 (필수 아님)",default:"LA에 도착!",direct_warning:"이 게시물을 멘션 된 사용자들에게만 보여집니다",posting:"게시",scope:{direct:"다이렉트 - 멘션 된 사용자들에게만",private:"팔로워 전용 - 팔로워들에게만",public:"공개 - 공개 타임라인으로",unlisted:"비공개 - 공개 타임라인에 게시 안 함"}},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:"패스워드와 일치해야 합니다"}},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:"흐려진 텍스트"},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:"LA에 막 도착!",faint_link:"도움 되는 설명서",fine_print:"우리의 {0} 를 읽고 도움 되지 않는 것들을 배우자!",header_faint:"이건 괜찮아",checkbox:"나는 약관을 대충 훑어보았습니다",link:"작고 귀여운 링크"}}},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:"테비바이트"}}}}}]); +//# sourceMappingURL=21.243d9e6ebf469a2dc740.js.map \ No newline at end of file diff --git a/priv/static/static/js/21.243d9e6ebf469a2dc740.js.map b/priv/static/static/js/21.243d9e6ebf469a2dc740.js.map new file mode 100644 index 000000000..3f98250fa --- /dev/null +++ b/priv/static/static/js/21.243d9e6ebf469a2dc740.js.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/21.243d9e6ebf469a2dc740.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/21.ce4cda179d888ca6bc2a.js.map b/priv/static/static/js/21.ce4cda179d888ca6bc2a.js.map deleted file mode 100644 index 124d58abc..000000000 --- a/priv/static/static/js/21.ce4cda179d888ca6bc2a.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/21.ce4cda179d888ca6bc2a.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/22.2ea93c6cc569ef0256ab.js.map b/priv/static/static/js/22.2ea93c6cc569ef0256ab.js.map deleted file mode 100644 index 773159f01..000000000 --- a/priv/static/static/js/22.2ea93c6cc569ef0256ab.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/22.2ea93c6cc569ef0256ab.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/22.2ea93c6cc569ef0256ab.js b/priv/static/static/js/22.e20ef7e5fefc0964cdd1.js similarity index 99% rename from priv/static/static/js/22.2ea93c6cc569ef0256ab.js rename to priv/static/static/js/22.e20ef7e5fefc0964cdd1.js index 1d2077720..e8f309f8a 100644 --- a/priv/static/static/js/22.2ea93c6cc569ef0256ab.js +++ b/priv/static/static/js/22.e20ef7e5fefc0964cdd1.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[22],{580:function(e){e.exports={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:"Interaksjooner",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"},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"},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"}},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"}}}}]); -//# sourceMappingURL=22.2ea93c6cc569ef0256ab.js.map \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[22],{588:function(e){e.exports={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:"Interaksjooner",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"},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"},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"}},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"}}}}]); +//# sourceMappingURL=22.e20ef7e5fefc0964cdd1.js.map \ No newline at end of file diff --git a/priv/static/static/js/22.e20ef7e5fefc0964cdd1.js.map b/priv/static/static/js/22.e20ef7e5fefc0964cdd1.js.map new file mode 100644 index 000000000..7780cffe6 --- /dev/null +++ b/priv/static/static/js/22.e20ef7e5fefc0964cdd1.js.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/22.e20ef7e5fefc0964cdd1.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/23.a57a7845cc20fafd06d1.js b/priv/static/static/js/23.614a35f9ded445292f4a.js similarity index 99% rename from priv/static/static/js/23.a57a7845cc20fafd06d1.js rename to priv/static/static/js/23.614a35f9ded445292f4a.js index b15a888df..a35450986 100644 --- a/priv/static/static/js/23.a57a7845cc20fafd06d1.js +++ b/priv/static/static/js/23.614a35f9ded445292f4a.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[23],{581:function(e){e.exports={chat:{title:"Chat"},features_panel:{chat:"Chat",gopher:"Gopher",media_proxy:"Media proxy",scope_options:"Zichtbaarheidsopties",text_limit:"Tekst limiet",title:"Kenmerken",who_to_follow:"Wie te volgen"},finder:{error_fetching_user:"Fout tijdens ophalen gebruiker",find_user:"Gebruiker zoeken"},general:{apply:"Toepassen",submit:"Verzend",more:"Meer",optional:"optioneel",show_more:"Bekijk meer",show_less:"Bekijk minder",dismiss:"Opheffen",cancel:"Annuleren",disable:"Uitschakelen",enable:"Inschakelen",confirm:"Bevestigen",verify:"Verifiëren",generic_error:"Er is een fout opgetreden",peek:"Spiek",close:"Sluiten",retry:"Opnieuw proberen",error_retry:"Probeer het opnieuw",loading:"Laden…"},login:{login:"Log in",description:"Log in met OAuth",logout:"Uitloggen",password:"Wachtwoord",placeholder:"bijv. lain",register:"Registreren",username:"Gebruikersnaam",hint:"Log in om deel te nemen aan de discussie",authentication_code:"Authenticatie code",enter_recovery_code:"Voer een herstelcode in",enter_two_factor_code:"Voer een twee-factor code in",recovery_code:"Herstelcode",heading:{totp:"Twee-factor authenticatie",recovery:"Twee-factor herstelling"}},nav:{about:"Over",back:"Terug",chat:"Lokale Chat",friend_requests:"Volgverzoeken",mentions:"Vermeldingen",dms:"Directe Berichten",public_tl:"Publieke Tijdlijn",timeline:"Tijdlijn",twkn:"Het Geheel Bekende Netwerk",user_search:"Gebruiker Zoeken",who_to_follow:"Wie te volgen",preferences:"Voorkeuren",administration:"Administratie",search:"Zoeken",interactions:"Interacties"},notifications:{broken_favorite:"Onbekende status, aan het zoeken…",favorited_you:"vond je status leuk",followed_you:"volgt jou",load_older:"Laad oudere meldingen",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}"},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:"Markeer bijlagen als gevoelig",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:"Direct - Post enkel naar vermelde gebruikers",private:"Enkel volgers - Post enkel naar volgers",public:"Publiek - Post op publieke tijdlijnen",unlisted:"Niet Vermelden - Niet tonen op publieke 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 Publieke Tijdlijn en Het Geheel Bekende Netwerk",private:"Dit bericht zal voor alleen je volgers zichtbaar zijn"}},registration:{bio:"Bio",email:"Email",fullname:"Weergave naam",password_confirm:"Wachtwoord bevestiging",registration:"Registratie",token:"Uitnodigings-token",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 anime meisje woonachtig in een buitenwijk in Japan. Je kent me misschien van the Wired."},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:"Preset opslaan",filtering:"Filtering",filtering_explanation:"Alle statussen die deze woorden bevatten worden genegeerd, één filter per lijn",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:"Verberg bijlages in conversaties",hide_attachments_in_tl:"Verberg bijlages in de tijdlijn",hide_isp:"Verberg instantie-specifiek paneel",preload_images:"Afbeeldingen vooraf laden",hide_post_stats:"Verberg bericht statistieken (bijv. het aantal favorieten)",hide_user_stats:"Verberg bericht statistieken (bijv. het aantal volgers)",import_followers_from_a_csv_file:"Importeer volgers uit een csv bestand",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 geen door Pleroma ondersteund thema. Er zijn geen aanpassingen gedaan.",limited_availability:"Niet beschikbaar in je browser",links:"Links",lock_account_description:"Laat volgers enkel toe na expliciete toestemming",loop_video:"Herhaal video's",loop_video_silent_only:"Herhaal enkel video's zonder geluid (bijv. Mastodon's \"gifs\")",name:"Naam",name_bio:"Naam & Bio",new_password:"Nieuw wachtwoord",notification_visibility:"Type meldingen die getoond worden",notification_visibility_follows:"Volgingen",notification_visibility_likes:"Vind-ik-leuks",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 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:"Stel afronding van hoeken in de interface in (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:"Neem bereik over bij beantwoorden (Directe Berichten blijven altijd Direct)",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 antwoorden",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:"Gebruik hex color codes (#rrggbb) om je kleurschema 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"},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-factor Authenticatie",generate_new_recovery_codes:"Genereer nieuwe herstelcodes",recovery_codes:"Herstelcodes.",waiting_a_recovery_codes:"Backup codes ontvangen…",authentication_methods:"Authenticatie methodes",scan:{title:"Scannen",desc:"Scan de QR code of voer een sleutel in met je twee-factor applicatie:",secret_code:"Sleutel"},verify:{desc:"Voer de code van je twee-factor applicatie in om twee-factor authenticatie in te schakelen:"},warning_of_generate_new_codes:"Wanneer je nieuwe herstelcodes genereert, zullen je oude code 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 uit 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:"Email wijzigen",change_email_error:"Er is een fout opgetreden tijdens het wijzigen van je email.",changed_email:"Email 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:"Verberg berichten van genegeerde gebruikers",max_thumbnails:"Maximaal aantal miniaturen per bericht",use_one_click_nsfw:"Open gevoelige bijlagen met slechts één klik",hide_filtered_statuses:"Gefilterde statussen verbergen",import_blocks_from_a_csv_file:"Importeer blokkades van een csv bestand",mutes_tab:"Negeringen",play_videos_in_modal:"Speel video's af in een popup frame",new_email:"Nieuwe Email",notification_visibility_emoji_reactions:"Reacties",no_blocks:"Geen blokkades",no_mutes:"Geen negeringen",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:"Beheerders badge tonen in mijn profiel",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:"Upload een foto",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:"Snij bijlage in miniaturen niet bij",notification_visibility_moves:"Gebruiker Migraties",hide_follows_description:"Niet tonen wie ik volg",show_moderator_badge:"Moderators badge tonen in mijn profiel",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"},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"},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"},user_profile:{timeline_title:"Gebruikers Tijdlijn",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"},upload:{error:{base:"Upload mislukt.",file_too_big:"Bestand is te groot [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]",default:"Probeer het later opnieuw"},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:"Zoekwoord Beleid",ftl_removal:'Verwijdering van "Het Geheel Bekende Netwerk" Tijdlijn'},mrf_policies_desc:"MRF regels beïnvloeden het federatie gedrag van de instantie. De volgende regels zijn ingeschakeld:",mrf_policies:"Ingeschakelde MRF Regels",simple:{simple_policies:"Instantie-specifieke 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 publieke berichten sturen naar de volgende instanties:",ftl_removal_desc:'Deze instantie verwijdert de volgende instanties van "Het Geheel 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 "Het Geheel Bekende Netwerk" Tijdlijn',media_removal:"Media Verwijdering",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"},emoji:{emoji:"Emoji",keep_open:"Picker openhouden",search_emoji:"Zoek voor een emoji",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 volgingen",moves:"Gebruiker migreert",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"},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"}}}}]); -//# sourceMappingURL=23.a57a7845cc20fafd06d1.js.map \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[23],{589:function(e){e.exports={chat:{title:"Chat"},features_panel:{chat:"Chat",gopher:"Gopher",media_proxy:"Media proxy",scope_options:"Zichtbaarheidsopties",text_limit:"Tekst limiet",title:"Kenmerken",who_to_follow:"Wie te volgen"},finder:{error_fetching_user:"Fout tijdens ophalen gebruiker",find_user:"Gebruiker zoeken"},general:{apply:"Toepassen",submit:"Verzend",more:"Meer",optional:"optioneel",show_more:"Bekijk meer",show_less:"Bekijk minder",dismiss:"Opheffen",cancel:"Annuleren",disable:"Uitschakelen",enable:"Inschakelen",confirm:"Bevestigen",verify:"Verifiëren",generic_error:"Er is een fout opgetreden",peek:"Spiek",close:"Sluiten",retry:"Opnieuw proberen",error_retry:"Probeer het opnieuw",loading:"Laden…"},login:{login:"Log in",description:"Log in met OAuth",logout:"Uitloggen",password:"Wachtwoord",placeholder:"bijv. lain",register:"Registreren",username:"Gebruikersnaam",hint:"Log in om deel te nemen aan de discussie",authentication_code:"Authenticatie code",enter_recovery_code:"Voer een herstelcode in",enter_two_factor_code:"Voer een twee-factor code in",recovery_code:"Herstelcode",heading:{totp:"Twee-factor authenticatie",recovery:"Twee-factor herstelling"}},nav:{about:"Over",back:"Terug",chat:"Lokale Chat",friend_requests:"Volgverzoeken",mentions:"Vermeldingen",dms:"Directe Berichten",public_tl:"Publieke Tijdlijn",timeline:"Tijdlijn",twkn:"Het Geheel Bekende Netwerk",user_search:"Gebruiker Zoeken",who_to_follow:"Wie te volgen",preferences:"Voorkeuren",administration:"Administratie",search:"Zoeken",interactions:"Interacties"},notifications:{broken_favorite:"Onbekende status, aan het zoeken…",favorited_you:"vond je status leuk",followed_you:"volgt jou",load_older:"Laad oudere meldingen",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}"},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:"Markeer bijlagen als gevoelig",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:"Direct - Post enkel naar vermelde gebruikers",private:"Enkel volgers - Post enkel naar volgers",public:"Publiek - Post op publieke tijdlijnen",unlisted:"Niet Vermelden - Niet tonen op publieke 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 Publieke Tijdlijn en Het Geheel Bekende Netwerk",private:"Dit bericht zal voor alleen je volgers zichtbaar zijn"}},registration:{bio:"Bio",email:"Email",fullname:"Weergave naam",password_confirm:"Wachtwoord bevestiging",registration:"Registratie",token:"Uitnodigings-token",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 anime meisje woonachtig in een buitenwijk in Japan. Je kent me misschien van the Wired."},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:"Preset opslaan",filtering:"Filtering",filtering_explanation:"Alle statussen die deze woorden bevatten worden genegeerd, één filter per lijn",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:"Verberg bijlages in conversaties",hide_attachments_in_tl:"Verberg bijlages in de tijdlijn",hide_isp:"Verberg instantie-specifiek paneel",preload_images:"Afbeeldingen vooraf laden",hide_post_stats:"Verberg bericht statistieken (bijv. het aantal favorieten)",hide_user_stats:"Verberg bericht statistieken (bijv. het aantal volgers)",import_followers_from_a_csv_file:"Importeer volgers uit een csv bestand",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 geen door Pleroma ondersteund thema. Er zijn geen aanpassingen gedaan.",limited_availability:"Niet beschikbaar in je browser",links:"Links",lock_account_description:"Laat volgers enkel toe na expliciete toestemming",loop_video:"Herhaal video's",loop_video_silent_only:"Herhaal enkel video's zonder geluid (bijv. Mastodon's \"gifs\")",name:"Naam",name_bio:"Naam & Bio",new_password:"Nieuw wachtwoord",notification_visibility:"Type meldingen die getoond worden",notification_visibility_follows:"Volgingen",notification_visibility_likes:"Vind-ik-leuks",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 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:"Stel afronding van hoeken in de interface in (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:"Neem bereik over bij beantwoorden (Directe Berichten blijven altijd Direct)",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 antwoorden",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:"Gebruik hex color codes (#rrggbb) om je kleurschema 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"},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-factor Authenticatie",generate_new_recovery_codes:"Genereer nieuwe herstelcodes",recovery_codes:"Herstelcodes.",waiting_a_recovery_codes:"Backup codes ontvangen…",authentication_methods:"Authenticatie methodes",scan:{title:"Scannen",desc:"Scan de QR code of voer een sleutel in met je twee-factor applicatie:",secret_code:"Sleutel"},verify:{desc:"Voer de code van je twee-factor applicatie in om twee-factor authenticatie in te schakelen:"},warning_of_generate_new_codes:"Wanneer je nieuwe herstelcodes genereert, zullen je oude code 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 uit 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:"Email wijzigen",change_email_error:"Er is een fout opgetreden tijdens het wijzigen van je email.",changed_email:"Email 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:"Verberg berichten van genegeerde gebruikers",max_thumbnails:"Maximaal aantal miniaturen per bericht",use_one_click_nsfw:"Open gevoelige bijlagen met slechts één klik",hide_filtered_statuses:"Gefilterde statussen verbergen",import_blocks_from_a_csv_file:"Importeer blokkades van een csv bestand",mutes_tab:"Negeringen",play_videos_in_modal:"Speel video's af in een popup frame",new_email:"Nieuwe Email",notification_visibility_emoji_reactions:"Reacties",no_blocks:"Geen blokkades",no_mutes:"Geen negeringen",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:"Beheerders badge tonen in mijn profiel",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:"Upload een foto",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:"Snij bijlage in miniaturen niet bij",notification_visibility_moves:"Gebruiker Migraties",hide_follows_description:"Niet tonen wie ik volg",show_moderator_badge:"Moderators badge tonen in mijn profiel",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"},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"},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"},user_profile:{timeline_title:"Gebruikers Tijdlijn",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"},upload:{error:{base:"Upload mislukt.",file_too_big:"Bestand is te groot [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]",default:"Probeer het later opnieuw"},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:"Zoekwoord Beleid",ftl_removal:'Verwijdering van "Het Geheel Bekende Netwerk" Tijdlijn'},mrf_policies_desc:"MRF regels beïnvloeden het federatie gedrag van de instantie. De volgende regels zijn ingeschakeld:",mrf_policies:"Ingeschakelde MRF Regels",simple:{simple_policies:"Instantie-specifieke 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 publieke berichten sturen naar de volgende instanties:",ftl_removal_desc:'Deze instantie verwijdert de volgende instanties van "Het Geheel 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 "Het Geheel Bekende Netwerk" Tijdlijn',media_removal:"Media Verwijdering",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"},emoji:{emoji:"Emoji",keep_open:"Picker openhouden",search_emoji:"Zoek voor een emoji",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 volgingen",moves:"Gebruiker migreert",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"},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"}}}}]); +//# sourceMappingURL=23.614a35f9ded445292f4a.js.map \ No newline at end of file diff --git a/priv/static/static/js/23.614a35f9ded445292f4a.js.map b/priv/static/static/js/23.614a35f9ded445292f4a.js.map new file mode 100644 index 000000000..4158041f4 --- /dev/null +++ b/priv/static/static/js/23.614a35f9ded445292f4a.js.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/23.614a35f9ded445292f4a.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/23.a57a7845cc20fafd06d1.js.map b/priv/static/static/js/23.a57a7845cc20fafd06d1.js.map deleted file mode 100644 index 0e5b421e6..000000000 --- a/priv/static/static/js/23.a57a7845cc20fafd06d1.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/23.a57a7845cc20fafd06d1.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/24.35eb55a657b5485f8491.js.map b/priv/static/static/js/24.35eb55a657b5485f8491.js.map deleted file mode 100644 index 93ffbb2e9..000000000 --- a/priv/static/static/js/24.35eb55a657b5485f8491.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/24.35eb55a657b5485f8491.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/24.35eb55a657b5485f8491.js b/priv/static/static/js/24.6ae9ca51e51e023afbe4.js similarity index 99% rename from priv/static/static/js/24.35eb55a657b5485f8491.js rename to priv/static/static/js/24.6ae9ca51e51e023afbe4.js index d09d5c371..d075f3b1f 100644 --- a/priv/static/static/js/24.35eb55a657b5485f8491.js +++ b/priv/static/static/js/24.6ae9ca51e51e023afbe4.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[24],{582:function(a){a.exports={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.35eb55a657b5485f8491.js.map \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[24],{590:function(a){a.exports={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.6ae9ca51e51e023afbe4.js.map \ No newline at end of file diff --git a/priv/static/static/js/24.6ae9ca51e51e023afbe4.js.map b/priv/static/static/js/24.6ae9ca51e51e023afbe4.js.map new file mode 100644 index 000000000..7e68d5eaa --- /dev/null +++ b/priv/static/static/js/24.6ae9ca51e51e023afbe4.js.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/24.6ae9ca51e51e023afbe4.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/25.5a9efe20e3ae1352e6d2.js b/priv/static/static/js/25.5a9efe20e3ae1352e6d2.js deleted file mode 100644 index e96c5e6ec..000000000 --- a/priv/static/static/js/25.5a9efe20e3ae1352e6d2.js +++ /dev/null @@ -1,2 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[25],{583:function(e){e.exports={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"},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"},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:"Cała znana sieć",user_search:"Wyszukiwanie użytkowników",search:"Wyszukiwanie",who_to_follow:"Sugestie obserwacji",preferences:"Preferencje",bookmarks:"Zakładki"},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ć"},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"},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:"Wpisz 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"}},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"},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ż"},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ść"},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"},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"},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"},display_date:{today:"Dzisiaj"}}}}]); -//# sourceMappingURL=25.5a9efe20e3ae1352e6d2.js.map \ No newline at end of file diff --git a/priv/static/static/js/25.5a9efe20e3ae1352e6d2.js.map b/priv/static/static/js/25.5a9efe20e3ae1352e6d2.js.map deleted file mode 100644 index a506e6fa8..000000000 --- a/priv/static/static/js/25.5a9efe20e3ae1352e6d2.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/25.5a9efe20e3ae1352e6d2.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/25.eadae0d48ee5be52a16c.js b/priv/static/static/js/25.eadae0d48ee5be52a16c.js new file mode 100644 index 000000000..a0e44e1aa --- /dev/null +++ b/priv/static/static/js/25.eadae0d48ee5be52a16c.js @@ -0,0 +1,2 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[25],{591:function(e){e.exports={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"},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ć"},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"}},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ń"},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ż"},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"},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"},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.eadae0d48ee5be52a16c.js.map \ No newline at end of file diff --git a/priv/static/static/js/25.eadae0d48ee5be52a16c.js.map b/priv/static/static/js/25.eadae0d48ee5be52a16c.js.map new file mode 100644 index 000000000..aaa5e3a57 --- /dev/null +++ b/priv/static/static/js/25.eadae0d48ee5be52a16c.js.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/25.eadae0d48ee5be52a16c.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/26.cf13231d524e5ca3b3e6.js b/priv/static/static/js/26.8fd0027b982c4bcdc88f.js similarity index 99% rename from priv/static/static/js/26.cf13231d524e5ca3b3e6.js rename to priv/static/static/js/26.8fd0027b982c4bcdc88f.js index adc57d6c7..3b149915b 100644 --- a/priv/static/static/js/26.cf13231d524e5ca3b3e6.js +++ b/priv/static/static/js/26.8fd0027b982c4bcdc88f.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[26],{584:function(e){e.exports={chat:{title:"Chat"},features_panel:{chat:"Chat",gopher:"Gopher",media_proxy:"Proxy de mídia",scope_options:"Opções de privacidade",text_limit:"Limite de caracteres",title:"Funções",who_to_follow:"Quem seguir"},finder:{error_fetching_user:"Erro ao procurar usuário",find_user:"Buscar usuário"},general:{apply:"Aplicar",submit:"Enviar",more:"Mais",generic_error:"Houve um erro",optional:"opcional"},image_cropper:{crop_picture:"Cortar imagem",save:"Salvar",cancel:"Cancelar"},login:{login:"Entrar",description:"Entrar com OAuth",logout:"Sair",password:"Senha",placeholder:"p.e. lain",register:"Registrar",username:"Usuário",hint:"Entre para participar da discussão"},media_modal:{previous:"Anterior",next:"Próximo"},nav:{about:"Sobre",back:"Voltar",chat:"Chat local",friend_requests:"Solicitações de seguidores",mentions:"Menções",dms:"Mensagens diretas",public_tl:"Linha do tempo pública",timeline:"Linha do tempo",twkn:"Toda a rede conhecida",user_search:"Buscar usuários",who_to_follow:"Quem seguir",preferences:"Preferências"},notifications:{broken_favorite:"Status desconhecido, buscando...",favorited_you:"favoritou sua postagem",followed_you:"seguiu você",load_older:"Carregar notificações antigas",notifications:"Notificações",read:"Lido!",repeated_you:"repetiu sua postagem",no_more_notifications:"Mais nenhuma notificação"},post_status:{new_status:"Postar novo status",account_not_locked_warning:"Sua conta não é {0}. Qualquer pessoa pode te seguir e ver seus posts privados (só para seguidores).",account_not_locked_warning_link:"restrita",attachments_sensitive:"Marcar anexos como sensíveis",content_type:{"text/plain":"Texto puro"},content_warning:"Assunto (opcional)",default:"Acabei de chegar no Rio!",direct_warning:"Este post será visível apenas para os usuários mencionados.",posting:"Publicando",scope:{direct:"Direto - Enviar somente aos usuários mencionados",private:"Apenas para seguidores - Enviar apenas para seguidores",public:"Público - Enviar a linhas do tempo públicas",unlisted:"Não listado - Não enviar a linhas do tempo públicas"}},registration:{bio:"Biografia",email:"Correio eletrônico",fullname:"Nome para exibição",password_confirm:"Confirmação de senha",registration:"Registro",token:"Código do convite",captcha:"CAPTCHA",new_captcha:"Clique na imagem para carregar um novo captcha",username_placeholder:"p. ex. lain",fullname_placeholder:"p. ex. Lain Iwakura",bio_placeholder:"e.g.\nOi, sou Lain\nSou uma garota que vive no subúrbio do Japão. Você deve me conhecer da Rede.",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 ser idêntica à senha"}},settings:{app_name:"Nome do aplicativo",attachmentRadius:"Anexos",attachments:"Anexos",avatar:"Avatar",avatarAltRadius:"Avatares (Notificações)",avatarRadius:"Avatares",background:"Pano de Fundo",bio:"Biografia",blocks_tab:"Bloqueios",btnRadius:"Botões",cBlue:"Azul (Responder, seguir)",cGreen:"Verde (Repetir)",cOrange:"Laranja (Favoritar)",cRed:"Vermelho (Cancelar)",change_password:"Mudar senha",change_password_error:"Houve um erro ao modificar sua senha.",changed_password:"Senha modificada com sucesso!",collapse_subject:"Esconder posts com assunto",composing:"Escrita",confirm_new_password:"Confirmar nova senha",current_avatar:"Seu avatar atual",current_password:"Sua senha 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:"Deletar conta",delete_account_description:"Deletar sua conta e mensagens permanentemente.",delete_account_error:"Houve um problema ao deletar sua conta. Se ele persistir, por favor entre em contato com o/a administrador/a da instância.",delete_account_instructions:"Digite sua senha no campo abaixo para confirmar a exclusão da conta.",avatar_size_instruction:"O tamanho mínimo recomendado para imagens de avatar é 150x150 pixels.",export_theme:"Salvar predefinições",filtering:"Filtragem",filtering_explanation:"Todas as postagens contendo 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 linha do tempo.",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:"Checkboxes",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:"Tocar vídeos diretamente no visualizador de mídia",use_contain_fit:"Não cortar o anexo na miniatura",name:"Nome",name_bio:"Nome & Biografia",new_password:"Nova senha",notification_visibility:"Tipos de notificação para mostrar",notification_visibility_follows:"Seguidas",notification_visibility_likes:"Favoritos",notification_visibility_mentions:"Menções",notification_visibility_repeats:"Repetições",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:"Habilitar clique para ocultar anexos sensíveis",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 linha do tempo",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 em email: "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 sob registros são indicadores de fundo/contraste de textos, passe por cima para informações detalhadas. Tenha ciência de 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"},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"},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 uma difusão > 0 aparecerão como se fossem definidas como 0.",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"}},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 no Rio!",faint_link:"manual útil",fine_print:"Leia nosso {0} para não aprender nada!",header_faint:"Está ok!",checkbox:"Li os termos e condições",link:"um belo link"}}},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 repetidos",repeated:"Repetido",show_new:"Mostrar novas",up_to_date:"Atualizado",no_more_statuses:"Sem mais posts",no_statuses:"Sem posts"},status:{reply_to:"Responder a",replies_list:"Respostas:"},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:"Mídia",mute:"Silenciar",muted:"Silenciado",per_day:"por dia",remote_follow:"Seguir remotamente",statuses:"Postagens",unblock:"Desbloquear",unblock_progress:"Desbloqueando...",block_progress:"Bloqueando...",unmute:"Retirar silêncio",unmute_progress:"Retirando silêncio...",mute_progress:"Silenciando..."},user_profile:{timeline_title:"Linha do tempo do usuário",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 mídia",repeat:"Repetir",reply:"Responder",favorite:"Favoritar",user_settings:"Configurações do usuário"},upload:{error:{base:"Falha no envio.",file_too_big:"Arquivo grande demais [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]",default:"Tente novamente mais tarde"},file_size_units:{B:"B",KiB:"KiB",MiB:"MiB",GiB:"GiB",TiB:"TiB"}}}}}]); -//# sourceMappingURL=26.cf13231d524e5ca3b3e6.js.map \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[26],{592:function(e){e.exports={chat:{title:"Chat"},features_panel:{chat:"Chat",gopher:"Gopher",media_proxy:"Proxy de mídia",scope_options:"Opções de privacidade",text_limit:"Limite de caracteres",title:"Funções",who_to_follow:"Quem seguir"},finder:{error_fetching_user:"Erro ao procurar usuário",find_user:"Buscar usuário"},general:{apply:"Aplicar",submit:"Enviar",more:"Mais",generic_error:"Houve um erro",optional:"opcional"},image_cropper:{crop_picture:"Cortar imagem",save:"Salvar",cancel:"Cancelar"},login:{login:"Entrar",description:"Entrar com OAuth",logout:"Sair",password:"Senha",placeholder:"p.e. lain",register:"Registrar",username:"Usuário",hint:"Entre para participar da discussão"},media_modal:{previous:"Anterior",next:"Próximo"},nav:{about:"Sobre",back:"Voltar",chat:"Chat local",friend_requests:"Solicitações de seguidores",mentions:"Menções",dms:"Mensagens diretas",public_tl:"Linha do tempo pública",timeline:"Linha do tempo",twkn:"Toda a rede conhecida",user_search:"Buscar usuários",who_to_follow:"Quem seguir",preferences:"Preferências"},notifications:{broken_favorite:"Status desconhecido, buscando...",favorited_you:"favoritou sua postagem",followed_you:"seguiu você",load_older:"Carregar notificações antigas",notifications:"Notificações",read:"Lido!",repeated_you:"repetiu sua postagem",no_more_notifications:"Mais nenhuma notificação"},post_status:{new_status:"Postar novo status",account_not_locked_warning:"Sua conta não é {0}. Qualquer pessoa pode te seguir e ver seus posts privados (só para seguidores).",account_not_locked_warning_link:"restrita",attachments_sensitive:"Marcar anexos como sensíveis",content_type:{"text/plain":"Texto puro"},content_warning:"Assunto (opcional)",default:"Acabei de chegar no Rio!",direct_warning:"Este post será visível apenas para os usuários mencionados.",posting:"Publicando",scope:{direct:"Direto - Enviar somente aos usuários mencionados",private:"Apenas para seguidores - Enviar apenas para seguidores",public:"Público - Enviar a linhas do tempo públicas",unlisted:"Não listado - Não enviar a linhas do tempo públicas"}},registration:{bio:"Biografia",email:"Correio eletrônico",fullname:"Nome para exibição",password_confirm:"Confirmação de senha",registration:"Registro",token:"Código do convite",captcha:"CAPTCHA",new_captcha:"Clique na imagem para carregar um novo captcha",username_placeholder:"p. ex. lain",fullname_placeholder:"p. ex. Lain Iwakura",bio_placeholder:"e.g.\nOi, sou Lain\nSou uma garota que vive no subúrbio do Japão. Você deve me conhecer da Rede.",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 ser idêntica à senha"}},settings:{app_name:"Nome do aplicativo",attachmentRadius:"Anexos",attachments:"Anexos",avatar:"Avatar",avatarAltRadius:"Avatares (Notificações)",avatarRadius:"Avatares",background:"Pano de Fundo",bio:"Biografia",blocks_tab:"Bloqueios",btnRadius:"Botões",cBlue:"Azul (Responder, seguir)",cGreen:"Verde (Repetir)",cOrange:"Laranja (Favoritar)",cRed:"Vermelho (Cancelar)",change_password:"Mudar senha",change_password_error:"Houve um erro ao modificar sua senha.",changed_password:"Senha modificada com sucesso!",collapse_subject:"Esconder posts com assunto",composing:"Escrita",confirm_new_password:"Confirmar nova senha",current_avatar:"Seu avatar atual",current_password:"Sua senha 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:"Deletar conta",delete_account_description:"Deletar sua conta e mensagens permanentemente.",delete_account_error:"Houve um problema ao deletar sua conta. Se ele persistir, por favor entre em contato com o/a administrador/a da instância.",delete_account_instructions:"Digite sua senha no campo abaixo para confirmar a exclusão da conta.",avatar_size_instruction:"O tamanho mínimo recomendado para imagens de avatar é 150x150 pixels.",export_theme:"Salvar predefinições",filtering:"Filtragem",filtering_explanation:"Todas as postagens contendo 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 linha do tempo.",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:"Checkboxes",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:"Tocar vídeos diretamente no visualizador de mídia",use_contain_fit:"Não cortar o anexo na miniatura",name:"Nome",name_bio:"Nome & Biografia",new_password:"Nova senha",notification_visibility:"Tipos de notificação para mostrar",notification_visibility_follows:"Seguidas",notification_visibility_likes:"Favoritos",notification_visibility_mentions:"Menções",notification_visibility_repeats:"Repetições",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:"Habilitar clique para ocultar anexos sensíveis",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 linha do tempo",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 em email: "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 sob registros são indicadores de fundo/contraste de textos, passe por cima para informações detalhadas. Tenha ciência de 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"},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"},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 uma difusão > 0 aparecerão como se fossem definidas como 0.",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"}},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 no Rio!",faint_link:"manual útil",fine_print:"Leia nosso {0} para não aprender nada!",header_faint:"Está ok!",checkbox:"Li os termos e condições",link:"um belo link"}}},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 repetidos",repeated:"Repetido",show_new:"Mostrar novas",up_to_date:"Atualizado",no_more_statuses:"Sem mais posts",no_statuses:"Sem posts"},status:{reply_to:"Responder a",replies_list:"Respostas:"},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:"Mídia",mute:"Silenciar",muted:"Silenciado",per_day:"por dia",remote_follow:"Seguir remotamente",statuses:"Postagens",unblock:"Desbloquear",unblock_progress:"Desbloqueando...",block_progress:"Bloqueando...",unmute:"Retirar silêncio",unmute_progress:"Retirando silêncio...",mute_progress:"Silenciando..."},user_profile:{timeline_title:"Linha do tempo do usuário",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 mídia",repeat:"Repetir",reply:"Responder",favorite:"Favoritar",user_settings:"Configurações do usuário"},upload:{error:{base:"Falha no envio.",file_too_big:"Arquivo grande demais [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]",default:"Tente novamente mais tarde"},file_size_units:{B:"B",KiB:"KiB",MiB:"MiB",GiB:"GiB",TiB:"TiB"}}}}}]); +//# sourceMappingURL=26.8fd0027b982c4bcdc88f.js.map \ No newline at end of file diff --git a/priv/static/static/js/26.8fd0027b982c4bcdc88f.js.map b/priv/static/static/js/26.8fd0027b982c4bcdc88f.js.map new file mode 100644 index 000000000..d40f1979a --- /dev/null +++ b/priv/static/static/js/26.8fd0027b982c4bcdc88f.js.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/26.8fd0027b982c4bcdc88f.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/26.cf13231d524e5ca3b3e6.js.map b/priv/static/static/js/26.cf13231d524e5ca3b3e6.js.map deleted file mode 100644 index 8654bda10..000000000 --- a/priv/static/static/js/26.cf13231d524e5ca3b3e6.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/26.cf13231d524e5ca3b3e6.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/27.fca8d4f6e444bd14f376.js b/priv/static/static/js/27.6d90a54efba08d261d69.js similarity index 94% rename from priv/static/static/js/27.fca8d4f6e444bd14f376.js rename to priv/static/static/js/27.6d90a54efba08d261d69.js index 9f8b5c85d..e8420a54f 100644 --- a/priv/static/static/js/27.fca8d4f6e444bd14f376.js +++ b/priv/static/static/js/27.6d90a54efba08d261d69.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[27],{585:function(e){e.exports={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.fca8d4f6e444bd14f376.js.map \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[27],{593:function(e){e.exports={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.6d90a54efba08d261d69.js.map \ No newline at end of file diff --git a/priv/static/static/js/27.6d90a54efba08d261d69.js.map b/priv/static/static/js/27.6d90a54efba08d261d69.js.map new file mode 100644 index 000000000..6685474ce --- /dev/null +++ b/priv/static/static/js/27.6d90a54efba08d261d69.js.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/27.6d90a54efba08d261d69.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/27.fca8d4f6e444bd14f376.js.map b/priv/static/static/js/27.fca8d4f6e444bd14f376.js.map deleted file mode 100644 index f6ea8afc9..000000000 --- a/priv/static/static/js/27.fca8d4f6e444bd14f376.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/27.fca8d4f6e444bd14f376.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/28.e0f9f164e0bfd890dc61.js.map b/priv/static/static/js/28.e0f9f164e0bfd890dc61.js.map deleted file mode 100644 index 536ae2d7a..000000000 --- a/priv/static/static/js/28.e0f9f164e0bfd890dc61.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/28.e0f9f164e0bfd890dc61.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/28.e0f9f164e0bfd890dc61.js b/priv/static/static/js/28.f1353aa382a104262d1a.js similarity index 98% rename from priv/static/static/js/28.e0f9f164e0bfd890dc61.js rename to priv/static/static/js/28.f1353aa382a104262d1a.js index 75ba6d69d..a253284f0 100644 --- a/priv/static/static/js/28.e0f9f164e0bfd890dc61.js +++ b/priv/static/static/js/28.f1353aa382a104262d1a.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[28],{586:function(e){e.exports={chat:{title:"Чат"},finder:{error_fetching_user:"Пользователь не найден",find_user:"Найти пользователя"},general:{apply:"Применить",submit:"Отправить",cancel:"Отмена",disable:"Оключить",enable:"Включить",confirm:"Подтвердить",verify:"Проверить",more:"Больше",generic_error:"Произошла ошибка",optional:"не обязательно",show_less:"Показать меньше",show_more:"Показать больше"},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"}},nav:{back:"Назад",chat:"Локальный чат",mentions:"Упоминания",interactions:"Взаимодействия",public_tl:"Публичная лента",timeline:"Лента",twkn:"Федеративная лента",search:"Поиск",friend_requests:"Запросы на чтение",bookmarks:"Закладки"},notifications:{broken_favorite:"Неизвестный статус, ищем...",favorited_you:"нравится ваш статус",followed_you:"начал(а) читать вас",load_older:"Загрузить старые уведомления",notifications:"Уведомления",read:"Прочесть",repeated_you:"повторил(а) ваш статус",follow_request:"хочет читать вас"},interactions:{favs_repeats:"Повторы и фавориты",follows:"Новые подписки",load_older:"Загрузить старые взаимодействия"},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:"Непубличный - этот пост не виден на публичных лентах"}},registration:{bio:"Описание",email:"Email",fullname:"Отображаемое имя",password_confirm:"Подтверждение пароля",registration:"Регистрация",token:"Код приглашения",validations:{username_required:"не должно быть пустым",fullname_required:"не должно быть пустым",email_required:"не должен быть пустым",password_required:"не должен быть пустым",password_confirmation_required:"не должно быть пустым",password_confirmation_match:"должно совпадать с паролем"}},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:"Сменить email",change_email_error:"Произошла ошибка при попытке изменить email.",changed_email:"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:"Новый 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:"Включить скрытие 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:"Сохранено",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:"Очистить прозрачность"},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:"Маловажный текст"},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:"Не показывать статистику пользователей (например количество читателей)"},timeline:{collapse:"Свернуть",conversation:"Разговор",error_fetching:"Ошибка при обновлении",load_older:"Загрузить старые статусы",no_retweet_hint:'Пост помечен как "только для подписчиков" или "личное" и поэтому не может быть повторён',repeated:"повторил(а)",show_new:"Показать новые",up_to_date:"Обновлено"},status:{bookmark:"В закладки",unbookmark:"Удалить из закладок"},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:"Отмечать посты пользователя как NSFW",strip_media:"Убирать вложения из постов пользователя",force_unlisted:"Не добавлять посты в публичные ленты",sandbox:"Принудить видимость постов только читателям",disable_remote_subscription:"Запретить читать с удаленных серверов",disable_any_subscription:"Запретить читать пользователя",quarantine:"Не федерировать посты пользователя",delete_user:"Удалить пользователя",delete_user_confirmation:"Вы уверены? Это действие нельзя отменить."}},user_profile:{timeline_title:"Лента пользователя"},search:{people:"Люди",hashtags:"Хэштэги",person_talking:"Популярно у {count} человека",people_talking:"Популярно у {count} человек",no_results:"Ничего не найдено"},password_reset:{forgot_password:"Забыли пароль?",password_reset:"Сброс пароля",instruction:"Введите ваш email или имя пользователя, и мы отправим вам ссылку для сброса пароля.",placeholder:"Ваш email или имя пользователя",check_email:"Проверьте ваш email и перейдите по ссылке для сброса пароля.",return_home:"Вернуться на главную страницу",too_many_requests:"Вы исчерпали допустимое количество попыток, попробуйте позже.",password_reset_disabled:"Сброс пароля отключен. Cвяжитесь с администратором вашего сервера."},about:{mrf:{federation:"Федерация",simple:{accept_desc:"Данный сервер принимает сообщения только со следующих серверов:",ftl_removal_desc:"Данный сервер скрывает следующие сервера с федеративной ленты:",media_nsfw_desc:"Данный сервер принужденно помечает вложения со следущих серверов как NSFW:",simple_policies:"Правила для определенных серверов",accept:"Принимаемые сообщения",reject:"Отклоняемые сообщения",reject_desc:"Данный сервер не принимает сообщения со следующих серверов:",quarantine:"Зона карантина",quarantine_desc:"Данный сервер отправляет только публичные посты следующим серверам:",ftl_removal:"Скрытие с федеративной ленты",media_removal:"Удаление вложений",media_removal_desc:"Данный сервер удаляет вложения со следующих серверов:",media_nsfw:"Принужденно помеченно как 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"},tool_tip:{accept_follow_request:"Принять запрос на чтение",reject_follow_request:"Отклонить запрос на чтение"}}}}]); -//# sourceMappingURL=28.e0f9f164e0bfd890dc61.js.map \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[28],{594:function(e){e.exports={chat:{title:"Чат"},finder:{error_fetching_user:"Пользователь не найден",find_user:"Найти пользователя"},general:{apply:"Применить",submit:"Отправить",cancel:"Отмена",disable:"Оключить",enable:"Включить",confirm:"Подтвердить",verify:"Проверить",more:"Больше",generic_error:"Произошла ошибка",optional:"не обязательно",show_less:"Показать меньше",show_more:"Показать больше"},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"}},nav:{back:"Назад",chat:"Локальный чат",mentions:"Упоминания",interactions:"Взаимодействия",public_tl:"Публичная лента",timeline:"Лента",twkn:"Федеративная лента",search:"Поиск",friend_requests:"Запросы на чтение",bookmarks:"Закладки"},notifications:{broken_favorite:"Неизвестный статус, ищем...",favorited_you:"нравится ваш статус",followed_you:"начал(а) читать вас",load_older:"Загрузить старые уведомления",notifications:"Уведомления",read:"Прочесть",repeated_you:"повторил(а) ваш статус",follow_request:"хочет читать вас"},interactions:{favs_repeats:"Повторы и фавориты",follows:"Новые подписки",load_older:"Загрузить старые взаимодействия"},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:"Непубличный - этот пост не виден на публичных лентах"}},registration:{bio:"Описание",email:"Email",fullname:"Отображаемое имя",password_confirm:"Подтверждение пароля",registration:"Регистрация",token:"Код приглашения",validations:{username_required:"не должно быть пустым",fullname_required:"не должно быть пустым",email_required:"не должен быть пустым",password_required:"не должен быть пустым",password_confirmation_required:"не должно быть пустым",password_confirmation_match:"должно совпадать с паролем"}},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:"Сменить email",change_email_error:"Произошла ошибка при попытке изменить email.",changed_email:"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:"Новый 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:"Включить скрытие 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:"Сохранено",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:"Очистить прозрачность"},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:"Маловажный текст"},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:"Не показывать статистику пользователей (например количество читателей)"},timeline:{collapse:"Свернуть",conversation:"Разговор",error_fetching:"Ошибка при обновлении",load_older:"Загрузить старые статусы",no_retweet_hint:'Пост помечен как "только для подписчиков" или "личное" и поэтому не может быть повторён',repeated:"повторил(а)",show_new:"Показать новые",up_to_date:"Обновлено"},status:{bookmark:"В закладки",unbookmark:"Удалить из закладок"},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:"Отмечать посты пользователя как NSFW",strip_media:"Убирать вложения из постов пользователя",force_unlisted:"Не добавлять посты в публичные ленты",sandbox:"Принудить видимость постов только читателям",disable_remote_subscription:"Запретить читать с удаленных серверов",disable_any_subscription:"Запретить читать пользователя",quarantine:"Не федерировать посты пользователя",delete_user:"Удалить пользователя",delete_user_confirmation:"Вы уверены? Это действие нельзя отменить."}},user_profile:{timeline_title:"Лента пользователя"},search:{people:"Люди",hashtags:"Хэштэги",person_talking:"Популярно у {count} человека",people_talking:"Популярно у {count} человек",no_results:"Ничего не найдено"},password_reset:{forgot_password:"Забыли пароль?",password_reset:"Сброс пароля",instruction:"Введите ваш email или имя пользователя, и мы отправим вам ссылку для сброса пароля.",placeholder:"Ваш email или имя пользователя",check_email:"Проверьте ваш email и перейдите по ссылке для сброса пароля.",return_home:"Вернуться на главную страницу",too_many_requests:"Вы исчерпали допустимое количество попыток, попробуйте позже.",password_reset_disabled:"Сброс пароля отключен. Cвяжитесь с администратором вашего сервера."},about:{mrf:{federation:"Федерация",simple:{accept_desc:"Данный сервер принимает сообщения только со следующих серверов:",ftl_removal_desc:"Данный сервер скрывает следующие сервера с федеративной ленты:",media_nsfw_desc:"Данный сервер принужденно помечает вложения со следущих серверов как NSFW:",simple_policies:"Правила для определенных серверов",accept:"Принимаемые сообщения",reject:"Отклоняемые сообщения",reject_desc:"Данный сервер не принимает сообщения со следующих серверов:",quarantine:"Зона карантина",quarantine_desc:"Данный сервер отправляет только публичные посты следующим серверам:",ftl_removal:"Скрытие с федеративной ленты",media_removal:"Удаление вложений",media_removal_desc:"Данный сервер удаляет вложения со следующих серверов:",media_nsfw:"Принужденно помеченно как 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"},tool_tip:{accept_follow_request:"Принять запрос на чтение",reject_follow_request:"Отклонить запрос на чтение"},image_cropper:{save_without_cropping:"Сохранить не обрезая",save:"Сохранить",crop_picture:"Обрезать картинку"}}}}]); +//# sourceMappingURL=28.f1353aa382a104262d1a.js.map \ No newline at end of file diff --git a/priv/static/static/js/28.f1353aa382a104262d1a.js.map b/priv/static/static/js/28.f1353aa382a104262d1a.js.map new file mode 100644 index 000000000..3421c9511 --- /dev/null +++ b/priv/static/static/js/28.f1353aa382a104262d1a.js.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/28.f1353aa382a104262d1a.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/29.0b69359f0fe5c0785746.js.map b/priv/static/static/js/29.0b69359f0fe5c0785746.js.map deleted file mode 100644 index 65cd6bc82..000000000 --- a/priv/static/static/js/29.0b69359f0fe5c0785746.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/29.0b69359f0fe5c0785746.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/29.0b69359f0fe5c0785746.js b/priv/static/static/js/29.39c1e87a689c840395b2.js similarity index 99% rename from priv/static/static/js/29.0b69359f0fe5c0785746.js rename to priv/static/static/js/29.39c1e87a689c840395b2.js index 24d73bcd5..ddb512279 100644 --- a/priv/static/static/js/29.0b69359f0fe5c0785746.js +++ b/priv/static/static/js/29.39c1e87a689c840395b2.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[29],{587:function(e){e.exports={"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.0b69359f0fe5c0785746.js.map \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[29],{595:function(e){e.exports={"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.39c1e87a689c840395b2.js.map \ No newline at end of file diff --git a/priv/static/static/js/29.39c1e87a689c840395b2.js.map b/priv/static/static/js/29.39c1e87a689c840395b2.js.map new file mode 100644 index 000000000..5901ce9b7 --- /dev/null +++ b/priv/static/static/js/29.39c1e87a689c840395b2.js.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/29.39c1e87a689c840395b2.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/3.7d21accf4e5bd07e3ebf.js b/priv/static/static/js/3.a0df8a5bcd120d1f8581.js similarity index 99% rename from priv/static/static/js/3.7d21accf4e5bd07e3ebf.js rename to priv/static/static/js/3.a0df8a5bcd120d1f8581.js index d98aadec2..423121114 100644 --- a/priv/static/static/js/3.7d21accf4e5bd07e3ebf.js +++ b/priv/static/static/js/3.a0df8a5bcd120d1f8581.js @@ -1,4 +1,4 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[3],{610:function(t,e,a){var n=a(222),i=a(223),r=a(611),o=a(612),s=a(224),h=a(48),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("")}},611:function(t,e,a){var n=a(142);t.exports=function(t,e){for(var a=t.length;a--&&n(e,t[a],0)>-1;);return a}},612:function(t,e,a){var n=a(142);t.exports=function(t,e){for(var a=-1,i=t.length;++a-1;);return a}},617:function(t,e,a){"use strict";(function(t){ +(window.webpackJsonp=window.webpackJsonp||[]).push([[3],{618:function(t,e,a){var n=a(227),i=a(228),r=a(619),o=a(620),s=a(229),h=a(52),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("")}},619:function(t,e,a){var n=a(146);t.exports=function(t,e){for(var a=t.length;a--&&n(e,t[a],0)>-1;);return a}},620:function(t,e,a){var n=a(146);t.exports=function(t,e){for(var a=-1,i=t.length;++a-1;);return a}},625: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,r=(function(t,e){t.exports=function t(e,a,i){function r(s,h){if(!a[s]){if(!e[s]){var c=n;if(!h&&c)return c(s,!0);if(o)return o(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var l=a[s]={exports:{}};e[s][0].call(l.exports,function(t){var a=e[s][1][t];return r(a||t)},l,l.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={N1:3,N2:3,N3:40,N4:10};function i(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.N1+(i-5)),o=u,i=1),(u=t.get(c,h))===s?r++:(r>=5&&(a+=n.N1+(r-5)),s=u,r=1)}i>=5&&(a+=n.N1+(i-5)),r>=5&&(a+=n.N1+(r-5))}return a},a.getPenaltyN2=function(t){for(var e=t.size,a=0,i=0;i=10&&(1488===i||93===i)&&a++,r=r<<1&2047|t.get(s,o),s>=10&&(1488===r||93===r)&&a++}return a*n.N3},a.getPenaltyN4=function(t){for(var e=0,a=t.data.length,i=0;i=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=i.getSymbolTotalCodewords(t),h=l.getTotalCodewordsCount(t,e),c=8*(s-h);for(r.getLengthInBits()+4<=c&&r.put(0,4);r.getLengthInBits()%8!=0;)r.putBit(0);for(var u=(c-r.getLengthInBits())/8,m=0;m=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);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=[]);var o=i.concat(r,e,a);return o.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)},[])}(h))},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=n.getSymbolTotalCodewords(t),h=i.getTotalCodewordsCount(t,e),c=8*(r-h);if(a===o.MIXED)return c;var l=c-u(a,t);switch(a){case o.NUMERIC:return Math.floor(l/10*3);case o.ALPHANUMERIC:return Math.floor(l/11*2);case o.KANJI:return Math.floor(l/13);case o.BYTE:default:return Math.floor(l/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++){var i=l(t,n);if(i<=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=o.width?'width="'+o.width+'" height="'+o.width+'" ':"",f=''+u+l+"\n";return"function"==typeof a&&a(null,f),f}},{"./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){if(r.isBuffer(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var e=t.length;return 0===e?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?(a=this.length,e=0):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;id)&&(r[h]=d,f.push(h,d),i[h]=s));if(void 0!==a&&void 0===r[a]){var p=["Could not find a path from ",e," to ",a,"."].join("");throw new Error(p)}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)}(i={exports:{}},i.exports),i.exports),o={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?r.toCanvas(this.$el,n,e,function(t){if(t)throw t}):"img"===a?r.toDataURL(n,e,function(e,a){if(e)throw e;t.$el.src=a}):r.toString(n,e,function(e,a){if(e)throw e;t.$el.innerHTML=a})}},mounted:function(){this.generate()}};e.a=o}).call(this,a(55))},622: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,r=(function(t,e){t.exports=function t(e,a,i){function r(s,h){if(!a[s]){if(!e[s]){var c=n;if(!h&&c)return c(s,!0);if(o)return o(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var l=a[s]={exports:{}};e[s][0].call(l.exports,function(t){var a=e[s][1][t];return r(a||t)},l,l.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={N1:3,N2:3,N3:40,N4:10};function i(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.N1+(i-5)),o=u,i=1),(u=t.get(c,h))===s?r++:(r>=5&&(a+=n.N1+(r-5)),s=u,r=1)}i>=5&&(a+=n.N1+(i-5)),r>=5&&(a+=n.N1+(r-5))}return a},a.getPenaltyN2=function(t){for(var e=t.size,a=0,i=0;i=10&&(1488===i||93===i)&&a++,r=r<<1&2047|t.get(s,o),s>=10&&(1488===r||93===r)&&a++}return a*n.N3},a.getPenaltyN4=function(t){for(var e=0,a=t.data.length,i=0;i=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=i.getSymbolTotalCodewords(t),h=l.getTotalCodewordsCount(t,e),c=8*(s-h);for(r.getLengthInBits()+4<=c&&r.put(0,4);r.getLengthInBits()%8!=0;)r.putBit(0);for(var u=(c-r.getLengthInBits())/8,m=0;m=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);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=[]);var o=i.concat(r,e,a);return o.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)},[])}(h))},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=n.getSymbolTotalCodewords(t),h=i.getTotalCodewordsCount(t,e),c=8*(r-h);if(a===o.MIXED)return c;var l=c-u(a,t);switch(a){case o.NUMERIC:return Math.floor(l/10*3);case o.ALPHANUMERIC:return Math.floor(l/11*2);case o.KANJI:return Math.floor(l/13);case o.BYTE:default:return Math.floor(l/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++){var i=l(t,n);if(i<=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=o.width?'width="'+o.width+'" height="'+o.width+'" ':"",f=''+u+l+"\n";return"function"==typeof a&&a(null,f),f}},{"./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){if(r.isBuffer(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var e=t.length;return 0===e?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?(a=this.length,e=0):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;id)&&(r[h]=d,f.push(h,d),i[h]=s));if(void 0!==a&&void 0===r[a]){var p=["Could not find a path from ",e," to ",a,"."].join("");throw new Error(p)}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)}(i={exports:{}},i.exports),i.exports),o={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?r.toCanvas(this.$el,n,e,function(t){if(t)throw t}):"img"===a?r.toDataURL(n,e,function(e,a){if(e)throw e;t.$el.src=a}):r.toString(n,e,function(e,a){if(e)throw e;t.$el.innerHTML=a})}},mounted:function(){this.generate()}};e.a=o}).call(this,a(41))},630: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){for(var a=0;a1?e-1:0),n=1;n0&&a.forEach(function(e){T(e)&&Object.keys(e).forEach(function(a){t[a]=e[a]})}),t},P=/\.\d*(?:0|9){12}\d*$/;function I(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1e11;return P.test(t)?Math.round(t*e)/e:t}var z=/^(?:width|height|left|top|marginLeft|marginTop)$/;function O(t,e){var a=t.style;S(e,function(t,e){z.test(e)&&k(t)&&(t+="px"),a[e]=t})}function Y(t,e){if(e)if(k(t.length))S(t,function(t){Y(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 H(t,e){e&&(k(t.length)?S(t,function(t){H(t,e)}):t.classList?t.classList.remove(e):t.className.indexOf(e)>=0&&(t.className=t.className.replace(e,"")))}function U(t,e,a){e&&(k(t.length)?S(t,function(t){U(t,e,a)}):a?Y(t,e):H(t,e))}var j=/([a-z\d])([A-Z])/g;function _(t){return t.replace(j,"$1-$2").toLowerCase()}function W(t,e){return T(t[e])?t[e]:t.dataset?t.dataset[e]:t.getAttribute("data-".concat(_(e)))}function X(t,e,a){T(a)?t[e]=a:t.dataset?t.dataset[e]=a:t.setAttribute("data-".concat(_(e)),a)}var K=/\s\s*/,F=function(){var t=!1;if(o){var e=!1,a=function(){},n=Object.defineProperty({},"once",{get:function(){return t=!0,e},set:function(t){e=t}});s.addEventListener("test",a,n),s.removeEventListener("test",a,n)}return t}();function q(t,e,a){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=a;e.trim().split(K).forEach(function(e){if(!F){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 J(t,e,a){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=a;e.trim().split(K).forEach(function(e){if(n.once&&!F){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 nt(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=L({},e),this.initialCanvasData=L({},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=it({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=L({},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"),O(this.cropBox,L({width:a.width,height:a.height},et({translateX:a.left,translateY:a.top}))),this.cropped&&this.limited&&this.limitCanvas(!0,!0),this.disabled||this.output()},output:function(){this.preview(),V(this.element,"crop",this.getData())}},ct={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,S(i,function(e){var n=document.createElement("img");X(e,g,{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(){S(this.previews,function(t){var e=W(t,g);O(t,{width:e.width,height:e.height}),t.innerHTML=e.html,function(t,e){if(T(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(_(e)))}(t,g)})},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&&(O(this.viewBoxImage,L({width:r,height:o},et(L({translateX:-s,translateY:-h},t)))),S(this.previews,function(e){var a=W(e,g),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),O(e,{width:l,height:d}),O(e.getElementsByTagName("img")[0],L({width:r*m,height:o*m},et(L({translateX:-s*m,translateY:-h*m},t))))}))}},ut={bind:function(){var t=this.element,e=this.options,a=this.cropper;R(e.cropstart)&&J(t,"cropstart",e.cropstart),R(e.cropmove)&&J(t,"cropmove",e.cropmove),R(e.cropend)&&J(t,"cropend",e.cropend),R(e.crop)&&J(t,"crop",e.crop),R(e.zoom)&&J(t,"zoom",e.zoom),J(a,v,this.onCropStart=this.cropStart.bind(this)),e.zoomable&&e.zoomOnWheel&&J(a,"wheel mousewheel DOMMouseScroll",this.onWheel=this.wheel.bind(this)),e.toggleDragModeOnDblclick&&J(a,"dblclick",this.onDblclick=this.dblclick.bind(this)),J(t.ownerDocument,w,this.onCropMove=this.cropMove.bind(this)),J(t.ownerDocument,y,this.onCropEnd=this.cropEnd.bind(this)),e.responsive&&J(window,"resize",this.onResize=this.resize.bind(this))},unbind:function(){var t=this.element,e=this.options,a=this.cropper;R(e.cropstart)&&q(t,"cropstart",e.cropstart),R(e.cropmove)&&q(t,"cropmove",e.cropmove),R(e.cropend)&&q(t,"cropend",e.cropend),R(e.crop)&&q(t,"crop",e.crop),R(e.zoom)&&q(t,"zoom",e.zoom),q(a,v,this.onCropStart),e.zoomable&&e.zoomOnWheel&&q(a,"wheel mousewheel DOMMouseScroll",this.onWheel),e.toggleDragModeOnDblclick&&q(a,"dblclick",this.onDblclick),q(t.ownerDocument,w,this.onCropMove),q(t.ownerDocument,y,this.onCropEnd),e.responsive&&q(window,"resize",this.onResize)}},lt={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(S(r,function(t,e){r[e]=t*s})),this.setCropBoxData(S(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=h,(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?S(t.changedTouches,function(t){n[t.identifier]=at(t)}):n[t.pointerId||0]=at(t),e=Object.keys(n).length>1&&a.zoomable&&a.zoomOnTouch?"zoom":W(t.target,p),b.test(e)&&!1!==V(this.element,"cropstart",{originalEvent:t,action:e})&&(t.preventDefault(),this.action=e,this.cropping=!1,"crop"===e&&(this.cropping=!0,Y(this.dragBox,m)))}},cropMove:function(t){var e=this.action;if(!this.disabled&&e){var a=this.pointers;t.preventDefault(),!1!==V(this.element,"cropmove",{originalEvent:t,action:e})&&(t.changedTouches?S(t.changedTouches,function(t){L(a[t.identifier]||{},at(t,!0))}):L(a[t.pointerId||0]||{},at(t,!0)),this.change(t))}},cropEnd:function(t){if(!this.disabled){var e=this.action,a=this.pointers;t.changedTouches?S(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,U(this.dragBox,m,this.cropped&&this.options.modal)),V(this.element,"cropend",{originalEvent:t,action:e}))}}},dt={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,l=r.top,d=r.width,m=r.height,f=c+d,p=l+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,l+=x.y;break;case"e":if(x.x>=0&&(f>=w||h&&(l<=v||p>=y))){b=!1;break}C("e"),(d+=x.x)<0&&(s="w",c-=d=-d),h&&(m=d/h,l+=(r.height-m)/2);break;case"n":if(x.y<=0&&(l<=v||h&&(c<=g||f>=w))){b=!1;break}C("n"),m-=x.y,l+=x.y,m<0&&(s="s",l-=m=-m),h&&(d=m*h,c+=(r.width-d)/2);break;case"w":if(x.x<=0&&(c<=g||h&&(l<=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,l+=(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",l-=m=-m),h&&(d=m*h,c+=(r.width-d)/2);break;case"ne":if(h){if(x.y<=0&&(l<=v||f>=w)){b=!1;break}C("n"),m-=x.y,l+=x.y,d=m*h}else C("n"),C("e"),x.x>=0?fv&&(m-=x.y,l+=x.y):(m-=x.y,l+=x.y);d<0&&m<0?(s="sw",l-=m=-m,c-=d=-d):d<0?(s="nw",c-=d=-d):m<0&&(s="se",l-=m=-m);break;case"nw":if(h){if(x.y<=0&&(l<=v||c<=g)){b=!1;break}C("n"),m-=x.y,l+=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&&l<=v&&(b=!1):(d-=x.x,c+=x.x),x.y<=0?l>v&&(m-=x.y,l+=x.y):(m-=x.y,l+=x.y);d<0&&m<0?(s="se",l-=m=-m,c-=d=-d):d<0?(s="ne",c-=d=-d):m<0&&(s="sw",l-=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&&(l-=m),this.cropped||(H(this.cropBox,u),this.cropped=!0,this.limited&&this.limitCropBox(!0,!0))}b&&(r.width=d,r.height=m,r.left=c,r.top=l,this.action=s,this.renderCropBox()),S(o,function(t){t.startX=t.endX,t.startY=t.endY})}},mt={crop:function(){return!this.ready||this.cropped||this.disabled||(this.cropped=!0,this.limitCropBox(!0,!0),this.options.modal&&Y(this.dragBox,m),H(this.cropBox,u),this.setCropBoxData(this.initialCropBoxData)),this},reset:function(){return this.ready&&!this.disabled&&(this.imageData=L({},this.initialImageData),this.canvasData=L({},this.initialCanvasData),this.cropBoxData=L({},this.initialCropBoxData),this.renderCanvas(),this.cropped&&this.renderCropBox()),this},clear:function(){return this.cropped&&!this.disabled&&(L(this.cropBoxData,{left:0,top:0,width:0,height:0}),this.cropped=!1,this.renderCropBox(),this.limitCanvas(!0,!0),this.renderCanvas(),H(this.dragBox,m),Y(this.cropBox,u)),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,S(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,H(this.cropper,c)),this},disable:function(){return this.ready&&!this.disabled&&(this.disabled=!0,Y(this.cropper,c)),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(B(t)?t:n+Number(t),B(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&&(k(t)&&(a.left=t,n=!0),k(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===V(this.element,"zoom",{ratio:t,oldRatio:r/s,originalEvent:a}))return this;if(a){var l=this.pointers,d=$(this.cropper),m=l&&Object.keys(l).length?function(t){var e=0,a=0,n=0;return S(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 D(e)&&k(e.x)&&k(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 k(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,k(e)?e:1)},scaleY:function(t){var e=this.imageData.scaleX;return this.scale(k(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&&(k(t)&&(a.scaleX=t,n=!0),k(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(S(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&&D(t)){var r=!1;e.rotatable&&k(t.rotate)&&t.rotate!==a.rotate&&(a.rotate=t.rotate,r=!0),e.scalable&&(k(t.scaleX)&&t.scaleX!==a.scaleX&&(a.scaleX=t.scaleX,r=!0),k(t.scaleY)&&t.scaleY!==a.scaleY&&(a.scaleY=t.scaleY,r=!0)),r&&this.renderCanvas(!0,!0);var o=a.width/a.naturalWidth;k(t.x)&&(i.left=t.x*o+n.left),k(t.y)&&(i.top=t.y*o+n.top),k(t.width)&&(i.width=t.width*o),k(t.height)&&(i.height=t.height*o),this.setCropBoxData(i)}return this},getContainerData:function(){return this.ready?L({},this.containerData):{}},getImageData:function(){return this.sized?L({},this.imageData):{}},getCanvasData:function(){var t=this.canvasData,e={};return this.ready&&S(["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&&D(t)&&(k(t.left)&&(e.left=t.left),k(t.top)&&(e.top=t.top),k(t.width)?(e.width=t.width,e.height=t.width/a):k(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&&D(t)&&(k(t.left)&&(n.left=t.left),k(t.top)&&(n.top=t.top),k(t.width)&&t.width!==n.width&&(e=!0,n.width=t.width),k(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=function(t,e,a,n){var i=e.aspectRatio,o=e.naturalWidth,s=e.naturalHeight,h=e.rotate,c=void 0===h?0:h,u=e.scaleX,l=void 0===u?1:u,d=e.scaleY,m=void 0===d?1:d,f=a.aspectRatio,p=a.naturalWidth,g=a.naturalHeight,v=n.fillColor,w=void 0===v?"transparent":v,y=n.imageSmoothingEnabled,b=void 0===y||y,N=n.imageSmoothingQuality,x=void 0===N?"low":N,C=n.maxWidth,M=void 0===C?1/0:C,E=n.maxHeight,k=void 0===E?1/0:E,B=n.minWidth,T=void 0===B?0:B,A=n.minHeight,D=void 0===A?0:A,R=document.createElement("canvas"),S=R.getContext("2d"),L=it({aspectRatio:f,width:M,height:k}),P=it({aspectRatio:f,width:T,height:D},"cover"),z=Math.min(L.width,Math.max(P.width,p)),O=Math.min(L.height,Math.max(P.height,g)),Y=it({aspectRatio:i,width:M,height:k}),H=it({aspectRatio:i,width:T,height:D},"cover"),U=Math.min(Y.width,Math.max(H.width,o)),j=Math.min(Y.height,Math.max(H.height,s)),_=[-U/2,-j/2,U,j];return R.width=I(z),R.height=I(O),S.fillStyle=w,S.fillRect(0,0,z,O),S.save(),S.translate(z/2,O/2),S.rotate(c*Math.PI/180),S.scale(l,m),S.imageSmoothingEnabled=b,S.imageSmoothingQuality=x,S.drawImage.apply(S,[t].concat(r(_.map(function(t){return Math.floor(I(t))})))),S.restore(),R}(this.image,this.imageData,e,t);if(!this.cropped)return a;var n=this.getData(),i=n.x,o=n.y,s=n.width,h=n.height,c=a.width/Math.floor(e.naturalWidth);1!==c&&(i*=c,o*=c,s*=c,h*=c);var u=s/h,l=it({aspectRatio:u,width:t.maxWidth||1/0,height:t.maxHeight||1/0}),d=it({aspectRatio:u,width:t.minWidth||0,height:t.minHeight||0},"cover"),m=it({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=I(f),g.height=I(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=o;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(r(R.map(function(t){return Math.floor(I(t))})))),g},setAspectRatio:function(t){var e=this.options;return this.disabled||B(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,X(a,p,t),U(a,h,i),U(a,f,r),e.cropBoxMovable||(X(n,p,t),U(n,h,i),U(n,f,r))}return this}},ft=s.Cropper,pt=function(){function t(e){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),!e||!C.test(e.tagName))throw new Error("The first argument is required and must be an or element.");this.element=e,this.options=L({},M,D(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=ft,t}},{key:"setDefaults",value:function(t){L(M,D(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(N.test(t))x.test(t)?this.read((i=t.replace(ot,""),r=atob(i),o=new ArrayBuffer(r.length),S(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&&Z(t)&&a.crossOrigin&&(t=tt(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=st(t),i=0,o=1,s=1;if(n>1){this.url=function(t,e){for(var a=[],n=new Uint8Array(t);n.length>0;)a.push(rt.apply(void 0,r(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,o=h.scaleX,s=h.scaleY}e.rotatable&&(a.rotate=i),e.scalable&&(a.scaleX=o,a.scaleY=s),this.clone()}},{key:"clone",value:function(){var t,e,a=this.element,n=this.url;this.options.checkCrossOrigin&&Z(n)&&((t=a.crossOrigin)?e=n:(t="anonymous",e=tt(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),Y(i,l),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=s.navigator&&/(Macintosh|iPhone|iPod|iPad).*AppleWebKit/i.test(s.navigator.userAgent),n=function(e,a){L(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),Y(t,u),n.insertBefore(r,t.nextSibling),this.isImg||H(a,l),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,Y(h,u),e.guides||Y(h.getElementsByClassName("".concat("cropper","-dashed")),u),e.center||Y(h.getElementsByClassName("".concat("cropper","-center")),u),e.background&&Y(r,"".concat("cropper","-bg")),e.highlight||Y(c,d),e.cropBoxMovable&&(Y(c,f),X(c,p,"all")),e.cropBoxResizable||(Y(h.getElementsByClassName("".concat("cropper","-line")),u),Y(h.getElementsByClassName("".concat("cropper","-point")),u)),this.render(),this.ready=!0,this.setDragMode(e.dragMode),e.autoCrop&&this.crop(),this.setData(e.data),R(e.ready)&&J(t,"ready",e.ready,{once:!0}),V(t,"ready")}}},{key:"unbuild",value:function(){this.ready&&(this.ready=!1,this.unbind(),this.resetPreview(),this.cropper.parentNode.removeChild(this.cropper),H(this.element,u))}},{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()}}])&&i(e.prototype,a),n&&i(e,n),t}();L(pt.prototype,ht,ct,ut,lt,dt,mt),e.a=pt},623:function(t,e,a){},640:function(t,e,a){"use strict";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"}};a.d(e,"a",function(){return i});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.7d21accf4e5bd07e3ebf.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){for(var a=0;a1?e-1:0),n=1;n0&&a.forEach(function(e){T(e)&&Object.keys(e).forEach(function(a){t[a]=e[a]})}),t},P=/\.\d*(?:0|9){12}\d*$/;function I(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1e11;return P.test(t)?Math.round(t*e)/e:t}var z=/^(?:width|height|left|top|marginLeft|marginTop)$/;function O(t,e){var a=t.style;S(e,function(t,e){z.test(e)&&k(t)&&(t+="px"),a[e]=t})}function Y(t,e){if(e)if(k(t.length))S(t,function(t){Y(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 H(t,e){e&&(k(t.length)?S(t,function(t){H(t,e)}):t.classList?t.classList.remove(e):t.className.indexOf(e)>=0&&(t.className=t.className.replace(e,"")))}function U(t,e,a){e&&(k(t.length)?S(t,function(t){U(t,e,a)}):a?Y(t,e):H(t,e))}var j=/([a-z\d])([A-Z])/g;function _(t){return t.replace(j,"$1-$2").toLowerCase()}function W(t,e){return T(t[e])?t[e]:t.dataset?t.dataset[e]:t.getAttribute("data-".concat(_(e)))}function X(t,e,a){T(a)?t[e]=a:t.dataset?t.dataset[e]=a:t.setAttribute("data-".concat(_(e)),a)}var K=/\s\s*/,F=function(){var t=!1;if(o){var e=!1,a=function(){},n=Object.defineProperty({},"once",{get:function(){return t=!0,e},set:function(t){e=t}});s.addEventListener("test",a,n),s.removeEventListener("test",a,n)}return t}();function q(t,e,a){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=a;e.trim().split(K).forEach(function(e){if(!F){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 J(t,e,a){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=a;e.trim().split(K).forEach(function(e){if(n.once&&!F){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 nt(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=L({},e),this.initialCanvasData=L({},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=it({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=L({},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"),O(this.cropBox,L({width:a.width,height:a.height},et({translateX:a.left,translateY:a.top}))),this.cropped&&this.limited&&this.limitCanvas(!0,!0),this.disabled||this.output()},output:function(){this.preview(),V(this.element,"crop",this.getData())}},ct={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,S(i,function(e){var n=document.createElement("img");X(e,g,{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(){S(this.previews,function(t){var e=W(t,g);O(t,{width:e.width,height:e.height}),t.innerHTML=e.html,function(t,e){if(T(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(_(e)))}(t,g)})},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&&(O(this.viewBoxImage,L({width:r,height:o},et(L({translateX:-s,translateY:-h},t)))),S(this.previews,function(e){var a=W(e,g),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),O(e,{width:l,height:d}),O(e.getElementsByTagName("img")[0],L({width:r*m,height:o*m},et(L({translateX:-s*m,translateY:-h*m},t))))}))}},ut={bind:function(){var t=this.element,e=this.options,a=this.cropper;R(e.cropstart)&&J(t,"cropstart",e.cropstart),R(e.cropmove)&&J(t,"cropmove",e.cropmove),R(e.cropend)&&J(t,"cropend",e.cropend),R(e.crop)&&J(t,"crop",e.crop),R(e.zoom)&&J(t,"zoom",e.zoom),J(a,v,this.onCropStart=this.cropStart.bind(this)),e.zoomable&&e.zoomOnWheel&&J(a,"wheel mousewheel DOMMouseScroll",this.onWheel=this.wheel.bind(this)),e.toggleDragModeOnDblclick&&J(a,"dblclick",this.onDblclick=this.dblclick.bind(this)),J(t.ownerDocument,w,this.onCropMove=this.cropMove.bind(this)),J(t.ownerDocument,y,this.onCropEnd=this.cropEnd.bind(this)),e.responsive&&J(window,"resize",this.onResize=this.resize.bind(this))},unbind:function(){var t=this.element,e=this.options,a=this.cropper;R(e.cropstart)&&q(t,"cropstart",e.cropstart),R(e.cropmove)&&q(t,"cropmove",e.cropmove),R(e.cropend)&&q(t,"cropend",e.cropend),R(e.crop)&&q(t,"crop",e.crop),R(e.zoom)&&q(t,"zoom",e.zoom),q(a,v,this.onCropStart),e.zoomable&&e.zoomOnWheel&&q(a,"wheel mousewheel DOMMouseScroll",this.onWheel),e.toggleDragModeOnDblclick&&q(a,"dblclick",this.onDblclick),q(t.ownerDocument,w,this.onCropMove),q(t.ownerDocument,y,this.onCropEnd),e.responsive&&q(window,"resize",this.onResize)}},lt={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(S(r,function(t,e){r[e]=t*s})),this.setCropBoxData(S(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=h,(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?S(t.changedTouches,function(t){n[t.identifier]=at(t)}):n[t.pointerId||0]=at(t),e=Object.keys(n).length>1&&a.zoomable&&a.zoomOnTouch?"zoom":W(t.target,p),b.test(e)&&!1!==V(this.element,"cropstart",{originalEvent:t,action:e})&&(t.preventDefault(),this.action=e,this.cropping=!1,"crop"===e&&(this.cropping=!0,Y(this.dragBox,m)))}},cropMove:function(t){var e=this.action;if(!this.disabled&&e){var a=this.pointers;t.preventDefault(),!1!==V(this.element,"cropmove",{originalEvent:t,action:e})&&(t.changedTouches?S(t.changedTouches,function(t){L(a[t.identifier]||{},at(t,!0))}):L(a[t.pointerId||0]||{},at(t,!0)),this.change(t))}},cropEnd:function(t){if(!this.disabled){var e=this.action,a=this.pointers;t.changedTouches?S(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,U(this.dragBox,m,this.cropped&&this.options.modal)),V(this.element,"cropend",{originalEvent:t,action:e}))}}},dt={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,l=r.top,d=r.width,m=r.height,f=c+d,p=l+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,l+=x.y;break;case"e":if(x.x>=0&&(f>=w||h&&(l<=v||p>=y))){b=!1;break}C("e"),(d+=x.x)<0&&(s="w",c-=d=-d),h&&(m=d/h,l+=(r.height-m)/2);break;case"n":if(x.y<=0&&(l<=v||h&&(c<=g||f>=w))){b=!1;break}C("n"),m-=x.y,l+=x.y,m<0&&(s="s",l-=m=-m),h&&(d=m*h,c+=(r.width-d)/2);break;case"w":if(x.x<=0&&(c<=g||h&&(l<=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,l+=(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",l-=m=-m),h&&(d=m*h,c+=(r.width-d)/2);break;case"ne":if(h){if(x.y<=0&&(l<=v||f>=w)){b=!1;break}C("n"),m-=x.y,l+=x.y,d=m*h}else C("n"),C("e"),x.x>=0?fv&&(m-=x.y,l+=x.y):(m-=x.y,l+=x.y);d<0&&m<0?(s="sw",l-=m=-m,c-=d=-d):d<0?(s="nw",c-=d=-d):m<0&&(s="se",l-=m=-m);break;case"nw":if(h){if(x.y<=0&&(l<=v||c<=g)){b=!1;break}C("n"),m-=x.y,l+=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&&l<=v&&(b=!1):(d-=x.x,c+=x.x),x.y<=0?l>v&&(m-=x.y,l+=x.y):(m-=x.y,l+=x.y);d<0&&m<0?(s="se",l-=m=-m,c-=d=-d):d<0?(s="ne",c-=d=-d):m<0&&(s="sw",l-=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&&(l-=m),this.cropped||(H(this.cropBox,u),this.cropped=!0,this.limited&&this.limitCropBox(!0,!0))}b&&(r.width=d,r.height=m,r.left=c,r.top=l,this.action=s,this.renderCropBox()),S(o,function(t){t.startX=t.endX,t.startY=t.endY})}},mt={crop:function(){return!this.ready||this.cropped||this.disabled||(this.cropped=!0,this.limitCropBox(!0,!0),this.options.modal&&Y(this.dragBox,m),H(this.cropBox,u),this.setCropBoxData(this.initialCropBoxData)),this},reset:function(){return this.ready&&!this.disabled&&(this.imageData=L({},this.initialImageData),this.canvasData=L({},this.initialCanvasData),this.cropBoxData=L({},this.initialCropBoxData),this.renderCanvas(),this.cropped&&this.renderCropBox()),this},clear:function(){return this.cropped&&!this.disabled&&(L(this.cropBoxData,{left:0,top:0,width:0,height:0}),this.cropped=!1,this.renderCropBox(),this.limitCanvas(!0,!0),this.renderCanvas(),H(this.dragBox,m),Y(this.cropBox,u)),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,S(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,H(this.cropper,c)),this},disable:function(){return this.ready&&!this.disabled&&(this.disabled=!0,Y(this.cropper,c)),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(B(t)?t:n+Number(t),B(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&&(k(t)&&(a.left=t,n=!0),k(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===V(this.element,"zoom",{ratio:t,oldRatio:r/s,originalEvent:a}))return this;if(a){var l=this.pointers,d=$(this.cropper),m=l&&Object.keys(l).length?function(t){var e=0,a=0,n=0;return S(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 D(e)&&k(e.x)&&k(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 k(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,k(e)?e:1)},scaleY:function(t){var e=this.imageData.scaleX;return this.scale(k(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&&(k(t)&&(a.scaleX=t,n=!0),k(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(S(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&&D(t)){var r=!1;e.rotatable&&k(t.rotate)&&t.rotate!==a.rotate&&(a.rotate=t.rotate,r=!0),e.scalable&&(k(t.scaleX)&&t.scaleX!==a.scaleX&&(a.scaleX=t.scaleX,r=!0),k(t.scaleY)&&t.scaleY!==a.scaleY&&(a.scaleY=t.scaleY,r=!0)),r&&this.renderCanvas(!0,!0);var o=a.width/a.naturalWidth;k(t.x)&&(i.left=t.x*o+n.left),k(t.y)&&(i.top=t.y*o+n.top),k(t.width)&&(i.width=t.width*o),k(t.height)&&(i.height=t.height*o),this.setCropBoxData(i)}return this},getContainerData:function(){return this.ready?L({},this.containerData):{}},getImageData:function(){return this.sized?L({},this.imageData):{}},getCanvasData:function(){var t=this.canvasData,e={};return this.ready&&S(["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&&D(t)&&(k(t.left)&&(e.left=t.left),k(t.top)&&(e.top=t.top),k(t.width)?(e.width=t.width,e.height=t.width/a):k(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&&D(t)&&(k(t.left)&&(n.left=t.left),k(t.top)&&(n.top=t.top),k(t.width)&&t.width!==n.width&&(e=!0,n.width=t.width),k(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=function(t,e,a,n){var i=e.aspectRatio,o=e.naturalWidth,s=e.naturalHeight,h=e.rotate,c=void 0===h?0:h,u=e.scaleX,l=void 0===u?1:u,d=e.scaleY,m=void 0===d?1:d,f=a.aspectRatio,p=a.naturalWidth,g=a.naturalHeight,v=n.fillColor,w=void 0===v?"transparent":v,y=n.imageSmoothingEnabled,b=void 0===y||y,N=n.imageSmoothingQuality,x=void 0===N?"low":N,C=n.maxWidth,M=void 0===C?1/0:C,E=n.maxHeight,k=void 0===E?1/0:E,B=n.minWidth,T=void 0===B?0:B,A=n.minHeight,D=void 0===A?0:A,R=document.createElement("canvas"),S=R.getContext("2d"),L=it({aspectRatio:f,width:M,height:k}),P=it({aspectRatio:f,width:T,height:D},"cover"),z=Math.min(L.width,Math.max(P.width,p)),O=Math.min(L.height,Math.max(P.height,g)),Y=it({aspectRatio:i,width:M,height:k}),H=it({aspectRatio:i,width:T,height:D},"cover"),U=Math.min(Y.width,Math.max(H.width,o)),j=Math.min(Y.height,Math.max(H.height,s)),_=[-U/2,-j/2,U,j];return R.width=I(z),R.height=I(O),S.fillStyle=w,S.fillRect(0,0,z,O),S.save(),S.translate(z/2,O/2),S.rotate(c*Math.PI/180),S.scale(l,m),S.imageSmoothingEnabled=b,S.imageSmoothingQuality=x,S.drawImage.apply(S,[t].concat(r(_.map(function(t){return Math.floor(I(t))})))),S.restore(),R}(this.image,this.imageData,e,t);if(!this.cropped)return a;var n=this.getData(),i=n.x,o=n.y,s=n.width,h=n.height,c=a.width/Math.floor(e.naturalWidth);1!==c&&(i*=c,o*=c,s*=c,h*=c);var u=s/h,l=it({aspectRatio:u,width:t.maxWidth||1/0,height:t.maxHeight||1/0}),d=it({aspectRatio:u,width:t.minWidth||0,height:t.minHeight||0},"cover"),m=it({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=I(f),g.height=I(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=o;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(r(R.map(function(t){return Math.floor(I(t))})))),g},setAspectRatio:function(t){var e=this.options;return this.disabled||B(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,X(a,p,t),U(a,h,i),U(a,f,r),e.cropBoxMovable||(X(n,p,t),U(n,h,i),U(n,f,r))}return this}},ft=s.Cropper,pt=function(){function t(e){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),!e||!C.test(e.tagName))throw new Error("The first argument is required and must be an or element.");this.element=e,this.options=L({},M,D(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=ft,t}},{key:"setDefaults",value:function(t){L(M,D(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(N.test(t))x.test(t)?this.read((i=t.replace(ot,""),r=atob(i),o=new ArrayBuffer(r.length),S(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&&Z(t)&&a.crossOrigin&&(t=tt(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=st(t),i=0,o=1,s=1;if(n>1){this.url=function(t,e){for(var a=[],n=new Uint8Array(t);n.length>0;)a.push(rt.apply(void 0,r(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,o=h.scaleX,s=h.scaleY}e.rotatable&&(a.rotate=i),e.scalable&&(a.scaleX=o,a.scaleY=s),this.clone()}},{key:"clone",value:function(){var t,e,a=this.element,n=this.url;this.options.checkCrossOrigin&&Z(n)&&((t=a.crossOrigin)?e=n:(t="anonymous",e=tt(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),Y(i,l),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=s.navigator&&/(Macintosh|iPhone|iPod|iPad).*AppleWebKit/i.test(s.navigator.userAgent),n=function(e,a){L(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),Y(t,u),n.insertBefore(r,t.nextSibling),this.isImg||H(a,l),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,Y(h,u),e.guides||Y(h.getElementsByClassName("".concat("cropper","-dashed")),u),e.center||Y(h.getElementsByClassName("".concat("cropper","-center")),u),e.background&&Y(r,"".concat("cropper","-bg")),e.highlight||Y(c,d),e.cropBoxMovable&&(Y(c,f),X(c,p,"all")),e.cropBoxResizable||(Y(h.getElementsByClassName("".concat("cropper","-line")),u),Y(h.getElementsByClassName("".concat("cropper","-point")),u)),this.render(),this.ready=!0,this.setDragMode(e.dragMode),e.autoCrop&&this.crop(),this.setData(e.data),R(e.ready)&&J(t,"ready",e.ready,{once:!0}),V(t,"ready")}}},{key:"unbuild",value:function(){this.ready&&(this.ready=!1,this.unbind(),this.resetPreview(),this.cropper.parentNode.removeChild(this.cropper),H(this.element,u))}},{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()}}])&&i(e.prototype,a),n&&i(e,n),t}();L(pt.prototype,ht,ct,ut,lt,dt,mt),e.a=pt},631:function(t,e,a){},648:function(t,e,a){"use strict";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"}};a.d(e,"a",function(){return i});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.a0df8a5bcd120d1f8581.js.map \ No newline at end of file diff --git a/priv/static/static/js/3.7d21accf4e5bd07e3ebf.js.map b/priv/static/static/js/3.a0df8a5bcd120d1f8581.js.map similarity index 99% rename from priv/static/static/js/3.7d21accf4e5bd07e3ebf.js.map rename to priv/static/static/js/3.a0df8a5bcd120d1f8581.js.map index 37826baac..653727d10 100644 --- a/priv/static/static/js/3.7d21accf4e5bd07e3ebf.js.map +++ b/priv/static/static/js/3.a0df8a5bcd120d1f8581.js.map @@ -1 +1 @@ -{"version":3,"sources":["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":["baseToString","__webpack_require__","castSlice","charsEndIndex","charsStartIndex","stringToArray","toString","reTrim","module","exports","string","chars","guard","undefined","replace","strSymbols","chrSymbols","start","end","join","baseIndexOf","index","length","global","commonjsGlobal","window","self","commonjsRequire","Error","qrcode","r","e","n","t","o","i","f","c","u","a","code","p","call","1","require","getSymbolSize","getRowColCoords","version","posCount","Math","floor","size","intervals","ceil","positions","push","reverse","getPositions","coords","pos","posLength","j","./utils","2","Mode","ALPHA_NUM_CHARS","AlphanumericData","data","this","mode","ALPHANUMERIC","getBitsLength","prototype","getLength","write","bitBuffer","value","indexOf","put","./mode","3","BitBuffer","buffer","get","bufIndex","num","putBit","getLengthInBits","bit","4","Buffer","BitMatrix","fill","reservedBit","set","row","col","reserved","xor","isReserved","../utils/buffer","5","ByteData","BYTE","l","6","ECLevel","EC_BLOCKS_TABLE","EC_CODEWORDS_TABLE","getBlocksCount","errorCorrectionLevel","L","M","Q","H","getTotalCodewordsCount","./error-correction-level","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","N1","N2","N3","N4","getMaskAt","maskPattern","isNaN","parseInt","getPenaltyN1","points","sameCountCol","sameCountRow","lastCol","lastRow","getPenaltyN2","last","getPenaltyN3","bitsCol","bitsRow","getPenaltyN4","darkCount","modulesCount","k","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","./regex","./version-check","14","NumericData","group","substr","remainingNum","15","GF","p1","p2","coeff","mod","divident","divisor","result","offset","slice","generateECPolynomial","degree","poly","./galois-field","16","AlignmentPattern","FinderPattern","MaskPattern","ECCode","ReedSolomonEncoder","Version","FormatInfo","Segments","isArray","setupFormatInfo","matrix","bits","createData","segments","forEach","totalCodewords","getSymbolTotalCodewords","ecTotalCodewords","dataTotalCodewordsBits","remainingByte","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","setupFinderPattern","setupTimingPattern","setupAlignmentPattern","setupVersionInfo","inc","bitIndex","byteIndex","dark","setupData","bind","create","options","toSJISFunc","setToSJISFunction","./alignment-pattern","./bit-buffer","./bit-matrix","./error-correction-code","./finder-pattern","./format-info","./mask-pattern","./reed-solomon-encoder","./segments","./version","isarray","17","Polynomial","genPoly","initialize","pad","paddedData","concat","remainder","buff","copy","./polynomial","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","segs","sort","s1","s2","map","obj","getSegmentBitsLength","buildSingleSegment","modesHint","bestMode","array","reduce","acc","seg","nodes","buildNodes","graph","table","prevNodeIds","nodeGroup","currentNodeIds","node","key","lastCount","prevNodeId","buildGraph","path","find_path","optimizedSegs","curr","prevSeg","mergeSegments","./alphanumeric-data","./byte-data","./kanji-data","./numeric-data","dijkstrajs","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","_","./core/qrcode","./renderer/canvas","./renderer/svg-tag.js","can-promise","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","iSrc","jSrc","27","TYPED_ARRAY_SUPPORT","arr","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","window-or-global","29","single_source_shortest_paths","s","predecessors","costs","closest","v","cost_of_s_to_u","adjacent_nodes","cost_of_e","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","fn","name","props","tag","String","default","$slots","watch","$props","deep","immediate","handler","$el","generate","methods","_this","error","url","innerHTML","mounted","__webpack_exports__","_typeof","iterator","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","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","naturalWidth","naturalHeight","canvasWidth","canvasHeight","canvasData","oldLeft","oldTop","limited","limitCanvas","initialImageData","initialCanvasData","sizeLimited","positionLimited","cropBoxData","_getAdjustedSizes","minWidth","minHeight","maxWidth","maxHeight","newCanvasLeft","newCanvasTop","minLeft","min","minTop","maxLeft","maxTop","changed","transformed","_getRotatedSizes","_ref5","arc","PI","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","_ref6","_ref7","_ref8","imageAspectRatio","imageNaturalWidth","imageNaturalHeight","_ref6$rotate","_ref6$scaleX","_ref6$scaleY","_ref8$fillColor","fillColor","_ref8$imageSmoothingE","imageSmoothingEnabled","_ref8$imageSmoothingQ","imageSmoothingQuality","_ref8$maxWidth","_ref8$maxHeight","_ref8$minWidth","_ref8$minHeight","context","maxSizes","minSizes","destMaxSizes","destMinSizes","destWidth","destHeight","params","fillStyle","fillRect","save","translate","drawImage","param","getSourceCanvas","_this$getData","initialX","initialY","initialWidth","initialHeight","_options$imageSmoothi","srcWidth","srcHeight","dstX","dstY","dstWidth","dstHeight","sourceWidth","sourceHeight","srcX","srcY","setAspectRatio","croppable","AnotherCropper","Cropper","instance","Constructor","_classCallCheck","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","src_ISO6391","[object Object]","codes","getName","getNativeName","validate","find","language"],"mappings":"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","file":"static/js/3.7d21accf4e5bd07e3ebf.js","sourcesContent":["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/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":["baseToString","__webpack_require__","castSlice","charsEndIndex","charsStartIndex","stringToArray","toString","reTrim","module","exports","string","chars","guard","undefined","replace","strSymbols","chrSymbols","start","end","join","baseIndexOf","index","length","global","commonjsGlobal","window","self","commonjsRequire","Error","qrcode","r","e","n","t","o","i","f","c","u","a","code","p","call","1","require","getSymbolSize","getRowColCoords","version","posCount","Math","floor","size","intervals","ceil","positions","push","reverse","getPositions","coords","pos","posLength","j","./utils","2","Mode","ALPHA_NUM_CHARS","AlphanumericData","data","this","mode","ALPHANUMERIC","getBitsLength","prototype","getLength","write","bitBuffer","value","indexOf","put","./mode","3","BitBuffer","buffer","get","bufIndex","num","putBit","getLengthInBits","bit","4","Buffer","BitMatrix","fill","reservedBit","set","row","col","reserved","xor","isReserved","../utils/buffer","5","ByteData","BYTE","l","6","ECLevel","EC_BLOCKS_TABLE","EC_CODEWORDS_TABLE","getBlocksCount","errorCorrectionLevel","L","M","Q","H","getTotalCodewordsCount","./error-correction-level","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","N1","N2","N3","N4","getMaskAt","maskPattern","isNaN","parseInt","getPenaltyN1","points","sameCountCol","sameCountRow","lastCol","lastRow","getPenaltyN2","last","getPenaltyN3","bitsCol","bitsRow","getPenaltyN4","darkCount","modulesCount","k","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","./regex","./version-check","14","NumericData","group","substr","remainingNum","15","GF","p1","p2","coeff","mod","divident","divisor","result","offset","slice","generateECPolynomial","degree","poly","./galois-field","16","AlignmentPattern","FinderPattern","MaskPattern","ECCode","ReedSolomonEncoder","Version","FormatInfo","Segments","isArray","setupFormatInfo","matrix","bits","createData","segments","forEach","totalCodewords","getSymbolTotalCodewords","ecTotalCodewords","dataTotalCodewordsBits","remainingByte","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","setupFinderPattern","setupTimingPattern","setupAlignmentPattern","setupVersionInfo","inc","bitIndex","byteIndex","dark","setupData","bind","create","options","toSJISFunc","setToSJISFunction","./alignment-pattern","./bit-buffer","./bit-matrix","./error-correction-code","./finder-pattern","./format-info","./mask-pattern","./reed-solomon-encoder","./segments","./version","isarray","17","Polynomial","genPoly","initialize","pad","paddedData","concat","remainder","buff","copy","./polynomial","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","segs","sort","s1","s2","map","obj","getSegmentBitsLength","buildSingleSegment","modesHint","bestMode","array","reduce","acc","seg","nodes","buildNodes","graph","table","prevNodeIds","nodeGroup","currentNodeIds","node","key","lastCount","prevNodeId","buildGraph","path","find_path","optimizedSegs","curr","prevSeg","mergeSegments","./alphanumeric-data","./byte-data","./kanji-data","./numeric-data","dijkstrajs","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","_","./core/qrcode","./renderer/canvas","./renderer/svg-tag.js","can-promise","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","iSrc","jSrc","27","TYPED_ARRAY_SUPPORT","arr","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","window-or-global","29","single_source_shortest_paths","s","predecessors","costs","closest","v","cost_of_s_to_u","adjacent_nodes","cost_of_e","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","fn","name","props","tag","String","default","$slots","watch","$props","deep","immediate","handler","$el","generate","methods","_this","error","url","innerHTML","mounted","__webpack_exports__","_typeof","iterator","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","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","naturalWidth","naturalHeight","canvasWidth","canvasHeight","canvasData","oldLeft","oldTop","limited","limitCanvas","initialImageData","initialCanvasData","sizeLimited","positionLimited","cropBoxData","_getAdjustedSizes","minWidth","minHeight","maxWidth","maxHeight","newCanvasLeft","newCanvasTop","minLeft","min","minTop","maxLeft","maxTop","changed","transformed","_getRotatedSizes","_ref5","arc","PI","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","_ref6","_ref7","_ref8","imageAspectRatio","imageNaturalWidth","imageNaturalHeight","_ref6$rotate","_ref6$scaleX","_ref6$scaleY","_ref8$fillColor","fillColor","_ref8$imageSmoothingE","imageSmoothingEnabled","_ref8$imageSmoothingQ","imageSmoothingQuality","_ref8$maxWidth","_ref8$maxHeight","_ref8$minWidth","_ref8$minHeight","context","maxSizes","minSizes","destMaxSizes","destMinSizes","destWidth","destHeight","params","fillStyle","fillRect","save","translate","drawImage","param","getSourceCanvas","_this$getData","initialX","initialY","initialWidth","initialHeight","_options$imageSmoothi","srcWidth","srcHeight","dstX","dstY","dstWidth","dstHeight","sourceWidth","sourceHeight","srcX","srcY","setAspectRatio","croppable","AnotherCropper","Cropper","instance","Constructor","_classCallCheck","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","src_ISO6391","[object Object]","codes","getName","getNativeName","validate","find","language"],"mappings":"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","file":"static/js/3.a0df8a5bcd120d1f8581.js","sourcesContent":["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.64736585965c63c2b5d4.js b/priv/static/static/js/30.64736585965c63c2b5d4.js new file mode 100644 index 000000000..4fdbe8c3e --- /dev/null +++ b/priv/static/static/js/30.64736585965c63c2b5d4.js @@ -0,0 +1,2 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[30],{596:function(e){e.exports={chat:{title:"聊天"},exporter:{export:"导出",processing:"正在处理,稍后会提示您下载文件"},features_panel:{chat:"聊天",gopher:"Gopher",media_proxy:"媒体代理",scope_options:"可见范围设置",text_limit:"文字数量限制",title:"功能",who_to_follow:"推荐关注",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:"验证",dismiss:"忽略",peek:"窥探",close:"关闭",retry:"重试",error_retry:"请重试",loading:"载入中…"},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:"书签"},notifications:{broken_favorite:"未知的状态,正在搜索中…",favorited_you:"喜欢了你的状态",followed_you:"关注了你",load_older:"加载更早的通知",notifications:"通知",read:"已阅!",repeated_you:"转发了你的状态",no_more_notifications:"没有更多的通知",reacted_with:"作出了 {0} 的反应",migrated_to:"迁移到了",follow_request:"想要关注你"},polls:{add_poll:"增加投票",add_option:"增加选项",option:"选项",votes:"投票",vote:"投票",type:"投票类型",single_choice:"单选",multiple_choices:"多选",expiry:"投票期限",expires_in:"投票于 {0} 后结束",expired:"投票 {0} 前已结束",not_enough_options:"投票的选项太少"},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:"不能发布没有内容、没有附件的发文"},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:"密码不一致"}},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:"点击一次以打开工作场所不适宜的附件",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: copy as is",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:"勾选的"},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:"输入框"}},fonts:{_tab_label:"字体",help:"为用户界面的元素选择字体。若选择 “自选”,您必须输入与系统显示完全一致的字体名称。",components:{interface:"界面",input:"输入框",post:"发帖文字",postCode:"帖子中使用等间距文字(富文本)"},family:"字体名称",size:"大小 (in px)",weight:"字重 (粗体))",custom:"自选"},preview:{header:"预览",content:"内容",error:"例子错误",button:"按钮",text:"有堆 {0} 和 {1}",mono:"内容",input:"刚刚抵达上海",faint_link:"帮助菜单",fine_print:"阅读我们的 {0} ,然而什么也学不到!",header_faint:"这很正常",checkbox:"我已经浏览了 TOC",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:"隐藏名单导出"},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:"重新载入"},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:"该状态已被删除"},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:"提及"},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:"迟些再试"},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=30.64736585965c63c2b5d4.js.map \ No newline at end of file diff --git a/priv/static/static/js/30.64736585965c63c2b5d4.js.map b/priv/static/static/js/30.64736585965c63c2b5d4.js.map new file mode 100644 index 000000000..376920946 --- /dev/null +++ b/priv/static/static/js/30.64736585965c63c2b5d4.js.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/30.64736585965c63c2b5d4.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/30.fce58be0b52ca3e32fa4.js b/priv/static/static/js/30.fce58be0b52ca3e32fa4.js deleted file mode 100644 index 03a5d65f6..000000000 --- a/priv/static/static/js/30.fce58be0b52ca3e32fa4.js +++ /dev/null @@ -1,2 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[30],{588:function(e){e.exports={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:"验证",dismiss:"忽略"},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:"管理员"},notifications:{broken_favorite:"未知的状态,正在搜索中…",favorited_you:"收藏了你的状态",followed_you:"关注了你",load_older:"加载更早的通知",notifications:"通知",read:"阅读!",repeated_you:"转发了你的状态",no_more_notifications:"没有更多的通知",reacted_with:"和 {0} 互动过",migrated_to:"迁移到",follow_request:"想要关注你"},polls:{add_poll:"增加问卷调查",add_option:"增加选项",option:"选项",votes:"投票",vote:"投票",type:"问卷类型",single_choice:"单选项",multiple_choices:"多选项",expiry:"问卷的时间",expires_in:"投票于 {0} 内结束",expired:"投票 {0} 前已结束",not_enough_options:"投票的选项太少"},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:"不公开 - 不会发送到公共时间轴"}},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:"密码不一致"}},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:"隐藏指定实例的面板H",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:"(默认:{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: copy as is",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 已升级,主题会和你记忆中的不太一样。"},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:"灰度文字"},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:"输入框"}},fonts:{_tab_label:"字体",help:"给用户界面的元素选择字体。选择 “自选”的你必须输入确切的字体名称。",components:{interface:"界面",input:"输入框",post:"发帖文字",postCode:"帖子中使用等间距文字(富文本)"},family:"字体名称",size:"大小 (in px)",weight:"字重 (粗体))",custom:"自选"},preview:{header:"预览",content:"内容",error:"例子错误",button:"按钮",text:"有堆 {0} 和 {1}",mono:"内容",input:"刚刚抵达上海",faint_link:"帮助菜单",fine_print:"阅读我们的 {0} ,然而什么也学不到!",header_faint:"这很正常",checkbox:"我已经浏览了 TOC",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:"在时间线上显示表情符号互动"},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:"没有状态更新"},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:"关注了你!",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:"隐藏转发"},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:"添加互动"},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:"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:"密码重置已经被禁用。请联系你的实例管理员。"},remote_user_resolver:{error:"未找到。",searching_for:"搜索",remote_user_resolver:"远程用户解析器"},emoji:{keep_open:"选择器保持打开",stickers:"贴图",unicode:"Unicode 表情符号",custom:"自定义表情符号",add_emoji:"插入表情符号",search_emoji:"搜索表情符号",emoji:"表情符号"},about:{mrf:{simple:{quarantine_desc:"本实例只会把公开状态发送非下列实例:",quarantine:"隔离",reject_desc:"本实例不会接收来自下列实例的消息:",reject:"拒绝",accept_desc:"本实例只接收来自下列实例的消息:",simple_policies:"站规",accept:"接受",media_removal:"移除媒体"},mrf_policies_desc:"MRF 策略会影响本实例的互通行为。以下策略已启用:",mrf_policies:"已启动 MRF 策略",keyword:{ftl_removal:"从“全部已知网络”时间线上移除",keyword_policies:"关键词策略",is_replaced_by:"→",replace:"替换",reject:"拒绝"},federation:"联邦"}},domain_mute_card:{unmute_progress:"正在取消隐藏…",unmute:"取消隐藏",mute_progress:"隐藏中…",mute:"隐藏"}}}}]); -//# sourceMappingURL=30.fce58be0b52ca3e32fa4.js.map \ No newline at end of file diff --git a/priv/static/static/js/30.fce58be0b52ca3e32fa4.js.map b/priv/static/static/js/30.fce58be0b52ca3e32fa4.js.map deleted file mode 100644 index f7dc83701..000000000 --- a/priv/static/static/js/30.fce58be0b52ca3e32fa4.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/30.fce58be0b52ca3e32fa4.js","sourceRoot":""} \ No newline at end of file diff --git a/priv/static/static/js/4.5719922a4e807145346d.js b/priv/static/static/js/4.4cde7fdd1fe6bf2a9499.js similarity index 77% rename from priv/static/static/js/4.5719922a4e807145346d.js rename to priv/static/static/js/4.4cde7fdd1fe6bf2a9499.js index 91ea2ac5e..4da4c56fa 100644 --- a/priv/static/static/js/4.5719922a4e807145346d.js +++ b/priv/static/static/js/4.4cde7fdd1fe6bf2a9499.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[4],{589:function(t,e,i){var c=i(590);"string"==typeof c&&(c=[[t.i,c,""]]),c.locals&&(t.exports=c.locals);(0,i(5).default)("cc6cdea4",c,!0,{})},590:function(t,e,i){(t.exports=i(4)(!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))}",""])},642:function(t,e,i){"use strict";i.r(e);var c=i(61),n={components:{TabSwitcher:i(141).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(589)},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.5719922a4e807145346d.js.map \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[4],{597:function(t,e,i){var c=i(598);"string"==typeof c&&(c=[[t.i,c,""]]),c.locals&&(t.exports=c.locals);(0,i(7).default)("cc6cdea4",c,!0,{})},598: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))}",""])},650:function(t,e,i){"use strict";i.r(e);var c=i(65),n={components:{TabSwitcher:i(145).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(597)},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.4cde7fdd1fe6bf2a9499.js.map \ No newline at end of file diff --git a/priv/static/static/js/4.5719922a4e807145346d.js.map b/priv/static/static/js/4.4cde7fdd1fe6bf2a9499.js.map similarity index 99% rename from priv/static/static/js/4.5719922a4e807145346d.js.map rename to priv/static/static/js/4.4cde7fdd1fe6bf2a9499.js.map index d5e592cfd..bc040ab9b 100644 --- a/priv/static/static/js/4.5719922a4e807145346d.js.map +++ b/priv/static/static/js/4.4cde7fdd1fe6bf2a9499.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","__webpack_require__","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","_this","store","fetch","then","res","blob","file","File","mimetype","formData","FormData","append","statusPosterService","uploadMedia","fileData","$emit","error","console","warn","__vue_styles__","context","Component","Object","component_normalizer","sticker_picker","_vm","_h","$createElement","_c","_self","staticClass","attrs","render-only-focused","scrollable-tabs","_l","stickerpack","key","image-tooltip","title","image","tabIcon","on","click","$event","stopPropagation","preventDefault","src","__webpack_exports__"],"mappings":"6EAGA,IAAAA,EAAcC,EAAQ,KACtB,iBAAAD,MAAA,EAA4CE,EAAAC,EAASH,EAAA,MACrDA,EAAAI,SAAAF,EAAAG,QAAAL,EAAAI,SAGAE,EADUL,EAAQ,GAAgEM,SAClF,WAAAP,GAAA,4BCRAE,EAAAG,QAA2BJ,EAAQ,EAARA,EAA0D,IAKrFO,KAAA,CAAcN,EAAAC,EAAS,4iBAA4iB,0DC8CpjBM,EA/CO,CACpBC,WAAY,CACVC,sBAEFC,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,IAAAC,EAAAT,KACbU,EAAQV,KAAKC,OAEnBU,MAAMJ,GACHK,KAAK,SAACC,GACLA,EAAIC,OAAOF,KAAK,SAACE,GACf,IAAIC,EAAO,IAAIC,KAAK,CAACF,GAAON,EAAM,CAAES,SAAU,cAC1CC,EAAW,IAAIC,SACnBD,EAASE,OAAO,OAAQL,GACxBM,IAAoBC,YAAY,CAAEZ,QAAOQ,aACtCN,KAAK,SAACW,GACLd,EAAKe,MAAM,WAAYD,GACvBd,EAAKJ,SACJ,SAACoB,GACFC,QAAQC,KAAK,wBACbD,QAAQC,KAAKF,GACbhB,EAAKe,MAAM,gBAAiB,2BCnC5C,IAEAI,EAVA,SAAAC,GACE9C,EAAQ,MAeV+C,EAAgBC,OAAAC,EAAA,EAAAD,CACdE,ECjBF,WAA0B,IAAAC,EAAAlC,KAAamC,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,OAAAE,EAAA,OAAiBE,YAAA,kBAA6B,CAAAF,EAAA,gBAAqBE,YAAA,eAAAC,MAAA,CAAkCC,uBAAA,EAAAC,kBAAA,KAAiDR,EAAAS,GAAAT,EAAA,cAAAU,GAAyC,OAAAP,EAAA,OAAiBQ,IAAAD,EAAA/C,KAAA0C,YAAA,yBAAAC,MAAA,CAAiEM,gBAAAF,EAAAjD,KAAAoD,MAAAC,MAAAJ,EAAA/C,KAAA+C,EAAAjD,KAAAsD,UAA4Ff,EAAAS,GAAAC,EAAAjD,KAAA,kBAAAY,GAAsD,OAAA8B,EAAA,OAAiBQ,IAAAtC,EAAAgC,YAAA,UAAAW,GAAA,CAAsCC,MAAA,SAAAC,GAA0E,OAAjDA,EAAAC,kBAAyBD,EAAAE,iBAAwBpB,EAAA5B,KAAAsC,EAAA/C,KAAAU,EAAAqC,EAAAjD,KAAAoD,UAAsE,CAAAV,EAAA,OAAYG,MAAA,CAAOe,IAAAX,EAAA/C,KAAAU,SAAsC,KAAK,QACjwB,IDOA,EAaAqB,EATA,KAEA,MAYe4B,EAAA,QAAA1B,EAAiB","file":"static/js/4.5719922a4e807145346d.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 { 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","const StillImage = {\n props: [\n 'src',\n 'referrerpolicy',\n 'mimetype',\n 'imageLoadError',\n 'imageLoadHandler',\n 'alt'\n ],\n data () {\n return {\n stopGifs: this.$store.getters.mergedConfig.stopGifs\n }\n },\n computed: {\n animated () {\n return this.stopGifs && (this.mimetype === 'image/gif' || this.src.endsWith('.gif'))\n }\n },\n methods: {\n onLoad () {\n const image = this.$refs.src\n if (!image) return\n this.imageLoadHandler && this.imageLoadHandler(image)\n const canvas = this.$refs.canvas\n if (!canvas) return\n const width = image.naturalWidth\n const height = image.naturalHeight\n canvas.width = width\n canvas.height = height\n canvas.getContext('2d').drawImage(image, 0, 0, width, height)\n },\n onError () {\n this.imageLoadError && this.imageLoadError()\n }\n }\n}\n\nexport default StillImage\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!./still-image.vue\")\n}\n/* script */\nexport * from \"!!babel-loader!./still-image.js\"\nimport __vue_script__ from \"!!babel-loader!./still-image.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-04da2070\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./still-image.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:\"still-image\",class:{ animated: _vm.animated }},[(_vm.animated)?_c('canvas',{ref:\"canvas\"}):_vm._e(),_vm._v(\" \"),_c('img',{key:_vm.src,ref:\"src\",attrs:{\"alt\":_vm.alt,\"title\":_vm.alt,\"src\":_vm.src,\"referrerpolicy\":_vm.referrerpolicy},on:{\"load\":_vm.onLoad,\"error\":_vm.onError}})])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }","// 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 zh: () => import('./zh.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","\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 }","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 // 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 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: false,\n followRequest: true,\n chatMention: true\n },\n webPushNotifications: false,\n muteWords: [],\n highlight: {},\n interfaceLanguage: browserLocale,\n hideScopeNotice: false,\n useStreamingApi: false,\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}\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 mergedConfig (state, getters, rootState, rootGetters) {\n const { instance } = rootState\n return {\n ...state,\n ...instanceDefaultProperties\n .map(key => [key, state[key] === undefined\n ? instance[key]\n : state[key]\n ])\n .reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {})\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 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","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_again')\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.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-fae84d0a\\\",\\\"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 btn-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-569ae63c\\\",\\\"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:{\"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 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 }","const 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.nsfw && this.size !== 'hide'\n },\n useDescription () {\n return this.card.description && /\\S/.test(this.card.description)\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-7c8d99ac\\\",\\\"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\",class:{ 'small-image': _vm.size === 'small' }},[_c('img',{attrs:{\"src\":_vm.card.image}})]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"card-content\"},[_c('span',{staticClass:\"card-host faint\"},[_vm._v(_vm._s(_vm.card.provider_name))]),_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-e95e446e\\\",\\\"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:\"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 }","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 { debounce } from 'lodash'\n/**\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\nconst debounceUserSearch = debounce((data, input) => {\n data.updateUsersList(input)\n}, 500)\n\nexport default data => input => {\n const firstChar = input[0]\n if (firstChar === ':' && data.emoji) {\n return suggestEmoji(data.emoji)(input)\n }\n if (firstChar === '@' && data.users) {\n return suggestUsers(data)(input)\n }\n return []\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 = data => input => {\n const noPrefix = input.toLowerCase().substr(1)\n const users = data.users\n\n const newUsers = users.filter(\n user =>\n user.screen_name.toLowerCase().startsWith(noPrefix) ||\n user.name.toLowerCase().startsWith(noPrefix)\n\n /* taking only 20 results so that sorting is a bit cheaper, we display\n * only 5 anyway. could be inaccurate, but we ideally we should query\n * backend anyway\n */\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, name, profile_image_url_original }) => ({\n displayText: screen_name,\n detailText: name,\n imageUrl: profile_image_url_original,\n replacement: '@' + screen_name + ' '\n }))\n\n // BE search users to get more comprehensive results\n if (data.updateUsersList) {\n debounceUserSearch(data, noPrefix)\n }\n return newUsers\n /* eslint-enable camelcase */\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']\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